• v0.3.2 af4f79e93a

    v0.3.2 Stable

    Hirad released this 2026-11-09 09:38:46 +00:00 | -6 commits to master since this release

    Sync now prefers the extralarge artwork URL from listening history. If that size is missing or its URL is blank, sync uses the first nonblank artwork URL.

    Updated the adapter and sync integration tests to cover image selection and verify that the selected URL reaches LoneFM after enrichment and resume.

    Ruff lint and formatting, strict Pyright, and all 51 pytest tests passed.

    Downloads
  • v0.3.1 1a43636d6f

    v0.3.1 Stable

    Hirad released this 2026-10-29 05:56:06 +00:00 | -5 commits to master since this release

    Prefer large artwork URLs when collecting recent tracks for synchronization. Fall back to the first nonempty image URL when large artwork is unavailable. Updated regression tests cover large-image preference, missing large images, and blank URLs.

    Validation: Ruff lint and formatting checks passed; strict Pyright passed with no errors or warnings; all 51 pytest tests passed.

    Downloads
  • v0.3.0 998e37f78b

    v0.3.0 Stable

    Hirad released this 2026-10-28 07:49:32 +00:00 | -4 commits to master since this release

    syncfm-core 0.3.0 moves network integration to PyScrobbler and adds artwork synchronization to LoneFM.

    Changes:

    • Replace the pylast network backend with PyScrobblerNetworkAdapter and require PyScrobbler 0.1.5 or newer, including its singleton recent-history response fix.
    • Collect paginated recent history through PyScrobbler while preserving inclusive timestamp boundaries and repeated plays.
    • Carry optional artwork URLs from recent tracks through SQLite snapshots, metadata enrichment, queued submissions, and session resume. Prefer medium artwork, falling back to the first nonempty image URL.
    • Upgrade the SQLite schema to version 3 without losing existing snapshots or queued work; artwork does not affect duplicate detection.
    • Restore the normal terminal before displaying sync, resume, or verification-retry errors, so dashboard failures remain visible.
    • Preserve legacy gnufm profile values and GNU.fm session names while using LoneFM naming for new configurations.
    • Close command-owned network transports on success and failure, and retain metadata conversion, authentication-error translation, and rejected-submission handling.

    Compatibility:

    • Python 3.13 or newer is required.
    • The former GNUFMNetwork, PyLastMapper, and PyLastNetworkAdapter exports and modules have been removed. Use NetworkFactory and PyScrobblerNetworkAdapter.
    • Use NetworkType.LONEFM and --type lonefm instead of NetworkType.GNUFM. Legacy serialized profile values remain readable.

    Validation: 50 tests passed using PyScrobbler 0.1.5; strict Pyright, Ruff lint, and Ruff formatting checks passed. Tests cover pagination, network configuration and cleanup, legacy resume compatibility, artwork selection and persistence, schema migration, complete sync/resume flows, and terminal error visibility. No live scrobbles were submitted during validation.

    Downloads
  • 0.2.5 5985640985

    0.2.5 Stable

    Hirad released this 2026-09-11 09:40:55 +00:00 | 1 commits to master since this release

    SyncFM Core 0.2.5 expands the supported profile names.

    Changes since 0.2.4:

    • Allow uppercase letters and dots in profile names. Names must start with a letter or number and may contain letters, numbers, underscores, hyphens, and dots.
    • Update the profile validation error message to describe the supported characters.
    • Remove the outdated lowercase-only profile naming restriction from the README.
    • Bump the package version and uv lockfile to 0.2.5.

    Validation: Ruff and Pyright pass; profile-name acceptance and rejection smoke checks pass; uv successfully built the wheel and source distribution.

    Full changelog: https://git.hirad.it/Hirad/syncfm-core/compare/0.2.4...0.2.5

    Downloads
  • 0.2.4 24d87d0de2

    0.2.4 Stable

    Hirad released this 2026-08-30 10:34:17 +00:00 | 3 commits to master since this release

    SyncFM Core 0.2.4 adds resolved synchronization ranges to progress updates. New synchronizations report the automatically resolved range, resumed sessions report their persisted range, and the optional SyncProgress field is appended to preserve positional API compatibility.

    Downloads
  • 0.2.3 520ac1d6cc

    0.2.3 Stable

    Hirad released this 2026-08-30 05:54:33 +00:00 | 4 commits to master since this release

    SyncFM Core 0.2.3 fixes metadata progress reporting for GUI and callback consumers. Completed metadata-enrichment events now carry the fetched duration and MusicBrainz ID, allowing rows to populate those values when they transition from Fetching to Ready.

    Downloads
  • 0.2.2 c32e1abc65

    0.2.2 Stable

    Hirad released this 2026-08-28 09:30:53 +00:00 | 5 commits to master since this release

    SyncFM Core 0.2.2 adds per-scrobble failure reporting for GUI and callback consumers. SyncProgress now exposes current_scrobble_failed with validation for mutually exclusive completion and failure states. Metadata enrichment and scrobble submission emit failure progress after persisting failed queue state, and the terminal dashboard displays failed items in both interactive and plain-text modes.

    Downloads
  • 0.2.1 2f2144b0a6

    0.2.1 Stable

    Hirad released this 2026-08-23 08:35:01 +00:00 | 6 commits to master since this release

    Highlights

    • Correct inclusive timestamp-range handling for Last.fm, Libre.fm, and GNU.fm history requests made through pylast.
    • Widen pylast query boundaries before locally filtering results, reconciling pylast’s exclusive from and to behavior with SyncFM’s inclusive range contract.
    • Prevent the target’s latest existing scrobble—the inferred start boundary—from being falsely queued for submission and later reported as missing during verification.
    • Preserve correct range results when a caller combines timestamp boundaries with a scrobble limit.

    This is a focused bug-fix release following 0.2.0.

    Downloads
  • 0.2.0 8ad74e1ea9

    0.2.0 Stable

    Hirad released this 2026-08-22 07:48:00 +00:00 | 7 commits to master since this release

    Highlights

    • Verify every completed synchronization against fresh source and target histories over the exact resolved timestamp range.
    • Report final source and target counts plus scrobbles still missing from either network through the new public SyncVerification result model.
    • Poll the target after submission to allow newly submitted scrobbles time to become visible.
    • Show verification results in the CLI and offer confirmed retries for scrobbles still missing from the target after both sync and resume operations.
    • Retry through the normal durable synchronization pipeline using the original resolved range, preserving comparison, metadata enrichment, and recovery behavior.

    API note

    SyncResult now includes a required verification field containing the resolved range, fresh counts, directional difference lists, and coverage helpers.

    Downloads
  • 0.1.1 a4f11d1c26

    0.1.1 Stable

    Hirad released this 2026-08-19 08:08:07 +00:00 | 8 commits to master since this release

    syncfm-core 0.1.1

    This release improves project readiness, documentation, and network-name presentation since 0.1.0.

    Highlights

    • Mark the package as beta software in its project metadata.
    • Add NetworkType.display_name for human-readable Last.fm, Libre.fm, and GNU.fm labels in user-facing integrations.
    • Expand the README with installation, quick-start synchronization, profile and credential management, proxy configuration, recovery workflows, environment variables, Python API examples, and development guidance.
    • Bump the package and lockfile version to 0.1.1.

    Validation

    • Ruff: passed
    • Pyright: passed with zero errors or warnings
    • Source distribution and wheel: built successfully
    • Pytest: no test files are currently present

    Full history: https://git.hirad.it/Hirad/syncfm-core/compare/0.1.0...0.1.1

    Downloads