Releases: JordanAtDown/syno-media-organizer
Releases · JordanAtDown/syno-media-organizer
v1.0.1
Added
- GPG-signed SPK (
syno_signature.asc): packages are now signed with the project's
GPG key so they appear and can be installed directly from DSM Package Center via the
custom package source without manual.spkdownload. docs/packages.json: addedkeyringsfield containing the GPG public key — DSM
imports it automatically when the package source is added.
Changed
release.yml: GPG private key (stored asGPG_PRIVATE_KEYGitHub secret) is
imported at build time and used to sign the SPK before publishing the GitHub Release.
SHA256 and MD5 are recomputed after signing.
v1.0.0
Added
- GitHub Pages package source: the SPK is now installable and auto-updatable directly from
DSM Package Center by adding the following custom source URL:
https://jordanatdown.github.io/syno-media-organizer/packages.json docs/packages.json: package index served via GitHub Pages — updated automatically by
scripts/release.shon every release.scripts/release.shnow updatesdocs/packages.json(version, SPK download link,
changelog excerpt) as part of the release commit.
v0.2.3
Added
- Persistent no-date cache (
no_date_cache.json, stored next toconfig.toml): files
that fail capture-date extraction are remembered across scan cycles and silently skipped
until their modification time changes or the TTL expires. Previously, the same files
generated aWARNlog on every 30-second scan cycle. - New global config options:
no_date_cache_enabled(defaulttrue): set tofalseto disable the cache and
always re-scan every file.no_date_cache_ttl_days(default0= never expire): set e.g.30to retry files
without metadata once a month regardless of mtime.
- Cache is invalidated automatically when a file's mtime changes (e.g. EXIF added via
exiftool), so modified files are always re-processed without manual intervention. postuninst()hook in SPK installer: deletesno_date_cache.jsonon package
uninstall while preserving the user'sconfig.toml.
Changed
processor::process_file()now returnsErr(ProcessorError::CaptureDataNotFound)
instead ofOk(())when no capture date is found. The watcher emits theWARNlog
once (on first discovery) and then silently skips the file via the cache.
v0.2.2
Fixed
- Files inside Synology DSM auto-generated directories (
@eaDir,@SynoEAStream,@Recycle,
#recycle,@tmp) are now silently ignored during scanning. Previously, the watcher processed
@eaDir/*/SYNOPHOTO_FILM_M.mp4(Synology video thumbnails), which hadmvhd.creation_time = 0
and were incorrectly moved tooutput/1970/01/. mvhd.creation_time = 0(unset field in synthetic/encoder-generated MP4 files) now returns
NoDateTimeOriginalinstead of producing a1970-01-01date.
Added
- New per-folder config option
excluded_dirs(Vec<String>): list of directory names to skip
during scanning, matched against every component of the file path. Defaults to
["@eaDir", "@SynoEAStream", "@Recycle", "#recycle", "@tmp"]. Fully customizable — see
config.example.tomlfor the complete list of Synology DSM directories.
v0.2.1
Fixed
- QuickTime/MOV files from iPhone (and other Apple devices) are now parsed correctly.
Themp4 = "0.14"crate failed on Apple-specifictraksub-boxes (tapt,clef,
prof,enof) which are valid QuickTime extensions but not part of the MPEG-4 spec.
Replaced with a minimal manual ISOBMFF parser that reads onlymoov → mvhd, skipping
all other boxes. Works for both QuickTime (qtbrand) and MPEG-4 (isom) files.
Changed
- Removed
mp4 = "0.14"dependency — no longer needed.
Added
- Integration test fixture
tests/fixtures/sample_iphone.mov: header-only extract
(ftyp + moov, 4.7 KB) from a real iPhone XS.movfile, used to guard against
regressions on Apple-specific QuickTime box structures.
v0.1.22
Changed
- Date extraction now requires the
DateTimeOriginalEXIF tag exclusively.
Files without this tag (including MP4/MOV videos and JPEGs with no EXIF) are
silently skipped with a warning log. The previous fallback chain
(DateTimeDigitized→DateTime→ mtime) has been removed to avoid
organizing files under an incorrect date.