Skip to content

Commit 3343b51

Browse files
authored
Merge pull request #203 from kdroidFilter/feat/media-control
feat(media-control): add module with Linux MPRIS, macOS Now Playing, Windows SMTC
2 parents 36aff72 + f6b04b3 commit 3343b51

35 files changed

Lines changed: 4045 additions & 7 deletions

.github/workflows/build-natives.yaml

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,27 @@ jobs:
271271
path: scheduler/src/main/resources/nucleus/native/win32-*/
272272
retention-days: 1
273273

274+
- name: Build media-control Windows DLLs
275+
shell: cmd
276+
run: call media-control\src\main\native\windows\build.bat
277+
278+
- name: Verify media-control Windows natives
279+
shell: bash
280+
run: |
281+
for f in \
282+
media-control/src/main/resources/nucleus/native/win32-x64/nucleus_media_control_windows.dll \
283+
media-control/src/main/resources/nucleus/native/win32-aarch64/nucleus_media_control_windows.dll; do
284+
if [ ! -f "$f" ]; then echo "MISSING: $f" >&2; exit 1; fi
285+
echo "OK: $f ($(wc -c < "$f") bytes)"
286+
done
287+
288+
- name: Upload media-control Windows DLLs
289+
uses: actions/upload-artifact@v4
290+
with:
291+
name: media-control-windows
292+
path: media-control/src/main/resources/nucleus/native/win32-*/
293+
retention-days: 1
294+
274295
macos:
275296
runs-on: macos-latest
276297
steps:
@@ -568,6 +589,25 @@ jobs:
568589
path: system-info/src/main/resources/nucleus/native/darwin-*/
569590
retention-days: 1
570591

592+
- name: Build media-control macOS dylibs
593+
run: bash media-control/src/main/native/macos/build.sh
594+
595+
- name: Verify media-control macOS natives
596+
run: |
597+
for f in \
598+
media-control/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_media_control_macos.dylib \
599+
media-control/src/main/resources/nucleus/native/darwin-x64/libnucleus_media_control_macos.dylib; do
600+
if [ ! -f "$f" ]; then echo "MISSING: $f" >&2; exit 1; fi
601+
echo "OK: $f ($(wc -c < "$f") bytes)"
602+
done
603+
604+
- name: Upload media-control macOS dylibs
605+
uses: actions/upload-artifact@v4
606+
with:
607+
name: media-control-macos
608+
path: media-control/src/main/resources/nucleus/native/darwin-*/
609+
retention-days: 1
610+
571611
linux:
572612
runs-on: ${{ matrix.os }}
573613
strategy:
@@ -766,3 +806,19 @@ jobs:
766806
name: scheduler-linux-${{ matrix.arch }}
767807
path: scheduler/src/main/resources/nucleus/native/linux-*/
768808
retention-days: 1
809+
810+
- name: Build media-control Linux native shared library
811+
run: bash media-control/src/main/native/linux/build.sh
812+
813+
- name: Verify media-control Linux native
814+
run: |
815+
f="media-control/src/main/resources/nucleus/native/linux-${{ matrix.arch }}/libnucleus_media_control_linux.so"
816+
if [ ! -f "$f" ]; then echo "MISSING: $f" >&2; exit 1; fi
817+
echo "OK: $f ($(wc -c < "$f") bytes)"
818+
819+
- name: Upload media-control Linux shared library
820+
uses: actions/upload-artifact@v4
821+
with:
822+
name: media-control-linux-${{ matrix.arch }}
823+
path: media-control/src/main/resources/nucleus/native/linux-*/
824+
retention-days: 1

.github/workflows/pre-merge.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,13 @@ jobs:
162162
pattern: 'scheduler-*'
163163
merge-multiple: true
164164

165+
- name: Download media-control artifacts
166+
uses: actions/download-artifact@v4
167+
with:
168+
path: media-control/src/main/resources/nucleus/native/
169+
pattern: 'media-control-*'
170+
merge-multiple: true
171+
165172
- name: Verify all natives present
166173
run: |
167174
EXPECTED=(
@@ -241,6 +248,12 @@ jobs:
241248
"scheduler/src/main/resources/nucleus/native/darwin-x64/libnucleus_scheduler.dylib"
242249
"scheduler/src/main/resources/nucleus/native/linux-x64/libnucleus_scheduler_linux.so"
243250
"scheduler/src/main/resources/nucleus/native/linux-aarch64/libnucleus_scheduler_linux.so"
251+
"media-control/src/main/resources/nucleus/native/linux-x64/libnucleus_media_control_linux.so"
252+
"media-control/src/main/resources/nucleus/native/linux-aarch64/libnucleus_media_control_linux.so"
253+
"media-control/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_media_control_macos.dylib"
254+
"media-control/src/main/resources/nucleus/native/darwin-x64/libnucleus_media_control_macos.dylib"
255+
"media-control/src/main/resources/nucleus/native/win32-x64/nucleus_media_control_windows.dll"
256+
"media-control/src/main/resources/nucleus/native/win32-aarch64/nucleus_media_control_windows.dll"
244257
)
245258
MISSING=0
246259
for f in "${EXPECTED[@]}"; do

.github/workflows/publish-maven.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,13 @@ jobs:
157157
pattern: 'scheduler-*'
158158
merge-multiple: true
159159

160+
- name: Download media-control artifacts
161+
uses: actions/download-artifact@v4
162+
with:
163+
path: media-control/src/main/resources/nucleus/native/
164+
pattern: 'media-control-*'
165+
merge-multiple: true
166+
160167
- name: Verify all natives present
161168
run: |
162169
EXPECTED=(
@@ -236,6 +243,12 @@ jobs:
236243
"scheduler/src/main/resources/nucleus/native/darwin-x64/libnucleus_scheduler.dylib"
237244
"scheduler/src/main/resources/nucleus/native/linux-x64/libnucleus_scheduler_linux.so"
238245
"scheduler/src/main/resources/nucleus/native/linux-aarch64/libnucleus_scheduler_linux.so"
246+
"media-control/src/main/resources/nucleus/native/linux-x64/libnucleus_media_control_linux.so"
247+
"media-control/src/main/resources/nucleus/native/linux-aarch64/libnucleus_media_control_linux.so"
248+
"media-control/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_media_control_macos.dylib"
249+
"media-control/src/main/resources/nucleus/native/darwin-x64/libnucleus_media_control_macos.dylib"
250+
"media-control/src/main/resources/nucleus/native/win32-x64/nucleus_media_control_windows.dll"
251+
"media-control/src/main/resources/nucleus/native/win32-aarch64/nucleus_media_control_windows.dll"
239252
)
240253
MISSING=0
241254
for f in "${EXPECTED[@]}"; do

.github/workflows/publish-plugin.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,13 @@ jobs:
163163
pattern: 'scheduler-*'
164164
merge-multiple: true
165165

166+
- name: Download media-control artifacts
167+
uses: actions/download-artifact@v4
168+
with:
169+
path: media-control/src/main/resources/nucleus/native/
170+
pattern: 'media-control-*'
171+
merge-multiple: true
172+
166173
- name: Cache Gradle Caches
167174
uses: gradle/actions/setup-gradle@v5
168175

.github/workflows/release-graalvm.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,13 @@ jobs:
188188
pattern: 'scheduler-*'
189189
merge-multiple: true
190190

191+
- name: Download media-control artifacts
192+
uses: actions/download-artifact@v4
193+
with:
194+
path: media-control/src/main/resources/nucleus/native/
195+
pattern: 'media-control-*'
196+
merge-multiple: true
197+
191198
- name: Setup Nucleus (GraalVM)
192199
uses: ./.github/actions/setup-nucleus
193200
with:

.github/workflows/test-graalvm.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,13 @@ jobs:
173173
pattern: 'scheduler-*'
174174
merge-multiple: true
175175

176+
- name: Download media-control artifacts
177+
uses: actions/download-artifact@v4
178+
with:
179+
path: media-control/src/main/resources/nucleus/native/
180+
pattern: 'media-control-*'
181+
merge-multiple: true
182+
176183
- name: Setup Nucleus (GraalVM)
177184
uses: ./.github/actions/setup-nucleus
178185
with:

.github/workflows/test-packaging.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,13 @@ jobs:
200200
pattern: 'scheduler-*'
201201
merge-multiple: true
202202

203+
- name: Download media-control artifacts
204+
uses: actions/download-artifact@v4
205+
with:
206+
path: media-control/src/main/resources/nucleus/native/
207+
pattern: 'media-control-*'
208+
merge-multiple: true
209+
203210
- name: Build packages
204211
shell: bash
205212
run: ./gradlew :example:packageReleaseDistributionForCurrentOS --stacktrace --no-daemon

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ Java evolved into Kotlin. JavaScript evolved into TypeScript. Desktop developmen
4444
- **Decorated windows** — Custom title bar with native window controls on every OS
4545
- **Notifications** — Native APIs on macOS, Windows, and Linux
4646
- **Launchers** — Badges, progress bars, jump lists, dock menus, quicklists
47+
- **Media controls** — OS media overlay integration (MPRIS, Now Playing, SMTC) with play/pause/seek events
4748
- **System integration** — Dark mode, accent colors, high contrast, energy management, global hotkeys, taskbar progress, system info
4849

4950
### Perform
@@ -107,6 +108,7 @@ Each module is published independently to Maven Central — use them together or
107108
| `nucleus.launcher-macos` | macOS Dock API — badge, menus |
108109
| `nucleus.launcher-windows` | Windows taskbar — badges, jump lists, overlay icons, thumbnail toolbar |
109110
| `nucleus.launcher-linux` | Unity Launcher — badge, progress, urgency, quicklist |
111+
| `nucleus.media-control` | OS media controls — MPRIS (Linux), Now Playing (macOS), SMTC (Windows) |
110112
| `nucleus.menu-macos` | Native macOS menu bar |
111113
| `nucleus.freedesktop-icons` | Type-safe freedesktop icon naming constants |
112114
| `nucleus.taskbar-progress` | Cross-platform taskbar progress bar & attention requests |

0 commit comments

Comments
 (0)