mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-10-20 22:41:38 +02:00
Keep one copy of helpers that were implemented several times, each proven equivalent to the copies it replaces by a test that runs the removed implementation (kept inline in the test module) against the survivor: - Go-style lexical path clean: new `core::fs::clean`, used by `isrc::native_files` and re-exported as `extensions::files::clean`. - Dart `String.trim` whitespace: `path_keys::dart_whitespace` and `dart_trim` now back the lyrics parser's explicit character list and the playlist importer's private `trim`; the test compares every Unicode scalar value. - `normalized()` (Dart trim then simple lowercase): the native backup importer uses the identical `native_library::normalized`. - Lowercase hex encoding: `spotiflac_core::lower_hex` replaces the per-byte `format!` collectors in data_jobs and network_tags, the signed-session `hex` and the `hex` arm of `binary::encode`; checked for all 256 bytes. - ID3 syncsafe decode: the tag writer's `size` reuses the reader's `tags::id3::syncsafe`; checked across the 0x7F/0x80 boundaries per byte. - Bounded body reads: `HttpStream::read_limited` replaces the read-to-limit loops of the lyrics HTTP client, the resolver HTTP client and the extension registry reader. Callers keep their buffer sizes (16 KiB, 16 KiB, 64 KiB), their own error mapping and their messages; a loopback test compares it with the previous loop at and around the limit. The mobile ID3 `synchsafe` is not merged: it validates the length and the high bits and returns `None`, unlike the core decoder.