<feed xmlns='http://www.w3.org/2005/Atom'>
<title>jellyfin/Jellyfin.Server/Migrations/Routines, branch master</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<id>https://git.b0n.dev/jellyfin/atom?h=master</id>
<link rel='self' href='https://git.b0n.dev/jellyfin/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/'/>
<updated>2026-07-04T21:55:31Z</updated>
<entry>
<title>Use InvariantCulture when parsing machine-generated dates</title>
<updated>2026-07-04T21:55:31Z</updated>
<author>
<name>Nils Lehnen</name>
<email>admin@nlehnen.de</email>
</author>
<published>2026-07-04T21:55:31Z</published>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/commit/?id=f8ffccae7fa65a27324667ccd156ca71fbfc89cd'/>
<id>urn:sha1:f8ffccae7fa65a27324667ccd156ca71fbfc89cd</id>
<content type='text'>
DateTime.TryParse without an IFormatProvider falls back to the current
thread culture, so the same string can parse differently (or fail)
depending on the server's locale. None of these call sites deal with
user-entered text - they parse dates that come from filenames, an
HTTP header, ffprobe metadata and values the app itself wrote to the
auth database - so InvariantCulture is the correct provider everywhere
here.

Fixes the S6580 / CA1305 warnings on these call sites.

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Merge pull request #17162 from Shadowghost/batch-duplicate-cleanup-deletes</title>
<updated>2026-06-27T14:22:11Z</updated>
<author>
<name>Cody Robibero</name>
<email>cody@robibe.ro</email>
</author>
<published>2026-06-27T14:22:11Z</published>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/commit/?id=a83920c5a79a5081fb7377759390d7a85c6eb836'/>
<id>urn:sha1:a83920c5a79a5081fb7377759390d7a85c6eb836</id>
<content type='text'>
Batch duplicate-cleanup deletes in merge migrations</content>
</entry>
<entry>
<title>Batch duplicate-cleanup deletes in merge migrations</title>
<updated>2026-06-22T21:16:47Z</updated>
<author>
<name>Shadowghost</name>
<email>Ghost_of_Stone@web.de</email>
</author>
<published>2026-06-22T21:04:12Z</published>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/commit/?id=af82aceadb632300e87ed4aca6723cf4dda097c3'/>
<id>urn:sha1:af82aceadb632300e87ed4aca6723cf4dda097c3</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add progress logging and batch deletion for logs</title>
<updated>2026-06-22T03:31:25Z</updated>
<author>
<name>Joshua M. Boniface</name>
<email>joshua@boniface.me</email>
</author>
<published>2026-06-22T03:06:45Z</published>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/commit/?id=b60c535c84a382d06eab5b0c38ee279103b06cf2'/>
<id>urn:sha1:b60c535c84a382d06eab5b0c38ee279103b06cf2</id>
<content type='text'>
After resolving duplicates the migration deleted all items in one silent
pass (per-id GetItemById plus a single DeleteItemsUnsafeFast), which looks
hung for minutes on large libraries. Delete in batches of 500 and log
progress per batch, which also avoids one oversized delete transaction.
</content>
</entry>
<entry>
<title>Fix CleanName and CleanValue refresh</title>
<updated>2026-06-10T08:09:01Z</updated>
<author>
<name>Shadowghost</name>
<email>Ghost_of_Stone@web.de</email>
</author>
<published>2026-06-10T08:09:01Z</published>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/commit/?id=12f718e7bb1b3b247e90fe2769d2a6b22b9f37af'/>
<id>urn:sha1:12f718e7bb1b3b247e90fe2769d2a6b22b9f37af</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Drop linked alternate versions pointing at owned items in migration</title>
<updated>2026-06-07T21:06:37Z</updated>
<author>
<name>Shadowghost</name>
<email>Ghost_of_Stone@web.de</email>
</author>
<published>2026-06-05T17:40:39Z</published>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/commit/?id=f5847596384c35b5bf4119cd8b39e4234af6e899'/>
<id>urn:sha1:f5847596384c35b5bf4119cd8b39e4234af6e899</id>
<content type='text'>
(cherry picked from commit 40afd403a655ada6cfa30b577454bb766ea2099f)
</content>
</entry>
<entry>
<title>Merge pull request #16941 from Shadowghost/fix-external-data-pruning</title>
<updated>2026-06-07T18:28:34Z</updated>
<author>
<name>Bond-009</name>
<email>bond.009@outlook.com</email>
</author>
<published>2026-06-07T18:28:34Z</published>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/commit/?id=ec43ea156e11705227eccbe760e2510a28d774a4'/>
<id>urn:sha1:ec43ea156e11705227eccbe760e2510a28d774a4</id>
<content type='text'>
Fix external data pruning on item deletion</content>
</entry>
<entry>
<title>Re-disable legacy authorization methods by default</title>
<updated>2026-05-31T19:12:44Z</updated>
<author>
<name>theguymadmax</name>
<email>theguymadmax@proton.me</email>
</author>
<published>2026-05-31T19:12:44Z</published>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/commit/?id=a6ae68433a20b0d29fb7734251aa7ddf29173ef3'/>
<id>urn:sha1:a6ae68433a20b0d29fb7734251aa7ddf29173ef3</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fix filename</title>
<updated>2026-05-31T18:02:00Z</updated>
<author>
<name>Shadowghost</name>
<email>Ghost_of_Stone@web.de</email>
</author>
<published>2026-05-31T18:02:00Z</published>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/commit/?id=bdb82503007abe1a036385c5839bce1e6f20142e'/>
<id>urn:sha1:bdb82503007abe1a036385c5839bce1e6f20142e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Backport: Fix/user manager collation (#16919)</title>
<updated>2026-05-26T18:59:20Z</updated>
<author>
<name>Bond-009</name>
<email>bond.009@outlook.com</email>
</author>
<published>2026-05-26T18:59:20Z</published>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/commit/?id=11130030d25101e4ca42e2215d8343155a529b79'/>
<id>urn:sha1:11130030d25101e4ca42e2215d8343155a529b79</id>
<content type='text'>
Backport: Fix/user manager collation</content>
</entry>
</feed>
