Commit Graph

468 Commits

Author SHA1 Message Date
Oskar Dudziński 7e0fb9fb37 🚀 Bump to 3.4.0a8 v3.4.0a8 2026-05-03 20:45:00 +02:00
Oskar Dudziński 880f6008b0 🐛 Fixed playlist cover saving (#358)
* add proper template for playlist covers

* cover size is now properly limited

* dont save cover if cover data is empty
2026-05-03 20:43:36 +02:00
Oskar Dudziński 0f9a4006f1 Bump to 3.4.0a7 v3.4.0a7 2026-05-03 00:38:57 +02:00
Oskar Dudziński 3cfadd7795 🐛 Fixed album date format 2026-05-03 00:38:12 +02:00
Oskar Dudziński 47975e12bc 📢 Log tiddl version v3.4.0a6 2026-05-02 18:19:23 +02:00
Oskar Dudziński fbb32e735d 📝 Added version info to CLI 2026-05-02 18:09:15 +02:00
Oskar Dudziński 3cba05910b 📢 Log client id and if it was loaded from env 2026-05-02 17:35:52 +02:00
Oskar Dudziński c22cb2941d 📢 Log stream data 2026-05-02 17:31:15 +02:00
Oskar Dudziński 6b82c40fae Added Dolby Atmos support (needs testing) (#348)
* add dolby atmos support

* 🚀 Bump version to 3.4.0a5
v3.4.0a5
2026-04-30 01:14:32 +02:00
Oskar Dudziński 9abf141411 🐛 Fixed missing releaseDate in albums (fix #260) 2026-04-29 14:00:43 +02:00
Oskar Dudziński 477b4b4635 🐛 Files are no longer written with restrictive permissions (#347)
* add chmod mask after file download (fix #265)

* 🚀 Bump version to 3.4.0a4
v3.4.0a4
2026-04-29 13:49:44 +02:00
Oskar Dudziński debca2fc1d 🚀 Bump version from 3.4.0a2 to 3.4.0a3 v3.4.0a3 2026-04-28 22:46:43 +02:00
Oskar Dudziński d830a8ed73 Updated auth credentials (#344)
* fix search command error

* update auth credentials

* log debug path at `add_flac_metadata`

* extract flac from high and max quality

* add --force option to auth logout
2026-04-28 22:46:08 +02:00
Oskar Dudziński 33b1e6c826 🔥 Removed unused print 2026-04-28 21:30:16 +02:00
Oskar Dudziński e32fde7794 🚀 Bump version from 3.4.0a1 to 3.4.0a2 v3.4.0a2 2026-04-28 21:28:09 +02:00
Oskar Dudziński 99804c0304 🐛 Credits entries in metadata are now safe (#343) 2026-04-28 21:27:31 +02:00
Oskar Dudziński 410146bdcf ♻️ Refactored search command 2026-04-28 16:49:36 +02:00
Reyth 859d50772d Added search command (#315)
* feat: search command

* fix: top match resource type

* fix: top hit resource type parsing logic

* fix: SearchArtist as non-nested class
2026-04-28 16:43:04 +02:00
Reyth 79c21f7842 🐛 Fixed album/playlist validation errors (#338) 2026-04-25 16:03:53 +02:00
Oskar Dudziński 0f76845c35 🚀 Bump version to 3.4.0a1 v3.4.0a1 2026-04-25 00:55:38 +02:00
Piotr Karbowski b1e28a8ae6 Added match_existing_path_case option (#335)
When enabled, existing path components are reused even if Tidal returns
different casing. This avoids creating separate paths on case-sensitive
filesystems that would conflict later when moved to case-insensitive systems.
For example, if "FooBar" already exists and the API returns "foobar",
downloads will continue under "FooBar".

Co-authored-by: Piotr Karbowski <git.throwaway941@simplelogin.com>
2026-04-25 00:55:02 +02:00
Francesco 658e4a81ab 🐛 Stream codec is now honored when picking track file extension (#336) 2026-04-25 00:35:45 +02:00
Oskar Dudziński 4b6b23225a 🚀 Bump version from 3.2.3 to 3.3.0 v3.3.0 2026-04-23 23:03:02 +02:00
Mijael Viricochea ed9a05c666 Added option to write LRC file (#308) 2026-04-23 22:59:38 +02:00
xiliourt 8a2c30feaf 🐬 Remove hidden directories in Dockerfile (#326)
* Update Dockerfile

* Clears entire directory after install

Hidden folders such as .git, .vscode, etc were remaining in the docker build unintentionally. This update clears all files once tiddl is installed.
2026-04-13 22:35:38 +02:00
Oskar Dudziński cda1dc6a7a 🐛 Fixed missing metadata when downloading a single track 2026-04-11 17:04:17 +02:00
Oskar Dudziński 7de23cee1b Bump version from 3.2.3a1 to 3.2.3 v3.2.3 2026-04-11 11:27:38 +02:00
Oskar Dudziński 89e4d5c08e ♻️ Skipping errors is now a default behaviour 2026-04-09 20:57:04 +02:00
Oskar Dudziński a1deba92cc Add tiddl version field to bug report template
Added a field for specifying the installed tiddl version.
2026-04-08 12:55:49 +02:00
Oskar Dudziński 0b11c63eba 📝 Added link fallbacks in main cli call 2026-04-06 19:04:33 +02:00
Oskar Dudziński fc074543d1 Bump version to 3.2.3a1 v3.2.3a1 2026-04-06 09:44:21 +02:00
Magnetkopf d9e2314447 Added no browser opening option for authenticating command (#317)
* feat(auth): add no browser mode

* chore: merge print statements
2026-04-06 09:42:51 +02:00
Magnetkopf c3dd2d0606 Artist tag is now a list (#316) 2026-04-05 10:54:46 +02:00
xoconoch 401313cd27 Changed artist separator to ";"
* chore: change separator to "; "

* chore: finishing changin separators

* chore: continue changing separators

---------

Co-authored-by: Ohjne <er@le.com>
2026-04-05 10:48:16 +02:00
Oskar Dudziński b6ddd6b64e Bump version from 3.2.1 to 3.2.2 v3.2.2 2026-03-08 07:53:39 +01:00
nikudaorg 3948c79412 🐛 Fixed auth errors (#300)
Resolves issue #299.

int | str is used instead of updating the type to only "str" because the API change appears to have been introduced quietly and may revert in the future. Since the exact type of these fields is not critical for the library, supporting both types provides a safer and more resilient approach.
2026-03-08 07:53:05 +01:00
Oskar Dudziński ee7e079a27 🚀 Bump version from 3.2.0 to 3.2.1 v3.2.1 2026-02-26 14:42:48 +01:00
TooYoungTooSimp 3d1314e198 Enable trust_env in aiohttp.ClientSession (#294) 2026-02-26 14:41:56 +01:00
Filip Voska cf0d1cd362 fix: handle null/missing fields in Video API responses (#295)
* fix: handle null/missing fields in Video API responses

Tidal's API returns some Video objects (lyric/visualiser videos on
artist pages) with fields that don't match the current strict models:

- `imageId` can be null instead of a string
- The nested `album` object can be present but missing `id`, `title`,
  and `cover`

These validation failures cause the entire `ArtistVideosItems` page
to be rejected by Pydantic before any video can be parsed, resulting
in 0 downloads when targeting an artist with `--videos`.

A second independent bug causes an `AttributeError` on every video:
the default template `{album.artist}/{album.title}/{item.title}` is
shared with videos, but many videos have no album. When `album=None`
is passed to `format_template`, Python's `str.format()` evaluates
`None.artist` and raises `AttributeError: 'NoneType' object has no
attribute 'artist'`, which is caught and printed as an error for
every single video.

Fix:
- `resources.py`: make `Video.imageId` and `Video.Album.{id,title,
  cover}` optional so incomplete API responses pass validation
- `format.py`: give `AlbumTemplate` field defaults so it can be
  instantiated empty; use `AlbumTemplate()` as fallback instead of
  `None` when no album is present, so `{album.*}` tokens render as
  empty strings rather than raising AttributeError
- `download/__init__.py`: guard `video.album.id` accesses against
  `None` (now possible after the model fix) in both video code paths

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* test: add tests for Video model null fields and AlbumTemplate fallback

Covers the two bugs fixed in the previous commit:

- Video model accepts null/missing imageId and partial album objects
- format_template does not raise AttributeError when album is None
  and the template references {album.*} tokens

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-26 14:35:33 +01:00
Oskar Dudziński 381003097f 🚀 Bump version from 3.1.5 to 3.2.0 v3.2.0 2026-01-18 17:38:08 +01:00
hexx.one 06f9d940d9 Added --skip-errors flag to skip unavailable items during download (#274)
* feat: Add `--skip-errors` flag to skip unavailable items during download

* feat: skip-error handling for unavailable items in albums, artists & mixes; fix some missing template variables

* fixes #267
2026-01-18 17:35:54 +01:00
M1chal3k28 fbf79d70e6 📝 Rename 'embed_lyrics' to 'lyrics' in example config (#280) 2026-01-18 17:31:42 +01:00
Oskar Dudziński 9f7d3aec1e 🐛 Album/artist download errors related to templates are now handled (#257)
* refactor variable name in _clean_segment function for clarity

* Add error handling documentation for format_template function

* Add error handling for album template formatting in download_callback
2025-12-05 14:11:47 +01:00
Oskar Dudziński c5d5b365c8 🚀 Bump version from 3.1.4 to 3.1.5 v3.1.5 2025-12-03 01:12:23 +01:00
Oskar Dudziński f691c7ba0a 🐛 Fixed cover that can be None. 2025-12-03 01:12:07 +01:00
Oskar Dudziński 82c4ce0c37 🐛 Fixed covers that were fetched unnecessarily #245 (#254)
* fetch cover only when item is about to be downloaded

* rename cover method to `fetch_data`

* 🚀 Bump version from 3.1.4a3 to 3.1.4
v3.1.4
2025-12-01 19:05:46 +01:00
Oskar Dudziński 145a776b63 🚀 Bump version from 3.1.4a2 to 3.1.4a3 v3.1.4a3 2025-12-01 01:14:40 +01:00
Oskar Dudziński cf0ef2d304 Sort credits contributors surname alphabetically #247 2025-12-01 01:13:59 +01:00
Oskar Dudziński 2332708326 🚀 Bump version from 3.1.4a1 to 3.1.4a2 v3.1.4a2 2025-11-29 22:59:16 +01:00
Oskar Dudziński cbcb55d14a 🐛 Item's path segments are now cleaned #251 2025-11-29 22:57:10 +01:00