Commit graph

2407 commits

Author SHA1 Message Date
gnattu
644df3585b Use WriteThrough for ImageSaver
When writing an image to the disk, we use the completion of the async task as a signal indicating the completion of a write operation. However, this approach may not be entirely accurate, as the operating system can optimize IO operations by writing data to an intermediate cache instead of directly to the disk before completing the operation. This optimization can lead to a data race for our scanner, as subsequent tasks such as blurhash computation may attempt to read a file that has not yet been flushed from the volatile cache. Consequently, the data within the file becomes invalid, causing the blurhash computation task to fail.

Use WriteThrough mode to ensure the data is actual on disk before return to resolve this issue.
2025-01-24 07:54:22 +08:00
Tim Eisele
4e28f4fe03
Fix missing episode removal (#13218) 2024-12-31 09:09:42 -07:00
gnattu
d49bb1d86d Don't fall back to ffprobe results for multi-value audio tags 2024-12-08 10:56:05 +08:00
gnattu
e7ac3e3929
Fix missing ConfigureAwait (#13139)
Regression from #12940
2024-12-01 10:57:37 -07:00
gnattu
e2434d38c5
Only set first MusicBrainz ID for audio tags (#13003) 2024-11-14 17:01:48 -07:00
gnattu
5769d5ca91 Catch all exceptions for file removal 2024-11-03 23:25:11 +08:00
gnattu
03271c43a7 Throw the exception as is 2024-11-03 16:10:17 +08:00
gnattu
bb30d26ffb Use ExceptionDispatchInfo 2024-11-03 04:28:48 +08:00
gnattu
e9ee0ef1f5 Remove temp file even when saving failed 2024-11-03 04:11:41 +08:00
gnattu
469bf9d514 Move the remove source implementation into ProviderManager 2024-11-03 02:51:11 +08:00
gnattu
74d2c2addf Remove DynamicImageResponse local image after saved to metadata folder
Previously, local images provided by DynamicImageResponse were never cleaned up until the server was restarted. This issue has become more severe in 10.10, as the default is now set to use the system's native temp folder, which might be a RAM backed tmpfs. This behavior could lead to resource starvation for long-running servers performing multiple library scans.

Metadata plugins prefer the old behavior should do its own backup.
2024-11-02 17:15:00 +08:00
Mikal S.
f99e0407fd
Don't try to prune images for virtual episodes. (#12909) 2024-10-31 09:40:03 -06:00
Benedikt
c6629aebf8
Fix TMDB import failing when no IMDB ID is set for a movie (#12891) 2024-10-28 07:29:15 -06:00
gnattu
7cc3f9506e
Disable ATL's internal ID3v2.2/3 splitting (#12751) 2024-09-30 07:15:52 -06:00
gnattu
992d56e565
Workaround ATL tag parsing (#12705) 2024-09-28 08:52:05 -06:00
Tim Eisele
d10406fd75
Pre-fill ParentIndexNumber to preserve it between scans (#12739) 2024-09-28 08:51:48 -06:00
gnattu
0ffddacf11 Move GetCustomTagDelimiters to Extension 2024-09-24 12:36:05 +08:00
gnattu
00ca4abbe1 Sanitize CustomTagDelimiters server side
The API requires an array type and does not support runtime generated default value. Use server side helper function to sanitize it into char.
2024-09-24 05:15:46 +08:00
Cody Robibero
3c639c2e80
Tweak Trickplay migration for speed (#12643) 2024-09-23 09:09:23 -06:00
Tim Eisele
9ff7575c85
Fix metadata merge for BoxSets (#12583) 2024-09-20 07:46:44 -06:00
Shadowghost
2351eeba56 Rework PR 6203 2024-09-17 20:35:23 +02:00
gnattu
90a00e1293
Only remove images in metadata folder by default (#12631) 2024-09-12 13:45:38 -06:00
gnattu
c6de7225b9
Add non-standard multi-value audio tag support (#12385) 2024-09-07 21:10:59 -06:00
JPVenson
5ceedced1c
Feature/media segments plugin api (#12359) 2024-09-07 14:56:51 -06:00
Tim Eisele
c56dbc1c44
Enhance Trickplay (#11883) 2024-09-07 11:23:48 -06:00
Niels van Velzen
9afaa6ae4d
Merge pull request #12548 from Bond-009/utf8bom
Remove BOM from UTF-8 files
2024-09-06 21:56:31 +02:00
Bond_009
97a02f5803 Remove BOM from UTF-8 files
I think some people need to change their IDE configuration ;)
2024-08-30 15:29:48 +02:00
Shadowghost
4185558f5e Upgrade LRCParser to 2024.0728.2 2024-08-30 09:03:57 +02:00
scampower3
1ca2c4b4e1 Backport pull request #12425 from jellyfin/release-10.9.z
Don't force non-virtual when all episodes in season are isMissing=true

Original-merge: be949af59e

Merged-by: Bond-009 <bond.009@outlook.com>

Backported-by: Joshua M. Boniface <joshua@boniface.me>
2024-08-25 02:46:34 -04:00
gnattu
7da787609b Fix SA1508 in LyricScheduledTask
Signed-off-by: gnattu <gnattuoc@me.com>
2024-08-24 06:59:48 +08:00
Bond-009
e211445034
Merge pull request #12397 from crobibero/lyrics-finale
Add lyrics library options, add download scheduled task
2024-08-24 00:00:38 +02:00
Bond-009
a21ecda78f
Merge pull request #12375 from tobias-varden/pr_2
Update the default repository URL for the StudioImages plugin
2024-08-14 16:09:26 +02:00
Cody Robibero
a4953263bd Fix class name 2024-08-06 07:53:44 -06:00
Cody Robibero
3873c7fda0
Update MediaBrowser.Providers/Lyric/LyricScheduledTask.cs
Co-authored-by: Niels van Velzen <nielsvanvelzen@users.noreply.github.com>
2024-08-06 07:52:59 -06:00
Cody Robibero
eacc8c7d35 Add scheduled task to automatically search for lyrics 2024-08-05 16:00:08 -06:00
nielsvanvelzen
0675b06bea Backport pull request #12356 from jellyfin/release-10.9.z
Fix creating virtual seasons (again)

Original-merge: 900acc03aa

Merged-by: crobibero <cody@robibe.ro>

Backported-by: Bond_009 <bond.009@outlook.com>
2024-08-05 10:58:23 -04:00
CS
919b8ef9e2 Use collection initializers when possible 2024-08-02 16:19:20 +02:00
CS
b34cbc2f16 Update default artwork repository url to point to githubusercontent.com domain 2024-08-02 16:12:55 +02:00
gnattu
79c4469ac7 Remove redundant NaN check
Signed-off-by: gnattu <gnattuoc@me.com>
2024-07-29 06:23:16 +08:00
gnattu
5c5b326b1a Remove test var
Co-authored-by: Cody Robibero <cody@robibe.ro>
2024-07-29 06:23:16 +08:00
gnattu
56a98a3bb0 Make internal value separator a constant
Signed-off-by: gnattu <gnattuoc@me.com>
2024-07-29 06:23:16 +08:00
gnattu
1d658a5a4d Remove redundant check
Signed-off-by: gnattu <gnattuoc@me.com>
2024-07-29 06:23:13 +08:00
gnattu
939e02ccee Apply suggestions from code review
Co-authored-by: Cody Robibero <cody@robibe.ro>
2024-07-29 06:21:51 +08:00
gnattu
ac9322370b Check if the metadata is supported for title fallback
Signed-off-by: gnattu <gnattuoc@me.com>
2024-07-29 06:21:51 +08:00
gnattu
172feab084 Migrate to z440.atl instead of TagLib-Sharp
The ATL lib provides a lot of advantages to the TagLib we are currently using.

Notably:

- auto-detect the format of the audio data, even if the file extension has the wrong label, and provides unified API for different file types.

- supports more audio formats than TagLib

- supports lyrics natively

- supports playlists and cuesheets

- srovides relatively simple and controllable way for non-standard fields, enable us to implement compatibility features instead of waiting for lib updates

- is actually maintained

Signed-off-by: gnattu <gnattuoc@me.com>
2024-07-29 06:21:47 +08:00
Bond-009
095d4d4d15
Merge pull request #12295 from Bond-009/trysetproviderid
Add TrySetProviderId extension
2024-07-29 00:13:40 +02:00
Cody Robibero
b026772764
Move external url listing to provider for plugin use (#12279) 2024-07-17 09:48:31 -04:00
Bond_009
ecd2dab0a2 Add TrySetProviderId extension 2024-07-17 15:48:21 +02:00
Bond_009
2e338f74ec Fix (another) ArgumentNullException while scanning music
```
[2024-07-17 14:31:18.202 +02:00] [ERR] [19] MediaBrowser.Providers.Music.AudioMetadataService: Error in "Probe Provider"
System.ArgumentNullException: Value cannot be null. (Parameter 'value')
   at System.ArgumentNullException.Throw(String paramName)
   at System.ArgumentNullException.ThrowIfNull(Object argument, String paramName)
   at System.ArgumentException.ThrowNullOrEmptyException(String argument, String paramName)
   at MediaBrowser.Model.Entities.ProviderIdsExtensions.SetProviderId(IHasProviderIds instance, String name, String value) in /home/loma/dev/jellyfin/MediaBrowser.Model/Entities/ProviderIdsExtensions.cs:line 121
   at MediaBrowser.Model.Entities.ProviderIdsExtensions.SetProviderId(IHasProviderIds instance, MetadataProvider provider, String value) in /home/loma/dev/jellyfin/MediaBrowser.Model/Entities/ProviderIdsExtensions.cs:line 151
   at MediaBrowser.Providers.MediaInfo.AudioFileProber.FetchDataFromTags(Audio audio, MediaInfo mediaInfo, MetadataRefreshOptions options, Boolean tryExtractEmbeddedLyrics) in /home/loma/dev/jellyfin/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs:line 330
   at MediaBrowser.Providers.MediaInfo.AudioFileProber.FetchAsync(Audio audio, MediaInfo mediaInfo, MetadataRefreshOptions options, CancellationToken cancellationToken) in /home/loma/dev/jellyfin/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs:line 139
   at MediaBrowser.Providers.MediaInfo.AudioFileProber.Probe[T](T item, MetadataRefreshOptions options, CancellationToken cancellationToken) in /home/loma/dev/jellyfin/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs:line 105
   at MediaBrowser.Providers.Manager.MetadataService`2.RunCustomProvider(ICustomMetadataProvider`1 provider, TItemType item, String logName, MetadataRefreshOptions options, RefreshResult refreshResult, CancellationToken cancellationToken) in /home/loma/dev/jellyfin/MediaBrowser.Providers/Manager/MetadataService.cs:line 800
```
2024-07-17 14:36:47 +02:00
Bond_009
60c45d6273 Use complete paths in BD info
This way we don't need to find the complete path later
2024-07-01 00:21:06 +02:00