Name: music-sync Version: 0.2.0 Release: 1%{?dist} Summary: Sync a music library into the iPhone Music app License: MIT URL: https://github.com/lacamar/%{name} Source0: %{name}-%{version}.tar.gz BuildArch: noarch BuildRequires: desktop-file-utils BuildRequires: librsvg2-tools BuildRequires: python3 BuildRequires: python3-pyside6 BuildRequires: python3-mutagen BuildRequires: systemd-rpm-macros Requires: python3 Requires: python3-pyside6 Requires: python3-dbus Requires: python3-mutagen Requires: glib2 Requires: xdg-utils Requires: hicolor-icon-theme Requires: libimobiledevice-utils Requires: rustunes %description Desktop app and user service that syncs a local music library into the stock Music app on a connected iPhone through rustunes, browses the library's sync status and organises files by their tags. %prep %autosetup -n %{name}-%{version} %build mkdir -p render for size in 16 32 48 64 128 256 512; do rsvg-convert -w "${size}" -h "${size}" icons/%{name}.svg -o "render/%{name}-${size}.png" done %install install -Dm755 packaging/%{name} %{buildroot}%{_bindir}/%{name} install -d %{buildroot}%{_datadir}/%{name} cp -a main.py backend qml icons %{buildroot}%{_datadir}/%{name}/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications \ --set-key=Exec --set-value=%{name} \ --set-key=Icon --set-value=%{name} \ %{name}.desktop install -Dm644 icons/%{name}.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/%{name}.svg for size in 16 32 48 64 128 256 512; do install -Dm644 "render/%{name}-${size}.png" \ "%{buildroot}%{_datadir}/icons/hicolor/${size}x${size}/apps/%{name}.png" done install -Dm644 packaging/%{name}.service %{buildroot}%{_userunitdir}/%{name}.service install -d %{buildroot}%{_userpresetdir} echo "enable %{name}.service" > %{buildroot}%{_userpresetdir}/90-%{name}.preset %check desktop-file-validate %{buildroot}%{_datadir}/applications/%{name}.desktop find %{buildroot}%{_datadir}/%{name} -name '*.py' -print0 | xargs -0 python3 -c ' import ast, sys for path in sys.argv[1:]: with open(path, encoding="utf-8") as fh: ast.parse(fh.read(), path) ' python3 -m unittest discover -s tests -v %post %systemd_user_post %{name}.service loginctl list-users --no-legend 2>/dev/null | while read -r uid user _; do [ -S "/run/user/${uid}/bus" ] || continue XDG_RUNTIME_DIR="/run/user/${uid}" runuser -u "$user" -- \ systemctl --user daemon-reload >/dev/null 2>&1 || : XDG_RUNTIME_DIR="/run/user/${uid}" runuser -u "$user" -- \ systemctl --user try-restart %{name}.service >/dev/null 2>&1 || : done %preun %systemd_user_preun %{name}.service %postun %systemd_user_postun_with_restart %{name}.service %files %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/%{name}/ %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_userunitdir}/%{name}.service %{_userpresetdir}/90-%{name}.preset %changelog * Mon Nov 02 2026 lacamar - 0.2.0-1 - Sync into the Music app via rustunes - Preview (dry run) and full sync modes - Library view with sync status and problems - Organise files by tags, with undo - XDG Music folder default, custom library folder - Sync over Wi-Fi, with a fixed address for hotspots - Translucent window with opacity setting - Enable user service by default - Drop VLC/ifuse target * Mon Oct 26 2026 lacamar - 0.1.1-1 - Lint fixes * Sat Aug 15 2026 Music Sync - 0.1.0-1 - Initial release: iPhone detection via idevice_id/ideviceinstaller, an ifuse-mounted house_arrest Documents share (VLC by default, any file-sharing app's bundle ID supported) as the sync destination, an Artist/Album folder picker with tri-state selection, incremental sync backed by a persisted device manifest (no device re-scan needed on repeat syncs), an opt-in "remove unselected" mirror mode gated behind a confirmation dialog, auto-sync-on-connect (add-only, never deletes), desktop notifications, sync history, and a systemd user service.