From af1152b00181ecb2bfb56080e178788dddf9082c Mon Sep 17 00:00:00 2001 From: Wendell Jones Date: Fri, 20 Feb 2026 16:26:53 -0500 Subject: [PATCH] Refactor: standardize namespace and using directive style Refactored all C# test files to use explicit namespace declarations and moved all using directives inside the namespace block for consistency. Updated assembly info and cache files to reflect the new build. Adjusted MvcTestingAppManifest.json to use fully qualified assembly names. No functional changes; all updates are related to code style, organization, and project metadata. --- .editorconfig | 1 + .gitignore | 1 + ConvertToFileScopedNamespaces - Copy.ps1 | 377 + ConvertToFileScopedNamespaces.ps1 | 388 + Emby.Naming/Audio/AlbumParser.cs | 14 +- Emby.Naming/Audio/AudioFileParser.cs | 10 +- Emby.Naming/AudioBook/AudioBookFileInfo.cs | 4 +- .../AudioBook/AudioBookFilePathParser.cs | 10 +- Emby.Naming/AudioBook/AudioBookInfo.cs | 4 +- .../AudioBook/AudioBookListResolver.cs | 16 +- Emby.Naming/AudioBook/AudioBookNameParser.cs | 8 +- Emby.Naming/AudioBook/AudioBookResolver.cs | 10 +- Emby.Naming/Book/BookFileNameParser.cs | 4 +- Emby.Naming/Book/BookFileNameParserResult.cs | 4 +- Emby.Naming/Common/EpisodeExpression.cs | 6 +- .../ExternalFiles/ExternalPathParser.cs | 16 +- Emby.Naming/TV/EpisodePathParser.cs | 12 +- Emby.Naming/TV/EpisodeResolver.cs | 12 +- Emby.Naming/TV/SeasonPathParser.cs | 10 +- Emby.Naming/TV/SeriesPathParser.cs | 8 +- Emby.Naming/TV/SeriesResolver.cs | 8 +- Emby.Naming/TV/TvParserHelpers.cs | 4 +- Emby.Naming/Video/CleanDateTimeParser.cs | 12 +- Emby.Naming/Video/CleanStringParser.cs | 12 +- Emby.Naming/Video/ExtraResult.cs | 8 +- Emby.Naming/Video/ExtraRule.cs | 10 +- Emby.Naming/Video/ExtraRuleResolver.cs | 12 +- Emby.Naming/Video/FileStack.cs | 8 +- Emby.Naming/Video/FileStackRule.cs | 6 +- Emby.Naming/Video/Format3DParser.cs | 6 +- Emby.Naming/Video/StackResolver.cs | 16 +- Emby.Naming/Video/StubResolver.cs | 10 +- Emby.Naming/Video/VideoFileInfo.cs | 6 +- Emby.Naming/Video/VideoInfo.cs | 8 +- Emby.Naming/Video/VideoListResolver.cs | 20 +- Emby.Naming/Video/VideoResolver.cs | 12 +- ...Emby.Naming.csproj.AssemblyReference.cache | Bin 12434 -> 16245 bytes Emby.Photos/PhotoProvider.cs | 4 +- ...Emby.Photos.csproj.AssemblyReference.cache | Bin 11845 -> 17638 bytes .../AppBase/BaseApplicationPaths.cs | 14 +- .../AppBase/BaseConfigurationManager.cs | 28 +- .../AppBase/ConfigurationHelper.cs | 8 +- .../Branding/BrandingConfigurationFactory.cs | 8 +- .../Chapters/ChapterManager.cs | 4 +- .../Collections/CollectionImageProvider.cs | 26 +- .../Collections/CollectionManager.cs | 38 +- .../ServerConfigurationManager.cs | 24 +- .../ConfigurationOptions.cs | 10 +- .../Cryptography/CryptographyProvider.cs | 14 +- .../Data/ItemTypeLookup.cs | 4 +- .../Data/TypeMapper.cs | 12 +- .../EntryPoints/LibraryChangedNotifier.cs | 4 +- .../EntryPoints/UserDataChangeNotifier.cs | 24 +- .../HttpServer/WebSocketConnection.cs | 32 +- .../IO/LibraryMonitor.cs | 28 +- .../IO/ManagedFileSystem.cs | 24 +- .../Images/FolderImageProvider.cs | 4 - .../Images/PhotoAlbumImageProvider.cs | 4 - .../Library/CoreResolutionIgnoreRule.cs | 18 +- .../Library/DotIgnoreIgnoreRule.cs | 4 +- .../Library/ExternalDataManager.cs | 4 +- .../Library/IgnorePatterns.cs | 6 +- .../Library/KeyframeManager.cs | 4 +- .../Library/PathExtensions.cs | 10 +- .../Library/PathManager.cs | 4 +- .../Library/ResolverHelper.cs | 16 +- .../Resolvers/Audio/MusicAlbumResolver.cs | 36 +- .../Resolvers/Audio/MusicArtistResolver.cs | 30 +- .../Library/Resolvers/ExtraResolver.cs | 26 +- .../Library/Resolvers/FolderResolver.cs | 16 +- .../Resolvers/GenericFolderResolver.cs | 16 +- .../Library/Resolvers/GenericVideoResolver.cs | 18 +- .../Resolvers/Movies/BoxSetResolver.cs | 18 +- .../Library/Resolvers/Movies/MovieResolver.cs | 44 +- .../Library/Resolvers/PhotoAlbumResolver.cs | 22 +- .../Library/Resolvers/PhotoResolver.cs | 28 +- .../Library/Resolvers/PlaylistResolver.cs | 24 +- .../Library/Resolvers/TV/EpisodeResolver.cs | 24 +- .../Library/Resolvers/TV/SeasonResolver.cs | 20 +- .../Library/SplashscreenPostScanTask.cs | 4 +- .../Library/Validators/ArtistsPostScanTask.cs | 4 +- .../Library/Validators/ArtistsValidator.cs | 4 +- .../Validators/CollectionPostScanTask.cs | 4 +- .../Library/Validators/GenresPostScanTask.cs | 4 +- .../Library/Validators/GenresValidator.cs | 4 +- .../Validators/MusicGenresPostScanTask.cs | 4 +- .../Validators/MusicGenresValidator.cs | 4 +- .../Library/Validators/PeopleValidator.cs | 4 +- .../Library/Validators/StudiosPostScanTask.cs | 4 +- .../Library/Validators/StudiosValidator.cs | 4 +- .../Localization/LocalizationManager.cs | 34 +- .../Plugins/PluginLoadContext.cs | 6 +- .../Plugins/PluginManager.cs | 52 +- .../QuickConnect/QuickConnectManager.cs | 30 +- .../ScheduledTasks/ScheduledTaskWorker.cs | 4 +- .../ScheduledTasks/TaskManager.cs | 4 +- .../Tasks/AudioNormalizationTask.cs | 4 +- .../ScheduledTasks/Tasks/ChapterImagesTask.cs | 4 +- .../Tasks/CleanActivityLogTask.cs | 4 +- .../CleanupCollectionAndPlaylistPathsTask.cs | 4 +- .../Tasks/DeleteCacheFileTask.cs | 4 +- .../ScheduledTasks/Tasks/DeleteLogFileTask.cs | 4 +- .../Tasks/DeleteTranscodeFileTask.cs | 4 +- .../Tasks/MediaSegmentExtractionTask.cs | 4 +- .../Tasks/OptimizeDatabaseTask.cs | 4 +- .../Tasks/PeopleValidationTask.cs | 4 +- .../ScheduledTasks/Tasks/PluginUpdateTask.cs | 4 +- .../Tasks/RefreshMediaLibraryTask.cs | 4 +- .../ScheduledTasks/Triggers/DailyTrigger.cs | 4 +- .../Triggers/IntervalTrigger.cs | 4 +- .../ScheduledTasks/Triggers/StartupTrigger.cs | 4 +- .../ScheduledTasks/Triggers/WeeklyTrigger.cs | 4 +- .../Serialization/MyXmlSerializer.cs | 16 +- .../ServerApplicationPaths.cs | 8 +- .../Session/SessionManager.cs | 86 +- .../Session/SessionWebSocketListener.cs | 30 +- .../Sorting/AlbumArtistComparer.cs | 14 +- .../Sorting/AlbumComparer.cs | 14 +- .../Sorting/ArtistComparer.cs | 14 +- .../Sorting/CriticRatingComparer.cs | 10 +- .../Sorting/DateCreatedComparer.cs | 12 +- .../Sorting/DatePlayedComparer.cs | 20 +- .../Sorting/IndexNumberComparer.cs | 12 +- .../Sorting/NameComparer.cs | 12 +- .../Sorting/OfficialRatingComparer.cs | 4 +- .../Sorting/ParentIndexNumberComparer.cs | 12 +- .../Sorting/PlayCountComparer.cs | 18 +- .../Sorting/PremiereDateComparer.cs | 12 +- .../Sorting/ProductionYearComparer.cs | 10 +- .../Sorting/RandomComparer.cs | 12 +- .../Sorting/RuntimeComparer.cs | 12 +- .../Sorting/SortNameComparer.cs | 12 +- Emby.Server.Implementations/SyncPlay/Group.cs | 36 +- .../SyncPlay/SyncPlayManager.cs | 26 +- Emby.Server.Implementations/SystemManager.cs | 4 +- .../Updates/InstallationManager.cs | 54 +- ...ementations.csproj.AssemblyReference.cache | Bin 31731 -> 35984 bytes FixStyleCopWarnings.ps1 | 195 + .../Attributes/ParameterObsoleteAttribute.cs | 4 +- .../AnonymousLanAccessHandler.cs | 12 +- .../AnonymousLanAccessRequirement.cs | 4 +- .../Auth/CustomAuthenticationHandler.cs | 26 +- .../DefaultAuthorizationHandler.cs | 24 +- .../DefaultAuthorizationRequirement.cs | 4 +- .../FirstTimeSetupHandler.cs | 12 +- .../FirstTimeSetupRequirement.cs | 4 +- .../LocalAccessOrRequiresElevationHandler.cs | 14 +- ...calAccessOrRequiresElevationRequirement.cs | 4 +- .../SyncPlayAccessHandler.cs | 18 +- .../SyncPlayAccessRequirement.cs | 6 +- .../UserPermissionHandler.cs | 16 +- .../UserPermissionRequirement.cs | 6 +- Jellyfin.Api/BaseJellyfinApiController.cs | 4 +- .../Controllers/ActivityLogController.cs | 4 +- Jellyfin.Api/Controllers/ApiKeyController.cs | 4 +- Jellyfin.Api/Controllers/ArtistsController.cs | 4 +- Jellyfin.Api/Controllers/AudioController.cs | 4 +- Jellyfin.Api/Controllers/BackupController.cs | 4 +- .../Controllers/BrandingController.cs | 4 +- .../Controllers/ChannelsController.cs | 4 +- .../Controllers/ClientLogController.cs | 4 +- .../Controllers/CollectionController.cs | 4 +- .../Controllers/ConfigurationController.cs | 4 +- .../Controllers/DashboardController.cs | 4 +- Jellyfin.Api/Controllers/DevicesController.cs | 4 +- .../DisplayPreferencesController.cs | 4 +- .../Controllers/DynamicHlsController.cs | 4 +- .../Controllers/EnvironmentController.cs | 4 +- Jellyfin.Api/Controllers/FilterController.cs | 4 +- Jellyfin.Api/Controllers/GenresController.cs | 4 +- .../Controllers/HlsSegmentController.cs | 4 +- Jellyfin.Api/Controllers/ImageController.cs | 4 +- .../Controllers/InstantMixController.cs | 4 +- .../Controllers/ItemLookupController.cs | 4 +- .../Controllers/ItemRefreshController.cs | 4 +- .../Controllers/ItemUpdateController.cs | 4 +- Jellyfin.Api/Controllers/ItemsController.cs | 4 +- Jellyfin.Api/Controllers/LibraryController.cs | 4 +- .../Controllers/LibraryStructureController.cs | 4 +- Jellyfin.Api/Controllers/LiveTvController.cs | 4 +- .../Controllers/LocalizationController.cs | 4 +- Jellyfin.Api/Controllers/LyricsController.cs | 4 +- .../Controllers/MediaInfoController.cs | 4 +- .../Controllers/MediaSegmentsController.cs | 4 +- Jellyfin.Api/Controllers/MoviesController.cs | 4 +- .../Controllers/MusicGenresController.cs | 4 +- Jellyfin.Api/Controllers/PackageController.cs | 4 +- Jellyfin.Api/Controllers/PersonsController.cs | 4 +- .../Controllers/PlaylistsController.cs | 4 +- .../Controllers/PlaystateController.cs | 4 +- Jellyfin.Api/Controllers/PluginsController.cs | 4 +- .../Controllers/QuickConnectController.cs | 4 +- .../Controllers/RemoteImageController.cs | 4 +- .../Controllers/ScheduledTasksController.cs | 4 +- Jellyfin.Api/Controllers/SearchController.cs | 4 +- Jellyfin.Api/Controllers/SessionController.cs | 4 +- Jellyfin.Api/Controllers/StartupController.cs | 4 +- Jellyfin.Api/Controllers/StudiosController.cs | 4 +- .../Controllers/SubtitleController.cs | 4 +- .../Controllers/SuggestionsController.cs | 4 +- .../Controllers/SyncPlayController.cs | 4 +- Jellyfin.Api/Controllers/SystemController.cs | 4 +- .../Controllers/TimeSyncController.cs | 4 +- .../Controllers/TrailersController.cs | 4 +- .../Controllers/TrickplayController.cs | 4 +- Jellyfin.Api/Controllers/TvShowsController.cs | 4 +- .../Controllers/UniversalAudioController.cs | 4 +- Jellyfin.Api/Controllers/UserController.cs | 4 +- .../Controllers/UserLibraryController.cs | 4 +- .../Controllers/UserViewsController.cs | 4 +- .../Controllers/VideoAttachmentsController.cs | 4 +- Jellyfin.Api/Controllers/VideosController.cs | 4 +- Jellyfin.Api/Controllers/YearsController.cs | 4 +- .../Extensions/ClaimsPrincipalExtensions.cs | 4 +- Jellyfin.Api/Extensions/DtoExtensions.cs | 4 +- .../CamelCaseJsonProfileFormatter.cs | 4 +- Jellyfin.Api/Formatters/CssOutputFormatter.cs | 4 +- .../PascalCaseJsonProfileFormatter.cs | 4 +- Jellyfin.Api/Formatters/XmlOutputFormatter.cs | 4 +- Jellyfin.Api/Helpers/AudioHelper.cs | 4 +- Jellyfin.Api/Helpers/DynamicHlsHelper.cs | 4 +- .../Helpers/FileStreamResponseHelpers.cs | 4 +- Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs | 4 +- Jellyfin.Api/Helpers/HlsHelpers.cs | 4 +- Jellyfin.Api/Helpers/MediaInfoHelper.cs | 4 +- Jellyfin.Api/Helpers/RequestHelpers.cs | 4 +- Jellyfin.Api/Helpers/StreamingHelpers.cs | 4 +- .../BaseUrlRedirectionMiddleware.cs | 4 +- .../Middleware/ExceptionMiddleware.cs | 4 +- .../IpBasedAccessValidationMiddleware.cs | 4 +- .../QueryStringDecodingMiddleware.cs | 4 +- .../Middleware/ResponseTimeMiddleware.cs | 4 +- .../Middleware/RobotsRedirectionMiddleware.cs | 4 +- .../ServerStartupMessageMiddleware.cs | 4 +- .../Middleware/UrlDecodeQueryFeature.cs | 4 +- .../Middleware/WebSocketHandlerMiddleware.cs | 4 +- .../CommaDelimitedCollectionModelBinder.cs | 4 +- .../ModelBinders/LegacyDateTimeModelBinder.cs | 4 +- .../ModelBinders/NullableEnumModelBinder.cs | 4 +- .../NullableEnumModelBinderProvider.cs | 4 +- .../PipeDelimitedCollectionModelBinder.cs | 4 +- Jellyfin.Api/Models/ConfigurationPageInfo.cs | 4 +- .../LibraryDtos/LibraryOptionsResultDto.cs | 4 +- .../LibraryDtos/LibraryTypeOptionsDto.cs | 4 +- .../Models/LibraryDtos/MediaUpdateInfoDto.cs | 4 +- .../AddVirtualFolderDto.cs | 4 +- .../LibraryStructureDto/MediaPathDto.cs | 4 +- .../UpdateLibraryOptionsDto.cs | 4 +- .../UpdateMediaPathRequestDto.cs | 4 +- .../Models/LiveTvDtos/GetProgramsDto.cs | 4 +- .../Models/LiveTvDtos/SetChannelMappingDto.cs | 4 +- .../Models/MediaInfoDtos/OpenLiveStreamDto.cs | 4 +- .../Models/MediaInfoDtos/PlaybackInfoDto.cs | 4 +- .../Models/PlaylistDtos/CreatePlaylistDto.cs | 4 +- .../Models/PlaylistDtos/UpdatePlaylistDto.cs | 4 +- .../StartupDtos/StartupRemoteAccessDto.cs | 4 +- .../StreamingDtos/HlsAudioRequestDto.cs | 4 +- .../StreamingDtos/HlsVideoRequestDto.cs | 4 +- .../Models/SubtitleDtos/UploadSubtitleDto.cs | 4 +- .../Models/SyncPlayDtos/BufferRequestDto.cs | 4 +- .../SyncPlayDtos/JoinGroupRequestDto.cs | 4 +- .../MovePlaylistItemRequestDto.cs | 4 +- .../Models/SyncPlayDtos/NextItemRequestDto.cs | 4 +- .../Models/SyncPlayDtos/PlayRequestDto.cs | 4 +- .../SyncPlayDtos/PreviousItemRequestDto.cs | 4 +- .../Models/SyncPlayDtos/QueueRequestDto.cs | 4 +- .../Models/SyncPlayDtos/ReadyRequestDto.cs | 4 +- .../RemoveFromPlaylistRequestDto.cs | 4 +- .../SyncPlayDtos/SetPlaylistItemRequestDto.cs | 4 +- .../SyncPlayDtos/SetRepeatModeRequestDto.cs | 4 +- .../SyncPlayDtos/SetShuffleModeRequestDto.cs | 4 +- .../Models/SystemInfoDtos/FolderStorageDto.cs | 4 +- .../SystemInfoDtos/LibraryStorageDto.cs | 4 +- .../Models/SystemInfoDtos/SystemStorageDto.cs | 4 +- .../Models/UserDtos/CreateUserByName.cs | 4 +- .../Models/UserDtos/ForgotPasswordDto.cs | 4 +- .../Models/UserDtos/ForgotPasswordPinDto.cs | 4 +- .../Models/UserDtos/QuickConnectDto.cs | 4 +- .../ActivityLogWebSocketListener.cs | 4 +- .../ScheduledTasksWebSocketListener.cs | 4 +- .../SessionInfoWebSocketListener.cs | 4 +- .../net10.0/Jellyfin.Api.AssemblyInfo.cs | 2 +- .../Jellyfin.Api.AssemblyInfoInputs.cache | 2 +- ...ellyfin.Api.csproj.AssemblyReference.cache | Bin 17986 -> 22239 bytes .../Debug/net10.0/Jellyfin.CodeAnalysis.dll | Bin 8704 -> 8704 bytes .../Debug/net10.0/Jellyfin.CodeAnalysis.pdb | Bin 9652 -> 9652 bytes .../bin/Debug/net10.0/Jellyfin.Data.dll | Bin 18944 -> 18944 bytes .../bin/Debug/net10.0/Jellyfin.Data.pdb | Bin 17540 -> 17540 bytes .../Jellyfin.Database.Implementations.dll | Bin 218624 -> 218624 bytes .../Jellyfin.Database.Implementations.pdb | Bin 66792 -> 66792 bytes ...llyfin.Data.csproj.AssemblyReference.cache | Bin 16637 -> 16377 bytes .../obj/Debug/net10.0/Jellyfin.Data.dll | Bin 18944 -> 18944 bytes .../obj/Debug/net10.0/Jellyfin.Data.pdb | Bin 17540 -> 17540 bytes .../Activity/ActivityManager.cs | 4 +- .../DatabaseConfigurationFactory.cs | 4 +- .../DatabaseConfigurationStore.cs | 4 +- .../Devices/DeviceManager.cs | 46 +- .../Library/LyricDownloadFailureLogger.cs | 4 +- .../Library/SubtitleDownloadFailureLogger.cs | 24 +- .../Security/AuthenticationFailedLogger.cs | 20 +- .../Security/AuthenticationSucceededLogger.cs | 16 +- .../Consumers/Session/PlaybackStartLogger.cs | 28 +- .../Consumers/Session/PlaybackStopLogger.cs | 28 +- .../Consumers/Session/SessionEndedLogger.cs | 16 +- .../Consumers/Session/SessionStartedLogger.cs | 16 +- .../System/PendingRestartNotifier.cs | 12 +- .../Consumers/System/TaskCompletedLogger.cs | 26 +- .../Consumers/System/TaskCompletedNotifier.cs | 14 +- .../PluginInstallationCancelledNotifier.cs | 14 +- .../Updates/PluginInstallationFailedLogger.cs | 20 +- .../PluginInstallationFailedNotifier.cs | 14 +- .../Updates/PluginInstalledLogger.cs | 20 +- .../Updates/PluginInstalledNotifier.cs | 14 +- .../Updates/PluginInstallingNotifier.cs | 14 +- .../Updates/PluginUninstalledLogger.cs | 20 +- .../Updates/PluginUninstalledNotifier.cs | 14 +- .../Consumers/Updates/PluginUpdatedLogger.cs | 20 +- .../Consumers/Users/UserCreatedLogger.cs | 16 +- .../Consumers/Users/UserDeletedLogger.cs | 18 +- .../Consumers/Users/UserDeletedNotifier.cs | 20 +- .../Consumers/Users/UserLockedOutLogger.cs | 20 +- .../Users/UserPasswordChangedLogger.cs | 16 +- .../Consumers/Users/UserUpdatedNotifier.cs | 20 +- .../Events/EventManager.cs | 14 +- .../EventingServiceCollectionExtensions.cs | 38 +- .../Extensions/ExpressionExtensions.cs | 4 +- .../Extensions/ServiceCollectionExtensions.cs | 4 +- .../FullSystemBackup/BackupManifest.cs | 4 +- .../FullSystemBackup/BackupService.cs | 4 +- .../Item/ChapterRepository.cs | 4 +- .../Item/KeyframeRepository.cs | 4 +- .../Item/MediaAttachmentRepository.cs | 4 +- .../Item/MediaStreamRepository.cs | 4 +- .../Item/PeopleRepository.cs | 3 +- .../MediaSegments/MediaSegmentManager.cs | 4 +- .../Security/AuthenticationManager.cs | 16 +- .../StorageHelpers/StorageHelper.cs | 4 +- .../Trickplay/TrickplayManager.cs | 4 +- .../Users/DefaultAuthenticationProvider.cs | 18 +- .../Users/DefaultPasswordResetProvider.cs | 32 +- .../Users/DeviceAccessHost.cs | 4 +- .../Users/DisplayPreferencesManager.cs | 4 +- .../Users/InvalidAuthProvider.cs | 8 +- ...ementations.csproj.AssemblyReference.cache | Bin 15584 -> 21377 bytes .../Configuration/CorsPolicyProvider.cs | 12 +- Jellyfin.Server/CoreAppHost.cs | 68 +- .../ApiApplicationBuilderExtensions.cs | 14 +- .../ApiServiceCollectionExtensions.cs | 86 +- .../Extensions/WebHostBuilderExtensions.cs | 4 +- .../Filters/AdditionalModelFilter.cs | 38 +- .../Filters/CachingOpenApiProvider.cs | 4 +- Jellyfin.Server/Filters/FileRequestFilter.cs | 10 +- Jellyfin.Server/Filters/FileResponseFilter.cs | 12 +- .../Filters/FlagsEnumSchemaFilter.cs | 4 +- .../Filters/IgnoreEnumSchemaFilter.cs | 4 +- .../Filters/ParameterObsoleteFilter.cs | 12 +- .../RetryOnTemporarilyUnavailableFilter.cs | 4 +- .../SecurityRequirementsOperationFilter.cs | 4 +- .../DbContextFactoryHealthCheck.cs | 4 +- Jellyfin.Server/Helpers/StartupHelpers.cs | 4 +- .../Migrations/IAsyncMigrationRoutine.cs | 4 +- .../Migrations/IDatabaseMigrationRoutine.cs | 4 +- .../JellyfinMigrationBackupAttribute.cs | 4 +- .../Migrations/JellyfinMigrationService.cs | 4 +- .../Migrations/MigrationOptions.cs | 6 +- .../CreateNetworkConfiguration.cs | 4 +- .../MigrateEncodingOptions.cs | 4 +- .../MigrateMusicBrainzTimeout.cs | 4 +- .../RenameEnableGroupingIntoCollections.cs | 4 +- .../Routines/AddDefaultCastReceivers.cs | 4 +- .../Routines/AddDefaultPluginRepository.cs | 8 +- .../Migrations/Routines/CleanMusicArtist.cs | 4 +- .../Routines/CreateUserLoggingConfigFile.cs | 14 +- .../Routines/DisableLegacyAuthorization.cs | 4 +- .../Routines/DisableTranscodingThrottling.cs | 8 +- .../Migrations/Routines/FixAudioData.cs | 26 +- .../Migrations/Routines/FixDates.cs | 4 +- .../Migrations/Routines/FixPlaylistOwner.cs | 5 +- .../Routines/MigrateActivityLogDb.cs | 22 +- .../Routines/MigrateAuthenticationDb.cs | 24 +- .../Routines/MigrateDisplayPreferencesDb.cs | 34 +- .../Routines/MigrateKeyframeData.cs | 4 +- .../Routines/MigrateRatingLevels.cs | 4 +- .../Migrations/Routines/MigrateUserDb.cs | 4 +- .../Migrations/Routines/MoveTrickplayFiles.cs | 4 +- .../Routines/ReaddDefaultPluginRepository.cs | 4 +- .../Migrations/Routines/RefreshCleanNames.cs | 4 +- .../Routines/RefreshInternalDateModified.cs | 4 +- .../Routines/RemoveDownloadImagesInAdvance.cs | 4 +- .../Routines/RemoveDuplicateExtras.cs | 4 +- .../RemoveDuplicatePlaylistChildren.cs | 4 +- .../Routines/UpdateDefaultPluginRepository.cs | 4 +- .../Migrations/Stages/CodeMigration.cs | 4 +- .../Migrations/Stages/MigrationStage.cs | 4 +- Jellyfin.Server/Program.cs | 76 +- .../ServerSetupApp/IStartupLogger.cs | 4 +- Jellyfin.Server/ServerSetupApp/SetupServer.cs | 4 +- .../ServerSetupApp/StartupLogTopic.cs | 4 +- .../ServerSetupApp/StartupLogger.cs | 4 +- .../ServerSetupApp/StartupLoggerExtensions.cs | 4 +- .../ServerSetupApp/StartupLoggerOfCategory.cs | 4 +- Jellyfin.Server/Startup.cs | 64 +- Jellyfin.Server/StartupOptions.cs | 10 +- ...yfin.Server.csproj.AssemblyReference.cache | Bin 47268 -> 51521 bytes .../Configuration/ConfigurationStore.cs | 8 +- .../ConfigurationUpdateEventArgs.cs | 4 +- .../EncodingConfigurationExtensions.cs | 8 +- .../Configuration/IConfigurationFactory.cs | 4 +- MediaBrowser.Common/Events/EventHelper.cs | 8 +- .../Extensions/BaseExtensions.cs | 10 +- .../Extensions/HttpContextExtensions.cs | 6 +- .../Extensions/MethodNotAllowedException.cs | 4 +- .../Extensions/ProcessExtensions.cs | 10 +- .../Extensions/ResourceNotFoundException.cs | 4 +- MediaBrowser.Common/FfmpegException.cs | 4 +- MediaBrowser.Common/IApplicationHost.cs | 10 +- MediaBrowser.Common/Net/INetworkManager.cs | 16 +- .../Net/NetworkConfigurationExtensions.cs | 4 +- .../Net/NetworkConfigurationFactory.cs | 4 +- .../Net/NetworkConfigurationStore.cs | 4 +- MediaBrowser.Common/Net/NetworkConstants.cs | 4 +- MediaBrowser.Common/Net/NetworkUtils.cs | 4 +- .../Net/RemoteAccessPolicyResult.cs | 4 +- MediaBrowser.Common/Plugins/BasePlugin.cs | 14 +- .../Plugins/IHasPluginConfiguration.cs | 6 +- MediaBrowser.Common/Plugins/IPlugin.cs | 10 +- MediaBrowser.Common/Plugins/IPluginManager.cs | 16 +- MediaBrowser.Common/Plugins/LocalPlugin.cs | 8 +- MediaBrowser.Common/Plugins/PluginManifest.cs | 10 +- .../Providers/ProviderIdParsers.cs | 6 +- .../RequiresSourceSerialisationAttribute.cs | 4 +- .../Updates/IInstallationManager.cs | 14 +- .../Updates/InstallationEventArgs.cs | 10 +- ...wser.Common.csproj.AssemblyReference.cache | Bin 12434 -> 16245 bytes ...Browser.Common.csproj.FileListAbsolute.txt | 1 + .../obj/Debug/net10.0/MediaBrowser.Common.xml | 1907 +++ .../Authentication/AuthenticationException.cs | 4 +- .../Authentication/AuthenticationResult.cs | 4 +- .../BaseItemManager/BaseItemManager.cs | 16 +- .../BaseItemManager/IBaseItemManager.cs | 6 +- .../Channels/IRequiresMediaInfoCallback.cs | 10 +- .../Chapters/IChapterManager.cs | 4 +- .../ClientEvent/ClientEventLogger.cs | 8 +- .../ClientEvent/IClientEventLogger.cs | 6 +- .../IServerConfigurationManager.cs | 6 +- .../Devices/IDeviceManager.cs | 4 +- .../Drawing/ImageCollageOptions.cs | 8 +- .../Entities/Extensions.cs | 10 +- .../Entities/IHasDisplayOrder.cs | 8 +- .../Entities/MediaSourceWidthComparator.cs | 4 +- .../AuthenticationRequestEventArgs.cs | 4 +- .../AuthenticationResultEventArgs.cs | 4 +- .../Events/IEventConsumer.cs | 6 +- .../Events/IEventManager.cs | 6 +- .../Events/Session/SessionEndedEventArgs.cs | 6 +- .../Events/Session/SessionStartedEventArgs.cs | 6 +- .../PluginInstallationCancelledEventArgs.cs | 6 +- .../Updates/PluginInstalledEventArgs.cs | 6 +- .../Updates/PluginInstallingEventArgs.cs | 6 +- .../Updates/PluginUninstalledEventArgs.cs | 6 +- .../Events/Updates/PluginUpdatedEventArgs.cs | 6 +- .../Extensions/ConfigurationExtensions.cs | 6 +- .../Extensions/XmlReaderExtensions.cs | 4 +- .../IDisplayPreferencesManager.cs | 8 +- MediaBrowser.Controller/IO/FileData.cs | 14 +- .../IO/FileSystemHelper.cs | 4 +- .../IO/IExternalDataManager.cs | 4 +- MediaBrowser.Controller/IO/IPathManager.cs | 4 +- MediaBrowser.Controller/ISystemManager.cs | 4 +- .../Library/IDirectStreamProvider.cs | 4 +- .../Library/IIntroProvider.cs | 14 +- .../Library/IKeyframeManager.cs | 4 +- .../Library/ILibraryPostScanTask.cs | 8 +- .../Library/IMetadataSaver.cs | 8 +- .../Library/ISearchEngine.cs | 6 +- .../Library/IUserDataManager.cs | 18 +- .../Library/SearchHintInfo.cs | 8 +- MediaBrowser.Controller/Library/TVUtils.cs | 6 +- .../ILimitedConcurrencyLibraryScheduler.cs | 4 +- .../LimitedConcurrencyLibraryScheduler.cs | 4 +- .../LiveTv/IGuideManager.cs | 4 +- .../LiveTv/IListingsManager.cs | 4 +- .../LiveTv/IRecordingsManager.cs | 4 +- .../LiveTv/ITunerHostManager.cs | 4 +- .../Lyrics/ILyricManager.cs | 4 +- .../Lyrics/ILyricParser.cs | 4 +- .../Lyrics/ILyricProvider.cs | 4 +- .../Lyrics/LyricDownloadFailureEventArgs.cs | 6 +- .../MediaEncoding/DownMixAlgorithmsHelper.cs | 4 +- .../MediaEncoding/ITranscodeManager.cs | 4 +- .../MediaEncoding/TranscodingJob.cs | 4 +- .../TranscodingSegmentCleaner.cs | 4 +- .../MediaEncoding/TranscodingThrottler.cs | 4 +- .../MediaSegments/IMediaSegmentManager.cs | 4 +- .../MediaSegments/IMediaSegmentProvider.cs | 4 +- .../Net/AuthorizationInfo.cs | 8 +- MediaBrowser.Controller/Net/IAuthService.cs | 6 +- .../Net/IAuthorizationContext.cs | 6 +- .../Net/IWebSocketConnection.cs | 14 +- .../Net/IWebSocketListener.cs | 6 +- .../Net/IWebSocketManager.cs | 6 +- .../Net/SecurityException.cs | 4 +- .../Net/WebSocketMessage.cs | 4 +- .../Net/WebSocketMessageInfo.cs | 8 +- .../Inbound/ActivityLogEntryStartMessage.cs | 4 +- .../Inbound/ActivityLogEntryStopMessage.cs | 4 +- .../Inbound/InboundKeepAliveMessage.cs | 4 +- .../Inbound/ScheduledTasksInfoStartMessage.cs | 4 +- .../Inbound/ScheduledTasksInfoStopMessage.cs | 4 +- .../Inbound/SessionsStartMessage.cs | 4 +- .../Inbound/SessionsStopMessage.cs | 4 +- .../Outbound/ActivityLogEntryMessage.cs | 4 +- .../Outbound/ForceKeepAliveMessage.cs | 4 +- .../Outbound/GeneralCommandMessage.cs | 4 +- .../Outbound/LibraryChangedMessage.cs | 4 +- .../Outbound/OutboundKeepAliveMessage.cs | 4 +- .../WebSocketMessages/Outbound/PlayMessage.cs | 4 +- .../Outbound/PlaystateMessage.cs | 4 +- .../PluginInstallationCancelledMessage.cs | 4 +- .../PluginInstallationCompletedMessage.cs | 4 +- .../PluginInstallationFailedMessage.cs | 4 +- .../Outbound/PluginInstallingMessage.cs | 4 +- .../Outbound/PluginUninstalledMessage.cs | 4 +- .../Outbound/RefreshProgressMessage.cs | 4 +- .../Outbound/RestartRequiredMessage.cs | 4 +- .../Outbound/ScheduledTaskEndedMessage.cs | 4 +- .../Outbound/ScheduledTasksInfoMessage.cs | 4 +- .../Outbound/SeriesTimerCancelledMessage.cs | 4 +- .../Outbound/SeriesTimerCreatedMessage.cs | 4 +- .../Outbound/ServerRestartingMessage.cs | 4 +- .../Outbound/ServerShuttingDownMessage.cs | 4 +- .../Outbound/SessionsMessage.cs | 4 +- .../Outbound/SyncPlayCommandMessage.cs | 4 +- .../Outbound/TimerCancelledMessage.cs | 4 +- .../Outbound/TimerCreatedMessage.cs | 4 +- .../Outbound/UserDataChangedMessage.cs | 4 +- .../Outbound/UserDeletedMessage.cs | 4 +- .../Outbound/UserUpdatedMessage.cs | 4 +- .../OutboundWebSocketMessage.cs | 4 +- .../Persistence/IChapterRepository.cs | 4 +- .../Persistence/IItemTypeLookup.cs | 4 +- .../Persistence/IKeyframeRepository.cs | 4 +- .../Plugins/IPluginServiceRegistrator.cs | 4 +- .../Providers/IExternalId.cs | 8 +- .../Providers/IExternalUrlProvider.cs | 4 +- .../Providers/IImageProvider.cs | 4 +- .../Providers/IRemoteImageProvider.cs | 16 +- .../Providers/IRemoteMetadataProvider.cs | 12 +- .../QuickConnect/IQuickConnect.cs | 12 +- .../Resolvers/IResolverIgnoreRule.cs | 6 +- .../Resolvers/ItemResolver.cs | 6 +- .../Security/IAuthenticationManager.cs | 6 +- .../Session/SessionInfo.cs | 28 +- .../Sorting/IBaseItemComparer.cs | 8 +- .../Sorting/IUserBaseItemComparer.cs | 10 +- .../Streaming/ProgressiveFileStream.cs | 4 +- .../Streaming/StreamState.cs | 4 +- .../Streaming/StreamingRequestDto.cs | 4 +- .../SubtitleDownloadFailureEventArgs.cs | 10 +- .../SyncPlay/GroupMember.cs | 10 +- .../GroupStates/AbstractGroupState.cs | 16 +- .../SyncPlay/GroupStates/IdleGroupState.cs | 16 +- .../SyncPlay/GroupStates/PausedGroupState.cs | 18 +- .../SyncPlay/GroupStates/PlayingGroupState.cs | 18 +- .../SyncPlay/GroupStates/WaitingGroupState.cs | 18 +- .../SyncPlay/IGroupPlaybackRequest.cs | 12 +- .../SyncPlay/IGroupState.cs | 14 +- .../SyncPlay/IGroupStateContext.cs | 20 +- .../SyncPlay/ISyncPlayManager.cs | 18 +- .../SyncPlay/ISyncPlayRequest.cs | 4 +- .../AbstractPlaybackRequest.cs | 12 +- .../PlaybackRequests/BufferGroupRequest.cs | 14 +- .../IgnoreWaitGroupRequest.cs | 12 +- .../MovePlaylistItemGroupRequest.cs | 14 +- .../PlaybackRequests/NextItemGroupRequest.cs | 14 +- .../PlaybackRequests/PauseGroupRequest.cs | 12 +- .../PlaybackRequests/PingGroupRequest.cs | 12 +- .../PlaybackRequests/PlayGroupRequest.cs | 16 +- .../PreviousItemGroupRequest.cs | 14 +- .../PlaybackRequests/QueueGroupRequest.cs | 16 +- .../PlaybackRequests/ReadyGroupRequest.cs | 14 +- .../RemoveFromPlaylistGroupRequest.cs | 16 +- .../PlaybackRequests/SeekGroupRequest.cs | 12 +- .../SetPlaylistItemGroupRequest.cs | 14 +- .../SetRepeatModeGroupRequest.cs | 12 +- .../SetShuffleModeGroupRequest.cs | 12 +- .../PlaybackRequests/StopGroupRequest.cs | 8 +- .../PlaybackRequests/UnpauseGroupRequest.cs | 8 +- .../SyncPlay/Queue/PlayQueueManager.cs | 16 +- .../SyncPlay/Requests/JoinGroupRequest.cs | 6 +- .../SyncPlay/Requests/LeaveGroupRequest.cs | 4 +- .../SyncPlay/Requests/ListGroupsRequest.cs | 4 +- .../SyncPlay/Requests/NewGroupRequest.cs | 4 +- .../SystemBackupService/BackupManifestDto.cs | 4 +- .../SystemBackupService/BackupOptionsDto.cs | 4 +- .../BackupRestoreRequestDto.cs | 4 +- .../SystemBackupService/IBackupService.cs | 4 +- .../Trickplay/ITrickplayManager.cs | 4 +- ....Controller.csproj.AssemblyReference.cache | Bin 11322 -> 17115 bytes MediaBrowser.LocalMetadata/BaseXmlProvider.cs | 14 +- .../CollectionFolderLocalImageProvider.cs | 10 +- .../Images/EpisodeLocalImageProvider.cs | 22 +- .../InternalMetadataFolderImageProvider.cs | 18 +- .../Images/LocalImageProvider.cs | 28 +- .../Parsers/BaseItemXmlParser.cs | 34 +- .../Parsers/BoxSetXmlParser.cs | 14 +- .../Parsers/PlaylistXmlParser.cs | 20 +- .../Providers/BoxSetXmlProvider.cs | 16 +- .../Providers/PlaylistXmlProvider.cs | 16 +- .../Savers/BaseXmlSaver.cs | 38 +- .../Savers/BoxSetXmlSaver.cs | 20 +- .../Savers/PlaylistXmlSaver.cs | 22 +- ...calMetadata.csproj.AssemblyReference.cache | Bin 11322 -> 17375 bytes .../Attachments/AttachmentExtractor.cs | 38 +- .../BdInfo/BdInfoDirectoryInfo.cs | 4 +- .../BdInfo/BdInfoExaminer.cs | 4 +- .../BdInfo/BdInfoFileInfo.cs | 4 +- .../Probing/FFProbeHelpers.cs | 8 +- .../Probing/InternalMediaInfoResult.cs | 10 +- .../Probing/MediaFormatInfo.cs | 10 +- .../Probing/MediaFrameInfo.cs | 4 +- .../Probing/MediaFrameSideDataInfo.cs | 4 +- .../Probing/MediaStreamInfo.cs | 10 +- .../Probing/MediaStreamInfoSideData.cs | 4 +- .../Probing/ProbeResultNormalizer.cs | 40 +- .../Subtitles/AssWriter.cs | 16 +- .../Subtitles/ISubtitleWriter.cs | 8 +- .../Subtitles/JsonWriter.cs | 10 +- .../Subtitles/SrtWriter.cs | 16 +- .../Subtitles/SsaWriter.cs | 16 +- .../Subtitles/SubtitleEditParser.cs | 22 +- .../Subtitles/SubtitleFormatExtensions.cs | 4 +- .../Subtitles/TtmlWriter.cs | 12 +- .../Subtitles/VttWriter.cs | 14 +- .../Transcoding/TranscodeManager.cs | 4 +- ...diaEncoding.csproj.AssemblyReference.cache | Bin 14921 -> 20974 bytes .../Activity/ActivityLogEntry.cs | 146 +- .../Activity/IActivityManager.cs | 8 +- .../ApiClient/ServerDiscoveryInfo.cs | 76 +- .../Channels/ChannelFeatures.cs | 144 +- .../Channels/ChannelFolderType.cs | 22 +- .../Channels/ChannelItemSortField.cs | 24 +- .../Channels/ChannelMediaContentType.cs | 26 +- .../Channels/ChannelMediaType.cs | 16 +- MediaBrowser.Model/Channels/ChannelQuery.cs | 84 +- .../Collections/CollectionCreationResult.cs | 14 +- .../BaseApplicationConfiguration.cs | 112 +- .../Configuration/EmbeddedSubtitleOptions.cs | 48 +- .../Configuration/EncodingOptions.cs | 4 +- .../Configuration/HlsAudioSeekStrategy.cs | 42 +- .../Configuration/ImageOption.cs | 48 +- .../Configuration/ImageSavingConvention.cs | 14 +- .../Configuration/LibraryOptions.cs | 202 +- .../Configuration/MediaPathInfo.cs | 30 +- .../Configuration/MetadataConfiguration.cs | 20 +- .../Configuration/MetadataOptions.cs | 50 +- .../Configuration/MetadataPlugin.cs | 30 +- .../Configuration/MetadataPluginSummary.cs | 52 +- .../Configuration/MetadataPluginType.cs | 34 +- .../Configuration/PathSubstitution.cs | 32 +- .../Configuration/ServerConfiguration.cs | 14 +- .../Configuration/TrickplayOptions.cs | 6 +- .../Configuration/TypeOptions.cs | 628 +- .../Configuration/UserConfiguration.cs | 110 +- .../Configuration/XbmcMetadataOptions.cs | 28 +- MediaBrowser.Model/Cryptography/Constants.cs | 40 +- .../Cryptography/ICryptoProvider.cs | 32 +- .../Cryptography/PasswordHash.cs | 351 +- MediaBrowser.Model/Devices/DeviceInfo.cs | 8 +- MediaBrowser.Model/Dlna/CodecProfile.cs | 71 +- MediaBrowser.Model/Dlna/CodecType.cs | 16 +- MediaBrowser.Model/Dlna/ConditionProcessor.cs | 19 +- MediaBrowser.Model/Dlna/ContainerProfile.cs | 6 +- MediaBrowser.Model/Dlna/DeviceProfile.cs | 2 +- MediaBrowser.Model/Dlna/DirectPlayProfile.cs | 6 +- MediaBrowser.Model/Dlna/DlnaProfileType.cs | 20 +- MediaBrowser.Model/Dlna/EncodingContext.cs | 14 +- MediaBrowser.Model/Dlna/ITranscoderSupport.cs | 16 +- MediaBrowser.Model/Dlna/MediaOptions.cs | 238 +- MediaBrowser.Model/Dlna/PlaybackErrorCode.cs | 16 +- MediaBrowser.Model/Dlna/ProfileCondition.cs | 58 +- .../Dlna/ProfileConditionType.cs | 20 +- .../Dlna/ProfileConditionValue.cs | 60 +- .../Dlna/ResolutionConfiguration.cs | 29 +- .../Dlna/ResolutionNormalizer.cs | 153 +- MediaBrowser.Model/Dlna/ResolutionOptions.cs | 14 +- MediaBrowser.Model/Dlna/StreamBuilder.cs | 72 +- MediaBrowser.Model/Dlna/StreamInfo.cs | 16 +- .../Dlna/SubtitleDeliveryMethod.cs | 56 +- MediaBrowser.Model/Dlna/SubtitleProfile.cs | 6 +- MediaBrowser.Model/Dlna/SubtitleStreamInfo.cs | 28 +- MediaBrowser.Model/Dlna/TranscodeSeekInfo.cs | 14 +- MediaBrowser.Model/Dlna/TranscodingProfile.cs | 10 +- MediaBrowser.Model/Drawing/DrawingUtils.cs | 222 +- MediaBrowser.Model/Drawing/ImageDimensions.cs | 74 +- MediaBrowser.Model/Drawing/ImageFormat.cs | 64 +- .../Drawing/ImageFormatExtensions.cs | 10 +- .../Drawing/ImageOrientation.cs | 26 +- MediaBrowser.Model/Drawing/ImageResolution.cs | 2 +- MediaBrowser.Model/Dto/BaseItemDto.cs | 1572 ++- MediaBrowser.Model/Dto/BaseItemPerson.cs | 102 +- .../Dto/ClientCapabilitiesDto.cs | 10 +- MediaBrowser.Model/Dto/DeviceInfoDto.cs | 4 +- .../Dto/DisplayPreferencesDto.cs | 180 +- MediaBrowser.Model/Dto/IHasServerId.cs | 12 +- MediaBrowser.Model/Dto/IItemDto.cs | 26 +- MediaBrowser.Model/Dto/ImageInfo.cs | 96 +- MediaBrowser.Model/Dto/ItemCounts.cs | 152 +- MediaBrowser.Model/Dto/MediaSourceInfo.cs | 402 +- MediaBrowser.Model/Dto/MediaSourceType.cs | 16 +- MediaBrowser.Model/Dto/MetadataEditorInfo.cs | 6 +- MediaBrowser.Model/Dto/NameGuidPair.cs | 16 +- MediaBrowser.Model/Dto/NameIdPair.cs | 30 +- MediaBrowser.Model/Dto/NameValuePair.cs | 46 +- MediaBrowser.Model/Dto/PlaylistDto.cs | 8 +- MediaBrowser.Model/Dto/RatingType.cs | 14 +- MediaBrowser.Model/Dto/RecommendationDto.cs | 22 +- MediaBrowser.Model/Dto/RecommendationType.cs | 22 +- MediaBrowser.Model/Dto/SessionInfoDto.cs | 8 +- MediaBrowser.Model/Dto/TrickplayInfoDto.cs | 6 +- .../Dto/UpdateUserItemDataDto.cs | 128 +- MediaBrowser.Model/Dto/UserDto.cs | 196 +- MediaBrowser.Model/Dto/UserItemDataDto.cs | 128 +- MediaBrowser.Model/Entities/ChapterInfo.cs | 52 +- .../Entities/CollectionTypeOptions.cs | 2 +- .../Entities/DeinterlaceMethod.cs | 2 +- .../Entities/DownMixStereoAlgorithms.cs | 2 +- MediaBrowser.Model/Entities/EncoderPreset.cs | 2 +- MediaBrowser.Model/Entities/ExtraType.cs | 34 +- .../Entities/HardwareAccelerationType.cs | 2 +- .../Entities/IHasProviderIds.cs | 28 +- MediaBrowser.Model/Entities/IHasShares.cs | 4 +- MediaBrowser.Model/Entities/ImageType.cs | 128 +- MediaBrowser.Model/Entities/IsoType.cs | 32 +- .../Entities/LibraryUpdateInfo.cs | 96 +- MediaBrowser.Model/Entities/LocationType.cs | 48 +- MediaBrowser.Model/Entities/MediaStream.cs | 1474 +- .../Entities/MediaStreamType.cs | 64 +- MediaBrowser.Model/Entities/MediaUrl.cs | 14 +- MediaBrowser.Model/Entities/MetadataField.cs | 88 +- .../Entities/MetadataProvider.cs | 154 +- .../Entities/ParentalRatingEntry.cs | 6 +- .../Entities/ParentalRatingScore.cs | 4 +- .../Entities/ParentalRatingSystem.cs | 6 +- MediaBrowser.Model/Entities/PersonType.cs | 112 +- .../Entities/PlaylistUserPermissions.cs | 4 +- .../Entities/ProviderIdsExtensions.cs | 11 +- MediaBrowser.Model/Entities/SeriesStatus.cs | 40 +- .../Entities/TonemappingAlgorithm.cs | 2 +- .../Entities/TonemappingMode.cs | 2 +- .../Entities/TonemappingRange.cs | 2 +- MediaBrowser.Model/Entities/TrailerType.cs | 20 +- .../Entities/UserDataSaveReason.cs | 72 +- MediaBrowser.Model/Entities/Video3DFormat.cs | 20 +- MediaBrowser.Model/Entities/VideoType.cs | 48 +- .../Entities/VirtualFolderInfo.cs | 88 +- .../Extensions/ContainerHelper.cs | 8 +- .../Extensions/EnumerableExtensions.cs | 100 +- .../Extensions/LibraryOptionsExtension.cs | 8 +- MediaBrowser.Model/Extensions/StringHelper.cs | 68 +- MediaBrowser.Model/GlobalSuppressions.cs | 22 + .../Globalization/CountryInfo.cs | 56 +- .../Globalization/CultureDto.cs | 96 +- .../Globalization/ILocalizationManager.cs | 8 +- .../Globalization/LocalizationOption.cs | 24 +- MediaBrowser.Model/IO/AsyncFile.cs | 94 +- MediaBrowser.Model/IO/FileSystemEntryInfo.cs | 70 +- MediaBrowser.Model/IO/FileSystemEntryType.cs | 48 +- MediaBrowser.Model/IO/FileSystemMetadata.cs | 92 +- MediaBrowser.Model/IO/IFileSystem.cs | 414 +- MediaBrowser.Model/IO/IODefaults.cs | 42 +- MediaBrowser.Model/IO/IShortcutHandler.cs | 44 +- MediaBrowser.Model/IO/IStreamHelper.cs | 24 +- MediaBrowser.Model/Library/PlayAccess.cs | 14 +- MediaBrowser.Model/Library/UserViewQuery.cs | 54 +- MediaBrowser.Model/LiveTv/BaseTimerInfoDto.cs | 204 +- .../LiveTv/ChannelMappingOptionsDto.cs | 8 +- MediaBrowser.Model/LiveTv/ChannelType.cs | 32 +- MediaBrowser.Model/LiveTv/DayPattern.cs | 16 +- MediaBrowser.Model/LiveTv/GuideInfo.cs | 32 +- .../LiveTv/ListingsProviderInfo.cs | 68 +- .../LiveTv/LiveTvChannelQuery.cs | 174 +- MediaBrowser.Model/LiveTv/LiveTvInfo.cs | 52 +- MediaBrowser.Model/LiveTv/LiveTvOptions.cs | 56 +- .../LiveTv/LiveTvServiceInfo.cs | 98 +- .../LiveTv/LiveTvServiceStatus.cs | 14 +- MediaBrowser.Model/LiveTv/ProgramAudio.cs | 22 +- MediaBrowser.Model/LiveTv/RecordingQuery.cs | 136 +- MediaBrowser.Model/LiveTv/RecordingStatus.cs | 24 +- .../LiveTv/SeriesTimerInfoDto.cs | 150 +- MediaBrowser.Model/LiveTv/SeriesTimerQuery.cs | 30 +- MediaBrowser.Model/LiveTv/TimerInfoDto.cs | 68 +- MediaBrowser.Model/LiveTv/TimerQuery.cs | 36 +- MediaBrowser.Model/LiveTv/TunerHostInfo.cs | 60 +- MediaBrowser.Model/Lyrics/LyricDto.cs | 4 +- MediaBrowser.Model/Lyrics/LyricLine.cs | 4 +- MediaBrowser.Model/Lyrics/LyricResponse.cs | 4 +- .../Lyrics/LyricSearchRequest.cs | 8 +- MediaBrowser.Model/Lyrics/UploadLyricDto.cs | 6 +- MediaBrowser.Model/MediaInfo/AudioCodec.cs | 52 +- .../MediaInfo/AudioIndexSource.cs | 6 +- .../MediaInfo/BlurayDiscInfo.cs | 4 +- .../MediaInfo/LiveStreamRequest.cs | 56 +- .../MediaInfo/LiveStreamResponse.cs | 20 +- MediaBrowser.Model/MediaInfo/MediaInfo.cs | 124 +- MediaBrowser.Model/MediaInfo/MediaProtocol.cs | 24 +- .../MediaInfo/PlaybackInfoResponse.cs | 68 +- .../MediaInfo/SubtitleFormat.cs | 24 +- .../MediaInfo/SubtitleTrackEvent.cs | 28 +- .../MediaInfo/SubtitleTrackInfo.cs | 24 +- .../MediaInfo/TransportStreamTimestamp.cs | 16 +- .../MediaSegments/MediaSegmentDto.cs | 8 +- .../MediaSegmentGenerationRequest.cs | 10 +- MediaBrowser.Model/Net/EndPointInfo.cs | 14 +- MediaBrowser.Model/Net/IPData.cs | 6 +- MediaBrowser.Model/Net/ISocketFactory.cs | 6 +- MediaBrowser.Model/Net/MimeTypes.cs | 348 +- .../Notifications/NotificationType.cs | 40 +- .../Playlists/PlaylistCreationRequest.cs | 8 +- .../Playlists/PlaylistCreationResult.cs | 24 +- .../Playlists/PlaylistUpdateRequest.cs | 8 +- .../Playlists/PlaylistUserUpdateRequest.cs | 4 +- .../Plugins/BasePluginConfiguration.cs | 16 +- MediaBrowser.Model/Plugins/IHasWebPages.cs | 18 +- MediaBrowser.Model/Plugins/PluginInfo.cs | 114 +- MediaBrowser.Model/Plugins/PluginPageInfo.cs | 64 +- MediaBrowser.Model/Plugins/PluginStatus.cs | 88 +- .../Providers/ExternalIdInfo.cs | 80 +- .../Providers/ExternalIdMediaType.cs | 134 +- MediaBrowser.Model/Providers/ExternalUrl.cs | 30 +- .../Providers/ImageProviderInfo.cs | 56 +- .../Providers/RemoteImageInfo.cs | 118 +- .../Providers/RemoteImageQuery.cs | 30 +- .../Providers/RemoteImageResult.cs | 46 +- .../Providers/RemoteLyricInfo.cs | 4 +- .../Providers/RemoteSearchResult.cs | 75 +- .../Providers/RemoteSubtitleInfo.cs | 44 +- .../Providers/SubtitleOptions.cs | 45 +- .../Providers/SubtitleProviderInfo.cs | 14 +- .../Querying/AllThemeMediaResult.cs | 31 +- MediaBrowser.Model/Querying/ItemFields.cs | 408 +- MediaBrowser.Model/Querying/ItemFilter.cs | 88 +- .../Querying/LatestItemsQuery.cs | 135 +- MediaBrowser.Model/Querying/NextUpQuery.cs | 5 +- MediaBrowser.Model/Querying/QueryFilters.cs | 29 +- .../Querying/QueryFiltersLegacy.cs | 37 +- MediaBrowser.Model/Querying/QueryResult.cs | 6 +- .../Querying/ThemeMediaResult.cs | 30 +- .../QuickConnect/QuickConnectResult.cs | 136 +- MediaBrowser.Model/Search/SearchHint.cs | 338 +- MediaBrowser.Model/Search/SearchHintResult.cs | 58 +- MediaBrowser.Model/Search/SearchQuery.cs | 105 +- .../Serialization/IXmlSerializer.cs | 80 +- MediaBrowser.Model/Session/BrowseRequest.cs | 50 +- .../Session/ClientCapabilities.cs | 43 +- MediaBrowser.Model/Session/GeneralCommand.cs | 13 +- .../Session/GeneralCommandType.cs | 102 +- MediaBrowser.Model/Session/MessageCommand.cs | 20 +- MediaBrowser.Model/Session/PlayCommand.cs | 56 +- MediaBrowser.Model/Session/PlayMethod.cs | 16 +- MediaBrowser.Model/Session/PlayRequest.cs | 66 +- MediaBrowser.Model/Session/PlaybackOrder.cs | 32 +- .../Session/PlaybackProgressInfo.cs | 188 +- .../Session/PlaybackStartInfo.cs | 16 +- .../Session/PlaybackStopInfo.cs | 104 +- MediaBrowser.Model/Session/PlayerStateInfo.cs | 130 +- .../Session/PlaystateCommand.cs | 88 +- .../Session/PlaystateRequest.cs | 24 +- MediaBrowser.Model/Session/QueueItem.cs | 2 +- MediaBrowser.Model/Session/RepeatMode.cs | 16 +- .../Session/SessionMessageType.cs | 90 +- MediaBrowser.Model/Session/SessionUserInfo.cs | 38 +- MediaBrowser.Model/Session/TranscodeReason.cs | 78 +- MediaBrowser.Model/Session/TranscodingInfo.cs | 4 +- .../Session/UserDataChangeInfo.cs | 40 +- MediaBrowser.Model/Subtitles/FontFile.cs | 58 +- MediaBrowser.Model/SyncPlay/GroupInfoDto.cs | 102 +- MediaBrowser.Model/SyncPlay/GroupQueueMode.cs | 32 +- .../SyncPlay/GroupRepeatMode.cs | 40 +- .../SyncPlay/GroupShuffleMode.cs | 32 +- MediaBrowser.Model/SyncPlay/GroupStateType.cs | 48 +- .../SyncPlay/GroupStateUpdate.cs | 56 +- MediaBrowser.Model/SyncPlay/GroupUpdate.cs | 4 +- .../SyncPlay/GroupUpdateType.cs | 88 +- .../SyncPlay/PlayQueueUpdate.cs | 144 +- .../SyncPlay/PlayQueueUpdateReason.cs | 96 +- .../SyncPlay/PlaybackRequestType.cs | 166 +- MediaBrowser.Model/SyncPlay/RequestType.cs | 56 +- MediaBrowser.Model/SyncPlay/SendCommand.cs | 114 +- .../SyncPlay/SendCommandType.cs | 48 +- .../SyncPlay/SyncPlayBroadcastType.cs | 48 +- .../SyncPlayGroupDoesNotExistUpdate.cs | 8 +- .../SyncPlay/SyncPlayGroupJoinedUpdate.cs | 8 +- .../SyncPlay/SyncPlayGroupLeftUpdate.cs | 8 +- .../SyncPlayLibraryAccessDeniedUpdate.cs | 8 +- .../SyncPlay/SyncPlayNotInGroupUpdate.cs | 8 +- .../SyncPlay/SyncPlayPlayQueueUpdate.cs | 8 +- .../SyncPlay/SyncPlayQueueItem.cs | 54 +- .../SyncPlay/SyncPlayStateUpdate.cs | 8 +- .../SyncPlay/SyncPlayUserJoinedUpdate.cs | 8 +- .../SyncPlay/SyncPlayUserLeftUpdate.cs | 8 +- .../SyncPlay/UtcTimeResponse.cs | 58 +- .../System/LibraryStorageInfo.cs | 6 +- MediaBrowser.Model/System/LogFile.cs | 52 +- MediaBrowser.Model/System/PublicSystemInfo.cs | 88 +- MediaBrowser.Model/System/SystemInfo.cs | 6 +- .../System/SystemStorageInfo.cs | 4 +- .../Tasks/IConfigurableScheduledTask.cs | 46 +- MediaBrowser.Model/Tasks/IScheduledTask.cs | 86 +- .../Tasks/IScheduledTaskWorker.cs | 128 +- MediaBrowser.Model/Tasks/ITaskManager.cs | 184 +- MediaBrowser.Model/Tasks/ITaskTrigger.cs | 60 +- .../Tasks/ScheduledTaskHelpers.cs | 70 +- .../Tasks/TaskCompletionEventArgs.cs | 58 +- .../Tasks/TaskCompletionStatus.cs | 48 +- MediaBrowser.Model/Tasks/TaskInfo.cs | 134 +- MediaBrowser.Model/Tasks/TaskOptions.cs | 26 +- MediaBrowser.Model/Tasks/TaskResult.cs | 98 +- MediaBrowser.Model/Tasks/TaskState.cs | 40 +- MediaBrowser.Model/Tasks/TaskTriggerInfo.cs | 68 +- .../Tasks/TaskTriggerInfoType.cs | 48 +- .../Updates/InstallationInfo.cs | 92 +- MediaBrowser.Model/Updates/PackageInfo.cs | 142 +- MediaBrowser.Model/Updates/RepositoryInfo.cs | 46 +- MediaBrowser.Model/Updates/VersionInfo.cs | 130 +- .../Users/ForgotPasswordAction.cs | 22 +- .../Users/ForgotPasswordResult.cs | 42 +- MediaBrowser.Model/Users/PinRedeemResult.cs | 32 +- MediaBrowser.Model/Users/UserPolicy.cs | 256 +- .../Debug/net10.0/Jellyfin.CodeAnalysis.dll | Bin 0 -> 8704 bytes .../Debug/net10.0/Jellyfin.CodeAnalysis.pdb | Bin 0 -> 9652 bytes .../Debug/net10.0/Jellyfin.CodeAnalysis.xml | 24 + .../bin/Debug/net10.0/Jellyfin.Data.dll | Bin 0 -> 18944 bytes .../bin/Debug/net10.0/Jellyfin.Data.pdb | Bin 0 -> 17540 bytes .../bin/Debug/net10.0/Jellyfin.Data.xml | 1198 ++ .../Jellyfin.Database.Implementations.dll | Bin 0 -> 218624 bytes .../Jellyfin.Database.Implementations.pdb | Bin 0 -> 66792 bytes .../Jellyfin.Database.Implementations.xml | 4686 +++++++ .../bin/Debug/net10.0/Jellyfin.Extensions.dll | Bin 0 -> 33280 bytes .../bin/Debug/net10.0/Jellyfin.Extensions.pdb | Bin 0 -> 26092 bytes .../bin/Debug/net10.0/Jellyfin.Extensions.xml | 716 + .../net10.0/MediaBrowser.Model.deps.json | 396 + .../bin/Debug/net10.0/MediaBrowser.Model.dll | Bin 0 -> 505344 bytes .../bin/Debug/net10.0/MediaBrowser.Model.pdb | Bin 0 -> 181512 bytes .../bin/Debug/net10.0/MediaBrowser.Model.xml | 11272 ++++++++++++++++ .../Debug/net10.0/MediaBro.1E970F38.Up2Date | 0 ...owser.Model.csproj.AssemblyReference.cache | Bin 12434 -> 13707 bytes ...owser.Model.csproj.CoreCompileInputs.cache | 2 +- ...aBrowser.Model.csproj.FileListAbsolute.txt | 22 + .../obj/Debug/net10.0/MediaBrowser.Model.dll | Bin 0 -> 505344 bytes .../obj/Debug/net10.0/MediaBrowser.Model.pdb | Bin 0 -> 181512 bytes .../obj/Debug/net10.0/MediaBrowser.Model.xml | 227 +- .../Debug/net10.0/ref/MediaBrowser.Model.dll | Bin 0 -> 226304 bytes .../net10.0/refint/MediaBrowser.Model.dll | Bin 0 -> 226304 bytes .../Books/AudioBookMetadataService.cs | 4 +- .../Books/BookMetadataService.cs | 4 +- .../OpenPackagingFormat/EpubImageProvider.cs | 24 +- .../Books/OpenPackagingFormat/EpubProvider.cs | 22 +- .../Books/OpenPackagingFormat/EpubUtils.cs | 10 +- .../Books/OpenPackagingFormat/OpfProvider.cs | 18 +- .../Books/OpenPackagingFormat/OpfReader.cs | 26 +- .../BoxSets/BoxSetMetadataService.cs | 4 +- .../Channels/ChannelMetadataService.cs | 4 +- .../CollectionFolderMetadataService.cs | 4 +- .../Folders/FolderMetadataService.cs | 4 +- .../Folders/UserViewMetadataService.cs | 4 +- .../Genres/GenreMetadataService.cs | 4 +- .../LiveTv/LiveTvMetadataService.cs | 4 +- .../Lyric/LrcLyricParser.cs | 4 +- MediaBrowser.Providers/Lyric/LyricManager.cs | 4 +- .../Lyric/LyricScheduledTask.cs | 4 +- .../Lyric/TxtLyricParser.cs | 4 +- .../Manager/ItemImageProvider.cs | 52 +- .../Manager/ProviderManager.cs | 84 +- .../MediaInfo/AudioFileProber.cs | 48 +- .../MediaInfo/AudioResolver.cs | 16 +- .../MediaInfo/EmbeddedImageProvider.cs | 42 +- .../MediaInfo/LyricResolver.cs | 4 +- .../MediaInfo/MediaInfoResolver.cs | 40 +- .../MediaInfo/ProbeProvider.cs | 54 +- .../MediaInfo/SubtitleResolver.cs | 16 +- .../Movies/ImdbExternalUrlProvider.cs | 4 +- .../Movies/MovieMetadataService.cs | 4 +- .../Movies/TrailerMetadataService.cs | 4 +- .../Music/AlbumMetadataService.cs | 4 +- .../Music/ArtistMetadataService.cs | 4 +- .../Music/AudioMetadataService.cs | 4 +- .../Music/MusicVideoMetadataService.cs | 4 +- .../MusicGenres/MusicGenreMetadataService.cs | 4 +- .../People/PersonMetadataService.cs | 4 +- .../Photos/PhotoAlbumMetadataService.cs | 4 +- .../Photos/PhotoMetadataService.cs | 4 +- .../Playlists/PlaylistItemsProvider.cs | 4 +- .../Playlists/PlaylistMetadataService.cs | 4 +- .../AudioDbAlbumExternalUrlProvider.cs | 4 +- .../AudioDbArtistExternalUrlProvider.cs | 4 +- .../Configuration/PluginConfiguration.cs | 4 +- .../MusicBrainzAlbumArtistExternalId.cs | 4 +- ...sicBrainzAlbumArtistExternalUrlProvider.cs | 4 +- .../MusicBrainz/MusicBrainzAlbumExternalId.cs | 4 +- .../MusicBrainzAlbumExternalUrlProvider.cs | 4 +- .../MusicBrainz/MusicBrainzAlbumProvider.cs | 4 +- .../MusicBrainzArtistExternalId.cs | 4 +- .../MusicBrainzArtistExternalUrlProvider.cs | 4 +- .../MusicBrainz/MusicBrainzArtistProvider.cs | 4 +- .../MusicBrainzOtherArtistExternalId.cs | 4 +- .../MusicBrainz/MusicBrainzRecordingId.cs | 4 +- .../MusicBrainzReleaseGroupExternalId.cs | 4 +- ...icBrainzReleaseGroupExternalUrlProvider.cs | 4 +- .../MusicBrainzTrackExternalUrlProvider.cs | 4 +- .../Plugins/MusicBrainz/MusicBrainzTrackId.cs | 4 +- .../Plugins/MusicBrainz/Plugin.cs | 4 +- .../JsonOmdbNotAvailableInt32Converter.cs | 10 +- .../JsonOmdbNotAvailableStringConverter.cs | 10 +- .../Configuration/PluginConfiguration.cs | 4 +- .../Plugins/StudioImages/Plugin.cs | 20 +- .../StudioImages/StudiosImageProvider.cs | 38 +- .../Plugins/Tmdb/Api/TmdbController.cs | 14 +- .../Tmdb/BoxSets/TmdbBoxSetExternalId.cs | 12 +- .../Tmdb/BoxSets/TmdbBoxSetImageProvider.cs | 28 +- .../Tmdb/BoxSets/TmdbBoxSetProvider.cs | 28 +- .../Tmdb/Configuration/PluginConfiguration.cs | 4 +- .../Tmdb/Movies/TmdbMovieExternalId.cs | 12 +- .../Tmdb/Movies/TmdbMovieImageProvider.cs | 30 +- .../Plugins/Tmdb/Movies/TmdbMovieProvider.cs | 38 +- .../Tmdb/People/TmdbPersonExternalId.cs | 10 +- .../Tmdb/People/TmdbPersonImageProvider.cs | 24 +- .../Plugins/Tmdb/People/TmdbPersonProvider.cs | 24 +- MediaBrowser.Providers/Plugins/Tmdb/Plugin.cs | 18 +- .../Tmdb/TV/TmdbEpisodeImageProvider.cs | 26 +- .../Plugins/Tmdb/TV/TmdbEpisodeProvider.cs | 36 +- .../Tmdb/TV/TmdbSeasonImageProvider.cs | 28 +- .../Plugins/Tmdb/TV/TmdbSeasonProvider.cs | 32 +- .../Plugins/Tmdb/TV/TmdbSeriesExternalId.cs | 10 +- .../Tmdb/TV/TmdbSeriesImageProvider.cs | 28 +- .../Plugins/Tmdb/TV/TmdbSeriesProvider.cs | 40 +- .../Plugins/Tmdb/TmdbClientManager.cs | 38 +- .../Plugins/Tmdb/TmdbExternalUrlProvider.cs | 4 +- .../Plugins/Tmdb/TmdbUtils.cs | 16 +- .../Studios/StudioMetadataService.cs | 4 +- .../TV/EpisodeMetadataService.cs | 4 +- .../TV/SeasonMetadataService.cs | 4 +- .../TV/SeriesMetadataService.cs | 4 +- .../TV/Zap2ItExternalUrlProvider.cs | 4 +- .../Trickplay/TrickplayImagesTask.cs | 4 +- .../Trickplay/TrickplayMoveImagesTask.cs | 4 +- .../Trickplay/TrickplayProvider.cs | 4 +- .../Videos/VideoMetadataService.cs | 4 +- .../Years/YearMetadataService.cs | 4 +- ...r.Providers.csproj.AssemblyReference.cache | Bin 17058 -> 21311 bytes MediaBrowser.XbmcMetadata/NfoUserDataSaver.cs | 4 +- .../Parsers/BaseNfoParser.cs | 46 +- .../Parsers/EpisodeNfoParser.cs | 24 +- .../Parsers/MovieNfoParser.cs | 26 +- .../Parsers/SeasonNfoParser.cs | 16 +- .../Parsers/SeriesNfoParser.cs | 24 +- .../Parsers/SeriesNfoSeasonParser.cs | 16 +- .../Providers/AlbumNfoProvider.cs | 20 +- .../Providers/ArtistNfoProvider.cs | 20 +- .../Providers/EpisodeNfoProvider.cs | 20 +- .../Providers/MovieNfoProvider.cs | 14 +- .../Providers/MusicVideoNfoProvider.cs | 14 +- .../Providers/SeasonNfoProvider.cs | 20 +- .../Providers/SeriesNfoProvider.cs | 20 +- .../Providers/SeriesNfoSeasonProvider.cs | 20 +- .../Providers/VideoNfoProvider.cs | 14 +- .../Savers/AlbumNfoSaver.cs | 28 +- .../Savers/ArtistNfoSaver.cs | 26 +- .../Savers/EpisodeNfoSaver.cs | 24 +- .../Savers/MovieNfoSaver.cs | 30 +- .../Savers/SeasonNfoSaver.cs | 22 +- .../Savers/SeriesNfoSaver.cs | 24 +- ...bmcMetadata.csproj.AssemblyReference.cache | Bin 11322 -> 17375 bytes build_warnings.txt | Bin 0 -> 1608 bytes editorconfig_new.txt | 28 + .../netstandard2.0/Jellyfin.CodeAnalysis.dll | Bin 8704 -> 8704 bytes .../netstandard2.0/Jellyfin.CodeAnalysis.pdb | Bin 9652 -> 9652 bytes .../Jellyfin.CodeAnalysis.AssemblyInfo.cs | 3 +- ...yfin.CodeAnalysis.AssemblyInfoInputs.cache | 2 +- ...odeAnalysis.csproj.AssemblyReference.cache | Bin 79822 -> 63428 bytes .../netstandard2.0/Jellyfin.CodeAnalysis.dll | Bin 8704 -> 8704 bytes .../netstandard2.0/Jellyfin.CodeAnalysis.pdb | Bin 9652 -> 9652 bytes .../Debug/net10.0/Jellyfin.CodeAnalysis.dll | Bin 8704 -> 8704 bytes .../Debug/net10.0/Jellyfin.CodeAnalysis.pdb | Bin 9652 -> 9652 bytes .../Jellyfin.Database.Implementations.dll | Bin 218624 -> 218624 bytes .../Jellyfin.Database.Implementations.pdb | Bin 66792 -> 66792 bytes ...ementations.csproj.AssemblyReference.cache | Bin 14655 -> 11701 bytes .../Jellyfin.Database.Implementations.dll | Bin 218624 -> 218624 bytes .../Jellyfin.Database.Implementations.pdb | Bin 66792 -> 66792 bytes .../DoNotUseReturningClauseConvention.cs | 4 +- .../20230526173516_RemoveEasyPassword.cs | 4 +- .../20230626233818_AddTrickplayInfos.cs | 6 +- .../20230923170422_UserCastReceiver.cs | 4 +- .../20240729140605_AddMediaSegments.cs | 6 +- ...082930_MarkSegmentProviderIdNonNullable.cs | 4 +- .../20241020103111_LibraryDbMigration.cs | 6 +- .../20241111131257_AddedCustomDataKey.cs | 4 +- .../20241111135439_AddedCustomDataKeyKey.cs | 4 +- .../20241112152323_FixAncestorIdConfig.cs | 6 +- .../20241112232041_fixMediaStreams.cs | 4 +- .../20241112234144_FixMediaStreams2.cs | 4 +- .../20241113133548_EnforceUniqueItemValue.cs | 4 +- .../20250202021306_FixedCollation.cs | 4 +- ...20250204092455_MakeStartEndDateNullable.cs | 6 +- .../20250214031148_ChannelIdGuid.cs | 4 +- ...5026_AddInheritedParentalRatingSubValue.cs | 4 +- .../20250327101120_AddKeyframeData.cs | 6 +- .../20250327171413_AddHdr10PlusFlag.cs | 4 +- .../20250331182844_FixAttachmentMigration.cs | 4 +- .../Migrations/20250401142247_FixAncestors.cs | 4 +- .../20250405075612_FixItemValuesIndices.cs | 4 +- ...609115616_DetachUserDataInsteadOfDelete.cs | 6 +- ...2_BaseItemImageInfoDateModifiedNullable.cs | 6 +- .../20250714044826_ResetJournalMode.cs | 4 +- ...rParentChildRelationBaseItemWithCascade.cs | 4 +- .../20250925203415_ExtendPeopleMapKey.cs | 4 +- .../SqliteDesignTimeJellyfinDbFactory.cs | 12 +- .../ModelBuilderExtensions.cs | 4 +- .../PragmaConnectionInterceptor.cs | 4 +- .../DateTimeKindValueConverter.cs | 6 +- ...ders.Sqlite.csproj.AssemblyReference.cache | Bin 16171 -> 18442 bytes .../PercentPlayedDrawer.cs | 4 +- src/Jellyfin.Drawing.Skia/SkiaEncoder.cs | 4 +- src/Jellyfin.Drawing.Skia/SkiaExtensions.cs | 4 +- src/Jellyfin.Drawing.Skia/SkiaHelper.cs | 4 +- .../SplashscreenBuilder.cs | 4 +- .../StripCollageBuilder.cs | 4 +- .../UnplayedCountIndicator.cs | 4 +- ...rawing.Skia.csproj.AssemblyReference.cache | Bin 16138 -> 21931 bytes src/Jellyfin.Drawing/ImageProcessor.cs | 4 +- src/Jellyfin.Drawing/NullImageEncoder.cs | 4 +- ...fin.Drawing.csproj.AssemblyReference.cache | Bin 11847 -> 17900 bytes .../Debug/net10.0/Jellyfin.CodeAnalysis.dll | Bin 8704 -> 8704 bytes .../Debug/net10.0/Jellyfin.CodeAnalysis.pdb | Bin 9652 -> 9652 bytes .../bin/Debug/net10.0/Jellyfin.Extensions.dll | Bin 33280 -> 33280 bytes .../bin/Debug/net10.0/Jellyfin.Extensions.pdb | Bin 26092 -> 26092 bytes ....Extensions.csproj.AssemblyReference.cache | Bin 10892 -> 8691 bytes .../obj/Debug/net10.0/Jellyfin.Extensions.dll | Bin 33280 -> 33280 bytes .../obj/Debug/net10.0/Jellyfin.Extensions.pdb | Bin 26092 -> 26092 bytes .../ChannelDynamicMediaSourceProvider.cs | 20 +- .../Channels/ChannelImageProvider.cs | 18 +- .../Channels/ChannelManager.cs | 74 +- .../Channels/ChannelPostScanTask.cs | 20 +- .../Channels/RefreshChannelsScheduledTask.cs | 20 +- .../LiveTvConfigurationExtensions.cs | 4 +- .../LiveTvConfigurationFactory.cs | 4 +- .../LiveTvServiceCollectionExtensions.cs | 4 +- src/Jellyfin.LiveTv/Guide/GuideManager.cs | 4 +- .../Guide/RefreshGuideScheduledTask.cs | 4 +- .../Listings/ListingsManager.cs | 4 +- .../SchedulesDirectDtos/BroadcasterDto.cs | 4 +- .../SchedulesDirectDtos/CaptionDto.cs | 4 +- .../Listings/SchedulesDirectDtos/CastDto.cs | 4 +- .../SchedulesDirectDtos/ChannelDto.cs | 8 +- .../SchedulesDirectDtos/ContentRatingDto.cs | 4 +- .../Listings/SchedulesDirectDtos/CrewDto.cs | 4 +- .../Listings/SchedulesDirectDtos/DayDto.cs | 8 +- .../SchedulesDirectDtos/Description1000Dto.cs | 4 +- .../SchedulesDirectDtos/Description100Dto.cs | 4 +- .../DescriptionsProgramDto.cs | 8 +- .../SchedulesDirectDtos/EventDetailsDto.cs | 4 +- .../SchedulesDirectDtos/GracenoteDto.cs | 4 +- .../SchedulesDirectDtos/HeadendsDto.cs | 8 +- .../SchedulesDirectDtos/ImageDataDto.cs | 4 +- .../Listings/SchedulesDirectDtos/LineupDto.cs | 4 +- .../SchedulesDirectDtos/LineupsDto.cs | 8 +- .../Listings/SchedulesDirectDtos/LogoDto.cs | 4 +- .../Listings/SchedulesDirectDtos/MapDto.cs | 4 +- .../SchedulesDirectDtos/MetadataDto.cs | 4 +- .../MetadataProgramsDto.cs | 4 +- .../MetadataScheduleDto.cs | 6 +- .../Listings/SchedulesDirectDtos/MovieDto.cs | 8 +- .../SchedulesDirectDtos/MultipartDto.cs | 4 +- .../SchedulesDirectDtos/ProgramDetailsDto.cs | 8 +- .../SchedulesDirectDtos/ProgramDto.cs | 8 +- .../SchedulesDirectDtos/QualityRatingDto.cs | 4 +- .../Listings/SchedulesDirectDtos/RatingDto.cs | 4 +- .../SchedulesDirectDtos/RecommendationDto.cs | 4 +- .../RequestScheduleForChannelDto.cs | 8 +- .../SchedulesDirectDtos/ShowImagesDto.cs | 8 +- .../SchedulesDirectDtos/StationDto.cs | 8 +- .../Listings/SchedulesDirectDtos/TitleDto.cs | 4 +- .../Listings/SchedulesDirectDtos/TokenDto.cs | 6 +- .../Recordings/RecordingHelper.cs | 10 +- .../Recordings/RecordingNotifier.cs | 28 +- .../Recordings/RecordingsHost.cs | 4 +- .../Recordings/RecordingsManager.cs | 4 +- .../Recordings/RecordingsMetadataManager.cs | 4 +- .../TunerHosts/HdHomerun/DiscoverResponse.cs | 8 +- .../TunerHosts/TunerHostManager.cs | 4 +- .../net10.0/Jellyfin.LiveTv.AssemblyInfo.cs | 2 +- .../Jellyfin.LiveTv.AssemblyInfoInputs.cache | 2 +- ...yfin.LiveTv.csproj.AssemblyReference.cache | Bin 12190 -> 18243 bytes ...aEncodingHlsServiceCollectionExtensions.cs | 4 +- .../Extractors/FfProbeKeyframeExtractor.cs | 4 +- .../Extractors/IKeyframeExtractor.cs | 4 +- .../Extractors/MatroskaKeyframeExtractor.cs | 4 +- .../Playlist/CreateMainPlaylistRequest.cs | 4 +- .../Playlist/DynamicHlsPlaylistGenerator.cs | 4 +- .../KeyframeExtractionScheduledTask.cs | 4 +- ...Jellyfin.MediaEncoding.Hls.AssemblyInfo.cs | 2 +- ...MediaEncoding.Hls.AssemblyInfoInputs.cache | 2 +- ...ncoding.Hls.csproj.AssemblyReference.cache | Bin 11322 -> 15575 bytes .../FfProbe/FfProbeKeyframeExtractor.cs | 4 +- .../FfTool/FfToolKeyframeExtractor.cs | 4 +- .../KeyframeData.cs | 4 +- .../Extensions/EbmlReaderExtensions.cs | 4 +- .../Matroska/MatroskaKeyframeExtractor.cs | 4 +- ...in.MediaEncoding.Keyframes.AssemblyInfo.cs | 2 +- ...ncoding.Keyframes.AssemblyInfoInputs.cache | 2 +- ...g.Keyframes.csproj.AssemblyReference.cache | Bin 5913 -> 5801 bytes src/Jellyfin.Networking/AutoDiscoveryHost.cs | 4 +- .../HappyEyeballs/HttpClientExtension.cs | 4 +- .../Manager/NetworkManager.cs | 4 +- src/Jellyfin.Networking/Udp/SocketFactory.cs | 4 +- ....Networking.csproj.AssemblyReference.cache | Bin 11322 -> 17115 bytes .../Auth/CustomAuthenticationHandlerTests.cs | 42 +- .../DefaultAuthorizationHandlerTests.cs | 36 +- .../FirstTimeSetupHandlerTests.cs | 38 +- .../IgnoreScheduleHandlerTests.cs | 32 +- .../Controllers/DynamicHlsControllerTests.cs | 8 +- .../Controllers/ImageControllerTests.cs | 4 +- .../Controllers/SystemControllerTests.cs | 20 +- .../Controllers/UserControllerTests.cs | 4 +- .../Helpers/RequestHelpersTests.cs | 22 +- .../Middleware/UrlDecodeQueryFeatureTests.cs | 14 +- ...ommaDelimitedCollectionModelBinderTests.cs | 24 +- ...PipeDelimitedCollectionModelBinderTests.cs | 24 +- tests/Jellyfin.Api.Tests/TestHelpers.cs | 34 +- .../Jellyfin.Api.Tests.AssemblyInfo.cs | 2 +- ...ellyfin.Api.Tests.AssemblyInfoInputs.cache | 2 +- ...n.Api.Tests.csproj.AssemblyReference.cache | Bin 36442 -> 40695 bytes .../Debug/net10.0/MvcTestingAppManifest.json | 8 +- tests/Jellyfin.Common.Tests/Crc32Tests.cs | 10 +- .../Providers/ProviderIdParserTests.cs | 8 +- .../Jellyfin.Common.Tests.AssemblyInfo.cs | 2 +- ...yfin.Common.Tests.AssemblyInfoInputs.cache | 2 +- ...ommon.Tests.csproj.AssemblyReference.cache | Bin 28423 -> 34476 bytes .../BaseItemManagerTests.cs | 18 +- .../DirectoryServiceTests.cs | 12 +- .../Entities/BaseItemTests.cs | 4 +- .../Jellyfin.Controller.Tests.AssemblyInfo.cs | 2 +- ....Controller.Tests.AssemblyInfoInputs.cache | 2 +- ...oller.Tests.csproj.AssemblyReference.cache | Bin 22633 -> 28686 bytes .../CopyToExtensionsTests.cs | 8 +- .../FileHelperTests.cs | 4 +- .../FormattingStreamWriterTests.cs | 4 +- .../Json/Converters/JsonBoolNumberTests.cs | 14 +- .../Json/Converters/JsonBoolStringTests.cs | 8 +- .../JsonCommaDelimitedCollectionTests.cs | 20 +- .../JsonCommaDelimitedIReadOnlyListTests.cs | 14 +- .../JsonDefaultStringEnumConverterTests.cs | 4 +- .../Json/Converters/JsonFlagEnumTests.cs | 4 +- .../Json/Converters/JsonGuidConverterTests.cs | 10 +- .../JsonNullableGuidConverterTests.cs | 10 +- .../Converters/JsonStringConverterTests.cs | 8 +- .../Converters/JsonVersionConverterTests.cs | 10 +- .../Json/Models/GenericBodyArrayModel.cs | 8 +- .../GenericBodyIReadOnlyCollectionModel.cs | 8 +- .../Models/GenericBodyIReadOnlyListModel.cs | 8 +- .../ShuffleExtensionsTests.cs | 6 +- .../StringExtensionsTests.cs | 6 +- .../Jellyfin.Extensions.Tests.AssemblyInfo.cs | 2 +- ....Extensions.Tests.AssemblyInfoInputs.cache | 2 +- ...sions.Tests.csproj.AssemblyReference.cache | Bin 22351 -> 26604 bytes .../HdHomerunHostTests.cs | 28 +- .../HdHomerunManagerTests.cs | 10 +- .../Listings/ListingsManagerTests.cs | 4 +- .../Listings/XmlTvListingsProviderTests.cs | 4 +- .../RecordingHelperTests.cs | 10 +- .../SchedulesDirectDeserializeTests.cs | 16 +- .../Jellyfin.LiveTv.Tests.AssemblyInfo.cs | 2 +- ...yfin.LiveTv.Tests.AssemblyInfoInputs.cache | 2 +- ...iveTv.Tests.csproj.AssemblyReference.cache | Bin 25655 -> 31448 bytes .../DynamicHlsPlaylistGeneratorTests.cs | 10 +- ...in.MediaEncoding.Hls.Tests.AssemblyInfo.cs | 2 +- ...ncoding.Hls.Tests.AssemblyInfoInputs.cache | 2 +- ...g.Hls.Tests.csproj.AssemblyReference.cache | Bin 21664 -> 27717 bytes .../FfProbe/FfProbeKeyframeExtractorTests.cs | 8 +- ...iaEncoding.Keyframes.Tests.AssemblyInfo.cs | 2 +- ...g.Keyframes.Tests.AssemblyInfoInputs.cache | 2 +- ...rames.Tests.csproj.AssemblyReference.cache | Bin 16255 -> 16255 bytes .../EncoderValidatorTests.cs | 10 +- .../Probing/ProbeExternalSourcesTests.cs | 24 +- .../Probing/ProbeResultNormalizerTests.cs | 30 +- .../Subtitles/AssParserTests.cs | 14 +- .../Subtitles/SrtParserTests.cs | 14 +- .../Subtitles/SsaParserTests.cs | 20 +- .../Subtitles/SubtitleEncoderTests.cs | 20 +- ...llyfin.MediaEncoding.Tests.AssemblyInfo.cs | 2 +- ...diaEncoding.Tests.AssemblyInfoInputs.cache | 2 +- ...oding.Tests.csproj.AssemblyReference.cache | Bin 28381 -> 34174 bytes .../Cryptography/PasswordHashTests.cs | 10 +- .../Dlna/ContainerHelperTests.cs | 4 +- .../Dlna/LegacyStreamInfo.cs | 4 +- .../Dlna/StreamBuilderTests.cs | 34 +- .../Dlna/StreamInfoTests.cs | 4 +- .../Drawing/ImageFormatExtensionsTests.cs | 4 +- .../Entities/MediaStreamTests.cs | 6 +- .../Entities/ProviderIdsExtensionsTests.cs | 10 +- .../Extensions/StringHelperTests.cs | 14 +- .../Net/MimeTypesTests.cs | 6 +- .../Jellyfin.Model.Tests.AssemblyInfo.cs | 2 +- ...lyfin.Model.Tests.AssemblyInfoInputs.cache | 2 +- ...Model.Tests.csproj.AssemblyReference.cache | Bin 23320 -> 29373 bytes .../AudioBook/AudioBookFileInfoTests.cs | 6 +- .../AudioBook/AudioBookListResolverTests.cs | 14 +- .../AudioBook/AudioBookResolverTests.cs | 8 +- .../Common/NamingOptionsTest.cs | 6 +- .../ExternalFiles/ExternalPathParserTests.cs | 4 +- .../Music/MultiDiscAlbumTests.cs | 8 +- .../TV/AbsoluteEpisodeNumberTests.cs | 8 +- .../TV/DailyEpisodeTests.cs | 8 +- .../TV/EpisodeNumberTests.cs | 8 +- .../TV/EpisodeNumberWithoutSeasonTests.cs | 8 +- .../TV/EpisodePathParserTest.cs | 8 +- .../TV/MultiEpisodeTests.cs | 8 +- .../TV/SeasonNumberTests.cs | 8 +- .../TV/SeasonPathParserTests.cs | 4 +- .../TV/SeriesPathParserTest.cs | 8 +- .../TV/SeriesResolverTests.cs | 8 +- .../TV/SimpleEpisodeTests.cs | 10 +- .../TV/TvParserHelpersTest.cs | 4 +- .../Video/CleanDateTimeTests.cs | 10 +- .../Video/CleanStringTests.cs | 8 +- .../Jellyfin.Naming.Tests/Video/ExtraTests.cs | 13 +- .../Video/Format3DTests.cs | 8 +- .../Video/MultiVersionTests.cs | 12 +- .../Jellyfin.Naming.Tests/Video/StackTests.cs | 12 +- .../Jellyfin.Naming.Tests/Video/StubTests.cs | 8 +- .../Video/VideoListResolverTests.cs | 14 +- .../Video/VideoResolverTests.cs | 12 +- .../Jellyfin.Naming.Tests.AssemblyInfo.cs | 2 +- ...yfin.Naming.Tests.AssemblyInfoInputs.cache | 2 +- ...aming.Tests.csproj.AssemblyReference.cache | Bin 21763 -> 27816 bytes .../NetworkConfigurationTests.cs | 4 +- .../NetworkExtensionsTests.cs | 12 +- .../NetworkManagerTests.cs | 16 +- .../NetworkParseTests.cs | 28 +- .../Jellyfin.Networking.Tests.AssemblyInfo.cs | 2 +- ....Networking.Tests.AssemblyInfoInputs.cache | 2 +- ...rking.Tests.csproj.AssemblyReference.cache | Bin 24190 -> 30243 bytes .../Lyrics/LrcLyricParserTests.cs | 4 +- .../Manager/ItemImageProviderTests.cs | 52 +- .../Manager/MetadataServiceTests.cs | 24 +- .../MediaInfo/AudioResolverTests.cs | 4 +- .../MediaInfo/EmbeddedImageProviderTests.cs | 38 +- .../MediaInfo/FFProbeVideoInfoTests.cs | 4 +- .../MediaInfo/MediaInfoResolverTests.cs | 4 +- .../MediaInfo/SubtitleResolverTests.cs | 4 +- .../MediaInfo/VideoImageProviderTests.cs | 34 +- .../Omdb/JsonOmdbConverterTests.cs | 10 +- .../Tmdb/TmdbUtilsTests.cs | 6 +- .../Jellyfin.Providers.Tests.AssemblyInfo.cs | 2 +- ...n.Providers.Tests.AssemblyInfoInputs.cache | 2 +- ...iders.Tests.csproj.AssemblyReference.cache | Bin 29984 -> 36037 bytes .../Cryptography/CryptographyProviderTests.cs | 4 +- .../Data/SearchPunctuationTests.cs | 18 +- .../Data/SqliteItemRepositoryTests.cs | 28 +- .../EfMigrations/EfMigrationTests.cs | 4 +- .../HttpServer/WebSocketConnectionTests.cs | 16 +- .../IO/ManagedFileSystemTests.cs | 4 +- .../Item/BaseItemRepositoryTests.cs | 4 +- .../Item/OrderMapperTests.cs | 4 +- .../Library/AudioResolverTests.cs | 4 +- .../Library/CoreResolutionIgnoreRuleTest.cs | 4 +- .../Library/DotIgnoreIgnoreRuleTest.cs | 4 +- .../Library/EpisodeResolverTest.cs | 28 +- .../Library/IgnorePatternsTests.cs | 6 +- .../Library/LibraryManager/FindExtrasTests.cs | 4 +- .../Library/MediaSourceManagerTests.cs | 16 +- .../Library/MediaStreamSelectorTests.cs | 4 +- .../Library/MovieResolverTests.cs | 4 +- .../Library/PathExtensionsTests.cs | 10 +- .../Localization/LocalizationManagerTests.cs | 22 +- .../Playlists/PlaylistManagerTests.cs | 4 +- .../Plugins/PluginManagerTests.cs | 34 +- .../QuickConnect/QuickConnectManagerTests.cs | 28 +- .../SessionManager/SessionManagerTests.cs | 4 +- .../Sorting/AiredEpisodeOrderComparerTests.cs | 14 +- .../Sorting/IndexNumberComparerTests.cs | 4 +- .../Sorting/ParentIndexNumberComparerTests.cs | 4 +- .../Sorting/PremiereDateComparerTests.cs | 12 +- .../TypedBaseItem/BaseItemKindTests.cs | 10 +- .../Updates/InstallationManagerTests.cs | 28 +- .../Users/UserManagerTests.cs | 8 +- ...rver.Implementations.Tests.AssemblyInfo.cs | 2 +- ...ementations.Tests.AssemblyInfoInputs.cache | 2 +- ...tions.Tests.csproj.AssemblyReference.cache | Bin 62383 -> 68436 bytes .../Debug/net10.0/MvcTestingAppManifest.json | 8 +- .../AuthHelper.cs | 28 +- .../Controllers/ActivityLogControllerTests.cs | 10 +- .../Controllers/BaseJellyfinTestController.cs | 6 +- .../Controllers/BrandingControllerTests.cs | 18 +- .../Controllers/DashboardControllerTests.cs | 22 +- .../Controllers/EncoderController.cs | 10 +- .../Controllers/ItemsControllerTests.cs | 4 +- .../Controllers/LibraryControllerTests.cs | 4 +- .../LibraryStructureControllerTests.cs | 4 +- .../Controllers/LiveTvControllerTests.cs | 4 +- .../Controllers/MediaInfoControllerTests.cs | 12 +- .../MediaStructureControllerTests.cs | 22 +- .../Controllers/MusicGenreControllerTests.cs | 4 +- .../Controllers/PersonsControllerTests.cs | 4 +- .../Controllers/PlaystateControllerTests.cs | 4 +- .../Controllers/PluginsControllerTests.cs | 4 +- .../Controllers/StartupControllerTests.cs | 24 +- .../Controllers/UserControllerTests.cs | 28 +- .../Controllers/UserLibraryControllerTests.cs | 4 +- .../Controllers/VideosControllerTests.cs | 4 +- .../EncodedQueryStringTest.cs | 8 +- .../JellyfinApplicationFactory.cs | 44 +- .../RobotsRedirectionMiddlewareTests.cs | 10 +- .../OpenApiSpecTests.cs | 14 +- .../TestAppHost.cs | 14 +- .../WebSocketTests.cs | 10 +- ...n.Server.Integration.Tests.AssemblyInfo.cs | 2 +- ...Integration.Tests.AssemblyInfoInputs.cache | 2 +- ...ation.Tests.csproj.AssemblyReference.cache | Bin 61810 -> 67863 bytes .../Debug/net10.0/MvcTestingAppManifest.json | 8 +- .../ParseNetworkTests.cs | 28 +- .../Jellyfin.Server.Tests.AssemblyInfo.cs | 2 +- ...yfin.Server.Tests.AssemblyInfoInputs.cache | 2 +- ...erver.Tests.csproj.AssemblyReference.cache | Bin 61453 -> 65706 bytes .../Debug/net10.0/MvcTestingAppManifest.json | 8 +- .../Location/MovieNfoLocationTests.cs | 16 +- .../Parsers/EpisodeNfoProviderTests.cs | 34 +- .../Parsers/MovieNfoParserTests.cs | 40 +- .../Parsers/MusicAlbumNfoProviderTests.cs | 30 +- .../Parsers/MusicArtistNfoParserTests.cs | 30 +- .../Parsers/MusicVideoNfoParserTests.cs | 30 +- .../Parsers/SeasonNfoProviderTests.cs | 32 +- .../Parsers/SeriesNfoParserTests.cs | 32 +- ...ellyfin.XbmcMetadata.Tests.AssemblyInfo.cs | 2 +- ...bmcMetadata.Tests.AssemblyInfoInputs.cache | 2 +- ...adata.Tests.csproj.AssemblyReference.cache | Bin 27835 -> 33888 bytes 1436 files changed, 36615 insertions(+), 15508 deletions(-) create mode 100644 .editorconfig create mode 100644 ConvertToFileScopedNamespaces - Copy.ps1 create mode 100644 ConvertToFileScopedNamespaces.ps1 create mode 100644 FixStyleCopWarnings.ps1 create mode 100644 MediaBrowser.Common/obj/Debug/net10.0/MediaBrowser.Common.xml create mode 100644 MediaBrowser.Model/GlobalSuppressions.cs create mode 100644 MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.CodeAnalysis.dll create mode 100644 MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.CodeAnalysis.pdb create mode 100644 MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.CodeAnalysis.xml create mode 100644 MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Data.dll create mode 100644 MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Data.pdb create mode 100644 MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Data.xml create mode 100644 MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Database.Implementations.dll create mode 100644 MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Database.Implementations.pdb create mode 100644 MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Database.Implementations.xml create mode 100644 MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Extensions.dll create mode 100644 MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Extensions.pdb create mode 100644 MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Extensions.xml create mode 100644 MediaBrowser.Model/bin/Debug/net10.0/MediaBrowser.Model.deps.json create mode 100644 MediaBrowser.Model/bin/Debug/net10.0/MediaBrowser.Model.dll create mode 100644 MediaBrowser.Model/bin/Debug/net10.0/MediaBrowser.Model.pdb create mode 100644 MediaBrowser.Model/bin/Debug/net10.0/MediaBrowser.Model.xml create mode 100644 MediaBrowser.Model/obj/Debug/net10.0/MediaBro.1E970F38.Up2Date create mode 100644 MediaBrowser.Model/obj/Debug/net10.0/MediaBrowser.Model.dll create mode 100644 MediaBrowser.Model/obj/Debug/net10.0/MediaBrowser.Model.pdb create mode 100644 MediaBrowser.Model/obj/Debug/net10.0/ref/MediaBrowser.Model.dll create mode 100644 MediaBrowser.Model/obj/Debug/net10.0/refint/MediaBrowser.Model.dll create mode 100644 build_warnings.txt create mode 100644 editorconfig_new.txt diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..5a536234 --- /dev/null +++ b/.editorconfig @@ -0,0 +1 @@ +# EditorConfig for MediaBrowser.Model# https://EditorConfig.orgroot = true[*]charset = utf-8insert_final_newline = truetrim_trailing_whitespace = true[*.cs]indent_size = 4indent_style = spacedotnet_sort_system_directives_first = truedotnet_separate_import_directive_groups = false# StyleCop Analyzer Rules - Disabled for project consistencydotnet_diagnostic.SA1101.severity = nonedotnet_diagnostic.SA1309.severity = nonedotnet_diagnostic.SA1204.severity = nonedotnet_diagnostic.SA1202.severity = nonedotnet_diagnostic.SA1135.severity = nonedotnet_diagnostic.SA1600.severity = suggestion# StyleCop Analyzer Rules - Keep enableddotnet_diagnostic.SA1413.severity = warningdotnet_diagnostic.SA1515.severity = warningdotnet_diagnostic.SA1518.severity = warning \ No newline at end of file diff --git a/.gitignore b/.gitignore index 30c7ecd7..f0ab463d 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ ################################################################################ /.vs/Jellyfin +/.vs diff --git a/ConvertToFileScopedNamespaces - Copy.ps1 b/ConvertToFileScopedNamespaces - Copy.ps1 new file mode 100644 index 00000000..016c13f8 --- /dev/null +++ b/ConvertToFileScopedNamespaces - Copy.ps1 @@ -0,0 +1,377 @@ +#!/usr/bin/env pwsh +<# +.SYNOPSIS + Converts C# files from block-scoped to file-scoped namespaces and fixes System namespace conflicts. + +.DESCRIPTION + This script converts all C# files in MediaBrowser.Model from block-scoped namespaces + to file-scoped namespaces, and replaces System using directives with global::System + to resolve conflicts with MediaBrowser.Model.System namespace. + +.PARAMETER Path + The root path to search for C# files. Defaults to "MediaBrowser.Model" + +.PARAMETER DryRun + If specified, shows what would be changed without actually modifying files + +.PARAMETER Verbose + Shows detailed processing information + +.PARAMETER BackupFiles + Creates .bak files before conversion + +.EXAMPLE + .\ConvertToFileScopedNamespaces.ps1 -DryRun + +.EXAMPLE + .\ConvertToFileScopedNamespaces.ps1 -BackupFiles + +.EXAMPLE + .\ConvertToFileScopedNamespaces.ps1 -Path "MediaBrowser.Model\Dlna" -Verbose +#> + +param( + [string]$Path = "MediaBrowser.Model", + [switch]$DryRun, + [switch]$BackupFiles +) + +$ErrorActionPreference = "Stop" +$VerbosePreference = if ($PSBoundParameters.ContainsKey('Verbose')) { 'Continue' } else { 'SilentlyContinue' } + +function Get-IndentString { + param([string]$Line) + + if ($Line -match '^(\s+)') { + return $Matches[1] + } + return "" +} + +function Get-IndentLevel { + param([string]$IndentString) + + # Count spaces (4 spaces = 1 level) or tabs (1 tab = 1 level) + $spaces = ($IndentString.ToCharArray() | Where-Object { $_ -eq ' ' }).Count + $tabs = ($IndentString.ToCharArray() | Where-Object { $_ -eq "`t" }).Count + + return [Math]::Max($tabs, [Math]::Floor($spaces / 4)) +} + +function Remove-OneIndentLevel { + param([string]$Line, [ref]$IndentChar, [ref]$IndentSize) + + if ([string]::IsNullOrWhiteSpace($Line)) { + return $Line + } + + $indent = Get-IndentString -Line $Line + + if ($indent.Length -eq 0) { + return $Line + } + + # Detect indent character and size on first indented line + if ($IndentChar.Value -eq $null) { + if ($indent[0] -eq "`t") { + $IndentChar.Value = "`t" + $IndentSize.Value = 1 + } else { + $IndentChar.Value = ' ' + # Detect indent size (usually 4 spaces) + $IndentSize.Value = 4 + if ($indent.Length -ge 2) { + # Try to detect actual indent size + for ($i = 1; $i -le 8; $i++) { + if ($indent.Length % $i -eq 0) { + $IndentSize.Value = $i + break + } + } + } + } + Write-Verbose "Detected indent: '$($IndentChar.Value)' x $($IndentSize.Value)" + } + + # Remove one level of indentation + if ($IndentChar.Value -eq "`t") { + if ($Line -match '^\t(.*)') { + return $Matches[1] + } + } else { + $pattern = "^" + (' ' * $IndentSize.Value) + '(.*)' + if ($Line -match $pattern) { + return $Matches[1] + } + } + + return $Line +} + +function Test-FileScopedNamespace { + param([string]$Content) + + # Check if already using file-scoped namespace (semicolon after namespace declaration) + return $Content -match 'namespace\s+[\w\.]+\s*;' +} + +function Test-BlockScopedNamespace { + param([string]$Content) + + # Check for block-scoped namespace + return $Content -match 'namespace\s+[\w\.]+\s*\r?\n?\s*\{' +} + +function Add-GlobalPrefix { + param([string]$Content) + + # System namespaces to prefix (ordered from most specific to least) + $systemNamespaces = @( + 'System\.Xml\.Serialization', + 'System\.ComponentModel\.DataAnnotations', + 'System\.ComponentModel', + 'System\.Collections\.Generic', + 'System\.Collections\.Concurrent', + 'System\.Collections', + 'System\.Diagnostics\.CodeAnalysis', + 'System\.Diagnostics', + 'System\.Globalization', + 'System\.Linq', + 'System\.Text\.RegularExpressions', + 'System\.Text', + 'System\.Threading\.Tasks', + 'System\.Threading', + 'System\.IO', + 'System\.Net', + 'System\.Runtime', + 'System' # Must be last to avoid partial matches + ) + + foreach ($ns in $systemNamespaces) { + # Don't add global:: if it's already there + # Match: "using System.X" but not "using global::System.X" + $pattern = '(\s+using\s+)(?!global::)(' + $ns + ')(\s|;)' + $replacement = '${1}global::${2}${3}' + $Content = $Content -replace $pattern, $replacement + } + + return $Content +} + +function Convert-ToFileScopedNamespace { + param( + [string]$FilePath, + [switch]$DryRun, + [switch]$CreateBackup + ) + + $content = Get-Content -Path $FilePath -Raw + $originalContent = $content + $modified = $false + + # Check current state + $hasFileScopedNS = Test-FileScopedNamespace -Content $content + $hasBlockScopedNS = Test-BlockScopedNamespace -Content $content + + if ($hasFileScopedNS) { + Write-Verbose " Already using file-scoped namespace" + + # But still add global:: prefixes if needed + $contentWithGlobal = Add-GlobalPrefix -Content $content + if ($contentWithGlobal -ne $content) { + $content = $contentWithGlobal + $modified = $true + Write-Host " [UPDATED] Added global:: prefixes" -ForegroundColor Yellow + } else { + Write-Host " [SKIP] Already correct" -ForegroundColor Gray + return $false + } + } + elseif (-not $hasBlockScopedNS) { + Write-Host " [SKIP] No namespace found" -ForegroundColor Gray + return $false + } + else { + Write-Verbose " Converting block-scoped to file-scoped namespace" + + # Extract namespace name and line + if ($content -match 'namespace\s+([\w\.]+)\s*\r?\n?\s*\{') { + $namespaceName = $Matches[1] + Write-Verbose " Namespace: $namespaceName" + } else { + Write-Warning " Could not parse namespace" + return $false + } + + # Step 1: Convert namespace declaration to file-scoped + $content = $content -replace '(namespace\s+[\w\.]+)\s*\r?\n?\s*\{', '$1;' + $modified = $true + + # Step 2: Add global:: prefixes to System using directives + $content = Add-GlobalPrefix -Content $content + + # Step 3: Parse into lines for indentation removal + $lines = $content -split '\r?\n' + $hasWindowsLineEndings = $originalContent -match '\r\n' + + # Find namespace declaration line + $namespaceLineIndex = -1 + for ($i = 0; $i -lt $lines.Length; $i++) { + if ($lines[$i] -match '^namespace\s+[\w\.]+\s*;') { + $namespaceLineIndex = $i + break + } + } + + if ($namespaceLineIndex -lt 0) { + Write-Warning " Could not find namespace declaration after conversion" + return $false + } + + # Step 4: Remove one level of indentation from all lines after namespace + $indentChar = $null + $indentSize = 4 + $indentCharRef = [ref]$indentChar + $indentSizeRef = [ref]$indentSize + + for ($i = $namespaceLineIndex + 1; $i -lt $lines.Length; $i++) { + $lines[$i] = Remove-OneIndentLevel -Line $lines[$i] -IndentChar $indentCharRef -IndentSize $indentSizeRef + } + + # Step 5: Remove the closing brace of the namespace + # Find the last non-empty, non-whitespace line that's just a closing brace + $closingBraceIndex = -1 + for ($i = $lines.Length - 1; $i -gt $namespaceLineIndex; $i--) { + $trimmed = $lines[$i].Trim() + if ($trimmed -eq '}') { + $closingBraceIndex = $i + break + } + elseif ($trimmed -ne '' -and $trimmed -ne '}') { + # Found non-brace content, stop looking + break + } + } + + if ($closingBraceIndex -ge 0) { + Write-Verbose " Removing closing brace at line $closingBraceIndex" + $lines = $lines[0..($closingBraceIndex-1)] + $lines[($closingBraceIndex+1)..($lines.Length-1)] + } + + # Step 6: Rejoin lines + $lineEnding = if ($hasWindowsLineEndings) { "`r`n" } else { "`n" } + $content = ($lines | Where-Object { $_ -ne $null }) -join $lineEnding + + # Step 7: Clean up trailing whitespace and ensure single newline at end + $content = $content.TrimEnd() + $content += $lineEnding + + Write-Host " [CONVERTED] Block-scoped → File-scoped" -ForegroundColor Green + } + + # Apply changes + if ($modified -and $content -ne $originalContent) { + if ($DryRun) { + Write-Host " [DRY-RUN] Would save changes" -ForegroundColor Cyan + return $true + } + + if ($CreateBackup) { + $backupPath = "$FilePath.bak" + Copy-Item -Path $FilePath -Destination $backupPath -Force + Write-Verbose " Created backup: $backupPath" + } + + # Write with correct encoding (UTF-8 without BOM for .cs files) + [System.IO.File]::WriteAllText($FilePath, $content, [System.Text.UTF8Encoding]::new($false)) + return $true + } + + return $false +} + +# Main script +Write-Host "=" * 80 -ForegroundColor Cyan +Write-Host "C# File-Scoped Namespace Converter" -ForegroundColor Cyan +Write-Host "Fixes MediaBrowser.Model.System namespace conflicts" -ForegroundColor Cyan +Write-Host "=" * 80 -ForegroundColor Cyan +Write-Host + +if ($DryRun) { + Write-Host "🔍 DRY RUN MODE - No files will be modified" -ForegroundColor Yellow + Write-Host +} + +if ($BackupFiles) { + Write-Host "💾 Backup mode enabled - .bak files will be created" -ForegroundColor Yellow + Write-Host +} + +if (-not (Test-Path $Path)) { + Write-Error "❌ Path not found: $Path" + exit 1 +} + +# Find all C# files +$files = Get-ChildItem -Path $Path -Filter "*.cs" -Recurse | Where-Object { + $_.FullName -notmatch "\\obj\\" -and + $_.FullName -notmatch "\\bin\\" -and + $_.FullName -notmatch "\\Properties\\AssemblyInfo\.cs$" +} + +Write-Host "Found $($files.Count) C# files in $Path" -ForegroundColor Cyan +Write-Host + +$convertedCount = 0 +$skippedCount = 0 +$errorCount = 0 +$updatedCount = 0 + +foreach ($file in $files) { + $relativePath = $file.FullName.Replace((Get-Location).Path, "").TrimStart([char]92, [char]47) + Write-Host "📄 $relativePath" -ForegroundColor White + + try { + $result = Convert-ToFileScopedNamespace -FilePath $file.FullName -DryRun:$DryRun -CreateBackup:$BackupFiles + + if ($result) { + if ($result -eq "updated") { + $updatedCount++ + } else { + $convertedCount++ + } + } else { + $skippedCount++ + } + } + catch { + Write-Host " [ERROR] $_" -ForegroundColor Red + Write-Verbose $_.ScriptStackTrace + $errorCount++ + } +} + +Write-Host +Write-Host "=" * 80 -ForegroundColor Cyan +Write-Host "Summary:" -ForegroundColor Cyan +Write-Host "=" * 80 -ForegroundColor Cyan +Write-Host " 📊 Total files: $($files.Count)" -ForegroundColor White +Write-Host " ✅ Converted: $convertedCount" -ForegroundColor Green +Write-Host " 🔄 Updated (global::): $updatedCount" -ForegroundColor Yellow +Write-Host " ⏭️ Skipped: $skippedCount" -ForegroundColor Gray +Write-Host " ❌ Errors: $errorCount" -ForegroundColor Red + +if ($DryRun) { + Write-Host + Write-Host "This was a DRY RUN. Run without -DryRun to apply changes." -ForegroundColor Yellow +} elseif ($convertedCount -gt 0 -or $updatedCount -gt 0) { + Write-Host + Write-Host "✨ Conversion complete! Next steps:" -ForegroundColor Green + Write-Host " 1. Review changes with: git diff" -ForegroundColor White + Write-Host " 2. Build project: dotnet build MediaBrowser.Model\MediaBrowser.Model.csproj" -ForegroundColor White + Write-Host " 3. If successful: git add . && git commit -m `"Convert to file-scoped namespaces`"" -ForegroundColor White +} + +Write-Host "=" * 80 -ForegroundColor Cyan + +exit $errorCount diff --git a/ConvertToFileScopedNamespaces.ps1 b/ConvertToFileScopedNamespaces.ps1 new file mode 100644 index 00000000..2fbc5b95 --- /dev/null +++ b/ConvertToFileScopedNamespaces.ps1 @@ -0,0 +1,388 @@ +#!/usr/bin/env pwsh +<# +.SYNOPSIS + Converts C# files from block-scoped to file-scoped namespaces and fixes System namespace conflicts. + +.DESCRIPTION + This script converts all C# files in MediaBrowser.Model from block-scoped namespaces + to file-scoped namespaces, and replaces System using directives with global::System + to resolve conflicts with MediaBrowser.Model.System namespace. + +.PARAMETER Path + The root path to search for C# files. Defaults to "MediaBrowser.Model" + +.PARAMETER DryRun + If specified, shows what would be changed without actually modifying files + +.PARAMETER Verbose + Shows detailed processing information + +.PARAMETER BackupFiles + Creates .bak files before conversion + +.EXAMPLE + .\ConvertToFileScopedNamespaces.ps1 -DryRun + +.EXAMPLE + .\ConvertToFileScopedNamespaces.ps1 -BackupFiles + +.EXAMPLE + .\ConvertToFileScopedNamespaces.ps1 -Path "MediaBrowser.Model\Dlna" -Verbose +#> + +param( + [string]$Path = "MediaBrowser.Model", + [switch]$DryRun, + [switch]$BackupFiles +) + +$ErrorActionPreference = "Stop" +$VerbosePreference = if ($PSBoundParameters.ContainsKey('Verbose')) { 'Continue' } else { 'SilentlyContinue' } + +function Get-IndentString { + param([string]$Line) + + if ($Line -match '^(\s+)') { + return $Matches[1] + } + return "" +} + +function Get-IndentLevel { + param([string]$IndentString) + + # Count spaces (4 spaces = 1 level) or tabs (1 tab = 1 level) + $spaces = ($IndentString.ToCharArray() | Where-Object { $_ -eq ' ' }).Count + $tabs = ($IndentString.ToCharArray() | Where-Object { $_ -eq "`t" }).Count + + return [Math]::Max($tabs, [Math]::Floor($spaces / 4)) +} + +function Remove-OneIndentLevel { + param([string]$Line, [ref]$IndentChar, [ref]$IndentSize) + + if ([string]::IsNullOrWhiteSpace($Line)) { + return $Line + } + + $indent = Get-IndentString -Line $Line + + if ($indent.Length -eq 0) { + return $Line + } + + # Detect indent character and size on first indented line + if ($IndentChar.Value -eq $null) { + if ($indent[0] -eq "`t") { + $IndentChar.Value = "`t" + $IndentSize.Value = 1 + } else { + $IndentChar.Value = ' ' + # Detect indent size (usually 4 spaces) + $IndentSize.Value = 4 + if ($indent.Length -ge 2) { + # Try to detect actual indent size + for ($i = 1; $i -le 8; $i++) { + if ($indent.Length % $i -eq 0) { + $IndentSize.Value = $i + break + } + } + } + } + Write-Verbose "Detected indent: '$($IndentChar.Value)' x $($IndentSize.Value)" + } + + # Remove one level of indentation + if ($IndentChar.Value -eq "`t") { + if ($Line -match '^\t(.*)') { + return $Matches[1] + } + } else { + $pattern = "^" + (' ' * $IndentSize.Value) + '(.*)' + if ($Line -match $pattern) { + return $Matches[1] + } + } + + return $Line +} + +function Test-FileScopedNamespace { + param([string]$Content) + + # Check if already using file-scoped namespace (semicolon after namespace declaration) + return $Content -match 'namespace\s+[\w\.]+\s*;' +} + +function Test-BlockScopedNamespace { + param([string]$Content) + + # Check for block-scoped namespace + return $Content -match 'namespace\s+[\w\.]+\s*\r?\n?\s*\{' +} + +function Add-GlobalPrefix { + param([string]$Content) + + # System namespaces to prefix (ordered from most specific to least) + $systemNamespaces = @( + 'System\.Xml\.Serialization', + 'System\.ComponentModel\.DataAnnotations', + 'System\.ComponentModel', + 'System\.Collections\.Generic', + 'System\.Collections\.Concurrent', + 'System\.Collections', + 'System\.Diagnostics\.CodeAnalysis', + 'System\.Diagnostics', + 'System\.Globalization', + 'System\.Linq\.Expressions', + 'System\.Linq', + 'System\.Text\.Json\.Serialization', + 'System\.Text\.Json', + 'System\.Text\.RegularExpressions', + 'System\.Text', + 'System\.Threading\.Tasks', + 'System\.Threading', + 'System\.Runtime\.Serialization', + 'System\.Runtime\.CompilerServices', + 'System\.Runtime', + 'System\.Net\.Http', + 'System\.Net\.Sockets', + 'System\.Net\.WebSockets', + 'System\.Net\.Mime', + 'System\.Net', + 'System\.IO\.Compression', + 'System\.IO', + 'System\.Security', + 'System' # Must be last to avoid partial matches + ) + + foreach ($ns in $systemNamespaces) { + # Don't add global:: if it's already there + # Match: "using System.X" but not "using global::System.X" + $pattern = '(\s+using\s+)(?!global::)(' + $ns + ')(\s|;)' + $replacement = '${1}global::${2}${3}' + $Content = $Content -replace $pattern, $replacement + } + + return $Content +} + +function Convert-ToFileScopedNamespace { + param( + [string]$FilePath, + [switch]$DryRun, + [switch]$CreateBackup + ) + + $content = Get-Content -Path $FilePath -Raw + $originalContent = $content + $modified = $false + + # Check current state + $hasFileScopedNS = Test-FileScopedNamespace -Content $content + $hasBlockScopedNS = Test-BlockScopedNamespace -Content $content + + if ($hasFileScopedNS) { + Write-Verbose " Already using file-scoped namespace" + + # But still add global:: prefixes if needed + $contentWithGlobal = Add-GlobalPrefix -Content $content + if ($contentWithGlobal -ne $content) { + $content = $contentWithGlobal + $modified = $true + Write-Host " [UPDATED] Added global:: prefixes" -ForegroundColor Yellow + } else { + Write-Host " [SKIP] Already correct" -ForegroundColor Gray + return $false + } + } + elseif (-not $hasBlockScopedNS) { + Write-Host " [SKIP] No namespace found" -ForegroundColor Gray + return $false + } + else { + Write-Verbose " Converting block-scoped to file-scoped namespace" + + # Extract namespace name and line + if ($content -match 'namespace\s+([\w\.]+)\s*\r?\n?\s*\{') { + $namespaceName = $Matches[1] + Write-Verbose " Namespace: $namespaceName" + } else { + Write-Warning " Could not parse namespace" + return $false + } + + # Step 1: Convert namespace declaration to file-scoped + $content = $content -replace '(namespace\s+[\w\.]+)\s*\r?\n?\s*\{', '$1;' + $modified = $true + + # Step 2: Add global:: prefixes to System using directives + $content = Add-GlobalPrefix -Content $content + + # Step 3: Parse into lines for indentation removal + $lines = $content -split '\r?\n' + $hasWindowsLineEndings = $originalContent -match '\r\n' + + # Find namespace declaration line + $namespaceLineIndex = -1 + for ($i = 0; $i -lt $lines.Length; $i++) { + if ($lines[$i] -match '^namespace\s+[\w\.]+\s*;') { + $namespaceLineIndex = $i + break + } + } + + if ($namespaceLineIndex -lt 0) { + Write-Warning " Could not find namespace declaration after conversion" + return $false + } + + # Step 4: Remove one level of indentation from all lines after namespace + $indentChar = $null + $indentSize = 4 + $indentCharRef = [ref]$indentChar + $indentSizeRef = [ref]$indentSize + + for ($i = $namespaceLineIndex + 1; $i -lt $lines.Length; $i++) { + $lines[$i] = Remove-OneIndentLevel -Line $lines[$i] -IndentChar $indentCharRef -IndentSize $indentSizeRef + } + + # Step 5: Remove the closing brace of the namespace + # Find the last non-empty, non-whitespace line that's just a closing brace + $closingBraceIndex = -1 + for ($i = $lines.Length - 1; $i -gt $namespaceLineIndex; $i--) { + $trimmed = $lines[$i].Trim() + if ($trimmed -eq '}') { + $closingBraceIndex = $i + break + } + elseif ($trimmed -ne '' -and $trimmed -ne '}') { + # Found non-brace content, stop looking + break + } + } + + if ($closingBraceIndex -ge 0) { + Write-Verbose " Removing closing brace at line $closingBraceIndex" + $lines = $lines[0..($closingBraceIndex-1)] + $lines[($closingBraceIndex+1)..($lines.Length-1)] + } + + # Step 6: Rejoin lines + $lineEnding = if ($hasWindowsLineEndings) { "`r`n" } else { "`n" } + $content = ($lines | Where-Object { $_ -ne $null }) -join $lineEnding + + # Step 7: Clean up trailing whitespace and ensure single newline at end + $content = $content.TrimEnd() + $content += $lineEnding + + Write-Host " [CONVERTED] Block-scoped → File-scoped" -ForegroundColor Green + } + + # Apply changes + if ($modified -and $content -ne $originalContent) { + if ($DryRun) { + Write-Host " [DRY-RUN] Would save changes" -ForegroundColor Cyan + return $true + } + + if ($CreateBackup) { + $backupPath = "$FilePath.bak" + Copy-Item -Path $FilePath -Destination $backupPath -Force + Write-Verbose " Created backup: $backupPath" + } + + # Write with correct encoding (UTF-8 without BOM for .cs files) + [System.IO.File]::WriteAllText($FilePath, $content, [System.Text.UTF8Encoding]::new($false)) + return $true + } + + return $false +} + +# Main script +Write-Host ("=" * 80) -ForegroundColor Cyan +Write-Host "C# File-Scoped Namespace Converter" -ForegroundColor Cyan +Write-Host "Fixes MediaBrowser.Model.System namespace conflicts" -ForegroundColor Cyan +Write-Host ("=" * 80) -ForegroundColor Cyan +Write-Host + +if ($DryRun) { + Write-Host "DRY RUN MODE - No files will be modified" -ForegroundColor Yellow + Write-Host +} + +if ($BackupFiles) { + Write-Host "Backup mode enabled - .bak files will be created" -ForegroundColor Yellow + Write-Host +} + +if (-not (Test-Path $Path)) { + Write-Error "❌ Path not found: $Path" + exit 1 +} + +# Find all C# files +$files = Get-ChildItem -Path $Path -Filter "*.cs" -Recurse | Where-Object { + $_.FullName -notmatch "\\obj\\" -and + $_.FullName -notmatch "\\bin\\" -and + $_.FullName -notmatch "\\Properties\\AssemblyInfo\.cs$" +} + +Write-Host "Found $($files.Count) C# files in $Path" -ForegroundColor Cyan +Write-Host + +$convertedCount = 0 +$skippedCount = 0 +$errorCount = 0 +$updatedCount = 0 + +foreach ($file in $files) { + $relativePath = $file.FullName.Replace((Get-Location).Path, "").TrimStart([char]92, [char]47) + Write-Host "[Processing] $relativePath" -ForegroundColor White + + try { + $result = Convert-ToFileScopedNamespace -FilePath $file.FullName -DryRun:$DryRun -CreateBackup:$BackupFiles + + if ($result) { + if ($result -eq "updated") { + $updatedCount++ + } else { + $convertedCount++ + } + } else { + $skippedCount++ + } + } + catch { + Write-Host " [ERROR] $_" -ForegroundColor Red + Write-Verbose $_.ScriptStackTrace + $errorCount++ + } +} + +Write-Host +Write-Host ("=" * 80) -ForegroundColor Cyan +Write-Host "Summary:" -ForegroundColor Cyan +Write-Host ("=" * 80) -ForegroundColor Cyan +Write-Host " Total files: $($files.Count)" -ForegroundColor White +Write-Host " Converted: $convertedCount" -ForegroundColor Green +Write-Host " Updated (global::): $updatedCount" -ForegroundColor Yellow +Write-Host " Skipped: $skippedCount" -ForegroundColor Gray +Write-Host " Errors: $errorCount" -ForegroundColor Red + +if ($DryRun) { + Write-Host + Write-Host "This was a DRY RUN. Run without -DryRun to apply changes." -ForegroundColor Yellow +} elseif ($convertedCount -gt 0 -or $updatedCount -gt 0) { + Write-Host + Write-Host "Conversion complete! Next steps:" -ForegroundColor Green + Write-Host " 1. Review changes with: git diff" -ForegroundColor White + Write-Host " 2. Build project: dotnet build MediaBrowser.Model\MediaBrowser.Model.csproj" -ForegroundColor White + Write-Host " 3. If successful: git add . && git commit -m `"Convert to file-scoped namespaces`"" -ForegroundColor White +} + +Write-Host ("=" * 80) -ForegroundColor Cyan + +exit $errorCount diff --git a/Emby.Naming/Audio/AlbumParser.cs b/Emby.Naming/Audio/AlbumParser.cs index 3198d33f..fa42acf6 100644 --- a/Emby.Naming/Audio/AlbumParser.cs +++ b/Emby.Naming/Audio/AlbumParser.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.IO; -using System.Text.RegularExpressions; -using Emby.Naming.Common; -using Jellyfin.Extensions; - namespace Emby.Naming.Audio { + using System; + using System.Globalization; + using System.IO; + using System.Text.RegularExpressions; + using Emby.Naming.Common; + using Jellyfin.Extensions; + /// /// Helper class to determine if Album is multipart. /// diff --git a/Emby.Naming/Audio/AudioFileParser.cs b/Emby.Naming/Audio/AudioFileParser.cs index e2ffe25f..cd204c8d 100644 --- a/Emby.Naming/Audio/AudioFileParser.cs +++ b/Emby.Naming/Audio/AudioFileParser.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.IO; -using Emby.Naming.Common; -using Jellyfin.Extensions; - namespace Emby.Naming.Audio { + using System; + using System.IO; + using Emby.Naming.Common; + using Jellyfin.Extensions; + /// /// Static helper class to determine if file at path is audio file. /// diff --git a/Emby.Naming/AudioBook/AudioBookFileInfo.cs b/Emby.Naming/AudioBook/AudioBookFileInfo.cs index da4416cd..2d8a9b59 100644 --- a/Emby.Naming/AudioBook/AudioBookFileInfo.cs +++ b/Emby.Naming/AudioBook/AudioBookFileInfo.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace Emby.Naming.AudioBook { + using System; + /// /// Represents a single video file. /// diff --git a/Emby.Naming/AudioBook/AudioBookFilePathParser.cs b/Emby.Naming/AudioBook/AudioBookFilePathParser.cs index 160162e9..8a9563de 100644 --- a/Emby.Naming/AudioBook/AudioBookFilePathParser.cs +++ b/Emby.Naming/AudioBook/AudioBookFilePathParser.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Globalization; -using System.IO; -using System.Text.RegularExpressions; -using Emby.Naming.Common; - namespace Emby.Naming.AudioBook { + using System.Globalization; + using System.IO; + using System.Text.RegularExpressions; + using Emby.Naming.Common; + /// /// Parser class to extract part and/or chapter number from audiobook filename. /// diff --git a/Emby.Naming/AudioBook/AudioBookInfo.cs b/Emby.Naming/AudioBook/AudioBookInfo.cs index e18da8b4..63a88b5d 100644 --- a/Emby.Naming/AudioBook/AudioBookInfo.cs +++ b/Emby.Naming/AudioBook/AudioBookInfo.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; - namespace Emby.Naming.AudioBook { + using System.Collections.Generic; + /// /// Represents a complete video, including all parts and subtitles. /// diff --git a/Emby.Naming/AudioBook/AudioBookListResolver.cs b/Emby.Naming/AudioBook/AudioBookListResolver.cs index 81d26f90..f5a7e737 100644 --- a/Emby.Naming/AudioBook/AudioBookListResolver.cs +++ b/Emby.Naming/AudioBook/AudioBookListResolver.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using Emby.Naming.Common; -using Emby.Naming.Video; -using MediaBrowser.Model.IO; - namespace Emby.Naming.AudioBook { + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using Emby.Naming.Common; + using Emby.Naming.Video; + using MediaBrowser.Model.IO; + /// /// Class used to resolve Name, Year, alternative files and extras from stack of files. /// diff --git a/Emby.Naming/AudioBook/AudioBookNameParser.cs b/Emby.Naming/AudioBook/AudioBookNameParser.cs index 196756ec..82d34ebe 100644 --- a/Emby.Naming/AudioBook/AudioBookNameParser.cs +++ b/Emby.Naming/AudioBook/AudioBookNameParser.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Globalization; -using System.Text.RegularExpressions; -using Emby.Naming.Common; - namespace Emby.Naming.AudioBook { + using System.Globalization; + using System.Text.RegularExpressions; + using Emby.Naming.Common; + /// /// Helper class to retrieve name and year from audiobook previously retrieved name. /// diff --git a/Emby.Naming/AudioBook/AudioBookResolver.cs b/Emby.Naming/AudioBook/AudioBookResolver.cs index 8fd55655..2ed0a30f 100644 --- a/Emby.Naming/AudioBook/AudioBookResolver.cs +++ b/Emby.Naming/AudioBook/AudioBookResolver.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.IO; -using Emby.Naming.Common; -using Jellyfin.Extensions; - namespace Emby.Naming.AudioBook { + using System; + using System.IO; + using Emby.Naming.Common; + using Jellyfin.Extensions; + /// /// Resolve specifics (path, container, partNumber, chapterNumber) about audiobook file. /// diff --git a/Emby.Naming/Book/BookFileNameParser.cs b/Emby.Naming/Book/BookFileNameParser.cs index 6650a391..8a802f7f 100644 --- a/Emby.Naming/Book/BookFileNameParser.cs +++ b/Emby.Naming/Book/BookFileNameParser.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.RegularExpressions; - namespace Emby.Naming.Book { + using System.Text.RegularExpressions; + /// /// Helper class to retrieve basic metadata from a book filename. /// diff --git a/Emby.Naming/Book/BookFileNameParserResult.cs b/Emby.Naming/Book/BookFileNameParserResult.cs index 06c5cffb..b96e1cbf 100644 --- a/Emby.Naming/Book/BookFileNameParserResult.cs +++ b/Emby.Naming/Book/BookFileNameParserResult.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace Emby.Naming.Book { + using System; + /// /// Data object used to pass metadata parsed from a book filename. /// diff --git a/Emby.Naming/Common/EpisodeExpression.cs b/Emby.Naming/Common/EpisodeExpression.cs index 4b228f24..6f37ca75 100644 --- a/Emby.Naming/Common/EpisodeExpression.cs +++ b/Emby.Naming/Common/EpisodeExpression.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Text.RegularExpressions; - namespace Emby.Naming.Common { + using System; + using System.Text.RegularExpressions; + /// /// Regular expressions for parsing TV Episodes. /// diff --git a/Emby.Naming/ExternalFiles/ExternalPathParser.cs b/Emby.Naming/ExternalFiles/ExternalPathParser.cs index b3f49ed9..57f83972 100644 --- a/Emby.Naming/ExternalFiles/ExternalPathParser.cs +++ b/Emby.Naming/ExternalFiles/ExternalPathParser.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.IO; -using System.Linq; -using Emby.Naming.Common; -using Jellyfin.Extensions; -using MediaBrowser.Model.Dlna; -using MediaBrowser.Model.Globalization; - namespace Emby.Naming.ExternalFiles { + using System; + using System.IO; + using System.Linq; + using Emby.Naming.Common; + using Jellyfin.Extensions; + using MediaBrowser.Model.Dlna; + using MediaBrowser.Model.Globalization; + /// /// External media file parser class. /// diff --git a/Emby.Naming/TV/EpisodePathParser.cs b/Emby.Naming/TV/EpisodePathParser.cs index bdc88c25..d64f31b8 100644 --- a/Emby.Naming/TV/EpisodePathParser.cs +++ b/Emby.Naming/TV/EpisodePathParser.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using Emby.Naming.Common; - namespace Emby.Naming.TV { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Linq; + using Emby.Naming.Common; + /// /// Used to parse information about episode from path. /// diff --git a/Emby.Naming/TV/EpisodeResolver.cs b/Emby.Naming/TV/EpisodeResolver.cs index fc96b222..17a74855 100644 --- a/Emby.Naming/TV/EpisodeResolver.cs +++ b/Emby.Naming/TV/EpisodeResolver.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.IO; -using Emby.Naming.Common; -using Emby.Naming.Video; -using Jellyfin.Extensions; - namespace Emby.Naming.TV { + using System; + using System.IO; + using Emby.Naming.Common; + using Emby.Naming.Video; + using Jellyfin.Extensions; + /// /// Used to resolve information about episode from path. /// diff --git a/Emby.Naming/TV/SeasonPathParser.cs b/Emby.Naming/TV/SeasonPathParser.cs index c7f475c3..e8606380 100644 --- a/Emby.Naming/TV/SeasonPathParser.cs +++ b/Emby.Naming/TV/SeasonPathParser.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.IO; -using System.Text.RegularExpressions; - namespace Emby.Naming.TV { + using System; + using System.Globalization; + using System.IO; + using System.Text.RegularExpressions; + /// /// Class to parse season paths. /// diff --git a/Emby.Naming/TV/SeriesPathParser.cs b/Emby.Naming/TV/SeriesPathParser.cs index 4aeca48a..ee234b50 100644 --- a/Emby.Naming/TV/SeriesPathParser.cs +++ b/Emby.Naming/TV/SeriesPathParser.cs @@ -1,11 +1,7 @@ -// -// Copyright (c) PlaceholderCompany. All rights reserved. -// - -using Emby.Naming.Common; - namespace Emby.Naming.TV { + using Emby.Naming.Common; + /// /// Used to parse information about series from paths containing more information that only the series name. /// Uses the same regular expressions as the EpisodePathParser but have different success criteria. diff --git a/Emby.Naming/TV/SeriesResolver.cs b/Emby.Naming/TV/SeriesResolver.cs index 1a016228..6c9e8c49 100644 --- a/Emby.Naming/TV/SeriesResolver.cs +++ b/Emby.Naming/TV/SeriesResolver.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; -using System.Text.RegularExpressions; -using Emby.Naming.Common; - namespace Emby.Naming.TV { + using System.IO; + using System.Text.RegularExpressions; + using Emby.Naming.Common; + /// /// Used to resolve information about series from path. /// diff --git a/Emby.Naming/TV/TvParserHelpers.cs b/Emby.Naming/TV/TvParserHelpers.cs index 128ea300..e025d3ff 100644 --- a/Emby.Naming/TV/TvParserHelpers.cs +++ b/Emby.Naming/TV/TvParserHelpers.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Naming.TV; + using System; using System.Linq; using MediaBrowser.Model.Entities; -namespace Emby.Naming.TV; - /// /// Helper class for TV metadata parsing. /// diff --git a/Emby.Naming/Video/CleanDateTimeParser.cs b/Emby.Naming/Video/CleanDateTimeParser.cs index b16576aa..70c06b8a 100644 --- a/Emby.Naming/Video/CleanDateTimeParser.cs +++ b/Emby.Naming/Video/CleanDateTimeParser.cs @@ -1,13 +1,9 @@ -// -// Copyright (c) PlaceholderCompany. All rights reserved. -// - -using System.Collections.Generic; -using System.Globalization; -using System.Text.RegularExpressions; - namespace Emby.Naming.Video { + using System.Collections.Generic; + using System.Globalization; + using System.Text.RegularExpressions; + /// /// . /// diff --git a/Emby.Naming/Video/CleanStringParser.cs b/Emby.Naming/Video/CleanStringParser.cs index 9a5e1c79..4904a3ea 100644 --- a/Emby.Naming/Video/CleanStringParser.cs +++ b/Emby.Naming/Video/CleanStringParser.cs @@ -1,13 +1,9 @@ -// -// Copyright (c) PlaceholderCompany. All rights reserved. -// - -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.RegularExpressions; - namespace Emby.Naming.Video { + using System.Collections.Generic; + using System.Diagnostics.CodeAnalysis; + using System.Text.RegularExpressions; + /// /// . /// diff --git a/Emby.Naming/Video/ExtraResult.cs b/Emby.Naming/Video/ExtraResult.cs index f8749219..1bc440cb 100644 --- a/Emby.Naming/Video/ExtraResult.cs +++ b/Emby.Naming/Video/ExtraResult.cs @@ -1,11 +1,7 @@ -// -// Copyright (c) PlaceholderCompany. All rights reserved. -// - -using MediaBrowser.Model.Entities; - namespace Emby.Naming.Video { + using MediaBrowser.Model.Entities; + /// /// Holder object for passing results from ExtraResolver. /// diff --git a/Emby.Naming/Video/ExtraRule.cs b/Emby.Naming/Video/ExtraRule.cs index a0e3d8e9..af250d34 100644 --- a/Emby.Naming/Video/ExtraRule.cs +++ b/Emby.Naming/Video/ExtraRule.cs @@ -1,12 +1,8 @@ -// -// Copyright (c) PlaceholderCompany. All rights reserved. -// - -using MediaBrowser.Model.Entities; -using MediaType = Emby.Naming.Common.MediaType; - namespace Emby.Naming.Video { + using MediaBrowser.Model.Entities; + using MediaType = Emby.Naming.Common.MediaType; + /// /// A rule used to match a file path with an . /// diff --git a/Emby.Naming/Video/ExtraRuleResolver.cs b/Emby.Naming/Video/ExtraRuleResolver.cs index 1d44664b..6c0e23f6 100644 --- a/Emby.Naming/Video/ExtraRuleResolver.cs +++ b/Emby.Naming/Video/ExtraRuleResolver.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.IO; -using System.Text.RegularExpressions; -using Emby.Naming.Audio; -using Emby.Naming.Common; - namespace Emby.Naming.Video { + using System; + using System.IO; + using System.Text.RegularExpressions; + using Emby.Naming.Audio; + using Emby.Naming.Common; + /// /// Resolve if file is extra for video. /// diff --git a/Emby.Naming/Video/FileStack.cs b/Emby.Naming/Video/FileStack.cs index b36f9de7..3cdcd582 100644 --- a/Emby.Naming/Video/FileStack.cs +++ b/Emby.Naming/Video/FileStack.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using Jellyfin.Extensions; - namespace Emby.Naming.Video { + using System; + using System.Collections.Generic; + using Jellyfin.Extensions; + /// /// Object holding list of files paths with additional information. /// diff --git a/Emby.Naming/Video/FileStackRule.cs b/Emby.Naming/Video/FileStackRule.cs index a928dd44..7e4098cb 100644 --- a/Emby.Naming/Video/FileStackRule.cs +++ b/Emby.Naming/Video/FileStackRule.cs @@ -1,12 +1,8 @@ -// -// Copyright (c) PlaceholderCompany. All rights reserved. -// +namespace Emby.Naming.Video; using System.Diagnostics.CodeAnalysis; using System.Text.RegularExpressions; -namespace Emby.Naming.Video; - /// /// Regex based rule for file stacking (eg. disc1, disc2). /// diff --git a/Emby.Naming/Video/Format3DParser.cs b/Emby.Naming/Video/Format3DParser.cs index 98c9740a..cc9d761b 100644 --- a/Emby.Naming/Video/Format3DParser.cs +++ b/Emby.Naming/Video/Format3DParser.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Emby.Naming.Common; - namespace Emby.Naming.Video { + using System; + using Emby.Naming.Common; + /// /// Parse 3D format related flags. /// diff --git a/Emby.Naming/Video/StackResolver.cs b/Emby.Naming/Video/StackResolver.cs index 1d1a706f..4ffd578b 100644 --- a/Emby.Naming/Video/StackResolver.cs +++ b/Emby.Naming/Video/StackResolver.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using Emby.Naming.AudioBook; -using Emby.Naming.Common; -using MediaBrowser.Model.IO; - namespace Emby.Naming.Video { + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using Emby.Naming.AudioBook; + using Emby.Naming.Common; + using MediaBrowser.Model.IO; + /// /// Resolve from list of paths. /// diff --git a/Emby.Naming/Video/StubResolver.cs b/Emby.Naming/Video/StubResolver.cs index ef7136fc..97cd31a3 100644 --- a/Emby.Naming/Video/StubResolver.cs +++ b/Emby.Naming/Video/StubResolver.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.IO; -using Emby.Naming.Common; -using Jellyfin.Extensions; - namespace Emby.Naming.Video { + using System; + using System.IO; + using Emby.Naming.Common; + using Jellyfin.Extensions; + /// /// Resolve if file is stub (.disc). /// diff --git a/Emby.Naming/Video/VideoFileInfo.cs b/Emby.Naming/Video/VideoFileInfo.cs index 96e83295..3e4db656 100644 --- a/Emby.Naming/Video/VideoFileInfo.cs +++ b/Emby.Naming/Video/VideoFileInfo.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using MediaBrowser.Model.Entities; - namespace Emby.Naming.Video { + using System; + using MediaBrowser.Model.Entities; + /// /// Represents a single video file. /// diff --git a/Emby.Naming/Video/VideoInfo.cs b/Emby.Naming/Video/VideoInfo.cs index 53b4a14c..02a5fe38 100644 --- a/Emby.Naming/Video/VideoInfo.cs +++ b/Emby.Naming/Video/VideoInfo.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using MediaBrowser.Model.Entities; - namespace Emby.Naming.Video { + using System; + using System.Collections.Generic; + using MediaBrowser.Model.Entities; + /// /// Represents a complete video, including all parts and subtitles. /// diff --git a/Emby.Naming/Video/VideoListResolver.cs b/Emby.Naming/Video/VideoListResolver.cs index 36af2296..1b9311c2 100644 --- a/Emby.Naming/Video/VideoListResolver.cs +++ b/Emby.Naming/Video/VideoListResolver.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text.RegularExpressions; -using Emby.Naming.Common; -using Jellyfin.Extensions; -using MediaBrowser.Model.IO; - namespace Emby.Naming.Video { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.IO; + using System.Linq; + using System.Text.RegularExpressions; + using Emby.Naming.Common; + using Jellyfin.Extensions; + using MediaBrowser.Model.IO; + /// /// Resolves alternative versions and extras from list of video files. /// diff --git a/Emby.Naming/Video/VideoResolver.cs b/Emby.Naming/Video/VideoResolver.cs index c25ee432..b4e1ec8f 100644 --- a/Emby.Naming/Video/VideoResolver.cs +++ b/Emby.Naming/Video/VideoResolver.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using Emby.Naming.Common; -using Jellyfin.Extensions; - namespace Emby.Naming.Video { + using System; + using System.Diagnostics.CodeAnalysis; + using System.IO; + using Emby.Naming.Common; + using Jellyfin.Extensions; + /// /// Resolves from file path. /// diff --git a/Emby.Naming/obj/Debug/net10.0/Emby.Naming.csproj.AssemblyReference.cache b/Emby.Naming/obj/Debug/net10.0/Emby.Naming.csproj.AssemblyReference.cache index 7294dcae44ad5e7941122cd1e3d6f07c9704a6cd..811cd4198a8084d90cdea3cf098f3ef55f9fdf9b 100644 GIT binary patch delta 1200 zcmb7DO-vI(6zq2N!%ZBY(h{40ehP^(Z$h#SJv4$X#kXR|v+Y78;) zW{6377eitKdeno4crila!NeF7B#leNthh>|QRlm# zlnkO{o!V}DMYXp(z|pc!wGx)E=oFj87{lhAmUFd-;c4hJ8sQnr)JEr<-6KAA^;&YC zFHbz)*iKHpH+E>UEHt~mr-bOC9eEh6Yima#z@ktegFfyqe{Kw7dv76IF>pW8=dj7N z+ACxB+U8%7hPhNY;;%L)7hbJ8Bkv5`&eM7*3h7m_H%wh(bm%wm@4QCuh&RTCD2Bm7cex%nvk x2pkr_zqs=t(|n>0J~gy>qW_N^b^X@{Ga&`eNf|i1KMK!+5&PKIRzp9#{{R_pgyaAK delta 160 zcmexbHz|>WjZv6^fq^l7@&+d9$sa^`CmOi0&Dy$f%ia8mRR)v)Te41ekm6;`pB%`n zJb8gA@5D|XDgC6(Jbjncq|$W#ywsB7lEl1}#G(` +namespace Emby.Photos; + using System; using System.IO; using System.Linq; @@ -20,8 +22,6 @@ using TagLib.IFD; using TagLib.IFD.Entries; using TagLib.IFD.Tags; -namespace Emby.Photos; - /// /// Metadata provider for photos. /// diff --git a/Emby.Photos/obj/Debug/net10.0/Emby.Photos.csproj.AssemblyReference.cache b/Emby.Photos/obj/Debug/net10.0/Emby.Photos.csproj.AssemblyReference.cache index 134852e57e32b3692327f7f5014f35282ebbd36d..2fe2c17debe58b6222c360e021265fb635fb42e8 100644 GIT binary patch delta 3143 zcmb_e%WoS+9QHU(Nz=x1{h+0fG-=Wh2Y2j{2o)qGQYR5DNokYNLTgoB+f#ST?#^a* z9BQZt5+`y%vPK-BLgH~QD(VSDD+@7lEwv+PoMTLi3!LZNM+ghGIShHj_9zhM3B+-v#M z1Ybo(>g4URvuYf@iVUNAS-0|wsHAJh3I4!A1TNwdGV%rf_be(@%6SXX$t=wJ7{QWZ z0O3M=xH0{U{YM`FAl7~t=;tP2SMA0yxLCV0QfjxzaBmscTSj`zv>OR;n+bup+IQ1K zXAyC9Y`xBdoqU;P`o`FGuw!pb_y!=dTy-ci;Znt-x`{wPI}?7M-2zGWQ8Bl{;*q$mgEN+eRZz`&#-sAU3c5z&Ne5f% z!c;o7s22%#@MQ|;u2E!(S~_q6m&>|UhBF0+60Nl~>6<@QkEMS9;gU$8o@r7#IfW=Z zO>|SI`WkAfr>eLxTE@lq5pA(xli@)Xo!g}&hZ_;jI5t0-!vw)MDYfA|(rAS=dx3tT z#Z?m;DSBHm*xHJnGMfe6TJ^?raG%_o)wQyP9jX@{o-i&VrzMx@fV5mhCMH#NO=@IF zZsf41gF$5*9+dWSjNu83PX)G@5n0o@Uv;x6SWJ*W2=uQ_!z`T2PEEcFz)pB-Zbg)B z##O&^ySvE^ei#s}u)kZ|6$YMmcP)A<~B7r-I#Kzu68P)Y!Be;+E!M z1JwG)*XvZ5_mtR={JM>U-x;MI$3Oo0TR9;fn%&=pXXm{#C%bUIYp_8x5*3~7JR^tL zgJ_(65!uZ^_`n-}ZFm|Qo%XxvpqeG6Nstdwu|f!EdJobQ`|5%rSc=oP&8g7kZ?74< zIktzt51tdcm%RV|Ee(vqM4{f$IguoMbLF4gX2 zo7{AwW3L+t!UYAw#&!_w+}B}e*d>(kxi6O`RIV5r37qrpbHM)N&qIlX7ytS3`sZ&) yQu~{c(BY*NsODo^r~gC$e_9e9W|w{0JH&d!2`Ew!Yg3TiZyk95_CU|Em!1I4DYsMr delta 96 zcmV-m0H6Qni2=o22nGQa00001XOpl38 -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using Jellyfin.Extensions; -using MediaBrowser.Common.Configuration; - namespace Emby.Server.Implementations.AppBase { + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using Jellyfin.Extensions; + using MediaBrowser.Common.Configuration; + /// /// Provides a base class to hold common application paths used by both the UI and Server. /// This can be subclassed to add application-specific paths. diff --git a/Emby.Server.Implementations/AppBase/BaseConfigurationManager.cs b/Emby.Server.Implementations/AppBase/BaseConfigurationManager.cs index dc339922..33bb4170 100644 --- a/Emby.Server.Implementations/AppBase/BaseConfigurationManager.cs +++ b/Emby.Server.Implementations/AppBase/BaseConfigurationManager.cs @@ -2,22 +2,22 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Threading; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Events; -using MediaBrowser.Common.Extensions; -using MediaBrowser.Model.Configuration; -using MediaBrowser.Model.Serialization; -using Microsoft.Extensions.Logging; - namespace Emby.Server.Implementations.AppBase { + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.Globalization; + using System.IO; + using System.Linq; + using System.Threading; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Common.Events; + using MediaBrowser.Common.Extensions; + using MediaBrowser.Model.Configuration; + using MediaBrowser.Model.Serialization; + using Microsoft.Extensions.Logging; + /// /// Class BaseConfigurationManager. /// diff --git a/Emby.Server.Implementations/AppBase/ConfigurationHelper.cs b/Emby.Server.Implementations/AppBase/ConfigurationHelper.cs index a76049e8..44ccc3fb 100644 --- a/Emby.Server.Implementations/AppBase/ConfigurationHelper.cs +++ b/Emby.Server.Implementations/AppBase/ConfigurationHelper.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.IO; -using MediaBrowser.Model.Serialization; - namespace Emby.Server.Implementations.AppBase { + using System; + using System.IO; + using MediaBrowser.Model.Serialization; + /// /// Class ConfigurationHelper. /// diff --git a/Emby.Server.Implementations/Branding/BrandingConfigurationFactory.cs b/Emby.Server.Implementations/Branding/BrandingConfigurationFactory.cs index c6614334..d8465b1b 100644 --- a/Emby.Server.Implementations/Branding/BrandingConfigurationFactory.cs +++ b/Emby.Server.Implementations/Branding/BrandingConfigurationFactory.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Model.Branding; - namespace Emby.Server.Implementations.Branding { + using System.Collections.Generic; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Model.Branding; + /// /// A configuration factory for . /// diff --git a/Emby.Server.Implementations/Chapters/ChapterManager.cs b/Emby.Server.Implementations/Chapters/ChapterManager.cs index 3078f5be..fba6d4f1 100644 --- a/Emby.Server.Implementations/Chapters/ChapterManager.cs +++ b/Emby.Server.Implementations/Chapters/ChapterManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.Chapters; + using System; using System.Collections.Generic; using System.IO; @@ -23,8 +25,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Model.MediaInfo; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.Chapters; - /// /// The chapter manager. /// diff --git a/Emby.Server.Implementations/Collections/CollectionImageProvider.cs b/Emby.Server.Implementations/Collections/CollectionImageProvider.cs index 44e0bc9b..960e9859 100644 --- a/Emby.Server.Implementations/Collections/CollectionImageProvider.cs +++ b/Emby.Server.Implementations/Collections/CollectionImageProvider.cs @@ -2,21 +2,21 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Linq; -using Emby.Server.Implementations.Images; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Drawing; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.IO; - namespace Emby.Server.Implementations.Collections { + using System.Collections.Generic; + using System.Linq; + using Emby.Server.Implementations.Images; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Drawing; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.IO; + /// /// A collection image provider. /// diff --git a/Emby.Server.Implementations/Collections/CollectionManager.cs b/Emby.Server.Implementations/Collections/CollectionManager.cs index 7ca77e3d..a95b77a0 100644 --- a/Emby.Server.Implementations/Collections/CollectionManager.cs +++ b/Emby.Server.Implementations/Collections/CollectionManager.cs @@ -2,27 +2,27 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Collections; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Configuration; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Globalization; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace Emby.Server.Implementations.Collections { + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Collections; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Configuration; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Globalization; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// The collection manager. /// diff --git a/Emby.Server.Implementations/Configuration/ServerConfigurationManager.cs b/Emby.Server.Implementations/Configuration/ServerConfigurationManager.cs index 93ddbd25..9fc744c2 100644 --- a/Emby.Server.Implementations/Configuration/ServerConfigurationManager.cs +++ b/Emby.Server.Implementations/Configuration/ServerConfigurationManager.cs @@ -2,20 +2,20 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.IO; -using Emby.Server.Implementations.AppBase; -using Jellyfin.Data.Events; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Model.Configuration; -using MediaBrowser.Model.Serialization; -using Microsoft.Extensions.Logging; - namespace Emby.Server.Implementations.Configuration { + using System; + using System.Globalization; + using System.IO; + using Emby.Server.Implementations.AppBase; + using Jellyfin.Data.Events; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Model.Configuration; + using MediaBrowser.Model.Serialization; + using Microsoft.Extensions.Logging; + /// /// Class ServerConfigurationManager. /// diff --git a/Emby.Server.Implementations/ConfigurationOptions.cs b/Emby.Server.Implementations/ConfigurationOptions.cs index 18a709e1..bddbbd67 100644 --- a/Emby.Server.Implementations/ConfigurationOptions.cs +++ b/Emby.Server.Implementations/ConfigurationOptions.cs @@ -1,12 +1,8 @@ -// -// Copyright (c) PlaceholderCompany. All rights reserved. -// - -using System.Collections.Generic; -using static MediaBrowser.Controller.Extensions.ConfigurationExtensions; - namespace Emby.Server.Implementations { + using System.Collections.Generic; + using static MediaBrowser.Controller.Extensions.ConfigurationExtensions; + /// /// Static class containing the default configuration options for the web server. /// diff --git a/Emby.Server.Implementations/Cryptography/CryptographyProvider.cs b/Emby.Server.Implementations/Cryptography/CryptographyProvider.cs index 5d2e17e6..40e699ed 100644 --- a/Emby.Server.Implementations/Cryptography/CryptographyProvider.cs +++ b/Emby.Server.Implementations/Cryptography/CryptographyProvider.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Security.Cryptography; -using MediaBrowser.Model.Cryptography; -using static MediaBrowser.Model.Cryptography.Constants; - namespace Emby.Server.Implementations.Cryptography { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Security.Cryptography; + using MediaBrowser.Model.Cryptography; + using static MediaBrowser.Model.Cryptography.Constants; + /// /// Class providing abstractions over cryptographic functions. /// diff --git a/Emby.Server.Implementations/Data/ItemTypeLookup.cs b/Emby.Server.Implementations/Data/ItemTypeLookup.cs index ccf7374e..82cd33ed 100644 --- a/Emby.Server.Implementations/Data/ItemTypeLookup.cs +++ b/Emby.Server.Implementations/Data/ItemTypeLookup.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.Data; + using System.Collections.Frozen; using System.Collections.Generic; using System.Threading.Channels; @@ -15,8 +17,6 @@ using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Playlists; -namespace Emby.Server.Implementations.Data; - /// public class ItemTypeLookup : IItemTypeLookup { diff --git a/Emby.Server.Implementations/Data/TypeMapper.cs b/Emby.Server.Implementations/Data/TypeMapper.cs index 866c35c6..e3f45f2d 100644 --- a/Emby.Server.Implementations/Data/TypeMapper.cs +++ b/Emby.Server.Implementations/Data/TypeMapper.cs @@ -1,13 +1,9 @@ -// -// Copyright (c) PlaceholderCompany. All rights reserved. -// - -using System; -using System.Collections.Concurrent; -using System.Linq; - namespace Emby.Server.Implementations.Data { + using System; + using System.Collections.Concurrent; + using System.Linq; + /// /// Class TypeMapper. /// diff --git a/Emby.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs b/Emby.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs index e8b96371..97a4ce6b 100644 --- a/Emby.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs +++ b/Emby.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.EntryPoints; + using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -24,8 +26,6 @@ using MediaBrowser.Model.Session; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.EntryPoints; - /// /// A responsible for notifying users when libraries are updated. /// diff --git a/Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs b/Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs index 489589e5..bc49109c 100644 --- a/Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs +++ b/Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs @@ -2,20 +2,20 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Session; -using Microsoft.Extensions.Hosting; - namespace Emby.Server.Implementations.EntryPoints { + using System; + using System.Collections.Generic; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Session; + using Microsoft.Extensions.Hosting; + /// /// responsible for notifying users when associated item data is updated. /// diff --git a/Emby.Server.Implementations/HttpServer/WebSocketConnection.cs b/Emby.Server.Implementations/HttpServer/WebSocketConnection.cs index c212cff0..a8851b72 100644 --- a/Emby.Server.Implementations/HttpServer/WebSocketConnection.cs +++ b/Emby.Server.Implementations/HttpServer/WebSocketConnection.cs @@ -2,24 +2,24 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Buffers; -using System.IO.Pipelines; -using System.Net; -using System.Net.WebSockets; -using System.Text; -using System.Text.Json; -using System.Threading; -using System.Threading.Tasks; -using Jellyfin.Extensions.Json; -using MediaBrowser.Controller.Net; -using MediaBrowser.Controller.Net.WebSocketMessages; -using MediaBrowser.Controller.Net.WebSocketMessages.Outbound; -using MediaBrowser.Model.Session; -using Microsoft.Extensions.Logging; - namespace Emby.Server.Implementations.HttpServer { + using System; + using System.Buffers; + using System.IO.Pipelines; + using System.Net; + using System.Net.WebSockets; + using System.Text; + using System.Text.Json; + using System.Threading; + using System.Threading.Tasks; + using Jellyfin.Extensions.Json; + using MediaBrowser.Controller.Net; + using MediaBrowser.Controller.Net.WebSocketMessages; + using MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using MediaBrowser.Model.Session; + using Microsoft.Extensions.Logging; + /// /// Class WebSocketConnection. /// diff --git a/Emby.Server.Implementations/IO/LibraryMonitor.cs b/Emby.Server.Implementations/IO/LibraryMonitor.cs index 3414eaf5..371bb17b 100644 --- a/Emby.Server.Implementations/IO/LibraryMonitor.cs +++ b/Emby.Server.Implementations/IO/LibraryMonitor.cs @@ -2,22 +2,22 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using Emby.Server.Implementations.Library; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; - namespace Emby.Server.Implementations.IO { + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Threading.Tasks; + using Emby.Server.Implementations.Library; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Library; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Hosting; + using Microsoft.Extensions.Logging; + /// public sealed class LibraryMonitor : ILibraryMonitor, IDisposable { diff --git a/Emby.Server.Implementations/IO/ManagedFileSystem.cs b/Emby.Server.Implementations/IO/ManagedFileSystem.cs index fc1a4edf..7d934f89 100644 --- a/Emby.Server.Implementations/IO/ManagedFileSystem.cs +++ b/Emby.Server.Implementations/IO/ManagedFileSystem.cs @@ -2,20 +2,20 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Security; -using Jellyfin.Extensions; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.IO; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace Emby.Server.Implementations.IO { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.IO; + using System.Linq; + using System.Security; + using Jellyfin.Extensions; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.IO; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// Class ManagedFileSystem. /// diff --git a/Emby.Server.Implementations/Images/FolderImageProvider.cs b/Emby.Server.Implementations/Images/FolderImageProvider.cs index c7c98abd..90f7568a 100644 --- a/Emby.Server.Implementations/Images/FolderImageProvider.cs +++ b/Emby.Server.Implementations/Images/FolderImageProvider.cs @@ -1,7 +1,3 @@ -// -// Copyright (c) PlaceholderCompany. All rights reserved. -// - #pragma warning disable CS1591 using MediaBrowser.Common.Configuration; diff --git a/Emby.Server.Implementations/Images/PhotoAlbumImageProvider.cs b/Emby.Server.Implementations/Images/PhotoAlbumImageProvider.cs index ea683fb2..1ddb4c75 100644 --- a/Emby.Server.Implementations/Images/PhotoAlbumImageProvider.cs +++ b/Emby.Server.Implementations/Images/PhotoAlbumImageProvider.cs @@ -1,7 +1,3 @@ -// -// Copyright (c) PlaceholderCompany. All rights reserved. -// - #pragma warning disable CS1591 using MediaBrowser.Common.Configuration; diff --git a/Emby.Server.Implementations/Library/CoreResolutionIgnoreRule.cs b/Emby.Server.Implementations/Library/CoreResolutionIgnoreRule.cs index 28463903..8c42249e 100644 --- a/Emby.Server.Implementations/Library/CoreResolutionIgnoreRule.cs +++ b/Emby.Server.Implementations/Library/CoreResolutionIgnoreRule.cs @@ -2,17 +2,17 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.IO; -using Emby.Naming.Audio; -using Emby.Naming.Common; -using MediaBrowser.Controller; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Resolvers; -using MediaBrowser.Model.IO; - namespace Emby.Server.Implementations.Library { + using System; + using System.IO; + using Emby.Naming.Audio; + using Emby.Naming.Common; + using MediaBrowser.Controller; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Resolvers; + using MediaBrowser.Model.IO; + /// /// Provides the core resolver ignore rules. /// diff --git a/Emby.Server.Implementations/Library/DotIgnoreIgnoreRule.cs b/Emby.Server.Implementations/Library/DotIgnoreIgnoreRule.cs index c4c08526..86397282 100644 --- a/Emby.Server.Implementations/Library/DotIgnoreIgnoreRule.cs +++ b/Emby.Server.Implementations/Library/DotIgnoreIgnoreRule.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.Library; + using System; using System.IO; using System.Text.RegularExpressions; @@ -10,8 +12,6 @@ using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Resolvers; using MediaBrowser.Model.IO; -namespace Emby.Server.Implementations.Library; - /// /// Resolver rule class for ignoring files via .ignore. /// diff --git a/Emby.Server.Implementations/Library/ExternalDataManager.cs b/Emby.Server.Implementations/Library/ExternalDataManager.cs index 26ba1002..9942a9b1 100644 --- a/Emby.Server.Implementations/Library/ExternalDataManager.cs +++ b/Emby.Server.Implementations/Library/ExternalDataManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.Library; + using System; using System.IO; using System.Linq; @@ -14,8 +16,6 @@ using MediaBrowser.Controller.MediaSegments; using MediaBrowser.Controller.Trickplay; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.Library; - /// /// IExternalDataManager implementation. /// diff --git a/Emby.Server.Implementations/Library/IgnorePatterns.cs b/Emby.Server.Implementations/Library/IgnorePatterns.cs index b6920034..95ba14a0 100644 --- a/Emby.Server.Implementations/Library/IgnorePatterns.cs +++ b/Emby.Server.Implementations/Library/IgnorePatterns.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using DotNet.Globbing; - namespace Emby.Server.Implementations.Library { + using System; + using DotNet.Globbing; + /// /// Glob patterns for files to ignore. /// diff --git a/Emby.Server.Implementations/Library/KeyframeManager.cs b/Emby.Server.Implementations/Library/KeyframeManager.cs index 79019868..bd67dc6a 100644 --- a/Emby.Server.Implementations/Library/KeyframeManager.cs +++ b/Emby.Server.Implementations/Library/KeyframeManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.Library; + using System; using System.Collections.Generic; using System.Threading; @@ -10,8 +12,6 @@ using Jellyfin.MediaEncoding.Keyframes; using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Persistence; -namespace Emby.Server.Implementations.Library; - /// /// Manager for Keyframe data. /// diff --git a/Emby.Server.Implementations/Library/PathExtensions.cs b/Emby.Server.Implementations/Library/PathExtensions.cs index 1d6f7407..44d700be 100644 --- a/Emby.Server.Implementations/Library/PathExtensions.cs +++ b/Emby.Server.Implementations/Library/PathExtensions.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using MediaBrowser.Common.Providers; - namespace Emby.Server.Implementations.Library { + using System; + using System.Diagnostics.CodeAnalysis; + using System.IO; + using MediaBrowser.Common.Providers; + /// /// Class providing extension methods for working with paths. /// diff --git a/Emby.Server.Implementations/Library/PathManager.cs b/Emby.Server.Implementations/Library/PathManager.cs index 534d8623..4a8c26d3 100644 --- a/Emby.Server.Implementations/Library/PathManager.cs +++ b/Emby.Server.Implementations/Library/PathManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.Library; + using System; using System.Collections.Generic; using System.Globalization; @@ -11,8 +13,6 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; -namespace Emby.Server.Implementations.Library; - /// /// IPathManager implementation. /// diff --git a/Emby.Server.Implementations/Library/ResolverHelper.cs b/Emby.Server.Implementations/Library/ResolverHelper.cs index 6d88c767..4ee61383 100644 --- a/Emby.Server.Implementations/Library/ResolverHelper.cs +++ b/Emby.Server.Implementations/Library/ResolverHelper.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.IO; -using System.Linq; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.IO; - namespace Emby.Server.Implementations.Library { + using System; + using System.IO; + using System.Linq; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.IO; + /// /// Class ResolverHelper. /// diff --git a/Emby.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs b/Emby.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs index b5deedc1..ef5ab0b8 100644 --- a/Emby.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs @@ -2,26 +2,26 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Emby.Naming.Audio; -using Emby.Naming.Common; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Controller.Resolvers; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace Emby.Server.Implementations.Library.Resolvers.Audio { +#nullable disable + + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using Emby.Naming.Audio; + using Emby.Naming.Common; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Controller.Resolvers; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// The music album resolver. /// diff --git a/Emby.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs b/Emby.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs index 1f1b1301..5cec27af 100644 --- a/Emby.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs @@ -2,23 +2,23 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Linq; -using System.Threading.Tasks; -using Emby.Naming.Audio; -using Emby.Naming.Common; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Controller.Resolvers; -using MediaBrowser.Model.Entities; -using Microsoft.Extensions.Logging; - namespace Emby.Server.Implementations.Library.Resolvers.Audio { +#nullable disable + + using System; + using System.Linq; + using System.Threading.Tasks; + using Emby.Naming.Audio; + using Emby.Naming.Common; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Controller.Resolvers; + using MediaBrowser.Model.Entities; + using Microsoft.Extensions.Logging; + /// /// The music artist resolver. /// diff --git a/Emby.Server.Implementations/Library/Resolvers/ExtraResolver.cs b/Emby.Server.Implementations/Library/Resolvers/ExtraResolver.cs index 806a5382..08d5734e 100644 --- a/Emby.Server.Implementations/Library/Resolvers/ExtraResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/ExtraResolver.cs @@ -2,21 +2,21 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using Emby.Naming.Common; -using Emby.Naming.Video; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Controller.Resolvers; -using MediaBrowser.Model.Entities; -using Microsoft.Extensions.Logging; -using static Emby.Naming.Video.ExtraRuleResolver; - namespace Emby.Server.Implementations.Library.Resolvers { + using System; + using System.Diagnostics.CodeAnalysis; + using System.IO; + using Emby.Naming.Common; + using Emby.Naming.Video; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Controller.Resolvers; + using MediaBrowser.Model.Entities; + using Microsoft.Extensions.Logging; + using static Emby.Naming.Video.ExtraRuleResolver; + /// /// Resolves a Path into a Video or Video subclass. /// diff --git a/Emby.Server.Implementations/Library/Resolvers/FolderResolver.cs b/Emby.Server.Implementations/Library/Resolvers/FolderResolver.cs index 3a35a1e4..e509bf70 100644 --- a/Emby.Server.Implementations/Library/Resolvers/FolderResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/FolderResolver.cs @@ -1,15 +1,11 @@ -// -// Copyright (c) PlaceholderCompany. All rights reserved. -// - -#nullable disable - -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Resolvers; - namespace Emby.Server.Implementations.Library.Resolvers { +#nullable disable + + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Resolvers; + /// /// Class FolderResolver. /// diff --git a/Emby.Server.Implementations/Library/Resolvers/GenericFolderResolver.cs b/Emby.Server.Implementations/Library/Resolvers/GenericFolderResolver.cs index 486ca8d7..49912135 100644 --- a/Emby.Server.Implementations/Library/Resolvers/GenericFolderResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/GenericFolderResolver.cs @@ -1,15 +1,11 @@ -// -// Copyright (c) PlaceholderCompany. All rights reserved. -// - -#nullable disable - -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Resolvers; - namespace Emby.Server.Implementations.Library.Resolvers { +#nullable disable + + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Resolvers; + /// /// Class FolderResolver. /// diff --git a/Emby.Server.Implementations/Library/Resolvers/GenericVideoResolver.cs b/Emby.Server.Implementations/Library/Resolvers/GenericVideoResolver.cs index a121e9f3..ac120e89 100644 --- a/Emby.Server.Implementations/Library/Resolvers/GenericVideoResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/GenericVideoResolver.cs @@ -1,16 +1,12 @@ -// -// Copyright (c) PlaceholderCompany. All rights reserved. -// - -#nullable disable - -using Emby.Naming.Common; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Providers; -using Microsoft.Extensions.Logging; - namespace Emby.Server.Implementations.Library.Resolvers { +#nullable disable + + using Emby.Naming.Common; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Providers; + using Microsoft.Extensions.Logging; + /// /// Resolves a Path into an instance of the class. /// diff --git a/Emby.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs b/Emby.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs index 44297ad8..ebb27fc0 100644 --- a/Emby.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs @@ -2,17 +2,17 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.IO; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.Entities; - namespace Emby.Server.Implementations.Library.Resolvers.Movies { +#nullable disable + + using System; + using System.IO; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Library; + using MediaBrowser.Model.Entities; + /// /// Class BoxSetResolver. /// diff --git a/Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs index 9ce2968b..7755f505 100644 --- a/Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs @@ -2,30 +2,30 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text.RegularExpressions; -using Emby.Naming.Common; -using Emby.Naming.Video; -using Jellyfin.Data.Enums; -using Jellyfin.Extensions; -using MediaBrowser.Controller.Drawing; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Controller.Resolvers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace Emby.Server.Implementations.Library.Resolvers.Movies { +#nullable disable + + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Text.RegularExpressions; + using Emby.Naming.Common; + using Emby.Naming.Video; + using Jellyfin.Data.Enums; + using Jellyfin.Extensions; + using MediaBrowser.Controller.Drawing; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Controller.Resolvers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// Class MovieResolver. /// diff --git a/Emby.Server.Implementations/Library/Resolvers/PhotoAlbumResolver.cs b/Emby.Server.Implementations/Library/Resolvers/PhotoAlbumResolver.cs index 5d2455d2..13363270 100644 --- a/Emby.Server.Implementations/Library/Resolvers/PhotoAlbumResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/PhotoAlbumResolver.cs @@ -2,19 +2,19 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using Emby.Naming.Common; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Drawing; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Resolvers; -using MediaBrowser.Model.Entities; - namespace Emby.Server.Implementations.Library.Resolvers { +#nullable disable + + using System; + using Emby.Naming.Common; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Drawing; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Resolvers; + using MediaBrowser.Model.Entities; + /// /// Class PhotoAlbumResolver. /// diff --git a/Emby.Server.Implementations/Library/Resolvers/PhotoResolver.cs b/Emby.Server.Implementations/Library/Resolvers/PhotoResolver.cs index fc0d6ad0..1076aa51 100644 --- a/Emby.Server.Implementations/Library/Resolvers/PhotoResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/PhotoResolver.cs @@ -2,22 +2,22 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.IO; -using System.Linq; -using Emby.Naming.Common; -using Emby.Naming.Video; -using Jellyfin.Data.Enums; -using Jellyfin.Extensions; -using MediaBrowser.Controller.Drawing; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Controller.Resolvers; -using MediaBrowser.Model.Entities; - namespace Emby.Server.Implementations.Library.Resolvers { + using System; + using System.IO; + using System.Linq; + using Emby.Naming.Common; + using Emby.Naming.Video; + using Jellyfin.Data.Enums; + using Jellyfin.Extensions; + using MediaBrowser.Controller.Drawing; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Controller.Resolvers; + using MediaBrowser.Model.Entities; + /// /// Class PhotoResolver. /// diff --git a/Emby.Server.Implementations/Library/Resolvers/PlaylistResolver.cs b/Emby.Server.Implementations/Library/Resolvers/PlaylistResolver.cs index 6cf16faf..3fb5f8aa 100644 --- a/Emby.Server.Implementations/Library/Resolvers/PlaylistResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/PlaylistResolver.cs @@ -2,20 +2,20 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.IO; -using System.Linq; -using Jellyfin.Data.Enums; -using Jellyfin.Extensions; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Playlists; -using MediaBrowser.Controller.Resolvers; -using MediaBrowser.LocalMetadata.Savers; - namespace Emby.Server.Implementations.Library.Resolvers { +#nullable disable + + using System; + using System.IO; + using System.Linq; + using Jellyfin.Data.Enums; + using Jellyfin.Extensions; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Playlists; + using MediaBrowser.Controller.Resolvers; + using MediaBrowser.LocalMetadata.Savers; + /// /// for library items. /// diff --git a/Emby.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs b/Emby.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs index 94b88396..99c3c9a6 100644 --- a/Emby.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs @@ -2,20 +2,20 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Linq; -using Emby.Naming.Common; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using Microsoft.Extensions.Logging; - namespace Emby.Server.Implementations.Library.Resolvers.TV { +#nullable disable + + using System; + using System.Linq; + using Emby.Naming.Common; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using Microsoft.Extensions.Logging; + /// /// Class EpisodeResolver. /// diff --git a/Emby.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs b/Emby.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs index 428b8320..55e1c721 100644 --- a/Emby.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System.Globalization; -using Emby.Naming.Common; -using Emby.Naming.TV; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.Globalization; -using Microsoft.Extensions.Logging; - namespace Emby.Server.Implementations.Library.Resolvers.TV { +#nullable disable + + using System.Globalization; + using Emby.Naming.Common; + using Emby.Naming.TV; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Library; + using MediaBrowser.Model.Globalization; + using Microsoft.Extensions.Logging; + /// /// Class SeasonResolver. /// diff --git a/Emby.Server.Implementations/Library/SplashscreenPostScanTask.cs b/Emby.Server.Implementations/Library/SplashscreenPostScanTask.cs index 98bfb015..b77da72c 100644 --- a/Emby.Server.Implementations/Library/SplashscreenPostScanTask.cs +++ b/Emby.Server.Implementations/Library/SplashscreenPostScanTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.Library; + using System; using System.Collections.Generic; using System.Linq; @@ -17,8 +19,6 @@ using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Entities; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.Library; - /// /// The splashscreen post scan task. /// diff --git a/Emby.Server.Implementations/Library/Validators/ArtistsPostScanTask.cs b/Emby.Server.Implementations/Library/Validators/ArtistsPostScanTask.cs index 07d8957a..2f48ead5 100644 --- a/Emby.Server.Implementations/Library/Validators/ArtistsPostScanTask.cs +++ b/Emby.Server.Implementations/Library/Validators/ArtistsPostScanTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.Library.Validators; + using System; using System.Threading; using System.Threading.Tasks; @@ -9,8 +11,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.Library.Validators; - /// /// Class ArtistsPostScanTask. /// diff --git a/Emby.Server.Implementations/Library/Validators/ArtistsValidator.cs b/Emby.Server.Implementations/Library/Validators/ArtistsValidator.cs index 0ec73b60..b00a0e37 100644 --- a/Emby.Server.Implementations/Library/Validators/ArtistsValidator.cs +++ b/Emby.Server.Implementations/Library/Validators/ArtistsValidator.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.Library.Validators; + using System; using System.Globalization; using System.Linq; @@ -14,8 +16,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.Library.Validators; - /// /// Class ArtistsValidator. /// diff --git a/Emby.Server.Implementations/Library/Validators/CollectionPostScanTask.cs b/Emby.Server.Implementations/Library/Validators/CollectionPostScanTask.cs index 668a3226..2f4aedc8 100644 --- a/Emby.Server.Implementations/Library/Validators/CollectionPostScanTask.cs +++ b/Emby.Server.Implementations/Library/Validators/CollectionPostScanTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.Library.Validators; + using System; using System.Collections.Generic; using System.Linq; @@ -15,8 +17,6 @@ using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Library; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.Library.Validators; - /// /// Class CollectionPostScanTask. /// diff --git a/Emby.Server.Implementations/Library/Validators/GenresPostScanTask.cs b/Emby.Server.Implementations/Library/Validators/GenresPostScanTask.cs index 62fbf4e5..6d950f9e 100644 --- a/Emby.Server.Implementations/Library/Validators/GenresPostScanTask.cs +++ b/Emby.Server.Implementations/Library/Validators/GenresPostScanTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.Library.Validators; + using System; using System.Threading; using System.Threading.Tasks; @@ -9,8 +11,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.Library.Validators; - /// /// Class GenresPostScanTask. /// diff --git a/Emby.Server.Implementations/Library/Validators/GenresValidator.cs b/Emby.Server.Implementations/Library/Validators/GenresValidator.cs index 81396870..87547bf5 100644 --- a/Emby.Server.Implementations/Library/Validators/GenresValidator.cs +++ b/Emby.Server.Implementations/Library/Validators/GenresValidator.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.Library.Validators; + using System; using System.Globalization; using System.Threading; @@ -12,8 +14,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.Library.Validators; - /// /// Class GenresValidator. /// diff --git a/Emby.Server.Implementations/Library/Validators/MusicGenresPostScanTask.cs b/Emby.Server.Implementations/Library/Validators/MusicGenresPostScanTask.cs index 6eaad935..5de18279 100644 --- a/Emby.Server.Implementations/Library/Validators/MusicGenresPostScanTask.cs +++ b/Emby.Server.Implementations/Library/Validators/MusicGenresPostScanTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.Library.Validators; + using System; using System.Threading; using System.Threading.Tasks; @@ -9,8 +11,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.Library.Validators; - /// /// Class MusicGenresPostScanTask. /// diff --git a/Emby.Server.Implementations/Library/Validators/MusicGenresValidator.cs b/Emby.Server.Implementations/Library/Validators/MusicGenresValidator.cs index d2c8d81d..d854b5a7 100644 --- a/Emby.Server.Implementations/Library/Validators/MusicGenresValidator.cs +++ b/Emby.Server.Implementations/Library/Validators/MusicGenresValidator.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.Library.Validators; + using System; using System.Threading; using System.Threading.Tasks; @@ -9,8 +11,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.Library.Validators; - /// /// Class MusicGenresValidator. /// diff --git a/Emby.Server.Implementations/Library/Validators/PeopleValidator.cs b/Emby.Server.Implementations/Library/Validators/PeopleValidator.cs index 3fc12a4d..0877ce8a 100644 --- a/Emby.Server.Implementations/Library/Validators/PeopleValidator.cs +++ b/Emby.Server.Implementations/Library/Validators/PeopleValidator.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.Library.Validators; + using System; using System.Linq; using System.Threading; @@ -13,8 +15,6 @@ using MediaBrowser.Controller.Providers; using MediaBrowser.Model.IO; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.Library.Validators; - /// /// Class PeopleValidator. /// diff --git a/Emby.Server.Implementations/Library/Validators/StudiosPostScanTask.cs b/Emby.Server.Implementations/Library/Validators/StudiosPostScanTask.cs index 8df772ab..28b2766d 100644 --- a/Emby.Server.Implementations/Library/Validators/StudiosPostScanTask.cs +++ b/Emby.Server.Implementations/Library/Validators/StudiosPostScanTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.Library.Validators; + using System; using System.Threading; using System.Threading.Tasks; @@ -9,8 +11,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.Library.Validators; - /// /// Class MusicGenresPostScanTask. /// diff --git a/Emby.Server.Implementations/Library/Validators/StudiosValidator.cs b/Emby.Server.Implementations/Library/Validators/StudiosValidator.cs index 1cf3daef..ec57b173 100644 --- a/Emby.Server.Implementations/Library/Validators/StudiosValidator.cs +++ b/Emby.Server.Implementations/Library/Validators/StudiosValidator.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.Library.Validators; + using System; using System.Globalization; using System.Threading; @@ -12,8 +14,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.Library.Validators; - /// /// Class StudiosValidator. /// diff --git a/Emby.Server.Implementations/Localization/LocalizationManager.cs b/Emby.Server.Implementations/Localization/LocalizationManager.cs index ecdbde15..8fdfc419 100644 --- a/Emby.Server.Implementations/Localization/LocalizationManager.cs +++ b/Emby.Server.Implementations/Localization/LocalizationManager.cs @@ -2,25 +2,25 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Concurrent; -using System.Collections.Frozen; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text.Json; -using System.Threading.Tasks; -using Jellyfin.Extensions; -using Jellyfin.Extensions.Json; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Globalization; -using Microsoft.Extensions.Logging; - namespace Emby.Server.Implementations.Localization { + using System; + using System.Collections.Concurrent; + using System.Collections.Frozen; + using System.Collections.Generic; + using System.Diagnostics.CodeAnalysis; + using System.IO; + using System.Linq; + using System.Reflection; + using System.Text.Json; + using System.Threading.Tasks; + using Jellyfin.Extensions; + using Jellyfin.Extensions.Json; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Globalization; + using Microsoft.Extensions.Logging; + /// /// Class LocalizationManager. /// diff --git a/Emby.Server.Implementations/Plugins/PluginLoadContext.cs b/Emby.Server.Implementations/Plugins/PluginLoadContext.cs index c3bb7269..76dbf168 100644 --- a/Emby.Server.Implementations/Plugins/PluginLoadContext.cs +++ b/Emby.Server.Implementations/Plugins/PluginLoadContext.cs @@ -1,12 +1,8 @@ -// -// Copyright (c) PlaceholderCompany. All rights reserved. -// +namespace Emby.Server.Implementations.Plugins; using System.Reflection; using System.Runtime.Loader; -namespace Emby.Server.Implementations.Plugins; - /// /// A custom for loading Jellyfin plugins. /// diff --git a/Emby.Server.Implementations/Plugins/PluginManager.cs b/Emby.Server.Implementations/Plugins/PluginManager.cs index a824f0c4..4b3ae26b 100644 --- a/Emby.Server.Implementations/Plugins/PluginManager.cs +++ b/Emby.Server.Implementations/Plugins/PluginManager.cs @@ -2,34 +2,34 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Net.Http; -using System.Reflection; -using System.Runtime.Loader; -using System.Text; -using System.Text.Json; -using System.Threading.Tasks; -using Emby.Server.Implementations.Library; -using Jellyfin.Extensions.Json; -using Jellyfin.Extensions.Json.Converters; -using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Net; -using MediaBrowser.Common.Plugins; -using MediaBrowser.Controller; -using MediaBrowser.Controller.Plugins; -using MediaBrowser.Model.Configuration; -using MediaBrowser.Model.IO; -using MediaBrowser.Model.Plugins; -using MediaBrowser.Model.Updates; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; - namespace Emby.Server.Implementations.Plugins { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.IO; + using System.Linq; + using System.Net.Http; + using System.Reflection; + using System.Runtime.Loader; + using System.Text; + using System.Text.Json; + using System.Threading.Tasks; + using Emby.Server.Implementations.Library; + using Jellyfin.Extensions.Json; + using Jellyfin.Extensions.Json.Converters; + using MediaBrowser.Common.Extensions; + using MediaBrowser.Common.Net; + using MediaBrowser.Common.Plugins; + using MediaBrowser.Controller; + using MediaBrowser.Controller.Plugins; + using MediaBrowser.Model.Configuration; + using MediaBrowser.Model.IO; + using MediaBrowser.Model.Plugins; + using MediaBrowser.Model.Updates; + using Microsoft.Extensions.DependencyInjection; + using Microsoft.Extensions.Logging; + /// /// Defines the . /// diff --git a/Emby.Server.Implementations/QuickConnect/QuickConnectManager.cs b/Emby.Server.Implementations/QuickConnect/QuickConnectManager.cs index c3fd1b17..8923af47 100644 --- a/Emby.Server.Implementations/QuickConnect/QuickConnectManager.cs +++ b/Emby.Server.Implementations/QuickConnect/QuickConnectManager.cs @@ -2,23 +2,23 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Concurrent; -using System.Globalization; -using System.Linq; -using System.Security.Cryptography; -using System.Threading.Tasks; -using MediaBrowser.Common.Extensions; -using MediaBrowser.Controller.Authentication; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Net; -using MediaBrowser.Controller.QuickConnect; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.QuickConnect; -using Microsoft.Extensions.Logging; - namespace Emby.Server.Implementations.QuickConnect { + using System; + using System.Collections.Concurrent; + using System.Globalization; + using System.Linq; + using System.Security.Cryptography; + using System.Threading.Tasks; + using MediaBrowser.Common.Extensions; + using MediaBrowser.Controller.Authentication; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Net; + using MediaBrowser.Controller.QuickConnect; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.QuickConnect; + using Microsoft.Extensions.Logging; + /// /// Quick connect implementation. /// diff --git a/Emby.Server.Implementations/ScheduledTasks/ScheduledTaskWorker.cs b/Emby.Server.Implementations/ScheduledTasks/ScheduledTaskWorker.cs index 1d661eb4..f681c292 100644 --- a/Emby.Server.Implementations/ScheduledTasks/ScheduledTaskWorker.cs +++ b/Emby.Server.Implementations/ScheduledTasks/ScheduledTaskWorker.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.ScheduledTasks; + #nullable disable using System; @@ -20,8 +22,6 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.ScheduledTasks; - /// /// Class ScheduledTaskWorker. /// diff --git a/Emby.Server.Implementations/ScheduledTasks/TaskManager.cs b/Emby.Server.Implementations/ScheduledTasks/TaskManager.cs index 85bcf375..1926a834 100644 --- a/Emby.Server.Implementations/ScheduledTasks/TaskManager.cs +++ b/Emby.Server.Implementations/ScheduledTasks/TaskManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.ScheduledTasks; + using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -12,8 +14,6 @@ using MediaBrowser.Common.Configuration; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.ScheduledTasks; - /// /// Class TaskManager. /// diff --git a/Emby.Server.Implementations/ScheduledTasks/Tasks/AudioNormalizationTask.cs b/Emby.Server.Implementations/ScheduledTasks/Tasks/AudioNormalizationTask.cs index 95d4a326..9c75b9cc 100644 --- a/Emby.Server.Implementations/ScheduledTasks/Tasks/AudioNormalizationTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/Tasks/AudioNormalizationTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.ScheduledTasks.Tasks; + using System; using System.Collections.Generic; using System.Diagnostics; @@ -23,8 +25,6 @@ using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.ScheduledTasks.Tasks; - /// /// The audio normalization task. /// diff --git a/Emby.Server.Implementations/ScheduledTasks/Tasks/ChapterImagesTask.cs b/Emby.Server.Implementations/ScheduledTasks/Tasks/ChapterImagesTask.cs index 85317da8..56d7b547 100644 --- a/Emby.Server.Implementations/ScheduledTasks/Tasks/ChapterImagesTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/Tasks/ChapterImagesTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.ScheduledTasks.Tasks; + using System; using System.Collections.Generic; using System.IO; @@ -21,8 +23,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.ScheduledTasks.Tasks; - /// /// Class ChapterImagesTask. /// diff --git a/Emby.Server.Implementations/ScheduledTasks/Tasks/CleanActivityLogTask.cs b/Emby.Server.Implementations/ScheduledTasks/Tasks/CleanActivityLogTask.cs index b29cc66d..5a43594a 100644 --- a/Emby.Server.Implementations/ScheduledTasks/Tasks/CleanActivityLogTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/Tasks/CleanActivityLogTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.ScheduledTasks.Tasks; + using System; using System.Collections.Generic; using System.Threading; @@ -11,8 +13,6 @@ using MediaBrowser.Model.Activity; using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Tasks; -namespace Emby.Server.Implementations.ScheduledTasks.Tasks; - /// /// Deletes old activity log entries. /// diff --git a/Emby.Server.Implementations/ScheduledTasks/Tasks/CleanupCollectionAndPlaylistPathsTask.cs b/Emby.Server.Implementations/ScheduledTasks/Tasks/CleanupCollectionAndPlaylistPathsTask.cs index 0c4051b5..e82a70bb 100644 --- a/Emby.Server.Implementations/ScheduledTasks/Tasks/CleanupCollectionAndPlaylistPathsTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/Tasks/CleanupCollectionAndPlaylistPathsTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.ScheduledTasks.Tasks; + using System; using System.Collections.Generic; using System.IO; @@ -19,8 +21,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.ScheduledTasks.Tasks; - /// /// Deletes path references from collections and playlists that no longer exists. /// diff --git a/Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteCacheFileTask.cs b/Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteCacheFileTask.cs index faabe6b4..6956f35e 100644 --- a/Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteCacheFileTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteCacheFileTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.ScheduledTasks.Tasks; + using System; using System.Collections.Generic; using System.IO; @@ -15,8 +17,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.ScheduledTasks.Tasks; - /// /// Deletes old cache files. /// diff --git a/Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteLogFileTask.cs b/Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteLogFileTask.cs index e28f3863..975af537 100644 --- a/Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteLogFileTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteLogFileTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.ScheduledTasks.Tasks; + using System; using System.Collections.Generic; using System.Globalization; @@ -13,8 +15,6 @@ using MediaBrowser.Model.Globalization; using MediaBrowser.Model.IO; using MediaBrowser.Model.Tasks; -namespace Emby.Server.Implementations.ScheduledTasks.Tasks; - /// /// Deletes old log files. /// diff --git a/Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteTranscodeFileTask.cs b/Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteTranscodeFileTask.cs index bba6a657..f7301cd9 100644 --- a/Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteTranscodeFileTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteTranscodeFileTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.ScheduledTasks.Tasks; + using System; using System.Collections.Generic; using System.Linq; @@ -14,8 +16,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.ScheduledTasks.Tasks; - /// /// Deletes all transcoding temp files. /// diff --git a/Emby.Server.Implementations/ScheduledTasks/Tasks/MediaSegmentExtractionTask.cs b/Emby.Server.Implementations/ScheduledTasks/Tasks/MediaSegmentExtractionTask.cs index 92854f19..1514b4a7 100644 --- a/Emby.Server.Implementations/ScheduledTasks/Tasks/MediaSegmentExtractionTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/Tasks/MediaSegmentExtractionTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.ScheduledTasks.Tasks; + using System; using System.Collections.Generic; using System.IO; @@ -15,8 +17,6 @@ using MediaBrowser.Controller.MediaSegments; using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Tasks; -namespace Emby.Server.Implementations.ScheduledTasks.Tasks; - /// /// Task to obtain media segments. /// diff --git a/Emby.Server.Implementations/ScheduledTasks/Tasks/OptimizeDatabaseTask.cs b/Emby.Server.Implementations/ScheduledTasks/Tasks/OptimizeDatabaseTask.cs index 27b714a1..f5546030 100644 --- a/Emby.Server.Implementations/ScheduledTasks/Tasks/OptimizeDatabaseTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/Tasks/OptimizeDatabaseTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.ScheduledTasks.Tasks; + using System; using System.Collections.Generic; using System.Threading; @@ -11,8 +13,6 @@ using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.ScheduledTasks.Tasks; - /// /// Optimizes Jellyfin's database by issuing a VACUUM command. /// diff --git a/Emby.Server.Implementations/ScheduledTasks/Tasks/PeopleValidationTask.cs b/Emby.Server.Implementations/ScheduledTasks/Tasks/PeopleValidationTask.cs index f2bce8b2..61dc3291 100644 --- a/Emby.Server.Implementations/ScheduledTasks/Tasks/PeopleValidationTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/Tasks/PeopleValidationTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.ScheduledTasks.Tasks; + using System; using System.Buffers; using System.Collections.Generic; @@ -14,8 +16,6 @@ using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Tasks; using Microsoft.EntityFrameworkCore; -namespace Emby.Server.Implementations.ScheduledTasks.Tasks; - /// /// Class PeopleValidationTask. /// diff --git a/Emby.Server.Implementations/ScheduledTasks/Tasks/PluginUpdateTask.cs b/Emby.Server.Implementations/ScheduledTasks/Tasks/PluginUpdateTask.cs index aea9878d..a093ad70 100644 --- a/Emby.Server.Implementations/ScheduledTasks/Tasks/PluginUpdateTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/Tasks/PluginUpdateTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.ScheduledTasks.Tasks; + using System; using System.Collections.Generic; using System.IO; @@ -14,8 +16,6 @@ using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.ScheduledTasks.Tasks; - /// /// Plugin Update Task. /// diff --git a/Emby.Server.Implementations/ScheduledTasks/Tasks/RefreshMediaLibraryTask.cs b/Emby.Server.Implementations/ScheduledTasks/Tasks/RefreshMediaLibraryTask.cs index 20c34ab0..a42bbb35 100644 --- a/Emby.Server.Implementations/ScheduledTasks/Tasks/RefreshMediaLibraryTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/Tasks/RefreshMediaLibraryTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.ScheduledTasks.Tasks; + using System; using System.Collections.Generic; using System.Threading; @@ -11,8 +13,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Tasks; -namespace Emby.Server.Implementations.ScheduledTasks.Tasks; - /// /// Class RefreshMediaLibraryTask. /// diff --git a/Emby.Server.Implementations/ScheduledTasks/Triggers/DailyTrigger.cs b/Emby.Server.Implementations/ScheduledTasks/Triggers/DailyTrigger.cs index 81af3c96..161bfb41 100644 --- a/Emby.Server.Implementations/ScheduledTasks/Triggers/DailyTrigger.cs +++ b/Emby.Server.Implementations/ScheduledTasks/Triggers/DailyTrigger.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.ScheduledTasks.Triggers; + using System; using System.Threading; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.ScheduledTasks.Triggers; - /// /// Represents a task trigger that fires everyday. /// diff --git a/Emby.Server.Implementations/ScheduledTasks/Triggers/IntervalTrigger.cs b/Emby.Server.Implementations/ScheduledTasks/Triggers/IntervalTrigger.cs index a3e1217c..96a706c2 100644 --- a/Emby.Server.Implementations/ScheduledTasks/Triggers/IntervalTrigger.cs +++ b/Emby.Server.Implementations/ScheduledTasks/Triggers/IntervalTrigger.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.ScheduledTasks.Triggers; + using System; using System.Linq; using System.Threading; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.ScheduledTasks.Triggers; - /// /// Represents a task trigger that runs repeatedly on an interval. /// diff --git a/Emby.Server.Implementations/ScheduledTasks/Triggers/StartupTrigger.cs b/Emby.Server.Implementations/ScheduledTasks/Triggers/StartupTrigger.cs index d4a96ed9..4209a903 100644 --- a/Emby.Server.Implementations/ScheduledTasks/Triggers/StartupTrigger.cs +++ b/Emby.Server.Implementations/ScheduledTasks/Triggers/StartupTrigger.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.ScheduledTasks.Triggers; + using System; using System.Threading.Tasks; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.ScheduledTasks.Triggers; - /// /// Class StartupTaskTrigger. /// diff --git a/Emby.Server.Implementations/ScheduledTasks/Triggers/WeeklyTrigger.cs b/Emby.Server.Implementations/ScheduledTasks/Triggers/WeeklyTrigger.cs index 1e5ff872..bf97a9f8 100644 --- a/Emby.Server.Implementations/ScheduledTasks/Triggers/WeeklyTrigger.cs +++ b/Emby.Server.Implementations/ScheduledTasks/Triggers/WeeklyTrigger.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.ScheduledTasks.Triggers; + using System; using System.Threading; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; -namespace Emby.Server.Implementations.ScheduledTasks.Triggers; - /// /// Represents a task trigger that fires on a weekly basis. /// diff --git a/Emby.Server.Implementations/Serialization/MyXmlSerializer.cs b/Emby.Server.Implementations/Serialization/MyXmlSerializer.cs index f3dbc015..c8e49de0 100644 --- a/Emby.Server.Implementations/Serialization/MyXmlSerializer.cs +++ b/Emby.Server.Implementations/Serialization/MyXmlSerializer.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Concurrent; -using System.IO; -using System.Xml; -using System.Xml.Serialization; -using MediaBrowser.Model.IO; -using MediaBrowser.Model.Serialization; - namespace Emby.Server.Implementations.Serialization { + using System; + using System.Collections.Concurrent; + using System.IO; + using System.Xml; + using System.Xml.Serialization; + using MediaBrowser.Model.IO; + using MediaBrowser.Model.Serialization; + /// /// Provides a wrapper around third party xml serialization. /// diff --git a/Emby.Server.Implementations/ServerApplicationPaths.cs b/Emby.Server.Implementations/ServerApplicationPaths.cs index 93c51a32..9b45f189 100644 --- a/Emby.Server.Implementations/ServerApplicationPaths.cs +++ b/Emby.Server.Implementations/ServerApplicationPaths.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; -using Emby.Server.Implementations.AppBase; -using MediaBrowser.Controller; - namespace Emby.Server.Implementations { + using System.IO; + using Emby.Server.Implementations.AppBase; + using MediaBrowser.Controller; + /// /// Extends BaseApplicationPaths to add paths that are only applicable on the server. /// diff --git a/Emby.Server.Implementations/Session/SessionManager.cs b/Emby.Server.Implementations/Session/SessionManager.cs index 6144a556..20c70a32 100644 --- a/Emby.Server.Implementations/Session/SessionManager.cs +++ b/Emby.Server.Implementations/Session/SessionManager.cs @@ -2,51 +2,51 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Jellyfin.Data; -using Jellyfin.Data.Enums; -using Jellyfin.Data.Events; -using Jellyfin.Data.Queries; -using Jellyfin.Database.Implementations.Entities; -using Jellyfin.Database.Implementations.Entities.Security; -using Jellyfin.Database.Implementations.Enums; -using Jellyfin.Extensions; -using MediaBrowser.Common.Events; -using MediaBrowser.Common.Extensions; -using MediaBrowser.Controller; -using MediaBrowser.Controller.Authentication; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Devices; -using MediaBrowser.Controller.Drawing; -using MediaBrowser.Controller.Dto; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Events.Authentication; -using MediaBrowser.Controller.Events.Session; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Net; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Library; -using MediaBrowser.Model.Querying; -using MediaBrowser.Model.Session; -using MediaBrowser.Model.SyncPlay; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; -using Episode = MediaBrowser.Controller.Entities.TV.Episode; - namespace Emby.Server.Implementations.Session { +#nullable disable + + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.Globalization; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using Jellyfin.Data; + using Jellyfin.Data.Enums; + using Jellyfin.Data.Events; + using Jellyfin.Data.Queries; + using Jellyfin.Database.Implementations.Entities; + using Jellyfin.Database.Implementations.Entities.Security; + using Jellyfin.Database.Implementations.Enums; + using Jellyfin.Extensions; + using MediaBrowser.Common.Events; + using MediaBrowser.Common.Extensions; + using MediaBrowser.Controller; + using MediaBrowser.Controller.Authentication; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Devices; + using MediaBrowser.Controller.Drawing; + using MediaBrowser.Controller.Dto; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Events.Authentication; + using MediaBrowser.Controller.Events.Session; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Net; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.Dto; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Library; + using MediaBrowser.Model.Querying; + using MediaBrowser.Model.Session; + using MediaBrowser.Model.SyncPlay; + using Microsoft.EntityFrameworkCore; + using Microsoft.Extensions.Hosting; + using Microsoft.Extensions.Logging; + using Episode = MediaBrowser.Controller.Entities.TV.Episode; + /// /// Class SessionManager. /// diff --git a/Emby.Server.Implementations/Session/SessionWebSocketListener.cs b/Emby.Server.Implementations/Session/SessionWebSocketListener.cs index 574a583e..d9a71af8 100644 --- a/Emby.Server.Implementations/Session/SessionWebSocketListener.cs +++ b/Emby.Server.Implementations/Session/SessionWebSocketListener.cs @@ -2,23 +2,23 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net.WebSockets; -using System.Threading; -using System.Threading.Tasks; -using Jellyfin.Api.Extensions; -using Jellyfin.Api.Helpers; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Net; -using MediaBrowser.Controller.Net.WebSocketMessages.Outbound; -using MediaBrowser.Controller.Session; -using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.Logging; - namespace Emby.Server.Implementations.Session { + using System; + using System.Collections.Generic; + using System.Linq; + using System.Net.WebSockets; + using System.Threading; + using System.Threading.Tasks; + using Jellyfin.Api.Extensions; + using Jellyfin.Api.Helpers; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Net; + using MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using MediaBrowser.Controller.Session; + using Microsoft.AspNetCore.Http; + using Microsoft.Extensions.Logging; + /// /// Class SessionWebSocketListener. /// diff --git a/Emby.Server.Implementations/Sorting/AlbumArtistComparer.cs b/Emby.Server.Implementations/Sorting/AlbumArtistComparer.cs index 22106868..57d67524 100644 --- a/Emby.Server.Implementations/Sorting/AlbumArtistComparer.cs +++ b/Emby.Server.Implementations/Sorting/AlbumArtistComparer.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Sorting; -using MediaBrowser.Model.Querying; - namespace Emby.Server.Implementations.Sorting { + using System; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.Sorting; + using MediaBrowser.Model.Querying; + /// /// Allows comparing artists of albums. Only the first artist of each album is considered. /// diff --git a/Emby.Server.Implementations/Sorting/AlbumComparer.cs b/Emby.Server.Implementations/Sorting/AlbumComparer.cs index 48cf2770..517df29a 100644 --- a/Emby.Server.Implementations/Sorting/AlbumComparer.cs +++ b/Emby.Server.Implementations/Sorting/AlbumComparer.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Sorting; -using MediaBrowser.Model.Querying; - namespace Emby.Server.Implementations.Sorting { + using System; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.Sorting; + using MediaBrowser.Model.Querying; + /// /// Class AlbumComparer. /// diff --git a/Emby.Server.Implementations/Sorting/ArtistComparer.cs b/Emby.Server.Implementations/Sorting/ArtistComparer.cs index 49369d88..037f4757 100644 --- a/Emby.Server.Implementations/Sorting/ArtistComparer.cs +++ b/Emby.Server.Implementations/Sorting/ArtistComparer.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Sorting; -using MediaBrowser.Model.Querying; - namespace Emby.Server.Implementations.Sorting { + using System; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.Sorting; + using MediaBrowser.Model.Querying; + /// /// Class ArtistComparer. /// diff --git a/Emby.Server.Implementations/Sorting/CriticRatingComparer.cs b/Emby.Server.Implementations/Sorting/CriticRatingComparer.cs index c7b1ab76..a626a21e 100644 --- a/Emby.Server.Implementations/Sorting/CriticRatingComparer.cs +++ b/Emby.Server.Implementations/Sorting/CriticRatingComparer.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Sorting; -using MediaBrowser.Model.Querying; - namespace Emby.Server.Implementations.Sorting { + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Sorting; + using MediaBrowser.Model.Querying; + /// /// Class CriticRatingComparer. /// diff --git a/Emby.Server.Implementations/Sorting/DateCreatedComparer.cs b/Emby.Server.Implementations/Sorting/DateCreatedComparer.cs index 955ecbaa..72234e1c 100644 --- a/Emby.Server.Implementations/Sorting/DateCreatedComparer.cs +++ b/Emby.Server.Implementations/Sorting/DateCreatedComparer.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Sorting; -using MediaBrowser.Model.Querying; - namespace Emby.Server.Implementations.Sorting { + using System; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Sorting; + using MediaBrowser.Model.Querying; + /// /// Class DateCreatedComparer. /// diff --git a/Emby.Server.Implementations/Sorting/DatePlayedComparer.cs b/Emby.Server.Implementations/Sorting/DatePlayedComparer.cs index c2f98837..57ad8bfd 100644 --- a/Emby.Server.Implementations/Sorting/DatePlayedComparer.cs +++ b/Emby.Server.Implementations/Sorting/DatePlayedComparer.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using Jellyfin.Data.Enums; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Sorting; -using MediaBrowser.Model.Querying; - namespace Emby.Server.Implementations.Sorting { +#nullable disable + + using System; + using Jellyfin.Data.Enums; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Sorting; + using MediaBrowser.Model.Querying; + /// /// Class DatePlayedComparer. /// diff --git a/Emby.Server.Implementations/Sorting/IndexNumberComparer.cs b/Emby.Server.Implementations/Sorting/IndexNumberComparer.cs index 2d9f9827..d7092fa4 100644 --- a/Emby.Server.Implementations/Sorting/IndexNumberComparer.cs +++ b/Emby.Server.Implementations/Sorting/IndexNumberComparer.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Sorting; -using MediaBrowser.Model.Querying; - namespace Emby.Server.Implementations.Sorting { + using System; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Sorting; + using MediaBrowser.Model.Querying; + /// /// Class IndexNumberComparer. /// diff --git a/Emby.Server.Implementations/Sorting/NameComparer.cs b/Emby.Server.Implementations/Sorting/NameComparer.cs index 6730736a..63222556 100644 --- a/Emby.Server.Implementations/Sorting/NameComparer.cs +++ b/Emby.Server.Implementations/Sorting/NameComparer.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Sorting; -using MediaBrowser.Model.Querying; - namespace Emby.Server.Implementations.Sorting { + using System; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Sorting; + using MediaBrowser.Model.Querying; + /// /// Class NameComparer. /// diff --git a/Emby.Server.Implementations/Sorting/OfficialRatingComparer.cs b/Emby.Server.Implementations/Sorting/OfficialRatingComparer.cs index c421386c..521b2679 100644 --- a/Emby.Server.Implementations/Sorting/OfficialRatingComparer.cs +++ b/Emby.Server.Implementations/Sorting/OfficialRatingComparer.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations.Sorting; + using System; using Jellyfin.Data.Enums; using MediaBrowser.Controller.Entities; @@ -9,8 +11,6 @@ using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Globalization; -namespace Emby.Server.Implementations.Sorting; - /// /// Class providing comparison for official ratings. /// diff --git a/Emby.Server.Implementations/Sorting/ParentIndexNumberComparer.cs b/Emby.Server.Implementations/Sorting/ParentIndexNumberComparer.cs index c331286a..e9455288 100644 --- a/Emby.Server.Implementations/Sorting/ParentIndexNumberComparer.cs +++ b/Emby.Server.Implementations/Sorting/ParentIndexNumberComparer.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Sorting; -using MediaBrowser.Model.Querying; - namespace Emby.Server.Implementations.Sorting { + using System; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Sorting; + using MediaBrowser.Model.Querying; + /// /// Class ParentIndexNumberComparer. /// diff --git a/Emby.Server.Implementations/Sorting/PlayCountComparer.cs b/Emby.Server.Implementations/Sorting/PlayCountComparer.cs index 7657eeb5..3678498a 100644 --- a/Emby.Server.Implementations/Sorting/PlayCountComparer.cs +++ b/Emby.Server.Implementations/Sorting/PlayCountComparer.cs @@ -2,17 +2,17 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using Jellyfin.Data.Enums; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Sorting; -using MediaBrowser.Model.Querying; - namespace Emby.Server.Implementations.Sorting { +#nullable disable + + using Jellyfin.Data.Enums; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Sorting; + using MediaBrowser.Model.Querying; + /// /// Class PlayCountComparer. /// diff --git a/Emby.Server.Implementations/Sorting/PremiereDateComparer.cs b/Emby.Server.Implementations/Sorting/PremiereDateComparer.cs index 4dacbac0..2c638913 100644 --- a/Emby.Server.Implementations/Sorting/PremiereDateComparer.cs +++ b/Emby.Server.Implementations/Sorting/PremiereDateComparer.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Sorting; -using MediaBrowser.Model.Querying; - namespace Emby.Server.Implementations.Sorting { + using System; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Sorting; + using MediaBrowser.Model.Querying; + /// /// Class PremiereDateComparer. /// diff --git a/Emby.Server.Implementations/Sorting/ProductionYearComparer.cs b/Emby.Server.Implementations/Sorting/ProductionYearComparer.cs index f5c9dd3b..9c1ff428 100644 --- a/Emby.Server.Implementations/Sorting/ProductionYearComparer.cs +++ b/Emby.Server.Implementations/Sorting/ProductionYearComparer.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Sorting; -using MediaBrowser.Model.Querying; - namespace Emby.Server.Implementations.Sorting { + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Sorting; + using MediaBrowser.Model.Querying; + /// /// Class ProductionYearComparer. /// diff --git a/Emby.Server.Implementations/Sorting/RandomComparer.cs b/Emby.Server.Implementations/Sorting/RandomComparer.cs index 955b1cf4..317ed437 100644 --- a/Emby.Server.Implementations/Sorting/RandomComparer.cs +++ b/Emby.Server.Implementations/Sorting/RandomComparer.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Sorting; -using MediaBrowser.Model.Querying; - namespace Emby.Server.Implementations.Sorting { + using System; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Sorting; + using MediaBrowser.Model.Querying; + /// /// Class RandomComparer. /// diff --git a/Emby.Server.Implementations/Sorting/RuntimeComparer.cs b/Emby.Server.Implementations/Sorting/RuntimeComparer.cs index a9b15608..d46424a0 100644 --- a/Emby.Server.Implementations/Sorting/RuntimeComparer.cs +++ b/Emby.Server.Implementations/Sorting/RuntimeComparer.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Sorting; -using MediaBrowser.Model.Querying; - namespace Emby.Server.Implementations.Sorting { + using System; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Sorting; + using MediaBrowser.Model.Querying; + /// /// Class RuntimeComparer. /// diff --git a/Emby.Server.Implementations/Sorting/SortNameComparer.cs b/Emby.Server.Implementations/Sorting/SortNameComparer.cs index c7ff0e80..e8bdd34b 100644 --- a/Emby.Server.Implementations/Sorting/SortNameComparer.cs +++ b/Emby.Server.Implementations/Sorting/SortNameComparer.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Sorting; -using MediaBrowser.Model.Querying; - namespace Emby.Server.Implementations.Sorting { + using System; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Sorting; + using MediaBrowser.Model.Querying; + /// /// Class SortNameComparer. /// diff --git a/Emby.Server.Implementations/SyncPlay/Group.cs b/Emby.Server.Implementations/SyncPlay/Group.cs index 29608c94..c207165f 100644 --- a/Emby.Server.Implementations/SyncPlay/Group.cs +++ b/Emby.Server.Implementations/SyncPlay/Group.cs @@ -2,26 +2,26 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Jellyfin.Database.Implementations.Entities; -using Jellyfin.Extensions; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Session; -using MediaBrowser.Controller.SyncPlay; -using MediaBrowser.Controller.SyncPlay.GroupStates; -using MediaBrowser.Controller.SyncPlay.Queue; -using MediaBrowser.Controller.SyncPlay.Requests; -using MediaBrowser.Model.SyncPlay; -using Microsoft.Extensions.Logging; - namespace Emby.Server.Implementations.SyncPlay { +#nullable disable + + using System; + using System.Collections.Generic; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using Jellyfin.Database.Implementations.Entities; + using Jellyfin.Extensions; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Session; + using MediaBrowser.Controller.SyncPlay; + using MediaBrowser.Controller.SyncPlay.GroupStates; + using MediaBrowser.Controller.SyncPlay.Queue; + using MediaBrowser.Controller.SyncPlay.Requests; + using MediaBrowser.Model.SyncPlay; + using Microsoft.Extensions.Logging; + /// /// Class Group. /// diff --git a/Emby.Server.Implementations/SyncPlay/SyncPlayManager.cs b/Emby.Server.Implementations/SyncPlay/SyncPlayManager.cs index 8c91bc80..c610b934 100644 --- a/Emby.Server.Implementations/SyncPlay/SyncPlayManager.cs +++ b/Emby.Server.Implementations/SyncPlay/SyncPlayManager.cs @@ -2,21 +2,21 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Threading; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Session; -using MediaBrowser.Controller.SyncPlay; -using MediaBrowser.Controller.SyncPlay.Requests; -using MediaBrowser.Model.SyncPlay; -using Microsoft.Extensions.Logging; - namespace Emby.Server.Implementations.SyncPlay { +#nullable disable + + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.Threading; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Session; + using MediaBrowser.Controller.SyncPlay; + using MediaBrowser.Controller.SyncPlay.Requests; + using MediaBrowser.Model.SyncPlay; + using Microsoft.Extensions.Logging; + /// /// Class SyncPlayManager. /// diff --git a/Emby.Server.Implementations/SystemManager.cs b/Emby.Server.Implementations/SystemManager.cs index ef130565..b91a0030 100644 --- a/Emby.Server.Implementations/SystemManager.cs +++ b/Emby.Server.Implementations/SystemManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Emby.Server.Implementations; + using System; using System.Linq; using System.Threading.Tasks; @@ -15,8 +17,6 @@ using MediaBrowser.Model.System; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Hosting; -namespace Emby.Server.Implementations; - /// public class SystemManager : ISystemManager { diff --git a/Emby.Server.Implementations/Updates/InstallationManager.cs b/Emby.Server.Implementations/Updates/InstallationManager.cs index 8f4d75d4..eb51e5d7 100644 --- a/Emby.Server.Implementations/Updates/InstallationManager.cs +++ b/Emby.Server.Implementations/Updates/InstallationManager.cs @@ -2,35 +2,35 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.IO; -using System.IO.Compression; -using System.Linq; -using System.Net.Http; -using System.Net.Http.Json; -using System.Security.Cryptography; -using System.Text.Json; -using System.Threading; -using System.Threading.Tasks; -using Jellyfin.Data.Events; -using Jellyfin.Extensions; -using Jellyfin.Extensions.Json; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Net; -using MediaBrowser.Common.Plugins; -using MediaBrowser.Common.Updates; -using MediaBrowser.Controller; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Events.Updates; -using MediaBrowser.Model.Plugins; -using MediaBrowser.Model.Updates; -using Microsoft.Extensions.Logging; - namespace Emby.Server.Implementations.Updates { + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.IO; + using System.IO.Compression; + using System.Linq; + using System.Net.Http; + using System.Net.Http.Json; + using System.Security.Cryptography; + using System.Text.Json; + using System.Threading; + using System.Threading.Tasks; + using Jellyfin.Data.Events; + using Jellyfin.Extensions; + using Jellyfin.Extensions.Json; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Common.Net; + using MediaBrowser.Common.Plugins; + using MediaBrowser.Common.Updates; + using MediaBrowser.Controller; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Events.Updates; + using MediaBrowser.Model.Plugins; + using MediaBrowser.Model.Updates; + using Microsoft.Extensions.Logging; + /// /// Manages all install, uninstall, and update operations for the system and individual plugins. /// diff --git a/Emby.Server.Implementations/obj/Debug/net10.0/Emby.Server.Implementations.csproj.AssemblyReference.cache b/Emby.Server.Implementations/obj/Debug/net10.0/Emby.Server.Implementations.csproj.AssemblyReference.cache index 0db1ad38260ccc37577ffe33c4fa945abe9c760b..822dbfa56f92ac61912d8c807a87f76295cadfae 100644 GIT binary patch delta 3387 zcmb_e%WoS+8231FNs}gu96L>$#7XKT#37y7wS@vzDiS9VX_Jzd%FC*{wx{lv_0DE? z9pZur61O5nM04OFkXn$q0YN^2pcgI(dgy^G{R7~@p%PSF%FJfH_S(DaL}Ctk?0hrd zwfa|hV*cs$MTdOU#r_LL^TBd~L2 z{`u4j!8cJxQ&UP#-IUJWM3PjzF3PE8lof?pg5OjTfy+3Hq*R)HofoXd%F4$h=ijR>`+nE2|u;#B1Kudnfd%b5j@OD`i0 zt`IRVYT_2Esh?S4ZnTawZy>G4g2ucdGa4P0ku%F;hF}$6*Wiq*u#-tl5PVV76u5u{ ztw5^1K)cYo%%ab4Ye?q(!Q8Ug&C-W>CVZ8%X*04}66H;6JpHGQtvON1$yn9IjLH(m z8KlO5}9A~W?nFVLeHah zD*>Z09*xJI1E39Fp5NeQn^6=!ac=U&Sil2rgT0oqopMX3%yN~#)Hb<|I5a$CYQ^k3 z-`~A=pcNK6^)}$sf>qQEs9tO6*ijQYIo|G?FhKu2J4}JMFKE|Shv7=X?qI)(zbP~@ ziRDaz5Jq1MoPpD272vH1=eHHs??wk#lbX)1pJdYi6c@AL&tE+G>G9){`+6tnKL8k` zL$MIO5bx#bMC_s}%O6Lbg_F-$34>0>ig4T@Opcg9IE4B?3zjJxj>6pG%-5c>FzNMM zEg(`9(o&7|gK<`!@m7-?P4r(7j@uQf&wy?nF|G&$^aoA*x zMKL#u3Sz|BLZogi9%_=Ev4hyLm;7-(q$44kV#<28GIrc>t5}&@8GP@LI|g{}Lu|?x z!X*>J%H57Y>W{PrK$??Ce>$w8TtO0uqb4=xE&a56w5(cB|Ml(LyDxP_daH4Fd8#;$ z*U_Ul%fR7j9dOYa`fJM|^?3u3r@+@i`|5wWbWN$f>7kFmP(4-@ODo4Owb^{9ATd&c z!H@J;ZOs|JM`3WcSj~=W?{~Ce|qu#Q%-rLG9UK*2gFOaUH||9 delta 792 zcmbO*lj-w!Mh-ScO9lo8#`MVzA{rA7T-au9UAX0L{=_PS$p)=LjQNuTnUz_Ji<0#x zHi$~;CuQd8yQC(Srt9aWmK2vH=A|SSr5NcMfMi+pQgU)O?)l8PnN9Kx>*Sg)p~?Pf znp!EDiOEHoC7H>^`X+jYdM5fgnMoksmOx!Da5<3P%}?aKxhGHP5SnbKp(&P`Txyc1 zZ)O10W1yRuQ;?CUXKZRV*)Ugx)zdlD#BcHeFU`$qS~D0yIv6V_FObww1?$l(DN4*M z&dDrEElMoOFT!fXKPj785zR#S%CDxlmw?_gZ-#&C@eQw zM?;9Q9Aw!fSFXw1{e*<|4fTwGK1J3!nb%)ta)ztsIaw-9ezR$a0v0nSUkG8r zYBkV|$@Pi4U>8e;`Gd7iHuW-@476A#w=}0Dvmmjk1iS4zpy=4VAp8=hg%Y?dV+l#E zC_!;>SX7QAD4ZtWk=N8KE=kcV1tz`J+=86Ml2mY{n!=0|

u5 diff --git a/FixStyleCopWarnings.ps1 b/FixStyleCopWarnings.ps1 new file mode 100644 index 00000000..927acd85 --- /dev/null +++ b/FixStyleCopWarnings.ps1 @@ -0,0 +1,195 @@ +#!/usr/bin/env pwsh +<# +.SYNOPSIS + Fixes StyleCop warnings in C# files. + +.DESCRIPTION + Automatically fixes common StyleCop warnings: + - SA1413: Adds trailing commas to multi-line initializers + - SA1515: Adds blank lines before single-line comments + - SA1518: Ensures files end with single newline + +.PARAMETER Path + The root path to search for C# files. Defaults to "MediaBrowser.Model" + +.PARAMETER DryRun + If specified, shows what would be changed without actually modifying files + +.EXAMPLE + .\FixStyleCopWarnings.ps1 -DryRun +#> + +param( + [string]$Path = "MediaBrowser.Model", + [switch]$DryRun +) + +$ErrorActionPreference = "Stop" + +function Fix-TrailingCommas { + param([string]$Content) + + $modified = $false + $lines = $content -split '\r?\n' + + for ($i = 0; $i -lt $lines.Length - 1; $i++) { + $currentLine = $lines[$i] + $nextLine = $lines[$i + 1] + + # Check if current line ends with a property/value without comma + # and next line closes the initializer + if ($currentLine -match '^\s+\w+\s*=\s*.+[^,]\s*$' -and $nextLine -match '^\s*[}\)]') { + $lines[$i] = $currentLine.TrimEnd() + ',' + $modified = $true + } + } + + if ($modified) { + return ($lines -join "`n") + } + + return $Content +} + +function Fix-BlankLinesBeforeComments { + param([string]$Content) + + $modified = $false + $lines = $content -split '\r?\n' + $newLines = @() + + for ($i = 0; $i -lt $lines.Length; $i++) { + $currentLine = $lines[$i] + + # Check if this is a single-line comment + if ($currentLine -match '^\s+//\s+\w') { + # Check if previous line exists and is not blank + if ($i -gt 0) { + $prevLine = $lines[$i - 1] + $prevLineIsBlank = [string]::IsNullOrWhiteSpace($prevLine) + $prevLineIsOpenBrace = $prevLine -match '\{\s*$' + $prevLineIsComment = $prevLine -match '^\s*//' + + # Add blank line if previous line is not blank, not open brace, not another comment + if (-not $prevLineIsBlank -and -not $prevLineIsOpenBrace -and -not $prevLineIsComment) { + $newLines += "" + $modified = $true + } + } + } + + $newLines += $currentLine + } + + if ($modified) { + return ($newLines -join "`n") + } + + return $Content +} + +function Fix-FileEnding { + param([string]$Content) + + # Ensure file ends with exactly one newline + $trimmed = $Content.TrimEnd("`r", "`n", " ", "`t") + return $trimmed + "`n" +} + +function Fix-StyleCopWarnings { + param( + [string]$FilePath, + [switch]$DryRun + ) + + $content = Get-Content -Path $FilePath -Raw + $originalContent = $content + + # Apply fixes + $content = Fix-TrailingCommas -Content $content + $content = Fix-BlankLinesBeforeComments -Content $content + $content = Fix-FileEnding -Content $content + + # Restore Windows line endings if original had them + if ($originalContent -match '\r\n') { + $content = $content -replace '(? -using System; - namespace Jellyfin.Api.Attributes; +using System; + ///

/// Attribute to mark a parameter as obsolete. /// diff --git a/Jellyfin.Api/Auth/AnonymousLanAccessPolicy/AnonymousLanAccessHandler.cs b/Jellyfin.Api/Auth/AnonymousLanAccessPolicy/AnonymousLanAccessHandler.cs index fa9d3318..89d956f3 100644 --- a/Jellyfin.Api/Auth/AnonymousLanAccessPolicy/AnonymousLanAccessHandler.cs +++ b/Jellyfin.Api/Auth/AnonymousLanAccessPolicy/AnonymousLanAccessHandler.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading.Tasks; -using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Net; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Http; - namespace Jellyfin.Api.Auth.AnonymousLanAccessPolicy { + using System.Threading.Tasks; + using MediaBrowser.Common.Extensions; + using MediaBrowser.Common.Net; + using Microsoft.AspNetCore.Authorization; + using Microsoft.AspNetCore.Http; + /// /// LAN access handler. Allows anonymous users. /// diff --git a/Jellyfin.Api/Auth/AnonymousLanAccessPolicy/AnonymousLanAccessRequirement.cs b/Jellyfin.Api/Auth/AnonymousLanAccessPolicy/AnonymousLanAccessRequirement.cs index 4367a4a8..2268267b 100644 --- a/Jellyfin.Api/Auth/AnonymousLanAccessPolicy/AnonymousLanAccessRequirement.cs +++ b/Jellyfin.Api/Auth/AnonymousLanAccessPolicy/AnonymousLanAccessRequirement.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.AspNetCore.Authorization; - namespace Jellyfin.Api.Auth.AnonymousLanAccessPolicy { + using Microsoft.AspNetCore.Authorization; + /// /// The local network authorization requirement. Allows anonymous users. /// diff --git a/Jellyfin.Api/Auth/CustomAuthenticationHandler.cs b/Jellyfin.Api/Auth/CustomAuthenticationHandler.cs index 623ec572..e410e435 100644 --- a/Jellyfin.Api/Auth/CustomAuthenticationHandler.cs +++ b/Jellyfin.Api/Auth/CustomAuthenticationHandler.cs @@ -2,21 +2,21 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Globalization; -using System.Security.Claims; -using System.Text.Encodings.Web; -using System.Threading.Tasks; -using Jellyfin.Api.Constants; -using Jellyfin.Data; -using Jellyfin.Database.Implementations.Enums; -using MediaBrowser.Controller.Authentication; -using MediaBrowser.Controller.Net; -using Microsoft.AspNetCore.Authentication; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; - namespace Jellyfin.Api.Auth { + using System.Globalization; + using System.Security.Claims; + using System.Text.Encodings.Web; + using System.Threading.Tasks; + using Jellyfin.Api.Constants; + using Jellyfin.Data; + using Jellyfin.Database.Implementations.Enums; + using MediaBrowser.Controller.Authentication; + using MediaBrowser.Controller.Net; + using Microsoft.AspNetCore.Authentication; + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Options; + /// /// Custom authentication handler wrapping the legacy authentication. /// diff --git a/Jellyfin.Api/Auth/DefaultAuthorizationPolicy/DefaultAuthorizationHandler.cs b/Jellyfin.Api/Auth/DefaultAuthorizationPolicy/DefaultAuthorizationHandler.cs index 0146ec4d..99f5f4c7 100644 --- a/Jellyfin.Api/Auth/DefaultAuthorizationPolicy/DefaultAuthorizationHandler.cs +++ b/Jellyfin.Api/Auth/DefaultAuthorizationPolicy/DefaultAuthorizationHandler.cs @@ -2,20 +2,20 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading.Tasks; -using Jellyfin.Api.Constants; -using Jellyfin.Api.Extensions; -using Jellyfin.Data; -using Jellyfin.Database.Implementations.Enums; -using Jellyfin.Extensions; -using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Library; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Http; - namespace Jellyfin.Api.Auth.DefaultAuthorizationPolicy { + using System.Threading.Tasks; + using Jellyfin.Api.Constants; + using Jellyfin.Api.Extensions; + using Jellyfin.Data; + using Jellyfin.Database.Implementations.Enums; + using Jellyfin.Extensions; + using MediaBrowser.Common.Extensions; + using MediaBrowser.Common.Net; + using MediaBrowser.Controller.Library; + using Microsoft.AspNetCore.Authorization; + using Microsoft.AspNetCore.Http; + /// /// Default authorization handler. /// diff --git a/Jellyfin.Api/Auth/DefaultAuthorizationPolicy/DefaultAuthorizationRequirement.cs b/Jellyfin.Api/Auth/DefaultAuthorizationPolicy/DefaultAuthorizationRequirement.cs index 74a22402..9880de6d 100644 --- a/Jellyfin.Api/Auth/DefaultAuthorizationPolicy/DefaultAuthorizationRequirement.cs +++ b/Jellyfin.Api/Auth/DefaultAuthorizationPolicy/DefaultAuthorizationRequirement.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.AspNetCore.Authorization; - namespace Jellyfin.Api.Auth.DefaultAuthorizationPolicy { + using Microsoft.AspNetCore.Authorization; + /// /// The default authorization requirement. /// diff --git a/Jellyfin.Api/Auth/FirstTimeSetupPolicy/FirstTimeSetupHandler.cs b/Jellyfin.Api/Auth/FirstTimeSetupPolicy/FirstTimeSetupHandler.cs index eb341746..949429d8 100644 --- a/Jellyfin.Api/Auth/FirstTimeSetupPolicy/FirstTimeSetupHandler.cs +++ b/Jellyfin.Api/Auth/FirstTimeSetupPolicy/FirstTimeSetupHandler.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading.Tasks; -using Jellyfin.Api.Constants; -using Jellyfin.Api.Extensions; -using MediaBrowser.Common.Configuration; -using Microsoft.AspNetCore.Authorization; - namespace Jellyfin.Api.Auth.FirstTimeSetupPolicy { + using System.Threading.Tasks; + using Jellyfin.Api.Constants; + using Jellyfin.Api.Extensions; + using MediaBrowser.Common.Configuration; + using Microsoft.AspNetCore.Authorization; + /// /// Authorization handler for requiring first time setup or default privileges. /// diff --git a/Jellyfin.Api/Auth/FirstTimeSetupPolicy/FirstTimeSetupRequirement.cs b/Jellyfin.Api/Auth/FirstTimeSetupPolicy/FirstTimeSetupRequirement.cs index 272bb51c..7c6f5748 100644 --- a/Jellyfin.Api/Auth/FirstTimeSetupPolicy/FirstTimeSetupRequirement.cs +++ b/Jellyfin.Api/Auth/FirstTimeSetupPolicy/FirstTimeSetupRequirement.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Jellyfin.Api.Auth.DefaultAuthorizationPolicy; - namespace Jellyfin.Api.Auth.FirstTimeSetupPolicy { + using Jellyfin.Api.Auth.DefaultAuthorizationPolicy; + /// /// The authorization requirement, requiring incomplete first time setup or default privileges, for the authorization handler. /// diff --git a/Jellyfin.Api/Auth/LocalAccessOrRequiresElevationPolicy/LocalAccessOrRequiresElevationHandler.cs b/Jellyfin.Api/Auth/LocalAccessOrRequiresElevationPolicy/LocalAccessOrRequiresElevationHandler.cs index 49d0272c..ac5459d7 100644 --- a/Jellyfin.Api/Auth/LocalAccessOrRequiresElevationPolicy/LocalAccessOrRequiresElevationHandler.cs +++ b/Jellyfin.Api/Auth/LocalAccessOrRequiresElevationPolicy/LocalAccessOrRequiresElevationHandler.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading.Tasks; -using Jellyfin.Api.Constants; -using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Net; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Http; - namespace Jellyfin.Api.Auth.LocalAccessOrRequiresElevationPolicy { + using System.Threading.Tasks; + using Jellyfin.Api.Constants; + using MediaBrowser.Common.Extensions; + using MediaBrowser.Common.Net; + using Microsoft.AspNetCore.Authorization; + using Microsoft.AspNetCore.Http; + /// /// Local access or require elevated privileges handler. /// diff --git a/Jellyfin.Api/Auth/LocalAccessOrRequiresElevationPolicy/LocalAccessOrRequiresElevationRequirement.cs b/Jellyfin.Api/Auth/LocalAccessOrRequiresElevationPolicy/LocalAccessOrRequiresElevationRequirement.cs index d7c93dea..b08790a1 100644 --- a/Jellyfin.Api/Auth/LocalAccessOrRequiresElevationPolicy/LocalAccessOrRequiresElevationRequirement.cs +++ b/Jellyfin.Api/Auth/LocalAccessOrRequiresElevationPolicy/LocalAccessOrRequiresElevationRequirement.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.AspNetCore.Authorization; - namespace Jellyfin.Api.Auth.LocalAccessOrRequiresElevationPolicy { + using Microsoft.AspNetCore.Authorization; + /// /// The local access or elevated privileges authorization requirement. /// diff --git a/Jellyfin.Api/Auth/SyncPlayAccessPolicy/SyncPlayAccessHandler.cs b/Jellyfin.Api/Auth/SyncPlayAccessPolicy/SyncPlayAccessHandler.cs index dda033d1..00ef5cd8 100644 --- a/Jellyfin.Api/Auth/SyncPlayAccessPolicy/SyncPlayAccessHandler.cs +++ b/Jellyfin.Api/Auth/SyncPlayAccessPolicy/SyncPlayAccessHandler.cs @@ -2,17 +2,17 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading.Tasks; -using Jellyfin.Api.Extensions; -using Jellyfin.Data.Enums; -using Jellyfin.Database.Implementations.Enums; -using MediaBrowser.Common.Extensions; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.SyncPlay; -using Microsoft.AspNetCore.Authorization; - namespace Jellyfin.Api.Auth.SyncPlayAccessPolicy { + using System.Threading.Tasks; + using Jellyfin.Api.Extensions; + using Jellyfin.Data.Enums; + using Jellyfin.Database.Implementations.Enums; + using MediaBrowser.Common.Extensions; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.SyncPlay; + using Microsoft.AspNetCore.Authorization; + /// /// Default authorization handler. /// diff --git a/Jellyfin.Api/Auth/SyncPlayAccessPolicy/SyncPlayAccessRequirement.cs b/Jellyfin.Api/Auth/SyncPlayAccessPolicy/SyncPlayAccessRequirement.cs index 31efb957..c66c72b5 100644 --- a/Jellyfin.Api/Auth/SyncPlayAccessPolicy/SyncPlayAccessRequirement.cs +++ b/Jellyfin.Api/Auth/SyncPlayAccessPolicy/SyncPlayAccessRequirement.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Jellyfin.Api.Auth.DefaultAuthorizationPolicy; -using Jellyfin.Data.Enums; - namespace Jellyfin.Api.Auth.SyncPlayAccessPolicy { + using Jellyfin.Api.Auth.DefaultAuthorizationPolicy; + using Jellyfin.Data.Enums; + /// /// The default authorization requirement. /// diff --git a/Jellyfin.Api/Auth/UserPermissionPolicy/UserPermissionHandler.cs b/Jellyfin.Api/Auth/UserPermissionPolicy/UserPermissionHandler.cs index 3ac21af2..d336ee86 100644 --- a/Jellyfin.Api/Auth/UserPermissionPolicy/UserPermissionHandler.cs +++ b/Jellyfin.Api/Auth/UserPermissionPolicy/UserPermissionHandler.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading.Tasks; -using Jellyfin.Api.Extensions; -using Jellyfin.Data; -using Jellyfin.Extensions; -using MediaBrowser.Common.Extensions; -using MediaBrowser.Controller.Library; -using Microsoft.AspNetCore.Authorization; - namespace Jellyfin.Api.Auth.UserPermissionPolicy { + using System.Threading.Tasks; + using Jellyfin.Api.Extensions; + using Jellyfin.Data; + using Jellyfin.Extensions; + using MediaBrowser.Common.Extensions; + using MediaBrowser.Controller.Library; + using Microsoft.AspNetCore.Authorization; + /// /// User permission authorization handler. /// diff --git a/Jellyfin.Api/Auth/UserPermissionPolicy/UserPermissionRequirement.cs b/Jellyfin.Api/Auth/UserPermissionPolicy/UserPermissionRequirement.cs index 7db6baa6..53614699 100644 --- a/Jellyfin.Api/Auth/UserPermissionPolicy/UserPermissionRequirement.cs +++ b/Jellyfin.Api/Auth/UserPermissionPolicy/UserPermissionRequirement.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Jellyfin.Api.Auth.DefaultAuthorizationPolicy; -using Jellyfin.Database.Implementations.Enums; - namespace Jellyfin.Api.Auth.UserPermissionPolicy { + using Jellyfin.Api.Auth.DefaultAuthorizationPolicy; + using Jellyfin.Database.Implementations.Enums; + /// /// The user permission requirement. /// diff --git a/Jellyfin.Api/BaseJellyfinApiController.cs b/Jellyfin.Api/BaseJellyfinApiController.cs index e6f5885d..5f30ccb5 100644 --- a/Jellyfin.Api/BaseJellyfinApiController.cs +++ b/Jellyfin.Api/BaseJellyfinApiController.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api; + using System.Collections.Generic; using System.Net.Mime; using Jellyfin.Api.Results; using Jellyfin.Extensions.Json; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api; - /// /// Base api controller for the API setting a default route. /// diff --git a/Jellyfin.Api/Controllers/ActivityLogController.cs b/Jellyfin.Api/Controllers/ActivityLogController.cs index 51767428..c2dc3129 100644 --- a/Jellyfin.Api/Controllers/ActivityLogController.cs +++ b/Jellyfin.Api/Controllers/ActivityLogController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.Threading.Tasks; @@ -16,8 +18,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.Controllers; - /// /// Activity log controller. /// diff --git a/Jellyfin.Api/Controllers/ApiKeyController.cs b/Jellyfin.Api/Controllers/ApiKeyController.cs index e2e68605..12b98386 100644 --- a/Jellyfin.Api/Controllers/ApiKeyController.cs +++ b/Jellyfin.Api/Controllers/ApiKeyController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; using Jellyfin.Api.Constants; @@ -12,8 +14,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Authentication controller. /// diff --git a/Jellyfin.Api/Controllers/ArtistsController.cs b/Jellyfin.Api/Controllers/ArtistsController.cs index d7938ad4..493e51c9 100644 --- a/Jellyfin.Api/Controllers/ArtistsController.cs +++ b/Jellyfin.Api/Controllers/ArtistsController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.ComponentModel.DataAnnotations; using System.Linq; @@ -22,8 +24,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// The artists controller. /// diff --git a/Jellyfin.Api/Controllers/AudioController.cs b/Jellyfin.Api/Controllers/AudioController.cs index e72738fd..fafbd0b4 100644 --- a/Jellyfin.Api/Controllers/AudioController.cs +++ b/Jellyfin.Api/Controllers/AudioController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -15,8 +17,6 @@ using MediaBrowser.Model.Dlna; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// The audio controller. /// diff --git a/Jellyfin.Api/Controllers/BackupController.cs b/Jellyfin.Api/Controllers/BackupController.cs index 252d461e..deb806f2 100644 --- a/Jellyfin.Api/Controllers/BackupController.cs +++ b/Jellyfin.Api/Controllers/BackupController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System.IO; using System.Threading.Tasks; using Jellyfin.Server.Implementations.SystemBackupService; @@ -14,8 +16,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ModelBinding; -namespace Jellyfin.Api.Controllers; - /// /// The backup controller. /// diff --git a/Jellyfin.Api/Controllers/BrandingController.cs b/Jellyfin.Api/Controllers/BrandingController.cs index 7ee02b18..b6db6618 100644 --- a/Jellyfin.Api/Controllers/BrandingController.cs +++ b/Jellyfin.Api/Controllers/BrandingController.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using MediaBrowser.Common.Configuration; using MediaBrowser.Controller.Configuration; using MediaBrowser.Model.Branding; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Branding controller. /// diff --git a/Jellyfin.Api/Controllers/ChannelsController.cs b/Jellyfin.Api/Controllers/ChannelsController.cs index 588283f3..a671e375 100644 --- a/Jellyfin.Api/Controllers/ChannelsController.cs +++ b/Jellyfin.Api/Controllers/ChannelsController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -23,8 +25,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Channels Controller. /// diff --git a/Jellyfin.Api/Controllers/ClientLogController.cs b/Jellyfin.Api/Controllers/ClientLogController.cs index 8429cb87..522a39b4 100644 --- a/Jellyfin.Api/Controllers/ClientLogController.cs +++ b/Jellyfin.Api/Controllers/ClientLogController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System.Net.Mime; using System.Threading.Tasks; using Jellyfin.Api.Attributes; @@ -13,8 +15,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Client log controller. /// diff --git a/Jellyfin.Api/Controllers/CollectionController.cs b/Jellyfin.Api/Controllers/CollectionController.cs index f1f1530b..91c2a3d8 100644 --- a/Jellyfin.Api/Controllers/CollectionController.cs +++ b/Jellyfin.Api/Controllers/CollectionController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; @@ -16,8 +18,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// The collection controller. /// diff --git a/Jellyfin.Api/Controllers/ConfigurationController.cs b/Jellyfin.Api/Controllers/ConfigurationController.cs index 9328d86c..d96e812d 100644 --- a/Jellyfin.Api/Controllers/ConfigurationController.cs +++ b/Jellyfin.Api/Controllers/ConfigurationController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.ComponentModel.DataAnnotations; using System.Net.Mime; @@ -17,8 +19,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Configuration Controller. /// diff --git a/Jellyfin.Api/Controllers/DashboardController.cs b/Jellyfin.Api/Controllers/DashboardController.cs index 18d575e8..66d1924a 100644 --- a/Jellyfin.Api/Controllers/DashboardController.cs +++ b/Jellyfin.Api/Controllers/DashboardController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.IO; @@ -18,8 +20,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.Controllers; - /// /// The dashboard controller. /// diff --git a/Jellyfin.Api/Controllers/DevicesController.cs b/Jellyfin.Api/Controllers/DevicesController.cs index 1f4a9b9e..5183b8ea 100644 --- a/Jellyfin.Api/Controllers/DevicesController.cs +++ b/Jellyfin.Api/Controllers/DevicesController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; @@ -17,8 +19,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Devices Controller. /// diff --git a/Jellyfin.Api/Controllers/DisplayPreferencesController.cs b/Jellyfin.Api/Controllers/DisplayPreferencesController.cs index 1a672ae1..3844e8a8 100644 --- a/Jellyfin.Api/Controllers/DisplayPreferencesController.cs +++ b/Jellyfin.Api/Controllers/DisplayPreferencesController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.ComponentModel.DataAnnotations; using System.Diagnostics.CodeAnalysis; @@ -18,8 +20,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.Controllers; - /// /// Display Preferences Controller. /// diff --git a/Jellyfin.Api/Controllers/DynamicHlsController.cs b/Jellyfin.Api/Controllers/DynamicHlsController.cs index 9b5447ad..6f767f77 100644 --- a/Jellyfin.Api/Controllers/DynamicHlsController.cs +++ b/Jellyfin.Api/Controllers/DynamicHlsController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -35,8 +37,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.Controllers; - /// /// Dynamic hls controller. /// diff --git a/Jellyfin.Api/Controllers/EnvironmentController.cs b/Jellyfin.Api/Controllers/EnvironmentController.cs index 54cd6a94..b246cb4e 100644 --- a/Jellyfin.Api/Controllers/EnvironmentController.cs +++ b/Jellyfin.Api/Controllers/EnvironmentController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -16,8 +18,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.Controllers; - /// /// Environment Controller. /// diff --git a/Jellyfin.Api/Controllers/FilterController.cs b/Jellyfin.Api/Controllers/FilterController.cs index c83521d1..e00206c3 100644 --- a/Jellyfin.Api/Controllers/FilterController.cs +++ b/Jellyfin.Api/Controllers/FilterController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Linq; using Jellyfin.Api.Helpers; @@ -17,8 +19,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Filters controller. /// diff --git a/Jellyfin.Api/Controllers/GenresController.cs b/Jellyfin.Api/Controllers/GenresController.cs index 2436357b..cb0d9146 100644 --- a/Jellyfin.Api/Controllers/GenresController.cs +++ b/Jellyfin.Api/Controllers/GenresController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.ComponentModel.DataAnnotations; using System.Linq; @@ -23,8 +25,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Genre = MediaBrowser.Controller.Entities.Genre; -namespace Jellyfin.Api.Controllers; - /// /// The genres controller. /// diff --git a/Jellyfin.Api/Controllers/HlsSegmentController.cs b/Jellyfin.Api/Controllers/HlsSegmentController.cs index f8c9848c..ff42d184 100644 --- a/Jellyfin.Api/Controllers/HlsSegmentController.cs +++ b/Jellyfin.Api/Controllers/HlsSegmentController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.ComponentModel.DataAnnotations; using System.Diagnostics.CodeAnalysis; @@ -18,8 +20,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// The hls segment controller. /// diff --git a/Jellyfin.Api/Controllers/ImageController.cs b/Jellyfin.Api/Controllers/ImageController.cs index cbd3ce40..2e08c29b 100644 --- a/Jellyfin.Api/Controllers/ImageController.cs +++ b/Jellyfin.Api/Controllers/ImageController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -38,8 +40,6 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Microsoft.Net.Http.Headers; -namespace Jellyfin.Api.Controllers; - /// /// Image controller. /// diff --git a/Jellyfin.Api/Controllers/InstantMixController.cs b/Jellyfin.Api/Controllers/InstantMixController.cs index 73455a19..abf32f6c 100644 --- a/Jellyfin.Api/Controllers/InstantMixController.cs +++ b/Jellyfin.Api/Controllers/InstantMixController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -23,8 +25,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// The instant mix controller. /// diff --git a/Jellyfin.Api/Controllers/ItemLookupController.cs b/Jellyfin.Api/Controllers/ItemLookupController.cs index 11c76c23..31267df7 100644 --- a/Jellyfin.Api/Controllers/ItemLookupController.cs +++ b/Jellyfin.Api/Controllers/ItemLookupController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -24,8 +26,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.Controllers; - /// /// Item lookup controller. /// diff --git a/Jellyfin.Api/Controllers/ItemRefreshController.cs b/Jellyfin.Api/Controllers/ItemRefreshController.cs index 34eed556..c565db82 100644 --- a/Jellyfin.Api/Controllers/ItemRefreshController.cs +++ b/Jellyfin.Api/Controllers/ItemRefreshController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.ComponentModel; using System.ComponentModel.DataAnnotations; @@ -17,8 +19,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Item Refresh Controller. /// diff --git a/Jellyfin.Api/Controllers/ItemUpdateController.cs b/Jellyfin.Api/Controllers/ItemUpdateController.cs index d30964df..204925ab 100644 --- a/Jellyfin.Api/Controllers/ItemUpdateController.cs +++ b/Jellyfin.Api/Controllers/ItemUpdateController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -28,8 +30,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Item update controller. /// diff --git a/Jellyfin.Api/Controllers/ItemsController.cs b/Jellyfin.Api/Controllers/ItemsController.cs index 9a02739a..d9ea3d47 100644 --- a/Jellyfin.Api/Controllers/ItemsController.cs +++ b/Jellyfin.Api/Controllers/ItemsController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.ComponentModel.DataAnnotations; using System.Linq; @@ -26,8 +28,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.Controllers; - /// /// The items controller. /// diff --git a/Jellyfin.Api/Controllers/LibraryController.cs b/Jellyfin.Api/Controllers/LibraryController.cs index 8344c918..d6350f20 100644 --- a/Jellyfin.Api/Controllers/LibraryController.cs +++ b/Jellyfin.Api/Controllers/LibraryController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -42,8 +44,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.Controllers; - /// /// Library Controller. /// diff --git a/Jellyfin.Api/Controllers/LibraryStructureController.cs b/Jellyfin.Api/Controllers/LibraryStructureController.cs index bda00ae8..bf030622 100644 --- a/Jellyfin.Api/Controllers/LibraryStructureController.cs +++ b/Jellyfin.Api/Controllers/LibraryStructureController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -25,8 +27,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// The library structure controller. /// diff --git a/Jellyfin.Api/Controllers/LiveTvController.cs b/Jellyfin.Api/Controllers/LiveTvController.cs index cee8aa41..1997f5c8 100644 --- a/Jellyfin.Api/Controllers/LiveTvController.cs +++ b/Jellyfin.Api/Controllers/LiveTvController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -40,8 +42,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Live tv controller. /// diff --git a/Jellyfin.Api/Controllers/LocalizationController.cs b/Jellyfin.Api/Controllers/LocalizationController.cs index 3d9e24d0..c608f01b 100644 --- a/Jellyfin.Api/Controllers/LocalizationController.cs +++ b/Jellyfin.Api/Controllers/LocalizationController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.Linq; @@ -12,8 +14,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Localization controller. /// diff --git a/Jellyfin.Api/Controllers/LyricsController.cs b/Jellyfin.Api/Controllers/LyricsController.cs index 240c5dd3..74bacbcd 100644 --- a/Jellyfin.Api/Controllers/LyricsController.cs +++ b/Jellyfin.Api/Controllers/LyricsController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -25,8 +27,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Lyrics controller. /// diff --git a/Jellyfin.Api/Controllers/MediaInfoController.cs b/Jellyfin.Api/Controllers/MediaInfoController.cs index 32b84dcb..8b7df1db 100644 --- a/Jellyfin.Api/Controllers/MediaInfoController.cs +++ b/Jellyfin.Api/Controllers/MediaInfoController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Buffers; using System.ComponentModel.DataAnnotations; @@ -24,8 +26,6 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.Controllers; - /// /// The media info controller. /// diff --git a/Jellyfin.Api/Controllers/MediaSegmentsController.cs b/Jellyfin.Api/Controllers/MediaSegmentsController.cs index 07d34588..2886d51d 100644 --- a/Jellyfin.Api/Controllers/MediaSegmentsController.cs +++ b/Jellyfin.Api/Controllers/MediaSegmentsController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -18,8 +20,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Media Segments api. /// diff --git a/Jellyfin.Api/Controllers/MoviesController.cs b/Jellyfin.Api/Controllers/MoviesController.cs index b3cad2b1..476c7bb5 100644 --- a/Jellyfin.Api/Controllers/MoviesController.cs +++ b/Jellyfin.Api/Controllers/MoviesController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.Globalization; @@ -24,8 +26,6 @@ using MediaBrowser.Model.Querying; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Movies controller. /// diff --git a/Jellyfin.Api/Controllers/MusicGenresController.cs b/Jellyfin.Api/Controllers/MusicGenresController.cs index 90ff08b5..806815a7 100644 --- a/Jellyfin.Api/Controllers/MusicGenresController.cs +++ b/Jellyfin.Api/Controllers/MusicGenresController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.ComponentModel.DataAnnotations; using System.Linq; @@ -23,8 +25,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// The music genres controller. /// diff --git a/Jellyfin.Api/Controllers/PackageController.cs b/Jellyfin.Api/Controllers/PackageController.cs index 29346bb5..1ff3e802 100644 --- a/Jellyfin.Api/Controllers/PackageController.cs +++ b/Jellyfin.Api/Controllers/PackageController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -16,8 +18,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Package Controller. /// diff --git a/Jellyfin.Api/Controllers/PersonsController.cs b/Jellyfin.Api/Controllers/PersonsController.cs index 99986bb0..ac543b56 100644 --- a/Jellyfin.Api/Controllers/PersonsController.cs +++ b/Jellyfin.Api/Controllers/PersonsController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.ComponentModel.DataAnnotations; using System.Linq; @@ -20,8 +22,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Persons controller. /// diff --git a/Jellyfin.Api/Controllers/PlaylistsController.cs b/Jellyfin.Api/Controllers/PlaylistsController.cs index c6b8f3ac..67756a7b 100644 --- a/Jellyfin.Api/Controllers/PlaylistsController.cs +++ b/Jellyfin.Api/Controllers/PlaylistsController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -27,8 +29,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ModelBinding; -namespace Jellyfin.Api.Controllers; - /// /// Playlists controller. /// diff --git a/Jellyfin.Api/Controllers/PlaystateController.cs b/Jellyfin.Api/Controllers/PlaystateController.cs index ba7c2a52..030179f9 100644 --- a/Jellyfin.Api/Controllers/PlaystateController.cs +++ b/Jellyfin.Api/Controllers/PlaystateController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.ComponentModel.DataAnnotations; using System.Diagnostics.CodeAnalysis; @@ -22,8 +24,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.Controllers; - /// /// Playstate controller. /// diff --git a/Jellyfin.Api/Controllers/PluginsController.cs b/Jellyfin.Api/Controllers/PluginsController.cs index dcc790e7..f8a947d6 100644 --- a/Jellyfin.Api/Controllers/PluginsController.cs +++ b/Jellyfin.Api/Controllers/PluginsController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -21,8 +23,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Plugins controller. /// diff --git a/Jellyfin.Api/Controllers/QuickConnectController.cs b/Jellyfin.Api/Controllers/QuickConnectController.cs index a8b7c8b2..dc6097ee 100644 --- a/Jellyfin.Api/Controllers/QuickConnectController.cs +++ b/Jellyfin.Api/Controllers/QuickConnectController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; @@ -15,8 +17,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Quick connect controller. /// diff --git a/Jellyfin.Api/Controllers/RemoteImageController.cs b/Jellyfin.Api/Controllers/RemoteImageController.cs index 295b8887..636027be 100644 --- a/Jellyfin.Api/Controllers/RemoteImageController.cs +++ b/Jellyfin.Api/Controllers/RemoteImageController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -23,8 +25,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Remote Images Controller. /// diff --git a/Jellyfin.Api/Controllers/ScheduledTasksController.cs b/Jellyfin.Api/Controllers/ScheduledTasksController.cs index 538be303..17ea8693 100644 --- a/Jellyfin.Api/Controllers/ScheduledTasksController.cs +++ b/Jellyfin.Api/Controllers/ScheduledTasksController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -13,8 +15,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Scheduled Tasks Controller. /// diff --git a/Jellyfin.Api/Controllers/SearchController.cs b/Jellyfin.Api/Controllers/SearchController.cs index ea6ac7f3..45965c45 100644 --- a/Jellyfin.Api/Controllers/SearchController.cs +++ b/Jellyfin.Api/Controllers/SearchController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.ComponentModel; using System.ComponentModel.DataAnnotations; @@ -24,8 +26,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Search controller. /// diff --git a/Jellyfin.Api/Controllers/SessionController.cs b/Jellyfin.Api/Controllers/SessionController.cs index 28888ba1..0427dfe3 100644 --- a/Jellyfin.Api/Controllers/SessionController.cs +++ b/Jellyfin.Api/Controllers/SessionController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -21,8 +23,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// The session controller. /// diff --git a/Jellyfin.Api/Controllers/StartupController.cs b/Jellyfin.Api/Controllers/StartupController.cs index 3492a08a..358f09d3 100644 --- a/Jellyfin.Api/Controllers/StartupController.cs +++ b/Jellyfin.Api/Controllers/StartupController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks; @@ -15,8 +17,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// The startup wizard controller. /// diff --git a/Jellyfin.Api/Controllers/StudiosController.cs b/Jellyfin.Api/Controllers/StudiosController.cs index ad185fbe..1d8d18a9 100644 --- a/Jellyfin.Api/Controllers/StudiosController.cs +++ b/Jellyfin.Api/Controllers/StudiosController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.ComponentModel.DataAnnotations; using Jellyfin.Api.Extensions; @@ -20,8 +22,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Studios controller. /// diff --git a/Jellyfin.Api/Controllers/SubtitleController.cs b/Jellyfin.Api/Controllers/SubtitleController.cs index 220c0b4a..0cd6edbe 100644 --- a/Jellyfin.Api/Controllers/SubtitleController.cs +++ b/Jellyfin.Api/Controllers/SubtitleController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -36,8 +38,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.Controllers; - /// /// Subtitle controller. /// diff --git a/Jellyfin.Api/Controllers/SuggestionsController.cs b/Jellyfin.Api/Controllers/SuggestionsController.cs index 04c53ef3..b99e9aea 100644 --- a/Jellyfin.Api/Controllers/SuggestionsController.cs +++ b/Jellyfin.Api/Controllers/SuggestionsController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.ComponentModel.DataAnnotations; using Jellyfin.Api.Extensions; @@ -20,8 +22,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// The suggestions controller. /// diff --git a/Jellyfin.Api/Controllers/SyncPlayController.cs b/Jellyfin.Api/Controllers/SyncPlayController.cs index a4d07533..bebe330f 100644 --- a/Jellyfin.Api/Controllers/SyncPlayController.cs +++ b/Jellyfin.Api/Controllers/SyncPlayController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -21,8 +23,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// The sync play controller. /// diff --git a/Jellyfin.Api/Controllers/SystemController.cs b/Jellyfin.Api/Controllers/SystemController.cs index c62e9bd5..5c5a68d8 100644 --- a/Jellyfin.Api/Controllers/SystemController.cs +++ b/Jellyfin.Api/Controllers/SystemController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -23,8 +25,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.Controllers; - /// /// The system controller. /// diff --git a/Jellyfin.Api/Controllers/TimeSyncController.cs b/Jellyfin.Api/Controllers/TimeSyncController.cs index 2eb012cd..530d1978 100644 --- a/Jellyfin.Api/Controllers/TimeSyncController.cs +++ b/Jellyfin.Api/Controllers/TimeSyncController.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using MediaBrowser.Model.SyncPlay; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// The time sync controller. /// diff --git a/Jellyfin.Api/Controllers/TrailersController.cs b/Jellyfin.Api/Controllers/TrailersController.cs index 903345f2..bc4caa42 100644 --- a/Jellyfin.Api/Controllers/TrailersController.cs +++ b/Jellyfin.Api/Controllers/TrailersController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using Jellyfin.Api.ModelBinders; using Jellyfin.Data.Enums; @@ -13,8 +15,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// The trailers controller. /// diff --git a/Jellyfin.Api/Controllers/TrickplayController.cs b/Jellyfin.Api/Controllers/TrickplayController.cs index 0e21ef80..2156800b 100644 --- a/Jellyfin.Api/Controllers/TrickplayController.cs +++ b/Jellyfin.Api/Controllers/TrickplayController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.ComponentModel.DataAnnotations; using System.Net.Mime; @@ -18,8 +20,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Trickplay controller. /// diff --git a/Jellyfin.Api/Controllers/TvShowsController.cs b/Jellyfin.Api/Controllers/TvShowsController.cs index ed1cf123..af91234c 100644 --- a/Jellyfin.Api/Controllers/TvShowsController.cs +++ b/Jellyfin.Api/Controllers/TvShowsController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -24,8 +26,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// The tv shows controller. /// diff --git a/Jellyfin.Api/Controllers/UniversalAudioController.cs b/Jellyfin.Api/Controllers/UniversalAudioController.cs index 6788d830..35273543 100644 --- a/Jellyfin.Api/Controllers/UniversalAudioController.cs +++ b/Jellyfin.Api/Controllers/UniversalAudioController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -27,8 +29,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.Controllers; - /// /// The universal audio controller. /// diff --git a/Jellyfin.Api/Controllers/UserController.cs b/Jellyfin.Api/Controllers/UserController.cs index d2d7e18d..e1d1a14e 100644 --- a/Jellyfin.Api/Controllers/UserController.cs +++ b/Jellyfin.Api/Controllers/UserController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -33,8 +35,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.Controllers; - /// /// User controller. /// diff --git a/Jellyfin.Api/Controllers/UserLibraryController.cs b/Jellyfin.Api/Controllers/UserLibraryController.cs index ebea52e8..af3a9cf2 100644 --- a/Jellyfin.Api/Controllers/UserLibraryController.cs +++ b/Jellyfin.Api/Controllers/UserLibraryController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -28,8 +30,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// User library controller. /// diff --git a/Jellyfin.Api/Controllers/UserViewsController.cs b/Jellyfin.Api/Controllers/UserViewsController.cs index a5914dd1..d65054fd 100644 --- a/Jellyfin.Api/Controllers/UserViewsController.cs +++ b/Jellyfin.Api/Controllers/UserViewsController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -23,8 +25,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// User views controller. /// diff --git a/Jellyfin.Api/Controllers/VideoAttachmentsController.cs b/Jellyfin.Api/Controllers/VideoAttachmentsController.cs index 276d0dfb..8b8aefde 100644 --- a/Jellyfin.Api/Controllers/VideoAttachmentsController.cs +++ b/Jellyfin.Api/Controllers/VideoAttachmentsController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.ComponentModel.DataAnnotations; using System.Net.Mime; @@ -17,8 +19,6 @@ using MediaBrowser.Controller.MediaEncoding; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Attachments controller. /// diff --git a/Jellyfin.Api/Controllers/VideosController.cs b/Jellyfin.Api/Controllers/VideosController.cs index 73fd4262..449948cc 100644 --- a/Jellyfin.Api/Controllers/VideosController.cs +++ b/Jellyfin.Api/Controllers/VideosController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -34,8 +36,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// The videos controller. /// diff --git a/Jellyfin.Api/Controllers/YearsController.cs b/Jellyfin.Api/Controllers/YearsController.cs index 6e403733..2eb40e87 100644 --- a/Jellyfin.Api/Controllers/YearsController.cs +++ b/Jellyfin.Api/Controllers/YearsController.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Controllers; + using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -24,8 +26,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Controllers; - /// /// Years controller. /// diff --git a/Jellyfin.Api/Extensions/ClaimsPrincipalExtensions.cs b/Jellyfin.Api/Extensions/ClaimsPrincipalExtensions.cs index ab861038..d2769154 100644 --- a/Jellyfin.Api/Extensions/ClaimsPrincipalExtensions.cs +++ b/Jellyfin.Api/Extensions/ClaimsPrincipalExtensions.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Extensions; + using System; using System.Linq; using System.Security.Claims; using Jellyfin.Api.Constants; -namespace Jellyfin.Api.Extensions; - /// /// Extensions for . /// diff --git a/Jellyfin.Api/Extensions/DtoExtensions.cs b/Jellyfin.Api/Extensions/DtoExtensions.cs index 73c3ff80..0a3212bd 100644 --- a/Jellyfin.Api/Extensions/DtoExtensions.cs +++ b/Jellyfin.Api/Extensions/DtoExtensions.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Extensions; + using System.Collections.Generic; using MediaBrowser.Controller.Dto; using MediaBrowser.Model.Entities; -namespace Jellyfin.Api.Extensions; - /// /// Dto Extensions. /// diff --git a/Jellyfin.Api/Formatters/CamelCaseJsonProfileFormatter.cs b/Jellyfin.Api/Formatters/CamelCaseJsonProfileFormatter.cs index 2683c7b2..78e1a228 100644 --- a/Jellyfin.Api/Formatters/CamelCaseJsonProfileFormatter.cs +++ b/Jellyfin.Api/Formatters/CamelCaseJsonProfileFormatter.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Formatters; + using Jellyfin.Extensions.Json; using Microsoft.AspNetCore.Mvc.Formatters; using Microsoft.Net.Http.Headers; -namespace Jellyfin.Api.Formatters; - /// /// Camel Case Json Profile Formatter. /// diff --git a/Jellyfin.Api/Formatters/CssOutputFormatter.cs b/Jellyfin.Api/Formatters/CssOutputFormatter.cs index 60b804af..d924f97f 100644 --- a/Jellyfin.Api/Formatters/CssOutputFormatter.cs +++ b/Jellyfin.Api/Formatters/CssOutputFormatter.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Formatters; + using System.Net.Mime; using Microsoft.AspNetCore.Mvc.Formatters; -namespace Jellyfin.Api.Formatters; - /// /// Css output formatter. /// diff --git a/Jellyfin.Api/Formatters/PascalCaseJsonProfileFormatter.cs b/Jellyfin.Api/Formatters/PascalCaseJsonProfileFormatter.cs index bbcaa965..c79b7e90 100644 --- a/Jellyfin.Api/Formatters/PascalCaseJsonProfileFormatter.cs +++ b/Jellyfin.Api/Formatters/PascalCaseJsonProfileFormatter.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Formatters; + using System.Net.Mime; using Jellyfin.Extensions.Json; using Microsoft.AspNetCore.Mvc.Formatters; using Microsoft.Net.Http.Headers; -namespace Jellyfin.Api.Formatters; - /// /// Pascal Case Json Profile Formatter. /// diff --git a/Jellyfin.Api/Formatters/XmlOutputFormatter.cs b/Jellyfin.Api/Formatters/XmlOutputFormatter.cs index f271dfa2..6a418948 100644 --- a/Jellyfin.Api/Formatters/XmlOutputFormatter.cs +++ b/Jellyfin.Api/Formatters/XmlOutputFormatter.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Formatters; + using System; using System.Net.Mime; using System.Text; @@ -9,8 +11,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Formatters; -namespace Jellyfin.Api.Formatters; - /// /// Xml output formatter. /// diff --git a/Jellyfin.Api/Helpers/AudioHelper.cs b/Jellyfin.Api/Helpers/AudioHelper.cs index 68c33039..813c6c25 100644 --- a/Jellyfin.Api/Helpers/AudioHelper.cs +++ b/Jellyfin.Api/Helpers/AudioHelper.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Helpers; + using System.IO; using System.Net.Http; using System.Threading; @@ -18,8 +20,6 @@ using MediaBrowser.Model.Net; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace Jellyfin.Api.Helpers; - /// /// Audio helper. /// diff --git a/Jellyfin.Api/Helpers/DynamicHlsHelper.cs b/Jellyfin.Api/Helpers/DynamicHlsHelper.cs index d7384590..22930d6a 100644 --- a/Jellyfin.Api/Helpers/DynamicHlsHelper.cs +++ b/Jellyfin.Api/Helpers/DynamicHlsHelper.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Helpers; + using System; using System.Collections.Generic; using System.Globalization; @@ -31,8 +33,6 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Microsoft.Net.Http.Headers; -namespace Jellyfin.Api.Helpers; - /// /// Dynamic hls helper. /// diff --git a/Jellyfin.Api/Helpers/FileStreamResponseHelpers.cs b/Jellyfin.Api/Helpers/FileStreamResponseHelpers.cs index 8e64be00..0c7edd84 100644 --- a/Jellyfin.Api/Helpers/FileStreamResponseHelpers.cs +++ b/Jellyfin.Api/Helpers/FileStreamResponseHelpers.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Helpers; + using System; using System.IO; using System.Net.Http; @@ -15,8 +17,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Net.Http.Headers; -namespace Jellyfin.Api.Helpers; - /// /// The stream response helpers. /// diff --git a/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs b/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs index c8fab092..a1ecc866 100644 --- a/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs +++ b/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Helpers; + using System; using System.Globalization; using System.Text; -namespace Jellyfin.Api.Helpers; - /// /// Helpers to generate HLS codec strings according to /// RFC 6381 section 3.3 diff --git a/Jellyfin.Api/Helpers/HlsHelpers.cs b/Jellyfin.Api/Helpers/HlsHelpers.cs index e20225b2..73ca2883 100644 --- a/Jellyfin.Api/Helpers/HlsHelpers.cs +++ b/Jellyfin.Api/Helpers/HlsHelpers.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Helpers; + using System; using System.Globalization; using System.IO; @@ -13,8 +15,6 @@ using MediaBrowser.Controller.Streaming; using MediaBrowser.Model.IO; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.Helpers; - /// /// The hls helpers. /// diff --git a/Jellyfin.Api/Helpers/MediaInfoHelper.cs b/Jellyfin.Api/Helpers/MediaInfoHelper.cs index daa26972..95dd8645 100644 --- a/Jellyfin.Api/Helpers/MediaInfoHelper.cs +++ b/Jellyfin.Api/Helpers/MediaInfoHelper.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Helpers; + using System; using System.Globalization; using System.Linq; @@ -33,8 +35,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.Helpers; - /// /// Media info helper. /// diff --git a/Jellyfin.Api/Helpers/RequestHelpers.cs b/Jellyfin.Api/Helpers/RequestHelpers.cs index 31589c06..484ceb47 100644 --- a/Jellyfin.Api/Helpers/RequestHelpers.cs +++ b/Jellyfin.Api/Helpers/RequestHelpers.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Helpers; + using System; using System.Collections.Generic; using System.Linq; @@ -23,8 +25,6 @@ using MediaBrowser.Model.Dto; using MediaBrowser.Model.Querying; using Microsoft.AspNetCore.Http; -namespace Jellyfin.Api.Helpers; - /// /// Request Extensions. /// diff --git a/Jellyfin.Api/Helpers/StreamingHelpers.cs b/Jellyfin.Api/Helpers/StreamingHelpers.cs index 1ccb5f77..f1bf14b6 100644 --- a/Jellyfin.Api/Helpers/StreamingHelpers.cs +++ b/Jellyfin.Api/Helpers/StreamingHelpers.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Helpers; + using System; using System.Collections.Generic; using System.Globalization; @@ -26,8 +28,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.Net.Http.Headers; -namespace Jellyfin.Api.Helpers; - /// /// The streaming helpers. /// diff --git a/Jellyfin.Api/Middleware/BaseUrlRedirectionMiddleware.cs b/Jellyfin.Api/Middleware/BaseUrlRedirectionMiddleware.cs index 93f1b968..964a46c6 100644 --- a/Jellyfin.Api/Middleware/BaseUrlRedirectionMiddleware.cs +++ b/Jellyfin.Api/Middleware/BaseUrlRedirectionMiddleware.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Middleware; + using System; using System.Threading.Tasks; using MediaBrowser.Common.Net; @@ -11,8 +13,6 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using static MediaBrowser.Controller.Extensions.ConfigurationExtensions; -namespace Jellyfin.Api.Middleware; - /// /// Redirect requests without baseurl prefix to the baseurl prefixed URL. /// diff --git a/Jellyfin.Api/Middleware/ExceptionMiddleware.cs b/Jellyfin.Api/Middleware/ExceptionMiddleware.cs index 407cad98..94626c94 100644 --- a/Jellyfin.Api/Middleware/ExceptionMiddleware.cs +++ b/Jellyfin.Api/Middleware/ExceptionMiddleware.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Middleware; + using System; using System.IO; using System.Net.Mime; @@ -16,8 +18,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.Middleware; - /// /// Exception Middleware. /// diff --git a/Jellyfin.Api/Middleware/IpBasedAccessValidationMiddleware.cs b/Jellyfin.Api/Middleware/IpBasedAccessValidationMiddleware.cs index 8080cf1e..b60a8858 100644 --- a/Jellyfin.Api/Middleware/IpBasedAccessValidationMiddleware.cs +++ b/Jellyfin.Api/Middleware/IpBasedAccessValidationMiddleware.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Middleware; + using System.Net; using System.Threading.Tasks; using System.Web; @@ -10,8 +12,6 @@ using MediaBrowser.Common.Net; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.Middleware; - /// /// Validates the IP of requests coming from local networks wrt. remote access. /// diff --git a/Jellyfin.Api/Middleware/QueryStringDecodingMiddleware.cs b/Jellyfin.Api/Middleware/QueryStringDecodingMiddleware.cs index 3ccde1e2..bd4ffc1b 100644 --- a/Jellyfin.Api/Middleware/QueryStringDecodingMiddleware.cs +++ b/Jellyfin.Api/Middleware/QueryStringDecodingMiddleware.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Middleware; + using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; -namespace Jellyfin.Api.Middleware; - /// /// URL decodes the querystring before binding. /// diff --git a/Jellyfin.Api/Middleware/ResponseTimeMiddleware.cs b/Jellyfin.Api/Middleware/ResponseTimeMiddleware.cs index 758425b3..8d9927f6 100644 --- a/Jellyfin.Api/Middleware/ResponseTimeMiddleware.cs +++ b/Jellyfin.Api/Middleware/ResponseTimeMiddleware.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Middleware; + using System.Diagnostics; using System.Globalization; using System.Threading.Tasks; @@ -11,8 +13,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Extensions; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.Middleware; - /// /// Response time middleware. /// diff --git a/Jellyfin.Api/Middleware/RobotsRedirectionMiddleware.cs b/Jellyfin.Api/Middleware/RobotsRedirectionMiddleware.cs index d29bf49a..aef33226 100644 --- a/Jellyfin.Api/Middleware/RobotsRedirectionMiddleware.cs +++ b/Jellyfin.Api/Middleware/RobotsRedirectionMiddleware.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Middleware; + using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.Middleware; - /// /// Redirect requests to robots.txt to web/robots.txt. /// diff --git a/Jellyfin.Api/Middleware/ServerStartupMessageMiddleware.cs b/Jellyfin.Api/Middleware/ServerStartupMessageMiddleware.cs index 559699e9..62b54030 100644 --- a/Jellyfin.Api/Middleware/ServerStartupMessageMiddleware.cs +++ b/Jellyfin.Api/Middleware/ServerStartupMessageMiddleware.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Middleware; + using System; using System.Net.Mime; using System.Threading.Tasks; @@ -9,8 +11,6 @@ using MediaBrowser.Controller; using MediaBrowser.Model.Globalization; using Microsoft.AspNetCore.Http; -namespace Jellyfin.Api.Middleware; - /// /// Shows a custom message during server startup. /// diff --git a/Jellyfin.Api/Middleware/UrlDecodeQueryFeature.cs b/Jellyfin.Api/Middleware/UrlDecodeQueryFeature.cs index 34bdc9bd..1214ec38 100644 --- a/Jellyfin.Api/Middleware/UrlDecodeQueryFeature.cs +++ b/Jellyfin.Api/Middleware/UrlDecodeQueryFeature.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Middleware; + using System; using System.Collections.Generic; using System.Linq; @@ -10,8 +12,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.Extensions.Primitives; -namespace Jellyfin.Api.Middleware; - /// /// Defines the . /// diff --git a/Jellyfin.Api/Middleware/WebSocketHandlerMiddleware.cs b/Jellyfin.Api/Middleware/WebSocketHandlerMiddleware.cs index c2be1b27..e8a7f3eb 100644 --- a/Jellyfin.Api/Middleware/WebSocketHandlerMiddleware.cs +++ b/Jellyfin.Api/Middleware/WebSocketHandlerMiddleware.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Middleware; + using System.Threading.Tasks; using MediaBrowser.Controller.Net; using Microsoft.AspNetCore.Http; -namespace Jellyfin.Api.Middleware; - /// /// Handles WebSocket requests. /// diff --git a/Jellyfin.Api/ModelBinders/CommaDelimitedCollectionModelBinder.cs b/Jellyfin.Api/ModelBinders/CommaDelimitedCollectionModelBinder.cs index 7d02d519..ecf4ffb1 100644 --- a/Jellyfin.Api/ModelBinders/CommaDelimitedCollectionModelBinder.cs +++ b/Jellyfin.Api/ModelBinders/CommaDelimitedCollectionModelBinder.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.ModelBinders; + using System; using System.Collections.Generic; using System.ComponentModel; @@ -9,8 +11,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.ModelBinders; - /// /// Comma delimited collection model binder. /// Returns an empty array of specified type if there is no query parameter. diff --git a/Jellyfin.Api/ModelBinders/LegacyDateTimeModelBinder.cs b/Jellyfin.Api/ModelBinders/LegacyDateTimeModelBinder.cs index 28d6fb5a..883579d1 100644 --- a/Jellyfin.Api/ModelBinders/LegacyDateTimeModelBinder.cs +++ b/Jellyfin.Api/ModelBinders/LegacyDateTimeModelBinder.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.ModelBinders; + using System; using System.Globalization; using System.Threading.Tasks; @@ -9,8 +11,6 @@ using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Mvc.ModelBinding.Binders; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.ModelBinders; - /// /// DateTime model binder. /// diff --git a/Jellyfin.Api/ModelBinders/NullableEnumModelBinder.cs b/Jellyfin.Api/ModelBinders/NullableEnumModelBinder.cs index a42d5ea4..3f9a9b7b 100644 --- a/Jellyfin.Api/ModelBinders/NullableEnumModelBinder.cs +++ b/Jellyfin.Api/ModelBinders/NullableEnumModelBinder.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.ModelBinders; + using System; using System.ComponentModel; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.ModelBinders; - /// /// Nullable enum model binder. /// diff --git a/Jellyfin.Api/ModelBinders/NullableEnumModelBinderProvider.cs b/Jellyfin.Api/ModelBinders/NullableEnumModelBinderProvider.cs index 2e58bab4..58e534cc 100644 --- a/Jellyfin.Api/ModelBinders/NullableEnumModelBinderProvider.cs +++ b/Jellyfin.Api/ModelBinders/NullableEnumModelBinderProvider.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.ModelBinders; + using System; using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.ModelBinders; - /// /// Nullable enum model binder provider. /// diff --git a/Jellyfin.Api/ModelBinders/PipeDelimitedCollectionModelBinder.cs b/Jellyfin.Api/ModelBinders/PipeDelimitedCollectionModelBinder.cs index b1451e58..a39c9d5c 100644 --- a/Jellyfin.Api/ModelBinders/PipeDelimitedCollectionModelBinder.cs +++ b/Jellyfin.Api/ModelBinders/PipeDelimitedCollectionModelBinder.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.ModelBinders; + using System; using System.Collections.Generic; using System.ComponentModel; @@ -9,8 +11,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.ModelBinders; - /// /// Comma delimited collection model binder. /// Returns an empty collection of specified type if there is no query parameter. diff --git a/Jellyfin.Api/Models/ConfigurationPageInfo.cs b/Jellyfin.Api/Models/ConfigurationPageInfo.cs index 9269ab7f..6f509869 100644 --- a/Jellyfin.Api/Models/ConfigurationPageInfo.cs +++ b/Jellyfin.Api/Models/ConfigurationPageInfo.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Models; + using System; using MediaBrowser.Common.Plugins; using MediaBrowser.Model.Plugins; -namespace Jellyfin.Api.Models; - /// /// The configuration page info. /// diff --git a/Jellyfin.Api/Models/LibraryDtos/LibraryOptionsResultDto.cs b/Jellyfin.Api/Models/LibraryDtos/LibraryOptionsResultDto.cs index 27887bcd..4f76a09c 100644 --- a/Jellyfin.Api/Models/LibraryDtos/LibraryOptionsResultDto.cs +++ b/Jellyfin.Api/Models/LibraryDtos/LibraryOptionsResultDto.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Models.LibraryDtos; + using System; using System.Collections.Generic; -namespace Jellyfin.Api.Models.LibraryDtos; - /// /// Library options result dto. /// diff --git a/Jellyfin.Api/Models/LibraryDtos/LibraryTypeOptionsDto.cs b/Jellyfin.Api/Models/LibraryDtos/LibraryTypeOptionsDto.cs index 762a4f70..734b86a0 100644 --- a/Jellyfin.Api/Models/LibraryDtos/LibraryTypeOptionsDto.cs +++ b/Jellyfin.Api/Models/LibraryDtos/LibraryTypeOptionsDto.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Models.LibraryDtos; + using System; using System.Collections.Generic; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Entities; -namespace Jellyfin.Api.Models.LibraryDtos; - /// /// Library type options dto. /// diff --git a/Jellyfin.Api/Models/LibraryDtos/MediaUpdateInfoDto.cs b/Jellyfin.Api/Models/LibraryDtos/MediaUpdateInfoDto.cs index 7c71c6cb..1dd4fae2 100644 --- a/Jellyfin.Api/Models/LibraryDtos/MediaUpdateInfoDto.cs +++ b/Jellyfin.Api/Models/LibraryDtos/MediaUpdateInfoDto.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Models.LibraryDtos; + using System; using System.Collections.Generic; -namespace Jellyfin.Api.Models.LibraryDtos; - /// /// Media Update Info Dto. /// diff --git a/Jellyfin.Api/Models/LibraryStructureDto/AddVirtualFolderDto.cs b/Jellyfin.Api/Models/LibraryStructureDto/AddVirtualFolderDto.cs index b8346705..dc8c7482 100644 --- a/Jellyfin.Api/Models/LibraryStructureDto/AddVirtualFolderDto.cs +++ b/Jellyfin.Api/Models/LibraryStructureDto/AddVirtualFolderDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Model.Configuration; - namespace Jellyfin.Api.Models.LibraryStructureDto; +using MediaBrowser.Model.Configuration; + /// /// Add virtual folder dto. /// diff --git a/Jellyfin.Api/Models/LibraryStructureDto/MediaPathDto.cs b/Jellyfin.Api/Models/LibraryStructureDto/MediaPathDto.cs index 5ed9e1a8..e116db11 100644 --- a/Jellyfin.Api/Models/LibraryStructureDto/MediaPathDto.cs +++ b/Jellyfin.Api/Models/LibraryStructureDto/MediaPathDto.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Models.LibraryStructureDto; + using System.ComponentModel.DataAnnotations; using MediaBrowser.Model.Configuration; -namespace Jellyfin.Api.Models.LibraryStructureDto; - /// /// Media Path dto. /// diff --git a/Jellyfin.Api/Models/LibraryStructureDto/UpdateLibraryOptionsDto.cs b/Jellyfin.Api/Models/LibraryStructureDto/UpdateLibraryOptionsDto.cs index ddcaf6da..c9e61ec2 100644 --- a/Jellyfin.Api/Models/LibraryStructureDto/UpdateLibraryOptionsDto.cs +++ b/Jellyfin.Api/Models/LibraryStructureDto/UpdateLibraryOptionsDto.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Models.LibraryStructureDto; + using System; using MediaBrowser.Model.Configuration; -namespace Jellyfin.Api.Models.LibraryStructureDto; - /// /// Update library options dto. /// diff --git a/Jellyfin.Api/Models/LibraryStructureDto/UpdateMediaPathRequestDto.cs b/Jellyfin.Api/Models/LibraryStructureDto/UpdateMediaPathRequestDto.cs index 8f0c9faf..3a5e02b5 100644 --- a/Jellyfin.Api/Models/LibraryStructureDto/UpdateMediaPathRequestDto.cs +++ b/Jellyfin.Api/Models/LibraryStructureDto/UpdateMediaPathRequestDto.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Models.LibraryStructureDto; + using System.ComponentModel.DataAnnotations; using MediaBrowser.Model.Configuration; -namespace Jellyfin.Api.Models.LibraryStructureDto; - /// /// Update library options dto. /// diff --git a/Jellyfin.Api/Models/LiveTvDtos/GetProgramsDto.cs b/Jellyfin.Api/Models/LiveTvDtos/GetProgramsDto.cs index 40a260d1..3fa2363b 100644 --- a/Jellyfin.Api/Models/LiveTvDtos/GetProgramsDto.cs +++ b/Jellyfin.Api/Models/LiveTvDtos/GetProgramsDto.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Models.LiveTvDtos; + using System; using System.Collections.Generic; using System.ComponentModel; @@ -12,8 +14,6 @@ using Jellyfin.Extensions.Json.Converters; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Querying; -namespace Jellyfin.Api.Models.LiveTvDtos; - /// /// Get programs dto. /// diff --git a/Jellyfin.Api/Models/LiveTvDtos/SetChannelMappingDto.cs b/Jellyfin.Api/Models/LiveTvDtos/SetChannelMappingDto.cs index 0eaab0ec..27d01330 100644 --- a/Jellyfin.Api/Models/LiveTvDtos/SetChannelMappingDto.cs +++ b/Jellyfin.Api/Models/LiveTvDtos/SetChannelMappingDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.ComponentModel.DataAnnotations; - namespace Jellyfin.Api.Models.LiveTvDtos; +using System.ComponentModel.DataAnnotations; + /// /// Set channel mapping dto. /// diff --git a/Jellyfin.Api/Models/MediaInfoDtos/OpenLiveStreamDto.cs b/Jellyfin.Api/Models/MediaInfoDtos/OpenLiveStreamDto.cs index 520cbf1a..91c09119 100644 --- a/Jellyfin.Api/Models/MediaInfoDtos/OpenLiveStreamDto.cs +++ b/Jellyfin.Api/Models/MediaInfoDtos/OpenLiveStreamDto.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Models.MediaInfoDtos; + using System; using System.Collections.Generic; using MediaBrowser.Model.Dlna; using MediaBrowser.Model.MediaInfo; -namespace Jellyfin.Api.Models.MediaInfoDtos; - /// /// Open live stream dto. /// diff --git a/Jellyfin.Api/Models/MediaInfoDtos/PlaybackInfoDto.cs b/Jellyfin.Api/Models/MediaInfoDtos/PlaybackInfoDto.cs index f70ea965..5d15da1f 100644 --- a/Jellyfin.Api/Models/MediaInfoDtos/PlaybackInfoDto.cs +++ b/Jellyfin.Api/Models/MediaInfoDtos/PlaybackInfoDto.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Models.MediaInfoDtos; + using System; using MediaBrowser.Model.Dlna; -namespace Jellyfin.Api.Models.MediaInfoDtos; - /// /// Playback info dto. /// diff --git a/Jellyfin.Api/Models/PlaylistDtos/CreatePlaylistDto.cs b/Jellyfin.Api/Models/PlaylistDtos/CreatePlaylistDto.cs index d6d73e55..8b3e88ae 100644 --- a/Jellyfin.Api/Models/PlaylistDtos/CreatePlaylistDto.cs +++ b/Jellyfin.Api/Models/PlaylistDtos/CreatePlaylistDto.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Models.PlaylistDtos; + using System; using System.Collections.Generic; using System.Text.Json.Serialization; @@ -9,8 +11,6 @@ using Jellyfin.Data.Enums; using Jellyfin.Extensions.Json.Converters; using MediaBrowser.Model.Entities; -namespace Jellyfin.Api.Models.PlaylistDtos; - /// /// Create new playlist dto. /// diff --git a/Jellyfin.Api/Models/PlaylistDtos/UpdatePlaylistDto.cs b/Jellyfin.Api/Models/PlaylistDtos/UpdatePlaylistDto.cs index d57c125d..c7e0d7e4 100644 --- a/Jellyfin.Api/Models/PlaylistDtos/UpdatePlaylistDto.cs +++ b/Jellyfin.Api/Models/PlaylistDtos/UpdatePlaylistDto.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Models.PlaylistDtos; + using System; using System.Collections.Generic; using System.Text.Json.Serialization; using Jellyfin.Extensions.Json.Converters; using MediaBrowser.Model.Entities; -namespace Jellyfin.Api.Models.PlaylistDtos; - /// /// Update existing playlist dto. Fields set to `null` will not be updated and keep their current values. /// diff --git a/Jellyfin.Api/Models/StartupDtos/StartupRemoteAccessDto.cs b/Jellyfin.Api/Models/StartupDtos/StartupRemoteAccessDto.cs index e61412fa..d6996525 100644 --- a/Jellyfin.Api/Models/StartupDtos/StartupRemoteAccessDto.cs +++ b/Jellyfin.Api/Models/StartupDtos/StartupRemoteAccessDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.ComponentModel.DataAnnotations; - namespace Jellyfin.Api.Models.StartupDtos; +using System.ComponentModel.DataAnnotations; + /// /// Startup remote access dto. /// diff --git a/Jellyfin.Api/Models/StreamingDtos/HlsAudioRequestDto.cs b/Jellyfin.Api/Models/StreamingDtos/HlsAudioRequestDto.cs index edc45101..f49a5eca 100644 --- a/Jellyfin.Api/Models/StreamingDtos/HlsAudioRequestDto.cs +++ b/Jellyfin.Api/Models/StreamingDtos/HlsAudioRequestDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Controller.Streaming; - namespace Jellyfin.Api.Models.StreamingDtos; +using MediaBrowser.Controller.Streaming; + /// /// The hls video request dto. /// diff --git a/Jellyfin.Api/Models/StreamingDtos/HlsVideoRequestDto.cs b/Jellyfin.Api/Models/StreamingDtos/HlsVideoRequestDto.cs index 4bae6050..533ebb28 100644 --- a/Jellyfin.Api/Models/StreamingDtos/HlsVideoRequestDto.cs +++ b/Jellyfin.Api/Models/StreamingDtos/HlsVideoRequestDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Controller.Streaming; - namespace Jellyfin.Api.Models.StreamingDtos; +using MediaBrowser.Controller.Streaming; + /// /// The hls video request dto. /// diff --git a/Jellyfin.Api/Models/SubtitleDtos/UploadSubtitleDto.cs b/Jellyfin.Api/Models/SubtitleDtos/UploadSubtitleDto.cs index e7391162..e9d0105f 100644 --- a/Jellyfin.Api/Models/SubtitleDtos/UploadSubtitleDto.cs +++ b/Jellyfin.Api/Models/SubtitleDtos/UploadSubtitleDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.ComponentModel.DataAnnotations; - namespace Jellyfin.Api.Models.SubtitleDtos; +using System.ComponentModel.DataAnnotations; + /// /// Upload subtitles dto. /// diff --git a/Jellyfin.Api/Models/SyncPlayDtos/BufferRequestDto.cs b/Jellyfin.Api/Models/SyncPlayDtos/BufferRequestDto.cs index e9d9fe1f..02e7bc0d 100644 --- a/Jellyfin.Api/Models/SyncPlayDtos/BufferRequestDto.cs +++ b/Jellyfin.Api/Models/SyncPlayDtos/BufferRequestDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace Jellyfin.Api.Models.SyncPlayDtos; +using System; + /// /// Class BufferRequestDto. /// diff --git a/Jellyfin.Api/Models/SyncPlayDtos/JoinGroupRequestDto.cs b/Jellyfin.Api/Models/SyncPlayDtos/JoinGroupRequestDto.cs index 5e7cd7ab..e8c87138 100644 --- a/Jellyfin.Api/Models/SyncPlayDtos/JoinGroupRequestDto.cs +++ b/Jellyfin.Api/Models/SyncPlayDtos/JoinGroupRequestDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace Jellyfin.Api.Models.SyncPlayDtos; +using System; + /// /// Class JoinGroupRequestDto. /// diff --git a/Jellyfin.Api/Models/SyncPlayDtos/MovePlaylistItemRequestDto.cs b/Jellyfin.Api/Models/SyncPlayDtos/MovePlaylistItemRequestDto.cs index a8e121bb..90fe17ba 100644 --- a/Jellyfin.Api/Models/SyncPlayDtos/MovePlaylistItemRequestDto.cs +++ b/Jellyfin.Api/Models/SyncPlayDtos/MovePlaylistItemRequestDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace Jellyfin.Api.Models.SyncPlayDtos; +using System; + /// /// Class MovePlaylistItemRequestDto. /// diff --git a/Jellyfin.Api/Models/SyncPlayDtos/NextItemRequestDto.cs b/Jellyfin.Api/Models/SyncPlayDtos/NextItemRequestDto.cs index 29a08443..8eac887f 100644 --- a/Jellyfin.Api/Models/SyncPlayDtos/NextItemRequestDto.cs +++ b/Jellyfin.Api/Models/SyncPlayDtos/NextItemRequestDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace Jellyfin.Api.Models.SyncPlayDtos; +using System; + /// /// Class NextItemRequestDto. /// diff --git a/Jellyfin.Api/Models/SyncPlayDtos/PlayRequestDto.cs b/Jellyfin.Api/Models/SyncPlayDtos/PlayRequestDto.cs index 12d4850c..b7eae34c 100644 --- a/Jellyfin.Api/Models/SyncPlayDtos/PlayRequestDto.cs +++ b/Jellyfin.Api/Models/SyncPlayDtos/PlayRequestDto.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Models.SyncPlayDtos; + using System; using System.Collections.Generic; -namespace Jellyfin.Api.Models.SyncPlayDtos; - /// /// Class PlayRequestDto. /// diff --git a/Jellyfin.Api/Models/SyncPlayDtos/PreviousItemRequestDto.cs b/Jellyfin.Api/Models/SyncPlayDtos/PreviousItemRequestDto.cs index d6c870bb..a5ac6fca 100644 --- a/Jellyfin.Api/Models/SyncPlayDtos/PreviousItemRequestDto.cs +++ b/Jellyfin.Api/Models/SyncPlayDtos/PreviousItemRequestDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace Jellyfin.Api.Models.SyncPlayDtos; +using System; + /// /// Class PreviousItemRequestDto. /// diff --git a/Jellyfin.Api/Models/SyncPlayDtos/QueueRequestDto.cs b/Jellyfin.Api/Models/SyncPlayDtos/QueueRequestDto.cs index d424e89c..b4ed7125 100644 --- a/Jellyfin.Api/Models/SyncPlayDtos/QueueRequestDto.cs +++ b/Jellyfin.Api/Models/SyncPlayDtos/QueueRequestDto.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Models.SyncPlayDtos; + using System; using System.Collections.Generic; using MediaBrowser.Model.SyncPlay; -namespace Jellyfin.Api.Models.SyncPlayDtos; - /// /// Class QueueRequestDto. /// diff --git a/Jellyfin.Api/Models/SyncPlayDtos/ReadyRequestDto.cs b/Jellyfin.Api/Models/SyncPlayDtos/ReadyRequestDto.cs index 6582c1d5..664d3ef3 100644 --- a/Jellyfin.Api/Models/SyncPlayDtos/ReadyRequestDto.cs +++ b/Jellyfin.Api/Models/SyncPlayDtos/ReadyRequestDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace Jellyfin.Api.Models.SyncPlayDtos; +using System; + /// /// Class ReadyRequest. /// diff --git a/Jellyfin.Api/Models/SyncPlayDtos/RemoveFromPlaylistRequestDto.cs b/Jellyfin.Api/Models/SyncPlayDtos/RemoveFromPlaylistRequestDto.cs index 75a85322..6eea71c8 100644 --- a/Jellyfin.Api/Models/SyncPlayDtos/RemoveFromPlaylistRequestDto.cs +++ b/Jellyfin.Api/Models/SyncPlayDtos/RemoveFromPlaylistRequestDto.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Models.SyncPlayDtos; + using System; using System.Collections.Generic; -namespace Jellyfin.Api.Models.SyncPlayDtos; - /// /// Class RemoveFromPlaylistRequestDto. /// diff --git a/Jellyfin.Api/Models/SyncPlayDtos/SetPlaylistItemRequestDto.cs b/Jellyfin.Api/Models/SyncPlayDtos/SetPlaylistItemRequestDto.cs index 3a5a204a..9daae587 100644 --- a/Jellyfin.Api/Models/SyncPlayDtos/SetPlaylistItemRequestDto.cs +++ b/Jellyfin.Api/Models/SyncPlayDtos/SetPlaylistItemRequestDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace Jellyfin.Api.Models.SyncPlayDtos; +using System; + /// /// Class SetPlaylistItemRequestDto. /// diff --git a/Jellyfin.Api/Models/SyncPlayDtos/SetRepeatModeRequestDto.cs b/Jellyfin.Api/Models/SyncPlayDtos/SetRepeatModeRequestDto.cs index f7d085d1..ba6b2526 100644 --- a/Jellyfin.Api/Models/SyncPlayDtos/SetRepeatModeRequestDto.cs +++ b/Jellyfin.Api/Models/SyncPlayDtos/SetRepeatModeRequestDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Model.SyncPlay; - namespace Jellyfin.Api.Models.SyncPlayDtos; +using MediaBrowser.Model.SyncPlay; + /// /// Class SetRepeatModeRequestDto. /// diff --git a/Jellyfin.Api/Models/SyncPlayDtos/SetShuffleModeRequestDto.cs b/Jellyfin.Api/Models/SyncPlayDtos/SetShuffleModeRequestDto.cs index 3547611c..6a11d98b 100644 --- a/Jellyfin.Api/Models/SyncPlayDtos/SetShuffleModeRequestDto.cs +++ b/Jellyfin.Api/Models/SyncPlayDtos/SetShuffleModeRequestDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Model.SyncPlay; - namespace Jellyfin.Api.Models.SyncPlayDtos; +using MediaBrowser.Model.SyncPlay; + /// /// Class SetShuffleModeRequestDto. /// diff --git a/Jellyfin.Api/Models/SystemInfoDtos/FolderStorageDto.cs b/Jellyfin.Api/Models/SystemInfoDtos/FolderStorageDto.cs index dc05b058..32dd374b 100644 --- a/Jellyfin.Api/Models/SystemInfoDtos/FolderStorageDto.cs +++ b/Jellyfin.Api/Models/SystemInfoDtos/FolderStorageDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Model.System; - namespace Jellyfin.Api.Models.SystemInfoDtos; +using MediaBrowser.Model.System; + /// /// Contains information about a specific folder. /// diff --git a/Jellyfin.Api/Models/SystemInfoDtos/LibraryStorageDto.cs b/Jellyfin.Api/Models/SystemInfoDtos/LibraryStorageDto.cs index 99500275..aa241e60 100644 --- a/Jellyfin.Api/Models/SystemInfoDtos/LibraryStorageDto.cs +++ b/Jellyfin.Api/Models/SystemInfoDtos/LibraryStorageDto.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Models.SystemInfoDtos; + using System; using System.Collections.Generic; using System.Linq; using MediaBrowser.Model.System; -namespace Jellyfin.Api.Models.SystemInfoDtos; - /// /// Contains informations about a libraries storage informations. /// diff --git a/Jellyfin.Api/Models/SystemInfoDtos/SystemStorageDto.cs b/Jellyfin.Api/Models/SystemInfoDtos/SystemStorageDto.cs index 792bacc4..c576ddde 100644 --- a/Jellyfin.Api/Models/SystemInfoDtos/SystemStorageDto.cs +++ b/Jellyfin.Api/Models/SystemInfoDtos/SystemStorageDto.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Models.SystemInfoDtos; + using System; using System.Collections.Generic; using System.Linq; using MediaBrowser.Model.System; -namespace Jellyfin.Api.Models.SystemInfoDtos; - /// /// Contains informations about the systems storage. /// diff --git a/Jellyfin.Api/Models/UserDtos/CreateUserByName.cs b/Jellyfin.Api/Models/UserDtos/CreateUserByName.cs index d84edafd..a86cba68 100644 --- a/Jellyfin.Api/Models/UserDtos/CreateUserByName.cs +++ b/Jellyfin.Api/Models/UserDtos/CreateUserByName.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.ComponentModel.DataAnnotations; - namespace Jellyfin.Api.Models.UserDtos; +using System.ComponentModel.DataAnnotations; + /// /// The create user by name request body. /// diff --git a/Jellyfin.Api/Models/UserDtos/ForgotPasswordDto.cs b/Jellyfin.Api/Models/UserDtos/ForgotPasswordDto.cs index 700987aa..38f7b61b 100644 --- a/Jellyfin.Api/Models/UserDtos/ForgotPasswordDto.cs +++ b/Jellyfin.Api/Models/UserDtos/ForgotPasswordDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.ComponentModel.DataAnnotations; - namespace Jellyfin.Api.Models.UserDtos; +using System.ComponentModel.DataAnnotations; + /// /// Forgot Password request body DTO. /// diff --git a/Jellyfin.Api/Models/UserDtos/ForgotPasswordPinDto.cs b/Jellyfin.Api/Models/UserDtos/ForgotPasswordPinDto.cs index cec80ff2..b9195757 100644 --- a/Jellyfin.Api/Models/UserDtos/ForgotPasswordPinDto.cs +++ b/Jellyfin.Api/Models/UserDtos/ForgotPasswordPinDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.ComponentModel.DataAnnotations; - namespace Jellyfin.Api.Models.UserDtos; +using System.ComponentModel.DataAnnotations; + /// /// Forgot Password Pin enter request body DTO. /// diff --git a/Jellyfin.Api/Models/UserDtos/QuickConnectDto.cs b/Jellyfin.Api/Models/UserDtos/QuickConnectDto.cs index 1a504447..810ae666 100644 --- a/Jellyfin.Api/Models/UserDtos/QuickConnectDto.cs +++ b/Jellyfin.Api/Models/UserDtos/QuickConnectDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.ComponentModel.DataAnnotations; - namespace Jellyfin.Api.Models.UserDtos; +using System.ComponentModel.DataAnnotations; + /// /// The quick connect request body. /// diff --git a/Jellyfin.Api/WebSocketListeners/ActivityLogWebSocketListener.cs b/Jellyfin.Api/WebSocketListeners/ActivityLogWebSocketListener.cs index 0d6135c9..177f8ffd 100644 --- a/Jellyfin.Api/WebSocketListeners/ActivityLogWebSocketListener.cs +++ b/Jellyfin.Api/WebSocketListeners/ActivityLogWebSocketListener.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.WebSocketListeners; + using System; using System.Threading.Tasks; using Jellyfin.Data; @@ -13,8 +15,6 @@ using MediaBrowser.Model.Activity; using MediaBrowser.Model.Session; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.WebSocketListeners; - /// /// Class ActivityLogWebSocketListener. /// diff --git a/Jellyfin.Api/WebSocketListeners/ScheduledTasksWebSocketListener.cs b/Jellyfin.Api/WebSocketListeners/ScheduledTasksWebSocketListener.cs index a08dc058..929b08e7 100644 --- a/Jellyfin.Api/WebSocketListeners/ScheduledTasksWebSocketListener.cs +++ b/Jellyfin.Api/WebSocketListeners/ScheduledTasksWebSocketListener.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.WebSocketListeners; + using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -11,8 +13,6 @@ using MediaBrowser.Model.Session; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.WebSocketListeners; - /// /// Class ScheduledTasksWebSocketListener. /// diff --git a/Jellyfin.Api/WebSocketListeners/SessionInfoWebSocketListener.cs b/Jellyfin.Api/WebSocketListeners/SessionInfoWebSocketListener.cs index 14560c2b..60b16f9a 100644 --- a/Jellyfin.Api/WebSocketListeners/SessionInfoWebSocketListener.cs +++ b/Jellyfin.Api/WebSocketListeners/SessionInfoWebSocketListener.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.WebSocketListeners; + using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -15,8 +17,6 @@ using MediaBrowser.Model.Dto; using MediaBrowser.Model.Session; using Microsoft.Extensions.Logging; -namespace Jellyfin.Api.WebSocketListeners; - /// /// Class SessionInfoWebSocketListener. /// diff --git a/Jellyfin.Api/obj/Debug/net10.0/Jellyfin.Api.AssemblyInfo.cs b/Jellyfin.Api/obj/Debug/net10.0/Jellyfin.Api.AssemblyInfo.cs index 8925f3fe..921c4e61 100644 --- a/Jellyfin.Api/obj/Debug/net10.0/Jellyfin.Api.AssemblyInfo.cs +++ b/Jellyfin.Api/obj/Debug/net10.0/Jellyfin.Api.AssemblyInfo.cs @@ -15,7 +15,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Jellyfin.Api")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f47555f2aa4eff7dcc5c5ef5bbda374f292f0638")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+44ab9e1d6dd9b53ec5329bad76927c63bbda5507")] [assembly: System.Reflection.AssemblyProductAttribute("Jellyfin.Api")] [assembly: System.Reflection.AssemblyTitleAttribute("Jellyfin.Api")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/Jellyfin.Api/obj/Debug/net10.0/Jellyfin.Api.AssemblyInfoInputs.cache b/Jellyfin.Api/obj/Debug/net10.0/Jellyfin.Api.AssemblyInfoInputs.cache index 48bc5c1b..bb830f7c 100644 --- a/Jellyfin.Api/obj/Debug/net10.0/Jellyfin.Api.AssemblyInfoInputs.cache +++ b/Jellyfin.Api/obj/Debug/net10.0/Jellyfin.Api.AssemblyInfoInputs.cache @@ -1 +1 @@ -ed069dda709e5f640951c1f97c15ff3b3eb023b7a2100def0482fc15be2b0889 +1b1b1b3930ec10ef902e2f7b6fc3532a65e71b6a7767d4a885ea56a604a88f3d diff --git a/Jellyfin.Api/obj/Debug/net10.0/Jellyfin.Api.csproj.AssemblyReference.cache b/Jellyfin.Api/obj/Debug/net10.0/Jellyfin.Api.csproj.AssemblyReference.cache index 98cc7b103c8e723f1f168d1322a113ac3aa6e513..346d4045d6ff63f2965062fdd2c5feb0f46d3df4 100644 GIT binary patch delta 3364 zcmb_eO>7%Q6!tiENu9kvfTJNlMy8rGQnswx{lv_0DE? z9cnLC^y#Hw5Lx1tB59rJTylX1(jRckM)C5B6&3 z{mpyd``){=0e-sydUk?Dy=Qgj)T`fra7(GbnWpFcJ3?UH=kx8j;`0Ia@6)HiKVW@f z?wR}&!Iw}`Q}aq$U6l@9LXuRwAjwmCnF;Ai8nyR4+JYAJFv4TL5p7QUZH$jZP<&RE|IcyaK6~W^bMM4!MYl6nCs++Mf zr2)FjAAYJ4pphtMe%v&l!xaU~OluLBkOWt13d&)54G|3yr_bT!qF5wY#TPUFkV*QTp@X0R1=e7zO^Jj9VSHT*a)L_OJyTNn#CVAb{be zSS5sE$WhnmzP(K)XOK|{QVq;F#ptK0y{wrZ;mC=7_sPR=A3R9hH6UU905C~^9Gs-N zLE}zIx2PhfBMu125M9Bt)5k#Alvue)kWgZHb)H+Ho~=mmG?PH&B_g)9z`-%=`i`!d zk!5VPU2~tt8j3oJ5@!bCKRL=CZL7bv%J>RZh09p4J;#8AW^Hq z9H}W9E)zkySaZY?nKqKWttQN~9z16=L8l(GrL3-sz5B<9W>*bZEn&;q^mW9wjTT&V zJR678beG17j*T=Rf-Y+e1LdkD5Kqu{FDyN@d!hmBC;s~U?Q1WFlKY!sZ9$UzJE1l~ zHW}_WV_8HMOzcV}C$>-9qgw|-v;!FF54~|3@JIQ;HJ(jg=dWN}s5#SNJTIb>C>$gB z4HXe+45T(t&7||~QWmI$yH~ScZ%*n+yO@cojldWm;AG}eSCTZJ1G{y+1g&ByKF-};_0 z<;Hmp(maVYxJ1N?sEKQcZ9}fK%!QV5@pYuNNYIRb#Ho`wV6Q(js=_q+egdD@GzHEh zL94RqW@|vV&^q%RU(-ff^Y1+!hWD8qF)IpX8LOIDRM~}bkqucp4!$gUvdMVdG|{pI zdZo>xNOLEJ$7MDmv9gTFn#lY*+(zR3E}ghR@9()E;9cQ!GCW<{^^4o*dOV@u4!#dO z&gkvnHTquvPaenm?;-4_s^1C6gYG)IJ~}k-rbFv-UH@Vv=XR#oWt~`4g)QCht%cV$7fXOi-Dn zxF}hFVuPrZeo|(hzDsISX}W%1YDsZPVqQvOQHqhC0Z5ibFC`~uXoMDEVy1~(zb=*flN8v2>Z zr6zg$W(Gh_2D*tk1sREY#-?U4?Z}pUI)|G0O%`y}-27dB1|!&rN{|tjU?cQOiW2jR zb23X(ixNxni->yLoSe$E%sjo~lx%$?10z#CLjye{LzqqrkWQGA;FN4oAZ)&`qQEto z$6AQ79Aw?(-z-WTtqIna zY9NDE+XX{4P+)t#!@g)L1gg)!7_c*oaGyPVnhYzsmSpEPLTFo^GnFK%!_5q<{zSam^4gG5|b=b4O7fg zQY@29jZ>3Njg2gm5>w30ERD>Q&5V%W{h z?!S0duhE?swWX8aNERzV1=qs_L8>(~9GVMt_1Vz6XL zWiVt&VK4*Y6d*5&!IZ%mD3%PSjld#_KpAtO3QGnfAe{_k83WZN0Ywvms!SOS7|b^> Imycuu0BBH89smFU delta 235 zcmZp0X>gg)!LqmI#GH*iF`@#ykH)7yiumO{lgXfT{*u{In}3MzVbVx3O-o5iO|~>K zPBAl1Ha9jgPcgGJx3EYvNi{M~GfGM{OH58NO-Y-4M`8_2>+Xk3C-+DO2!zi(nMV_7fMzUA|Dj1Us6$GkQZD*3O{`B%EOG{I4!RC6Yn=Jk*45kce3@Hpr z45JoD_z% J&CBH@nE>jBPAUKZ diff --git a/Jellyfin.Data/bin/Debug/net10.0/Jellyfin.CodeAnalysis.pdb b/Jellyfin.Data/bin/Debug/net10.0/Jellyfin.CodeAnalysis.pdb index 2c5d95b7f05f7db882318ee0ce9beb4a2e418001..93049873b0aacca0f8125c40e1e357e6c7ccee2e 100644 GIT binary patch delta 69 zcmV-L0J{IQOSDUnd=xQH0k8DP$4{fGjWXQmeRa`CpSQ7)m;)f028ulp(Yu=J4{+<} bj{0T0q+lwuvzMp1B}y|Lb1%lTNCa#l&Tt|L delta 69 zcmV-L0J{IQOSDUnd=yui%ucj94@|9)*b=XvS!&0hZKll;)*5UqjqeQCO>S`v z5O`>L!OCW{llM|i$1{fdvp!6I;uxU-72FLI1gh3^vw3)zY1!_%Qro-LH^(?FVFv)G CGA^P3 delta 107 zcmZpe!q_l{aY6@6c(vZOjXis;1P*DXJ#*Tj=R3FK(7ng*?A4nitTotJvTtc_nB3wR zAaL`W#T#BO7XSX(z4~e1n~qF=;uxU-75wiH6$GgcGUO9+e;cFxXzRzW%`r|(*a7CF BFQ@4GIKLk6pblW=pcfYuYKWv5?sl7`=qZoB)6T0K3Is VW#U-+OPK;Nb)Tf0TC;%^12BFl8`l5; diff --git a/Jellyfin.Data/bin/Debug/net10.0/Jellyfin.Database.Implementations.dll b/Jellyfin.Data/bin/Debug/net10.0/Jellyfin.Database.Implementations.dll index c6b4fb9971a629d8a8cc29748594b46387f09888..3f421027d9905087af154bb4682f2036b493c379 100644 GIT binary patch delta 117 zcmZoz!`rZicR~ltfn$a9C}_8;GvD#BRG zH&vdSUgFCfARwOR++X|G&Tp|nk5>6-=7i~2e3_>yKt=78p`sx5%W_wSS^6!TaWX0H L@b)f0<}!8wfCDlm delta 117 zcmZoz!`rZicR~lt#yv)#8hcuM7`OH?#e5UEuTg(%t;=Gk{ymF24_^~JwEf37riw5Y zCq0FY(@T7r0|X+hQ>IQn(d#->NxQ#xJFDpQE56Lr6riG8VWJ@QM{Y$uT{$oC;v3N| LtlPW%n9JA!XTda@ diff --git a/Jellyfin.Data/bin/Debug/net10.0/Jellyfin.Database.Implementations.pdb b/Jellyfin.Data/bin/Debug/net10.0/Jellyfin.Database.Implementations.pdb index be223314d7ea34112d78e718dbcb3ab668b63d3c..4d92ee9fe713dbafdafdddcf49be641675b9a2d6 100644 GIT binary patch delta 63 zcmV-F0Kos~i3I401dx0b7iL3`ef>U8qcDsrck=^acd~iTv5=*l7?-k~rvQKe0G=cq V5Bp#nNv!%3J$6b2w6jf}n`eLE8-xG= delta 63 zcmV-F0Kos~i3I401dx0bSUY5ulgN!lnIbEXeYXV_LM|Y&v5=*l7`=qZoB)6T0K3Is VW#U-+OPK;Nb)Tf0TC+`^n`d>m9AN+e diff --git a/Jellyfin.Data/obj/Debug/net10.0/Jellyfin.Data.csproj.AssemblyReference.cache b/Jellyfin.Data/obj/Debug/net10.0/Jellyfin.Data.csproj.AssemblyReference.cache index d0213f03053275a0758508e3db1e2fc5bf427a64..c3a6e85e0df779a7aaf984352ffd30ada3510d1b 100644 GIT binary patch delta 75 zcmey{$oR8LA`Z6DtiTKM-b}{8E@#BR?%OC)G+{U*FYAKcFZ-D>b>KSic~> zxG+aID>WylGA%Ptzqlw_e`15ElztMB!&0hZKll;)*5UqjqeQCO>S`v z5O`>L!OCW{llM|i$1{fdvp!6I;uxU-72FLI1gh3^vw3)zY1!_%Qro-LH^(?FVFv)G CGA^P3 delta 107 zcmZpe!q_l{aY6@6c(vZOjXis;1P*DXJ#*Tj=R3FK(7ng*?A4nitTotJvTtc_nB3wR zAaL`W#T#BO7XSX(z4~e1n~qF=;uxU-75wiH6$GgcGUO9+e;cFxXzRzW%`r|(*a7CF BFQ@4GIKLk6pblW=pcfYuYKWv5?sl7`=qZoB)6T0K3Is VW#U-+OPK;Nb)Tf0TC;%^12BFl8`l5; diff --git a/Jellyfin.Server.Implementations/Activity/ActivityManager.cs b/Jellyfin.Server.Implementations/Activity/ActivityManager.cs index 1de4048e..74390b81 100644 --- a/Jellyfin.Server.Implementations/Activity/ActivityManager.cs +++ b/Jellyfin.Server.Implementations/Activity/ActivityManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Implementations.Activity; + using System; using System.Collections.Generic; using System.Linq; @@ -18,8 +20,6 @@ using MediaBrowser.Model.Activity; using MediaBrowser.Model.Querying; using Microsoft.EntityFrameworkCore; -namespace Jellyfin.Server.Implementations.Activity; - /// /// Manages the storage and retrieval of instances. /// diff --git a/Jellyfin.Server.Implementations/DbConfiguration/DatabaseConfigurationFactory.cs b/Jellyfin.Server.Implementations/DbConfiguration/DatabaseConfigurationFactory.cs index 098a60ca..ad5d9da3 100644 --- a/Jellyfin.Server.Implementations/DbConfiguration/DatabaseConfigurationFactory.cs +++ b/Jellyfin.Server.Implementations/DbConfiguration/DatabaseConfigurationFactory.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Implementations.DatabaseConfiguration; + using System; using System.Collections.Generic; using MediaBrowser.Common.Configuration; -namespace Jellyfin.Server.Implementations.DatabaseConfiguration; - /// /// Factory for constructing a database configuration. /// diff --git a/Jellyfin.Server.Implementations/DbConfiguration/DatabaseConfigurationStore.cs b/Jellyfin.Server.Implementations/DbConfiguration/DatabaseConfigurationStore.cs index 1b99f0e2..8181691d 100644 --- a/Jellyfin.Server.Implementations/DbConfiguration/DatabaseConfigurationStore.cs +++ b/Jellyfin.Server.Implementations/DbConfiguration/DatabaseConfigurationStore.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Implementations.DatabaseConfiguration; + using System; using System.Collections.Generic; using Jellyfin.Database.Implementations.DbConfiguration; using MediaBrowser.Common.Configuration; -namespace Jellyfin.Server.Implementations.DatabaseConfiguration; - /// /// A configuration that stores database related settings. /// diff --git a/Jellyfin.Server.Implementations/Devices/DeviceManager.cs b/Jellyfin.Server.Implementations/Devices/DeviceManager.cs index d593c7f0..b8be51a2 100644 --- a/Jellyfin.Server.Implementations/Devices/DeviceManager.cs +++ b/Jellyfin.Server.Implementations/Devices/DeviceManager.cs @@ -2,31 +2,31 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Jellyfin.Data; -using Jellyfin.Data.Dtos; -using Jellyfin.Data.Events; -using Jellyfin.Data.Queries; -using Jellyfin.Database.Implementations; -using Jellyfin.Database.Implementations.Entities; -using Jellyfin.Database.Implementations.Entities.Security; -using Jellyfin.Database.Implementations.Enums; -using Jellyfin.Extensions; -using MediaBrowser.Common.Extensions; -using MediaBrowser.Controller.Devices; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.Devices; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Querying; -using MediaBrowser.Model.Session; -using Microsoft.EntityFrameworkCore; - namespace Jellyfin.Server.Implementations.Devices { + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.Linq; + using System.Threading.Tasks; + using Jellyfin.Data; + using Jellyfin.Data.Dtos; + using Jellyfin.Data.Events; + using Jellyfin.Data.Queries; + using Jellyfin.Database.Implementations; + using Jellyfin.Database.Implementations.Entities; + using Jellyfin.Database.Implementations.Entities.Security; + using Jellyfin.Database.Implementations.Enums; + using Jellyfin.Extensions; + using MediaBrowser.Common.Extensions; + using MediaBrowser.Controller.Devices; + using MediaBrowser.Controller.Library; + using MediaBrowser.Model.Devices; + using MediaBrowser.Model.Dto; + using MediaBrowser.Model.Querying; + using MediaBrowser.Model.Session; + using Microsoft.EntityFrameworkCore; + /// /// Manages the creation, updating, and retrieval of devices. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Library/LyricDownloadFailureLogger.cs b/Jellyfin.Server.Implementations/Events/Consumers/Library/LyricDownloadFailureLogger.cs index d64a0dac..bd3cc1e5 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Library/LyricDownloadFailureLogger.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Library/LyricDownloadFailureLogger.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Implementations.Events.Consumers.Library; + using System; using System.Globalization; using System.Threading.Tasks; @@ -14,8 +16,6 @@ using MediaBrowser.Model.Activity; using MediaBrowser.Model.Globalization; using Episode = MediaBrowser.Controller.Entities.TV.Episode; -namespace Jellyfin.Server.Implementations.Events.Consumers.Library; - /// /// Creates an entry in the activity log whenever a lyric download fails. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Library/SubtitleDownloadFailureLogger.cs b/Jellyfin.Server.Implementations/Events/Consumers/Library/SubtitleDownloadFailureLogger.cs index 48b35add..18d07ee8 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Library/SubtitleDownloadFailureLogger.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Library/SubtitleDownloadFailureLogger.cs @@ -2,20 +2,20 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.Threading.Tasks; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Subtitles; -using MediaBrowser.Model.Activity; -using MediaBrowser.Model.Globalization; -using Episode = MediaBrowser.Controller.Entities.TV.Episode; - namespace Jellyfin.Server.Implementations.Events.Consumers.Library { + using System; + using System.Globalization; + using System.Threading.Tasks; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Subtitles; + using MediaBrowser.Model.Activity; + using MediaBrowser.Model.Globalization; + using Episode = MediaBrowser.Controller.Entities.TV.Episode; + /// /// Creates an entry in the activity log whenever a subtitle download fails. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Security/AuthenticationFailedLogger.cs b/Jellyfin.Server.Implementations/Events/Consumers/Security/AuthenticationFailedLogger.cs index cb896cb1..8d22d755 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Security/AuthenticationFailedLogger.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Security/AuthenticationFailedLogger.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.Threading.Tasks; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Events.Authentication; -using MediaBrowser.Model.Activity; -using MediaBrowser.Model.Globalization; -using Microsoft.Extensions.Logging; - namespace Jellyfin.Server.Implementations.Events.Consumers.Security { + using System; + using System.Globalization; + using System.Threading.Tasks; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Events.Authentication; + using MediaBrowser.Model.Activity; + using MediaBrowser.Model.Globalization; + using Microsoft.Extensions.Logging; + /// /// Creates an entry in the activity log when there is a failed login attempt. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Security/AuthenticationSucceededLogger.cs b/Jellyfin.Server.Implementations/Events/Consumers/Security/AuthenticationSucceededLogger.cs index 25714c25..20ebec7c 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Security/AuthenticationSucceededLogger.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Security/AuthenticationSucceededLogger.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Globalization; -using System.Threading.Tasks; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Events.Authentication; -using MediaBrowser.Model.Activity; -using MediaBrowser.Model.Globalization; - namespace Jellyfin.Server.Implementations.Events.Consumers.Security { + using System.Globalization; + using System.Threading.Tasks; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Events.Authentication; + using MediaBrowser.Model.Activity; + using MediaBrowser.Model.Globalization; + /// /// Creates an entry in the activity log when there is a successful login attempt. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Session/PlaybackStartLogger.cs b/Jellyfin.Server.Implementations/Events/Consumers/Session/PlaybackStartLogger.cs index 743eec26..7b03883d 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Session/PlaybackStartLogger.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Session/PlaybackStartLogger.cs @@ -2,22 +2,22 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.Threading.Tasks; -using Jellyfin.Data.Enums; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.Activity; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Globalization; -using MediaBrowser.Model.Notifications; -using Microsoft.Extensions.Logging; - namespace Jellyfin.Server.Implementations.Events.Consumers.Session { + using System; + using System.Globalization; + using System.Threading.Tasks; + using Jellyfin.Data.Enums; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Library; + using MediaBrowser.Model.Activity; + using MediaBrowser.Model.Dto; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Globalization; + using MediaBrowser.Model.Notifications; + using Microsoft.Extensions.Logging; + /// /// Creates an entry in the activity log whenever a user starts playback. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Session/PlaybackStopLogger.cs b/Jellyfin.Server.Implementations/Events/Consumers/Session/PlaybackStopLogger.cs index 032fad46..a25b2324 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Session/PlaybackStopLogger.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Session/PlaybackStopLogger.cs @@ -2,22 +2,22 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.Threading.Tasks; -using Jellyfin.Data.Enums; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.Activity; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Globalization; -using MediaBrowser.Model.Notifications; -using Microsoft.Extensions.Logging; - namespace Jellyfin.Server.Implementations.Events.Consumers.Session { + using System; + using System.Globalization; + using System.Threading.Tasks; + using Jellyfin.Data.Enums; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Library; + using MediaBrowser.Model.Activity; + using MediaBrowser.Model.Dto; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Globalization; + using MediaBrowser.Model.Notifications; + using Microsoft.Extensions.Logging; + /// /// Creates an activity log entry whenever a user stops playback. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Session/SessionEndedLogger.cs b/Jellyfin.Server.Implementations/Events/Consumers/Session/SessionEndedLogger.cs index c688a416..e1815bb1 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Session/SessionEndedLogger.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Session/SessionEndedLogger.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Globalization; -using System.Threading.Tasks; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Events.Session; -using MediaBrowser.Model.Activity; -using MediaBrowser.Model.Globalization; - namespace Jellyfin.Server.Implementations.Events.Consumers.Session { + using System.Globalization; + using System.Threading.Tasks; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Events.Session; + using MediaBrowser.Model.Activity; + using MediaBrowser.Model.Globalization; + /// /// Creates an entry in the activity log whenever a session ends. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Session/SessionStartedLogger.cs b/Jellyfin.Server.Implementations/Events/Consumers/Session/SessionStartedLogger.cs index ffebd1fe..240accba 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Session/SessionStartedLogger.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Session/SessionStartedLogger.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Globalization; -using System.Threading.Tasks; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Events.Session; -using MediaBrowser.Model.Activity; -using MediaBrowser.Model.Globalization; - namespace Jellyfin.Server.Implementations.Events.Consumers.Session { + using System.Globalization; + using System.Threading.Tasks; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Events.Session; + using MediaBrowser.Model.Activity; + using MediaBrowser.Model.Globalization; + /// /// Creates an entry in the activity log when a session is started. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/System/PendingRestartNotifier.cs b/Jellyfin.Server.Implementations/Events/Consumers/System/PendingRestartNotifier.cs index 2ed405f4..836a4d81 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/System/PendingRestartNotifier.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/System/PendingRestartNotifier.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading; -using System.Threading.Tasks; -using Jellyfin.Data.Events.System; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Session; - namespace Jellyfin.Server.Implementations.Events.Consumers.System { + using System.Threading; + using System.Threading.Tasks; + using Jellyfin.Data.Events.System; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Session; + /// /// Notifies users when there is a pending restart. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/System/TaskCompletedLogger.cs b/Jellyfin.Server.Implementations/Events/Consumers/System/TaskCompletedLogger.cs index e9fda769..9874530d 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/System/TaskCompletedLogger.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/System/TaskCompletedLogger.cs @@ -2,21 +2,21 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Text; -using System.Threading.Tasks; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Events; -using MediaBrowser.Model.Activity; -using MediaBrowser.Model.Globalization; -using MediaBrowser.Model.Notifications; -using MediaBrowser.Model.Tasks; -using Microsoft.Extensions.Logging; - namespace Jellyfin.Server.Implementations.Events.Consumers.System { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Text; + using System.Threading.Tasks; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Events; + using MediaBrowser.Model.Activity; + using MediaBrowser.Model.Globalization; + using MediaBrowser.Model.Notifications; + using MediaBrowser.Model.Tasks; + using Microsoft.Extensions.Logging; + /// /// Creates an activity log entry whenever a task is completed. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/System/TaskCompletedNotifier.cs b/Jellyfin.Server.Implementations/Events/Consumers/System/TaskCompletedNotifier.cs index 82fa218d..e9cba112 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/System/TaskCompletedNotifier.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/System/TaskCompletedNotifier.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.Session; -using MediaBrowser.Model.Tasks; - namespace Jellyfin.Server.Implementations.Events.Consumers.System { + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.Session; + using MediaBrowser.Model.Tasks; + /// /// Notifies admin users when a task is completed. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstallationCancelledNotifier.cs b/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstallationCancelledNotifier.cs index e4aa1210..8faad63a 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstallationCancelledNotifier.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstallationCancelledNotifier.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Events.Updates; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.Session; - namespace Jellyfin.Server.Implementations.Events.Consumers.Updates { + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Events.Updates; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.Session; + /// /// Notifies admin users when a plugin installation is cancelled. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstallationFailedLogger.cs b/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstallationFailedLogger.cs index 5822d5ab..aa0ff023 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstallationFailedLogger.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstallationFailedLogger.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.Threading.Tasks; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Common.Updates; -using MediaBrowser.Controller.Events; -using MediaBrowser.Model.Activity; -using MediaBrowser.Model.Globalization; -using MediaBrowser.Model.Notifications; - namespace Jellyfin.Server.Implementations.Events.Consumers.Updates { + using System; + using System.Globalization; + using System.Threading.Tasks; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Common.Updates; + using MediaBrowser.Controller.Events; + using MediaBrowser.Model.Activity; + using MediaBrowser.Model.Globalization; + using MediaBrowser.Model.Notifications; + /// /// Creates an entry in the activity log when a package installation fails. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstallationFailedNotifier.cs b/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstallationFailedNotifier.cs index c44a84d6..1870bffb 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstallationFailedNotifier.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstallationFailedNotifier.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Common.Updates; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.Session; - namespace Jellyfin.Server.Implementations.Events.Consumers.Updates { + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Common.Updates; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.Session; + /// /// Notifies admin users when a plugin installation fails. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstalledLogger.cs b/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstalledLogger.cs index 2d600534..176f9445 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstalledLogger.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstalledLogger.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.Threading.Tasks; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Events.Updates; -using MediaBrowser.Model.Activity; -using MediaBrowser.Model.Globalization; -using MediaBrowser.Model.Notifications; - namespace Jellyfin.Server.Implementations.Events.Consumers.Updates { + using System; + using System.Globalization; + using System.Threading.Tasks; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Events.Updates; + using MediaBrowser.Model.Activity; + using MediaBrowser.Model.Globalization; + using MediaBrowser.Model.Notifications; + /// /// Creates an entry in the activity log when a plugin is installed. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstalledNotifier.cs b/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstalledNotifier.cs index 82f50617..94793a00 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstalledNotifier.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstalledNotifier.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Events.Updates; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.Session; - namespace Jellyfin.Server.Implementations.Events.Consumers.Updates { + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Events.Updates; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.Session; + /// /// Notifies admin users when a plugin is installed. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstallingNotifier.cs b/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstallingNotifier.cs index 3866ac4d..2ecad8d6 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstallingNotifier.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginInstallingNotifier.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Events.Updates; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.Session; - namespace Jellyfin.Server.Implementations.Events.Consumers.Updates { + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Events.Updates; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.Session; + /// /// Notifies admin users when a plugin is being installed. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginUninstalledLogger.cs b/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginUninstalledLogger.cs index 10e8cf97..87aca251 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginUninstalledLogger.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginUninstalledLogger.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.Threading.Tasks; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Events.Updates; -using MediaBrowser.Model.Activity; -using MediaBrowser.Model.Globalization; -using MediaBrowser.Model.Notifications; - namespace Jellyfin.Server.Implementations.Events.Consumers.Updates { + using System; + using System.Globalization; + using System.Threading.Tasks; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Events.Updates; + using MediaBrowser.Model.Activity; + using MediaBrowser.Model.Globalization; + using MediaBrowser.Model.Notifications; + /// /// Creates an entry in the activity log when a plugin is uninstalled. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginUninstalledNotifier.cs b/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginUninstalledNotifier.cs index 61e51409..3be54b08 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginUninstalledNotifier.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginUninstalledNotifier.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Events.Updates; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.Session; - namespace Jellyfin.Server.Implementations.Events.Consumers.Updates { + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Events.Updates; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.Session; + /// /// Notifies admin users when a plugin is uninstalled. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginUpdatedLogger.cs b/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginUpdatedLogger.cs index 2a306f1d..18123c9a 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginUpdatedLogger.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Updates/PluginUpdatedLogger.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.Threading.Tasks; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Events.Updates; -using MediaBrowser.Model.Activity; -using MediaBrowser.Model.Globalization; -using MediaBrowser.Model.Notifications; - namespace Jellyfin.Server.Implementations.Events.Consumers.Updates { + using System; + using System.Globalization; + using System.Threading.Tasks; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Events.Updates; + using MediaBrowser.Model.Activity; + using MediaBrowser.Model.Globalization; + using MediaBrowser.Model.Notifications; + /// /// Creates an entry in the activity log when a plugin is updated. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Users/UserCreatedLogger.cs b/Jellyfin.Server.Implementations/Events/Consumers/Users/UserCreatedLogger.cs index 40956c1b..0e150451 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Users/UserCreatedLogger.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Users/UserCreatedLogger.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Globalization; -using System.Threading.Tasks; -using Jellyfin.Data.Events.Users; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Events; -using MediaBrowser.Model.Activity; -using MediaBrowser.Model.Globalization; - namespace Jellyfin.Server.Implementations.Events.Consumers.Users { + using System.Globalization; + using System.Threading.Tasks; + using Jellyfin.Data.Events.Users; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Events; + using MediaBrowser.Model.Activity; + using MediaBrowser.Model.Globalization; + /// /// Creates an entry in the activity log when a user is created. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Users/UserDeletedLogger.cs b/Jellyfin.Server.Implementations/Events/Consumers/Users/UserDeletedLogger.cs index 4be1566d..08868c6f 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Users/UserDeletedLogger.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Users/UserDeletedLogger.cs @@ -2,17 +2,17 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.Threading.Tasks; -using Jellyfin.Data.Events.Users; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Events; -using MediaBrowser.Model.Activity; -using MediaBrowser.Model.Globalization; - namespace Jellyfin.Server.Implementations.Events.Consumers.Users { + using System; + using System.Globalization; + using System.Threading.Tasks; + using Jellyfin.Data.Events.Users; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Events; + using MediaBrowser.Model.Activity; + using MediaBrowser.Model.Globalization; + /// /// Adds an entry to the activity log when a user is deleted. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Users/UserDeletedNotifier.cs b/Jellyfin.Server.Implementations/Events/Consumers/Users/UserDeletedNotifier.cs index 5609c989..aeaf5eb5 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Users/UserDeletedNotifier.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Users/UserDeletedNotifier.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Threading; -using System.Threading.Tasks; -using Jellyfin.Data.Events.Users; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.Session; - namespace Jellyfin.Server.Implementations.Events.Consumers.Users { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading; + using System.Threading.Tasks; + using Jellyfin.Data.Events.Users; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.Session; + /// /// Notifies the user's sessions when a user is deleted. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Users/UserLockedOutLogger.cs b/Jellyfin.Server.Implementations/Events/Consumers/Users/UserLockedOutLogger.cs index 79bb3e42..51044208 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Users/UserLockedOutLogger.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Users/UserLockedOutLogger.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Globalization; -using System.Threading.Tasks; -using Jellyfin.Data.Events.Users; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Events; -using MediaBrowser.Model.Activity; -using MediaBrowser.Model.Globalization; -using MediaBrowser.Model.Notifications; -using Microsoft.Extensions.Logging; - namespace Jellyfin.Server.Implementations.Events.Consumers.Users { + using System.Globalization; + using System.Threading.Tasks; + using Jellyfin.Data.Events.Users; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Events; + using MediaBrowser.Model.Activity; + using MediaBrowser.Model.Globalization; + using MediaBrowser.Model.Notifications; + using Microsoft.Extensions.Logging; + /// /// Creates an entry in the activity log when a user is locked out. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Users/UserPasswordChangedLogger.cs b/Jellyfin.Server.Implementations/Events/Consumers/Users/UserPasswordChangedLogger.cs index 6fad9e5b..320878ba 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Users/UserPasswordChangedLogger.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Users/UserPasswordChangedLogger.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Globalization; -using System.Threading.Tasks; -using Jellyfin.Data.Events.Users; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Events; -using MediaBrowser.Model.Activity; -using MediaBrowser.Model.Globalization; - namespace Jellyfin.Server.Implementations.Events.Consumers.Users { + using System.Globalization; + using System.Threading.Tasks; + using Jellyfin.Data.Events.Users; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Events; + using MediaBrowser.Model.Activity; + using MediaBrowser.Model.Globalization; + /// /// Creates an entry in the activity log when a user's password is changed. /// diff --git a/Jellyfin.Server.Implementations/Events/Consumers/Users/UserUpdatedNotifier.cs b/Jellyfin.Server.Implementations/Events/Consumers/Users/UserUpdatedNotifier.cs index a954e123..37000b86 100644 --- a/Jellyfin.Server.Implementations/Events/Consumers/Users/UserUpdatedNotifier.cs +++ b/Jellyfin.Server.Implementations/Events/Consumers/Users/UserUpdatedNotifier.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using Jellyfin.Data.Events.Users; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.Session; - namespace Jellyfin.Server.Implementations.Events.Consumers.Users { + using System; + using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + using Jellyfin.Data.Events.Users; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.Session; + /// /// Notifies a user when their account has been updated. /// diff --git a/Jellyfin.Server.Implementations/Events/EventManager.cs b/Jellyfin.Server.Implementations/Events/EventManager.cs index ab1b1622..5f60ac7b 100644 --- a/Jellyfin.Server.Implementations/Events/EventManager.cs +++ b/Jellyfin.Server.Implementations/Events/EventManager.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Threading.Tasks; -using MediaBrowser.Controller; -using MediaBrowser.Controller.Events; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; - namespace Jellyfin.Server.Implementations.Events { + using System; + using System.Threading.Tasks; + using MediaBrowser.Controller; + using MediaBrowser.Controller.Events; + using Microsoft.Extensions.DependencyInjection; + using Microsoft.Extensions.Logging; + /// /// Handles the firing of events. /// diff --git a/Jellyfin.Server.Implementations/Events/EventingServiceCollectionExtensions.cs b/Jellyfin.Server.Implementations/Events/EventingServiceCollectionExtensions.cs index abfe487c..8b5a8c22 100644 --- a/Jellyfin.Server.Implementations/Events/EventingServiceCollectionExtensions.cs +++ b/Jellyfin.Server.Implementations/Events/EventingServiceCollectionExtensions.cs @@ -2,27 +2,27 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Jellyfin.Data.Events.System; -using Jellyfin.Data.Events.Users; -using Jellyfin.Server.Implementations.Events.Consumers.Library; -using Jellyfin.Server.Implementations.Events.Consumers.Security; -using Jellyfin.Server.Implementations.Events.Consumers.Session; -using Jellyfin.Server.Implementations.Events.Consumers.System; -using Jellyfin.Server.Implementations.Events.Consumers.Updates; -using Jellyfin.Server.Implementations.Events.Consumers.Users; -using MediaBrowser.Common.Updates; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Events.Authentication; -using MediaBrowser.Controller.Events.Session; -using MediaBrowser.Controller.Events.Updates; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Lyrics; -using MediaBrowser.Controller.Subtitles; -using MediaBrowser.Model.Tasks; -using Microsoft.Extensions.DependencyInjection; - namespace Jellyfin.Server.Implementations.Events { + using Jellyfin.Data.Events.System; + using Jellyfin.Data.Events.Users; + using Jellyfin.Server.Implementations.Events.Consumers.Library; + using Jellyfin.Server.Implementations.Events.Consumers.Security; + using Jellyfin.Server.Implementations.Events.Consumers.Session; + using Jellyfin.Server.Implementations.Events.Consumers.System; + using Jellyfin.Server.Implementations.Events.Consumers.Updates; + using Jellyfin.Server.Implementations.Events.Consumers.Users; + using MediaBrowser.Common.Updates; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Events.Authentication; + using MediaBrowser.Controller.Events.Session; + using MediaBrowser.Controller.Events.Updates; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Lyrics; + using MediaBrowser.Controller.Subtitles; + using MediaBrowser.Model.Tasks; + using Microsoft.Extensions.DependencyInjection; + /// /// A class containing extensions to for eventing. /// diff --git a/Jellyfin.Server.Implementations/Extensions/ExpressionExtensions.cs b/Jellyfin.Server.Implementations/Extensions/ExpressionExtensions.cs index 6342493b..0f631b1f 100644 --- a/Jellyfin.Server.Implementations/Extensions/ExpressionExtensions.cs +++ b/Jellyfin.Server.Implementations/Extensions/ExpressionExtensions.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Implementations.Extensions; + using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; -namespace Jellyfin.Server.Implementations.Extensions; - /// /// Provides extension methods. /// diff --git a/Jellyfin.Server.Implementations/Extensions/ServiceCollectionExtensions.cs b/Jellyfin.Server.Implementations/Extensions/ServiceCollectionExtensions.cs index 935a4099..bf493fb4 100644 --- a/Jellyfin.Server.Implementations/Extensions/ServiceCollectionExtensions.cs +++ b/Jellyfin.Server.Implementations/Extensions/ServiceCollectionExtensions.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Implementations.Extensions; + using System; using System.Collections.Generic; using System.IO; @@ -18,8 +20,6 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using JellyfinDbProviderFactory = System.Func; -namespace Jellyfin.Server.Implementations.Extensions; - /// /// Extensions for the interface. /// diff --git a/Jellyfin.Server.Implementations/FullSystemBackup/BackupManifest.cs b/Jellyfin.Server.Implementations/FullSystemBackup/BackupManifest.cs index 7cc8c965..57d53652 100644 --- a/Jellyfin.Server.Implementations/FullSystemBackup/BackupManifest.cs +++ b/Jellyfin.Server.Implementations/FullSystemBackup/BackupManifest.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace Jellyfin.Server.Implementations.FullSystemBackup; +using System; + /// /// Manifest type for backups internal structure. /// diff --git a/Jellyfin.Server.Implementations/FullSystemBackup/BackupService.cs b/Jellyfin.Server.Implementations/FullSystemBackup/BackupService.cs index f8455548..d17e6b57 100644 --- a/Jellyfin.Server.Implementations/FullSystemBackup/BackupService.cs +++ b/Jellyfin.Server.Implementations/FullSystemBackup/BackupService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Implementations.FullSystemBackup; + using System; using System.Collections.Generic; using System.IO; @@ -23,8 +25,6 @@ using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Implementations.FullSystemBackup; - /// /// Contains methods for creating and restoring backups. /// diff --git a/Jellyfin.Server.Implementations/Item/ChapterRepository.cs b/Jellyfin.Server.Implementations/Item/ChapterRepository.cs index e6e0666f..61fffcc8 100644 --- a/Jellyfin.Server.Implementations/Item/ChapterRepository.cs +++ b/Jellyfin.Server.Implementations/Item/ChapterRepository.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Implementations.Item; + using System; using System.Collections.Generic; using System.Linq; @@ -14,8 +16,6 @@ using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Entities; using Microsoft.EntityFrameworkCore; -namespace Jellyfin.Server.Implementations.Item; - /// /// The Chapter manager. /// diff --git a/Jellyfin.Server.Implementations/Item/KeyframeRepository.cs b/Jellyfin.Server.Implementations/Item/KeyframeRepository.cs index 88450dca..7d8d27f5 100644 --- a/Jellyfin.Server.Implementations/Item/KeyframeRepository.cs +++ b/Jellyfin.Server.Implementations/Item/KeyframeRepository.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Implementations.Item; + using System; using System.Collections.Generic; using System.Linq; @@ -12,8 +14,6 @@ using Jellyfin.Database.Implementations.Entities; using MediaBrowser.Controller.Persistence; using Microsoft.EntityFrameworkCore; -namespace Jellyfin.Server.Implementations.Item; - /// /// Repository for obtaining Keyframe data. /// diff --git a/Jellyfin.Server.Implementations/Item/MediaAttachmentRepository.cs b/Jellyfin.Server.Implementations/Item/MediaAttachmentRepository.cs index af13bcab..cfbdfa5b 100644 --- a/Jellyfin.Server.Implementations/Item/MediaAttachmentRepository.cs +++ b/Jellyfin.Server.Implementations/Item/MediaAttachmentRepository.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Implementations.Item; + using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -13,8 +15,6 @@ using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Entities; using Microsoft.EntityFrameworkCore; -namespace Jellyfin.Server.Implementations.Item; - /// /// Manager for handling Media Attachments. /// diff --git a/Jellyfin.Server.Implementations/Item/MediaStreamRepository.cs b/Jellyfin.Server.Implementations/Item/MediaStreamRepository.cs index 55cb271e..a0a20b7b 100644 --- a/Jellyfin.Server.Implementations/Item/MediaStreamRepository.cs +++ b/Jellyfin.Server.Implementations/Item/MediaStreamRepository.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Implementations.Item; + using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -15,8 +17,6 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.Globalization; using Microsoft.EntityFrameworkCore; -namespace Jellyfin.Server.Implementations.Item; - /// /// Repository for obtaining MediaStreams. /// diff --git a/Jellyfin.Server.Implementations/Item/PeopleRepository.cs b/Jellyfin.Server.Implementations/Item/PeopleRepository.cs index e03bd4fa..3641a72a 100644 --- a/Jellyfin.Server.Implementations/Item/PeopleRepository.cs +++ b/Jellyfin.Server.Implementations/Item/PeopleRepository.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Implementations.Item; + using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -15,7 +17,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Persistence; using Microsoft.EntityFrameworkCore; -namespace Jellyfin.Server.Implementations.Item; #pragma warning disable RS0030 // Do not use banned APIs #pragma warning disable CA1304 // Specify CultureInfo #pragma warning disable CA1311 // Specify a culture or use an invariant version diff --git a/Jellyfin.Server.Implementations/MediaSegments/MediaSegmentManager.cs b/Jellyfin.Server.Implementations/MediaSegments/MediaSegmentManager.cs index d8e9758b..c97d82bc 100644 --- a/Jellyfin.Server.Implementations/MediaSegments/MediaSegmentManager.cs +++ b/Jellyfin.Server.Implementations/MediaSegments/MediaSegmentManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Implementations.MediaSegments; + using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -24,8 +26,6 @@ using MediaBrowser.Model.MediaSegments; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Implementations.MediaSegments; - /// /// Manages media segments retrieval and storage. /// diff --git a/Jellyfin.Server.Implementations/Security/AuthenticationManager.cs b/Jellyfin.Server.Implementations/Security/AuthenticationManager.cs index f61ba5bc..3b1d5cab 100644 --- a/Jellyfin.Server.Implementations/Security/AuthenticationManager.cs +++ b/Jellyfin.Server.Implementations/Security/AuthenticationManager.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Jellyfin.Database.Implementations; -using Jellyfin.Database.Implementations.Entities.Security; -using MediaBrowser.Controller.Security; -using Microsoft.EntityFrameworkCore; - namespace Jellyfin.Server.Implementations.Security { + using System.Collections.Generic; + using System.Linq; + using System.Threading.Tasks; + using Jellyfin.Database.Implementations; + using Jellyfin.Database.Implementations.Entities.Security; + using MediaBrowser.Controller.Security; + using Microsoft.EntityFrameworkCore; + /// public class AuthenticationManager : IAuthenticationManager { diff --git a/Jellyfin.Server.Implementations/StorageHelpers/StorageHelper.cs b/Jellyfin.Server.Implementations/StorageHelpers/StorageHelper.cs index dc5bbf41..f32c699f 100644 --- a/Jellyfin.Server.Implementations/StorageHelpers/StorageHelper.cs +++ b/Jellyfin.Server.Implementations/StorageHelpers/StorageHelper.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Implementations.StorageHelpers; + using System; using System.Globalization; using System.IO; @@ -9,8 +11,6 @@ using MediaBrowser.Common.Configuration; using MediaBrowser.Model.System; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Implementations.StorageHelpers; - /// /// Contains methods to help with checking for storage and returning storage data for jellyfin folders. /// diff --git a/Jellyfin.Server.Implementations/Trickplay/TrickplayManager.cs b/Jellyfin.Server.Implementations/Trickplay/TrickplayManager.cs index dc7bc5fe..eb4fb30d 100644 --- a/Jellyfin.Server.Implementations/Trickplay/TrickplayManager.cs +++ b/Jellyfin.Server.Implementations/Trickplay/TrickplayManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Implementations.Trickplay; + using System; using System.Collections.Generic; using System.Globalization; @@ -27,8 +29,6 @@ using MediaBrowser.Model.IO; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Implementations.Trickplay; - /// /// ITrickplayManager implementation. /// diff --git a/Jellyfin.Server.Implementations/Users/DefaultAuthenticationProvider.cs b/Jellyfin.Server.Implementations/Users/DefaultAuthenticationProvider.cs index c13d8f2d..2969af32 100644 --- a/Jellyfin.Server.Implementations/Users/DefaultAuthenticationProvider.cs +++ b/Jellyfin.Server.Implementations/Users/DefaultAuthenticationProvider.cs @@ -2,17 +2,17 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.Threading.Tasks; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Authentication; -using MediaBrowser.Model.Cryptography; -using Microsoft.Extensions.Logging; - namespace Jellyfin.Server.Implementations.Users { + using System; + using System.Diagnostics.CodeAnalysis; + using System.Globalization; + using System.Threading.Tasks; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Authentication; + using MediaBrowser.Model.Cryptography; + using Microsoft.Extensions.Logging; + /// /// The default authentication provider. /// diff --git a/Jellyfin.Server.Implementations/Users/DefaultPasswordResetProvider.cs b/Jellyfin.Server.Implementations/Users/DefaultPasswordResetProvider.cs index f8cacd36..11dce940 100644 --- a/Jellyfin.Server.Implementations/Users/DefaultPasswordResetProvider.cs +++ b/Jellyfin.Server.Implementations/Users/DefaultPasswordResetProvider.cs @@ -2,24 +2,24 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Security.Cryptography; -using System.Text.Json; -using System.Threading.Tasks; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Common; -using MediaBrowser.Common.Extensions; -using MediaBrowser.Controller.Authentication; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.IO; -using MediaBrowser.Model.Users; - namespace Jellyfin.Server.Implementations.Users { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.IO; + using System.Security.Cryptography; + using System.Text.Json; + using System.Threading.Tasks; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Common; + using MediaBrowser.Common.Extensions; + using MediaBrowser.Controller.Authentication; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Library; + using MediaBrowser.Model.IO; + using MediaBrowser.Model.Users; + /// /// The default password reset provider. /// diff --git a/Jellyfin.Server.Implementations/Users/DeviceAccessHost.cs b/Jellyfin.Server.Implementations/Users/DeviceAccessHost.cs index 40004822..891a6553 100644 --- a/Jellyfin.Server.Implementations/Users/DeviceAccessHost.cs +++ b/Jellyfin.Server.Implementations/Users/DeviceAccessHost.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Implementations.Users; + using System.Threading; using System.Threading.Tasks; using Jellyfin.Data; @@ -14,8 +16,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Session; using Microsoft.Extensions.Hosting; -namespace Jellyfin.Server.Implementations.Users; - /// /// responsible for managing user device permissions. /// diff --git a/Jellyfin.Server.Implementations/Users/DisplayPreferencesManager.cs b/Jellyfin.Server.Implementations/Users/DisplayPreferencesManager.cs index 437e145e..d88e2d78 100644 --- a/Jellyfin.Server.Implementations/Users/DisplayPreferencesManager.cs +++ b/Jellyfin.Server.Implementations/Users/DisplayPreferencesManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Implementations.Users; + using System; using System.Collections.Generic; using System.Linq; @@ -10,8 +12,6 @@ using Jellyfin.Database.Implementations.Entities; using MediaBrowser.Controller; using Microsoft.EntityFrameworkCore; -namespace Jellyfin.Server.Implementations.Users; - /// /// Manages the storage and retrieval of display preferences through Entity Framework. /// diff --git a/Jellyfin.Server.Implementations/Users/InvalidAuthProvider.cs b/Jellyfin.Server.Implementations/Users/InvalidAuthProvider.cs index 0ebc72c3..7aad0668 100644 --- a/Jellyfin.Server.Implementations/Users/InvalidAuthProvider.cs +++ b/Jellyfin.Server.Implementations/Users/InvalidAuthProvider.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading.Tasks; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Authentication; - namespace Jellyfin.Server.Implementations.Users { + using System.Threading.Tasks; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Authentication; + /// /// An invalid authentication provider. /// diff --git a/Jellyfin.Server.Implementations/obj/Debug/net10.0/Jellyfin.Server.Implementations.csproj.AssemblyReference.cache b/Jellyfin.Server.Implementations/obj/Debug/net10.0/Jellyfin.Server.Implementations.csproj.AssemblyReference.cache index ba1799b0c43ac86819f381a25b430c9da84d46a5..4927d6a3fccc3d2badbd548fd5629994ff7f3325 100644 GIT binary patch delta 3135 zcmb_eOKclO81^_#Y8-4Oj<Ip=9;et?a91*A|4qP~J=`GBxXV<&V+DQ<5uva_({IB`G z@1F;?5559jJz%unwb?WM#xI}Tv+6gq>}vE#66{1Gkt6R%B7px#?o5M!z|PXbv&9vH zZ=e#ji&n+n)StY8biH;>Gm97G3!GP}THN4Y=FvvAQZy0GWnnhB4$Ha@gyY*EzxMe( z>yH=!AQA8Y;(YZ{5xV)X=Mz2kZxdj>es|*Kfb|TIH{-;ck@02%>mpvG5U?0nm>#=~ zh^=AsIi6(hDfVXa46|af$3Zs_%acm3)oh9kxLP%-W*`t}m!ikmZJ@AsqUp);fUgbJ zM)160>BvAPRVnvsH_G6f2G}FfzNg(|P;hm~VXxKh!~3Y^=pDN#!@mYdwkufMN7lllFdt0JBot5?Qa(#*|(&y+an2#9aZ z!Ys^Z^SQGC^umh^>jg~EoMkyR2$Nm;fC#wU0SU{ftf}V+e%nR_It7Km!EcmrSb3mO z@86pJu>p#d->zXMTbfIx1s1MwER^>eg#co&kq;Fw?p##6d!=<+nZLwgv=tywS z>66P^iC`OFqj1i)_)Yv-z?7s|kIAmz_0Xlnp5Z?9Ws`1JM&o7`6@~?XzJUhdm5Eo^vh&cckwk?i%iDEy!V%;m4Pj(PWd? z&a#6}U74`-TrCvG$@4M{pGr7`w5cN33D+h**xKa$KdYCgAq8G*s7fc>lXuWnDW{Q_ zs)*Fo4ZY=x0H%0{rr1rz=}tbZJ16Afts#D18m++ssaX_Ph-zJL65XL={_u1xayDLR zN>wMeHLW~;DIfmzspMA&;gh4dT)&(3g$fzL9>0R2B>k2`mfI3eTo3mlT-wt*XE?2* zN>x`$Tg2}V29RbC;%PSA+s|*vN5w7hiNC*l_oJ7RnIS(ZI*i1&GJfXpH^I?^11H@9 d#_Y?ZW2`%xhN1-VG_DuUTLO?7usJr-c9j delta 96 zcmV-m0H6PXrvc!32nGQg00001XOpl38LSGe diff --git a/Jellyfin.Server/Configuration/CorsPolicyProvider.cs b/Jellyfin.Server/Configuration/CorsPolicyProvider.cs index ceddf72b..6c7f30d5 100644 --- a/Jellyfin.Server/Configuration/CorsPolicyProvider.cs +++ b/Jellyfin.Server/Configuration/CorsPolicyProvider.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Threading.Tasks; -using MediaBrowser.Controller.Configuration; -using Microsoft.AspNetCore.Cors.Infrastructure; -using Microsoft.AspNetCore.Http; - namespace Jellyfin.Server.Configuration { + using System; + using System.Threading.Tasks; + using MediaBrowser.Controller.Configuration; + using Microsoft.AspNetCore.Cors.Infrastructure; + using Microsoft.AspNetCore.Http; + /// /// Cors policy provider. /// diff --git a/Jellyfin.Server/CoreAppHost.cs b/Jellyfin.Server/CoreAppHost.cs index 508cacc3..13ff7490 100644 --- a/Jellyfin.Server/CoreAppHost.cs +++ b/Jellyfin.Server/CoreAppHost.cs @@ -2,42 +2,42 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Reflection; -using Emby.Server.Implementations; -using Emby.Server.Implementations.Session; -using Jellyfin.Api.WebSocketListeners; -using Jellyfin.Database.Implementations; -using Jellyfin.Drawing; -using Jellyfin.Drawing.Skia; -using Jellyfin.LiveTv; -using Jellyfin.Server.Implementations.Activity; -using Jellyfin.Server.Implementations.Devices; -using Jellyfin.Server.Implementations.Events; -using Jellyfin.Server.Implementations.Extensions; -using Jellyfin.Server.Implementations.Security; -using Jellyfin.Server.Implementations.Trickplay; -using Jellyfin.Server.Implementations.Users; -using MediaBrowser.Controller; -using MediaBrowser.Controller.Authentication; -using MediaBrowser.Controller.BaseItemManager; -using MediaBrowser.Controller.Devices; -using MediaBrowser.Controller.Drawing; -using MediaBrowser.Controller.Events; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Lyrics; -using MediaBrowser.Controller.Net; -using MediaBrowser.Controller.Security; -using MediaBrowser.Controller.Trickplay; -using MediaBrowser.Model.Activity; -using MediaBrowser.Providers.Lyric; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; - namespace Jellyfin.Server { + using System; + using System.Collections.Generic; + using System.Reflection; + using Emby.Server.Implementations; + using Emby.Server.Implementations.Session; + using Jellyfin.Api.WebSocketListeners; + using Jellyfin.Database.Implementations; + using Jellyfin.Drawing; + using Jellyfin.Drawing.Skia; + using Jellyfin.LiveTv; + using Jellyfin.Server.Implementations.Activity; + using Jellyfin.Server.Implementations.Devices; + using Jellyfin.Server.Implementations.Events; + using Jellyfin.Server.Implementations.Extensions; + using Jellyfin.Server.Implementations.Security; + using Jellyfin.Server.Implementations.Trickplay; + using Jellyfin.Server.Implementations.Users; + using MediaBrowser.Controller; + using MediaBrowser.Controller.Authentication; + using MediaBrowser.Controller.BaseItemManager; + using MediaBrowser.Controller.Devices; + using MediaBrowser.Controller.Drawing; + using MediaBrowser.Controller.Events; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Lyrics; + using MediaBrowser.Controller.Net; + using MediaBrowser.Controller.Security; + using MediaBrowser.Controller.Trickplay; + using MediaBrowser.Model.Activity; + using MediaBrowser.Providers.Lyric; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.DependencyInjection; + using Microsoft.Extensions.Logging; + /// /// Implementation of the abstract class. /// diff --git a/Jellyfin.Server/Extensions/ApiApplicationBuilderExtensions.cs b/Jellyfin.Server/Extensions/ApiApplicationBuilderExtensions.cs index 39001457..3b0fa690 100644 --- a/Jellyfin.Server/Extensions/ApiApplicationBuilderExtensions.cs +++ b/Jellyfin.Server/Extensions/ApiApplicationBuilderExtensions.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using Jellyfin.Api.Middleware; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Configuration; -using Microsoft.AspNetCore.Builder; -using Microsoft.OpenApi.Models; - namespace Jellyfin.Server.Extensions { + using System.Collections.Generic; + using Jellyfin.Api.Middleware; + using MediaBrowser.Common.Net; + using MediaBrowser.Controller.Configuration; + using Microsoft.AspNetCore.Builder; + using Microsoft.OpenApi.Models; + /// /// Extensions for adding API specific functionality to the application pipeline. /// diff --git a/Jellyfin.Server/Extensions/ApiServiceCollectionExtensions.cs b/Jellyfin.Server/Extensions/ApiServiceCollectionExtensions.cs index d7280620..3529a443 100644 --- a/Jellyfin.Server/Extensions/ApiServiceCollectionExtensions.cs +++ b/Jellyfin.Server/Extensions/ApiServiceCollectionExtensions.cs @@ -2,51 +2,51 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net; -using System.Net.Sockets; -using System.Reflection; -using System.Security.Claims; -using Emby.Server.Implementations; -using Jellyfin.Api.Auth; -using Jellyfin.Api.Auth.AnonymousLanAccessPolicy; -using Jellyfin.Api.Auth.DefaultAuthorizationPolicy; -using Jellyfin.Api.Auth.FirstTimeSetupPolicy; -using Jellyfin.Api.Auth.LocalAccessOrRequiresElevationPolicy; -using Jellyfin.Api.Auth.SyncPlayAccessPolicy; -using Jellyfin.Api.Auth.UserPermissionPolicy; -using Jellyfin.Api.Constants; -using Jellyfin.Api.Controllers; -using Jellyfin.Api.Formatters; -using Jellyfin.Api.ModelBinders; -using Jellyfin.Data.Enums; -using Jellyfin.Database.Implementations.Enums; -using Jellyfin.Extensions.Json; -using Jellyfin.Server.Configuration; -using Jellyfin.Server.Filters; -using MediaBrowser.Common.Api; -using MediaBrowser.Common.Net; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Session; -using Microsoft.AspNetCore.Authentication; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Cors.Infrastructure; -using Microsoft.AspNetCore.HttpOverrides; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.DependencyInjection.Extensions; -using Microsoft.OpenApi.Any; -using Microsoft.OpenApi.Interfaces; -using Microsoft.OpenApi.Models; -using Swashbuckle.AspNetCore.Swagger; -using Swashbuckle.AspNetCore.SwaggerGen; -using AuthenticationSchemes = Jellyfin.Api.Constants.AuthenticationSchemes; - namespace Jellyfin.Server.Extensions { + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Net; + using System.Net.Sockets; + using System.Reflection; + using System.Security.Claims; + using Emby.Server.Implementations; + using Jellyfin.Api.Auth; + using Jellyfin.Api.Auth.AnonymousLanAccessPolicy; + using Jellyfin.Api.Auth.DefaultAuthorizationPolicy; + using Jellyfin.Api.Auth.FirstTimeSetupPolicy; + using Jellyfin.Api.Auth.LocalAccessOrRequiresElevationPolicy; + using Jellyfin.Api.Auth.SyncPlayAccessPolicy; + using Jellyfin.Api.Auth.UserPermissionPolicy; + using Jellyfin.Api.Constants; + using Jellyfin.Api.Controllers; + using Jellyfin.Api.Formatters; + using Jellyfin.Api.ModelBinders; + using Jellyfin.Data.Enums; + using Jellyfin.Database.Implementations.Enums; + using Jellyfin.Extensions.Json; + using Jellyfin.Server.Configuration; + using Jellyfin.Server.Filters; + using MediaBrowser.Common.Api; + using MediaBrowser.Common.Net; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Session; + using Microsoft.AspNetCore.Authentication; + using Microsoft.AspNetCore.Authorization; + using Microsoft.AspNetCore.Builder; + using Microsoft.AspNetCore.Cors.Infrastructure; + using Microsoft.AspNetCore.HttpOverrides; + using Microsoft.Extensions.DependencyInjection; + using Microsoft.Extensions.DependencyInjection.Extensions; + using Microsoft.OpenApi.Any; + using Microsoft.OpenApi.Interfaces; + using Microsoft.OpenApi.Models; + using Swashbuckle.AspNetCore.Swagger; + using Swashbuckle.AspNetCore.SwaggerGen; + using AuthenticationSchemes = Jellyfin.Api.Constants.AuthenticationSchemes; + /// /// API specific extensions for the service collection. /// diff --git a/Jellyfin.Server/Extensions/WebHostBuilderExtensions.cs b/Jellyfin.Server/Extensions/WebHostBuilderExtensions.cs index a3ba7159..5b8cba6a 100644 --- a/Jellyfin.Server/Extensions/WebHostBuilderExtensions.cs +++ b/Jellyfin.Server/Extensions/WebHostBuilderExtensions.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Extensions; + using System; using System.Collections.Generic; using System.IO; @@ -17,8 +19,6 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Extensions; - /// /// Extensions for configuring the web host builder. /// diff --git a/Jellyfin.Server/Filters/AdditionalModelFilter.cs b/Jellyfin.Server/Filters/AdditionalModelFilter.cs index 6a38a99a..32be00f1 100644 --- a/Jellyfin.Server/Filters/AdditionalModelFilter.cs +++ b/Jellyfin.Server/Filters/AdditionalModelFilter.cs @@ -2,27 +2,27 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Reflection; -using Jellyfin.Extensions; -using Jellyfin.Server.Migrations; -using MediaBrowser.Common.Plugins; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Net; -using MediaBrowser.Controller.Net.WebSocketMessages; -using MediaBrowser.Controller.Net.WebSocketMessages.Outbound; -using MediaBrowser.Model.ApiClient; -using MediaBrowser.Model.Session; -using MediaBrowser.Model.SyncPlay; -using Microsoft.OpenApi.Any; -using Microsoft.OpenApi.Models; -using Swashbuckle.AspNetCore.SwaggerGen; - namespace Jellyfin.Server.Filters { + using System; + using System.Collections.Generic; + using System.ComponentModel; + using System.Linq; + using System.Reflection; + using Jellyfin.Extensions; + using Jellyfin.Server.Migrations; + using MediaBrowser.Common.Plugins; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Net; + using MediaBrowser.Controller.Net.WebSocketMessages; + using MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using MediaBrowser.Model.ApiClient; + using MediaBrowser.Model.Session; + using MediaBrowser.Model.SyncPlay; + using Microsoft.OpenApi.Any; + using Microsoft.OpenApi.Models; + using Swashbuckle.AspNetCore.SwaggerGen; + /// /// Add models not directly used by the API, but used for discovery and websockets. /// diff --git a/Jellyfin.Server/Filters/CachingOpenApiProvider.cs b/Jellyfin.Server/Filters/CachingOpenApiProvider.cs index c6d62871..a47a8415 100644 --- a/Jellyfin.Server/Filters/CachingOpenApiProvider.cs +++ b/Jellyfin.Server/Filters/CachingOpenApiProvider.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Filters; + using System; using AsyncKeyedLock; using Microsoft.AspNetCore.Mvc.ApiExplorer; @@ -12,8 +14,6 @@ using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.Swagger; using Swashbuckle.AspNetCore.SwaggerGen; -namespace Jellyfin.Server.Filters; - /// /// OpenApi provider with caching. /// diff --git a/Jellyfin.Server/Filters/FileRequestFilter.cs b/Jellyfin.Server/Filters/FileRequestFilter.cs index 503a7d67..acb3dbc9 100644 --- a/Jellyfin.Server/Filters/FileRequestFilter.cs +++ b/Jellyfin.Server/Filters/FileRequestFilter.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using Jellyfin.Api.Attributes; -using Microsoft.OpenApi.Models; -using Swashbuckle.AspNetCore.SwaggerGen; - namespace Jellyfin.Server.Filters { + using System.Collections.Generic; + using Jellyfin.Api.Attributes; + using Microsoft.OpenApi.Models; + using Swashbuckle.AspNetCore.SwaggerGen; + /// public class FileRequestFilter : IOperationFilter { diff --git a/Jellyfin.Server/Filters/FileResponseFilter.cs b/Jellyfin.Server/Filters/FileResponseFilter.cs index 8e0fa8a9..2d40543b 100644 --- a/Jellyfin.Server/Filters/FileResponseFilter.cs +++ b/Jellyfin.Server/Filters/FileResponseFilter.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Linq; -using Jellyfin.Api.Attributes; -using Microsoft.OpenApi.Models; -using Swashbuckle.AspNetCore.SwaggerGen; - namespace Jellyfin.Server.Filters { + using System; + using System.Linq; + using Jellyfin.Api.Attributes; + using Microsoft.OpenApi.Models; + using Swashbuckle.AspNetCore.SwaggerGen; + /// public class FileResponseFilter : IOperationFilter { diff --git a/Jellyfin.Server/Filters/FlagsEnumSchemaFilter.cs b/Jellyfin.Server/Filters/FlagsEnumSchemaFilter.cs index 8b021701..bbfab3a3 100644 --- a/Jellyfin.Server/Filters/FlagsEnumSchemaFilter.cs +++ b/Jellyfin.Server/Filters/FlagsEnumSchemaFilter.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Filters; + using System; using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerGen; -namespace Jellyfin.Server.Filters; - /// /// Schema filter to ensure flags enums are represented correctly in OpenAPI. /// diff --git a/Jellyfin.Server/Filters/IgnoreEnumSchemaFilter.cs b/Jellyfin.Server/Filters/IgnoreEnumSchemaFilter.cs index c783753e..a212962e 100644 --- a/Jellyfin.Server/Filters/IgnoreEnumSchemaFilter.cs +++ b/Jellyfin.Server/Filters/IgnoreEnumSchemaFilter.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Filters; + using System; using System.Collections.Generic; using System.Linq; @@ -11,8 +13,6 @@ using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerGen; -namespace Jellyfin.Server.Filters; - /// /// Filter to remove ignored enum values. /// diff --git a/Jellyfin.Server/Filters/ParameterObsoleteFilter.cs b/Jellyfin.Server/Filters/ParameterObsoleteFilter.cs index bcdfde60..dccd999d 100644 --- a/Jellyfin.Server/Filters/ParameterObsoleteFilter.cs +++ b/Jellyfin.Server/Filters/ParameterObsoleteFilter.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Linq; -using Jellyfin.Api.Attributes; -using Microsoft.OpenApi.Models; -using Swashbuckle.AspNetCore.SwaggerGen; - namespace Jellyfin.Server.Filters { + using System; + using System.Linq; + using Jellyfin.Api.Attributes; + using Microsoft.OpenApi.Models; + using Swashbuckle.AspNetCore.SwaggerGen; + /// /// Mark parameter as deprecated if it has the . /// diff --git a/Jellyfin.Server/Filters/RetryOnTemporarilyUnavailableFilter.cs b/Jellyfin.Server/Filters/RetryOnTemporarilyUnavailableFilter.cs index 047c2127..fdfb5e80 100644 --- a/Jellyfin.Server/Filters/RetryOnTemporarilyUnavailableFilter.cs +++ b/Jellyfin.Server/Filters/RetryOnTemporarilyUnavailableFilter.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Filters; + using System.Collections.Generic; using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerGen; -namespace Jellyfin.Server.Filters; - internal class RetryOnTemporarilyUnavailableFilter : IOperationFilter { public void Apply(OpenApiOperation operation, OperationFilterContext context) diff --git a/Jellyfin.Server/Filters/SecurityRequirementsOperationFilter.cs b/Jellyfin.Server/Filters/SecurityRequirementsOperationFilter.cs index 1bbe3eaf..423916fc 100644 --- a/Jellyfin.Server/Filters/SecurityRequirementsOperationFilter.cs +++ b/Jellyfin.Server/Filters/SecurityRequirementsOperationFilter.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Filters; + using System; using System.Collections.Generic; using System.Linq; @@ -12,8 +14,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerGen; -namespace Jellyfin.Server.Filters; - /// /// Security requirement operation filter. /// diff --git a/Jellyfin.Server/HealthChecks/DbContextFactoryHealthCheck.cs b/Jellyfin.Server/HealthChecks/DbContextFactoryHealthCheck.cs index 34307e1b..0024b866 100644 --- a/Jellyfin.Server/HealthChecks/DbContextFactoryHealthCheck.cs +++ b/Jellyfin.Server/HealthChecks/DbContextFactoryHealthCheck.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.HealthChecks; + using System; using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Diagnostics.HealthChecks; -namespace Jellyfin.Server.HealthChecks; - /// /// Implementation of the for a . /// diff --git a/Jellyfin.Server/Helpers/StartupHelpers.cs b/Jellyfin.Server/Helpers/StartupHelpers.cs index e1ae3c5f..d91f7678 100644 --- a/Jellyfin.Server/Helpers/StartupHelpers.cs +++ b/Jellyfin.Server/Helpers/StartupHelpers.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Helpers; + using System; using System.Collections.Generic; using System.Globalization; @@ -22,8 +24,6 @@ using Serilog; using Serilog.Extensions.Logging; using ILogger = Microsoft.Extensions.Logging.ILogger; -namespace Jellyfin.Server.Helpers; - /// /// A class containing helper methods for server startup. /// diff --git a/Jellyfin.Server/Migrations/IAsyncMigrationRoutine.cs b/Jellyfin.Server/Migrations/IAsyncMigrationRoutine.cs index 3fac063f..2048b3af 100644 --- a/Jellyfin.Server/Migrations/IAsyncMigrationRoutine.cs +++ b/Jellyfin.Server/Migrations/IAsyncMigrationRoutine.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations; + using System; using System.Threading; using System.Threading.Tasks; -namespace Jellyfin.Server.Migrations; - /// /// Interface that describes a migration routine. /// diff --git a/Jellyfin.Server/Migrations/IDatabaseMigrationRoutine.cs b/Jellyfin.Server/Migrations/IDatabaseMigrationRoutine.cs index db00fb25..b33a0b3c 100644 --- a/Jellyfin.Server/Migrations/IDatabaseMigrationRoutine.cs +++ b/Jellyfin.Server/Migrations/IDatabaseMigrationRoutine.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations; + using System; using Jellyfin.Server.Implementations; using Microsoft.EntityFrameworkCore; -namespace Jellyfin.Server.Migrations; - /// /// Defines a migration that operates on the Database. /// diff --git a/Jellyfin.Server/Migrations/JellyfinMigrationBackupAttribute.cs b/Jellyfin.Server/Migrations/JellyfinMigrationBackupAttribute.cs index 2e165604..a97953b6 100644 --- a/Jellyfin.Server/Migrations/JellyfinMigrationBackupAttribute.cs +++ b/Jellyfin.Server/Migrations/JellyfinMigrationBackupAttribute.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace Jellyfin.Server.Migrations; +using System; + /// /// Marks an migration and instructs the to perform a backup. /// diff --git a/Jellyfin.Server/Migrations/JellyfinMigrationService.cs b/Jellyfin.Server/Migrations/JellyfinMigrationService.cs index 7d0c4237..d06249ab 100644 --- a/Jellyfin.Server/Migrations/JellyfinMigrationService.cs +++ b/Jellyfin.Server/Migrations/JellyfinMigrationService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations; + using System; using System.Collections.Generic; using System.Globalization; @@ -24,8 +26,6 @@ using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Migrations; - /// /// Handles Migration of the Jellyfin data structure. /// diff --git a/Jellyfin.Server/Migrations/MigrationOptions.cs b/Jellyfin.Server/Migrations/MigrationOptions.cs index 9ef99de7..21bad9d1 100644 --- a/Jellyfin.Server/Migrations/MigrationOptions.cs +++ b/Jellyfin.Server/Migrations/MigrationOptions.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; - namespace Jellyfin.Server.Migrations { + using System; + using System.Collections.Generic; + /// /// Configuration part that holds all migrations that were applied. /// diff --git a/Jellyfin.Server/Migrations/PreStartupRoutines/CreateNetworkConfiguration.cs b/Jellyfin.Server/Migrations/PreStartupRoutines/CreateNetworkConfiguration.cs index 0d581666..72410d71 100644 --- a/Jellyfin.Server/Migrations/PreStartupRoutines/CreateNetworkConfiguration.cs +++ b/Jellyfin.Server/Migrations/PreStartupRoutines/CreateNetworkConfiguration.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.PreStartupRoutines; + using System; using System.IO; using System.Xml; @@ -9,8 +11,6 @@ using System.Xml.Serialization; using Emby.Server.Implementations; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Migrations.PreStartupRoutines; - /// #pragma warning disable CS0618 // Type or member is obsolete [JellyfinMigration("2025-04-20T00:00:00", nameof(CreateNetworkConfiguration), "9B354818-94D5-4B68-AC49-E35CB85F9D84", Stage = Stages.JellyfinMigrationStageTypes.PreInitialisation)] diff --git a/Jellyfin.Server/Migrations/PreStartupRoutines/MigrateEncodingOptions.cs b/Jellyfin.Server/Migrations/PreStartupRoutines/MigrateEncodingOptions.cs index 41b7d665..3ef73f29 100644 --- a/Jellyfin.Server/Migrations/PreStartupRoutines/MigrateEncodingOptions.cs +++ b/Jellyfin.Server/Migrations/PreStartupRoutines/MigrateEncodingOptions.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.PreStartupRoutines; + using System; using System.IO; using System.Xml; @@ -11,8 +13,6 @@ using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Entities; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Migrations.PreStartupRoutines; - /// #pragma warning disable CS0618 // Type or member is obsolete [JellyfinMigration("2025-04-20T03:00:00", nameof(MigrateEncodingOptions), "A8E61960-7726-4450-8F3D-82C12DAABBCB", Stage = Stages.JellyfinMigrationStageTypes.PreInitialisation)] diff --git a/Jellyfin.Server/Migrations/PreStartupRoutines/MigrateMusicBrainzTimeout.cs b/Jellyfin.Server/Migrations/PreStartupRoutines/MigrateMusicBrainzTimeout.cs index 310bb1e4..593084a6 100644 --- a/Jellyfin.Server/Migrations/PreStartupRoutines/MigrateMusicBrainzTimeout.cs +++ b/Jellyfin.Server/Migrations/PreStartupRoutines/MigrateMusicBrainzTimeout.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.PreStartupRoutines; + using System; using System.IO; using System.Xml; @@ -10,8 +12,6 @@ using Emby.Server.Implementations; using MediaBrowser.Providers.Plugins.MusicBrainz.Configuration; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Migrations.PreStartupRoutines; - /// #pragma warning disable CS0618 // Type or member is obsolete [JellyfinMigration("2025-04-20T02:00:00", nameof(MigrateMusicBrainzTimeout), "A6DCACF4-C057-4Ef9-80D3-61CEF9DDB4F0", Stage = Stages.JellyfinMigrationStageTypes.PreInitialisation)] diff --git a/Jellyfin.Server/Migrations/PreStartupRoutines/RenameEnableGroupingIntoCollections.cs b/Jellyfin.Server/Migrations/PreStartupRoutines/RenameEnableGroupingIntoCollections.cs index e9fa786a..89550f36 100644 --- a/Jellyfin.Server/Migrations/PreStartupRoutines/RenameEnableGroupingIntoCollections.cs +++ b/Jellyfin.Server/Migrations/PreStartupRoutines/RenameEnableGroupingIntoCollections.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.PreStartupRoutines; + using System; using System.IO; using System.Linq; @@ -10,8 +12,6 @@ using System.Xml.Linq; using Emby.Server.Implementations; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Migrations.PreStartupRoutines; - /// #pragma warning disable CS0618 // Type or member is obsolete [JellyfinMigration("2025-04-20T04:00:00", nameof(RenameEnableGroupingIntoCollections), "E73B777D-CD5C-4E71-957A-B86B3660B7CF", Stage = Stages.JellyfinMigrationStageTypes.PreInitialisation)] diff --git a/Jellyfin.Server/Migrations/Routines/AddDefaultCastReceivers.cs b/Jellyfin.Server/Migrations/Routines/AddDefaultCastReceivers.cs index bafa93d7..04b6393a 100644 --- a/Jellyfin.Server/Migrations/Routines/AddDefaultCastReceivers.cs +++ b/Jellyfin.Server/Migrations/Routines/AddDefaultCastReceivers.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.Routines; + using System; using MediaBrowser.Controller.Configuration; using MediaBrowser.Model.System; -namespace Jellyfin.Server.Migrations.Routines; - /// /// Migration to add the default cast receivers to the system config. /// diff --git a/Jellyfin.Server/Migrations/Routines/AddDefaultPluginRepository.cs b/Jellyfin.Server/Migrations/Routines/AddDefaultPluginRepository.cs index 5d32bb2b..80822e41 100644 --- a/Jellyfin.Server/Migrations/Routines/AddDefaultPluginRepository.cs +++ b/Jellyfin.Server/Migrations/Routines/AddDefaultPluginRepository.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Model.Updates; - namespace Jellyfin.Server.Migrations.Routines { + using System; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Model.Updates; + /// /// Migration to initialize system configuration with the default plugin repository. /// diff --git a/Jellyfin.Server/Migrations/Routines/CleanMusicArtist.cs b/Jellyfin.Server/Migrations/Routines/CleanMusicArtist.cs index a952dfdb..b4e7e8bc 100644 --- a/Jellyfin.Server/Migrations/Routines/CleanMusicArtist.cs +++ b/Jellyfin.Server/Migrations/Routines/CleanMusicArtist.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.Routines; + using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -11,8 +13,6 @@ using Jellyfin.Server.ServerSetupApp; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Migrations.Routines; - /// /// Cleans up all Music artists that have been migrated in the 10.11 RC migrations. /// diff --git a/Jellyfin.Server/Migrations/Routines/CreateUserLoggingConfigFile.cs b/Jellyfin.Server/Migrations/Routines/CreateUserLoggingConfigFile.cs index d6600598..7d8a2214 100644 --- a/Jellyfin.Server/Migrations/Routines/CreateUserLoggingConfigFile.cs +++ b/Jellyfin.Server/Migrations/Routines/CreateUserLoggingConfigFile.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using MediaBrowser.Common.Configuration; -using Newtonsoft.Json.Linq; - namespace Jellyfin.Server.Migrations.Routines { + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using MediaBrowser.Common.Configuration; + using Newtonsoft.Json.Linq; + /// /// Migration to initialize the user logging configuration file "logging.user.json". /// If the deprecated logging.json file exists and has a custom config, it will be used as logging.user.json, diff --git a/Jellyfin.Server/Migrations/Routines/DisableLegacyAuthorization.cs b/Jellyfin.Server/Migrations/Routines/DisableLegacyAuthorization.cs index dc6f0be4..6b2ae266 100644 --- a/Jellyfin.Server/Migrations/Routines/DisableLegacyAuthorization.cs +++ b/Jellyfin.Server/Migrations/Routines/DisableLegacyAuthorization.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.Routines; + using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Configuration; -namespace Jellyfin.Server.Migrations.Routines; - /// /// Migration to disable legacy authorization in the system config. /// diff --git a/Jellyfin.Server/Migrations/Routines/DisableTranscodingThrottling.cs b/Jellyfin.Server/Migrations/Routines/DisableTranscodingThrottling.cs index 3c44f51c..cf283fd8 100644 --- a/Jellyfin.Server/Migrations/Routines/DisableTranscodingThrottling.cs +++ b/Jellyfin.Server/Migrations/Routines/DisableTranscodingThrottling.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using MediaBrowser.Common.Configuration; -using Microsoft.Extensions.Logging; - namespace Jellyfin.Server.Migrations.Routines { + using System; + using MediaBrowser.Common.Configuration; + using Microsoft.Extensions.Logging; + /// /// Disable transcode throttling for all installations since it is currently broken for certain video formats. /// diff --git a/Jellyfin.Server/Migrations/Routines/FixAudioData.cs b/Jellyfin.Server/Migrations/Routines/FixAudioData.cs index b0a842f1..cd10cfeb 100644 --- a/Jellyfin.Server/Migrations/Routines/FixAudioData.cs +++ b/Jellyfin.Server/Migrations/Routines/FixAudioData.cs @@ -2,21 +2,21 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Threading; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Persistence; -using MediaBrowser.Model.Entities; -using Microsoft.Extensions.Logging; - namespace Jellyfin.Server.Migrations.Routines { + using System; + using System.Globalization; + using System.IO; + using System.Linq; + using System.Threading; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.Persistence; + using MediaBrowser.Model.Entities; + using Microsoft.Extensions.Logging; + /// /// Fixes the data column of audio types to be deserializable. /// diff --git a/Jellyfin.Server/Migrations/Routines/FixDates.cs b/Jellyfin.Server/Migrations/Routines/FixDates.cs index 9020fbcb..5c69a049 100644 --- a/Jellyfin.Server/Migrations/Routines/FixDates.cs +++ b/Jellyfin.Server/Migrations/Routines/FixDates.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.Routines; + using System; using System.Diagnostics; using System.Linq; @@ -12,8 +14,6 @@ using Jellyfin.Server.ServerSetupApp; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Migrations.Routines; - /// /// Migration to fix dates saved in the database to always be UTC. /// diff --git a/Jellyfin.Server/Migrations/Routines/FixPlaylistOwner.cs b/Jellyfin.Server/Migrations/Routines/FixPlaylistOwner.cs index cc615b8b..ddca14d5 100644 --- a/Jellyfin.Server/Migrations/Routines/FixPlaylistOwner.cs +++ b/Jellyfin.Server/Migrations/Routines/FixPlaylistOwner.cs @@ -2,18 +2,17 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.Routines; + using System; using System.Linq; using System.Threading; - using Jellyfin.Data.Enums; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Playlists; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Migrations.Routines; - /// /// Properly set playlist owner. /// diff --git a/Jellyfin.Server/Migrations/Routines/MigrateActivityLogDb.cs b/Jellyfin.Server/Migrations/Routines/MigrateActivityLogDb.cs index acaf0193..d8511750 100644 --- a/Jellyfin.Server/Migrations/Routines/MigrateActivityLogDb.cs +++ b/Jellyfin.Server/Migrations/Routines/MigrateActivityLogDb.cs @@ -2,19 +2,19 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.IO; -using Emby.Server.Implementations.Data; -using Jellyfin.Database.Implementations; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller; -using Microsoft.Data.Sqlite; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Logging; - namespace Jellyfin.Server.Migrations.Routines { + using System; + using System.Collections.Generic; + using System.IO; + using Emby.Server.Implementations.Data; + using Jellyfin.Database.Implementations; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller; + using Microsoft.Data.Sqlite; + using Microsoft.EntityFrameworkCore; + using Microsoft.Extensions.Logging; + /// /// The migration routine for migrating the activity log database to EF Core. /// diff --git a/Jellyfin.Server/Migrations/Routines/MigrateAuthenticationDb.cs b/Jellyfin.Server/Migrations/Routines/MigrateAuthenticationDb.cs index 241ad90d..c3d8e950 100644 --- a/Jellyfin.Server/Migrations/Routines/MigrateAuthenticationDb.cs +++ b/Jellyfin.Server/Migrations/Routines/MigrateAuthenticationDb.cs @@ -2,20 +2,20 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.IO; -using Emby.Server.Implementations.Data; -using Jellyfin.Database.Implementations; -using Jellyfin.Database.Implementations.Entities.Security; -using MediaBrowser.Controller; -using MediaBrowser.Controller.Library; -using Microsoft.Data.Sqlite; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Logging; - namespace Jellyfin.Server.Migrations.Routines { + using System; + using System.Collections.Generic; + using System.IO; + using Emby.Server.Implementations.Data; + using Jellyfin.Database.Implementations; + using Jellyfin.Database.Implementations.Entities.Security; + using MediaBrowser.Controller; + using MediaBrowser.Controller.Library; + using Microsoft.Data.Sqlite; + using Microsoft.EntityFrameworkCore; + using Microsoft.Extensions.Logging; + /// /// A migration that moves data from the authentication database into the new schema. /// diff --git a/Jellyfin.Server/Migrations/Routines/MigrateDisplayPreferencesDb.cs b/Jellyfin.Server/Migrations/Routines/MigrateDisplayPreferencesDb.cs index a64df9bb..e241a82d 100644 --- a/Jellyfin.Server/Migrations/Routines/MigrateDisplayPreferencesDb.cs +++ b/Jellyfin.Server/Migrations/Routines/MigrateDisplayPreferencesDb.cs @@ -2,25 +2,25 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text.Json; -using System.Text.Json.Serialization; -using Emby.Server.Implementations.Data; -using Jellyfin.Database.Implementations; -using Jellyfin.Database.Implementations.Entities; -using Jellyfin.Database.Implementations.Enums; -using MediaBrowser.Controller; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.Dto; -using Microsoft.Data.Sqlite; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Logging; - namespace Jellyfin.Server.Migrations.Routines { + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Text.Json; + using System.Text.Json.Serialization; + using Emby.Server.Implementations.Data; + using Jellyfin.Database.Implementations; + using Jellyfin.Database.Implementations.Entities; + using Jellyfin.Database.Implementations.Enums; + using MediaBrowser.Controller; + using MediaBrowser.Controller.Library; + using MediaBrowser.Model.Dto; + using Microsoft.Data.Sqlite; + using Microsoft.EntityFrameworkCore; + using Microsoft.Extensions.Logging; + /// /// The migration routine for migrating the display preferences database to EF Core. /// diff --git a/Jellyfin.Server/Migrations/Routines/MigrateKeyframeData.cs b/Jellyfin.Server/Migrations/Routines/MigrateKeyframeData.cs index d520c1e5..5c97ae4b 100644 --- a/Jellyfin.Server/Migrations/Routines/MigrateKeyframeData.cs +++ b/Jellyfin.Server/Migrations/Routines/MigrateKeyframeData.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.Routines; + using System; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; @@ -19,8 +21,6 @@ using MediaBrowser.Common.Extensions; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Migrations.Routines; - /// /// Migration to move extracted files to the new directories. /// diff --git a/Jellyfin.Server/Migrations/Routines/MigrateRatingLevels.cs b/Jellyfin.Server/Migrations/Routines/MigrateRatingLevels.cs index 3953ab45..8906aba2 100644 --- a/Jellyfin.Server/Migrations/Routines/MigrateRatingLevels.cs +++ b/Jellyfin.Server/Migrations/Routines/MigrateRatingLevels.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.Routines; + using System; using System.Linq; using Jellyfin.Database.Implementations; @@ -10,8 +12,6 @@ using MediaBrowser.Model.Globalization; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Migrations.Routines; - /// /// Migrate rating levels. /// diff --git a/Jellyfin.Server/Migrations/Routines/MigrateUserDb.cs b/Jellyfin.Server/Migrations/Routines/MigrateUserDb.cs index b6c0353c..bb847af2 100644 --- a/Jellyfin.Server/Migrations/Routines/MigrateUserDb.cs +++ b/Jellyfin.Server/Migrations/Routines/MigrateUserDb.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.Routines; + using System; using System.IO; using Emby.Server.Implementations.Data; @@ -21,8 +23,6 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using JsonSerializer = System.Text.Json.JsonSerializer; -namespace Jellyfin.Server.Migrations.Routines; - /// /// The migration routine for migrating the user database to EF Core. /// diff --git a/Jellyfin.Server/Migrations/Routines/MoveTrickplayFiles.cs b/Jellyfin.Server/Migrations/Routines/MoveTrickplayFiles.cs index e13ef3e8..de1aeccc 100644 --- a/Jellyfin.Server/Migrations/Routines/MoveTrickplayFiles.cs +++ b/Jellyfin.Server/Migrations/Routines/MoveTrickplayFiles.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.Routines; + using System; using System.Diagnostics; using System.Globalization; @@ -15,8 +17,6 @@ using MediaBrowser.Controller.Trickplay; using MediaBrowser.Model.IO; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Migrations.Routines; - /// /// Migration to move trickplay files to the new directory. /// diff --git a/Jellyfin.Server/Migrations/Routines/ReaddDefaultPluginRepository.cs b/Jellyfin.Server/Migrations/Routines/ReaddDefaultPluginRepository.cs index d2e0c73a..34be9745 100644 --- a/Jellyfin.Server/Migrations/Routines/ReaddDefaultPluginRepository.cs +++ b/Jellyfin.Server/Migrations/Routines/ReaddDefaultPluginRepository.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.Routines; + using System; using MediaBrowser.Controller.Configuration; using MediaBrowser.Model.Updates; -namespace Jellyfin.Server.Migrations.Routines; - /// /// Migration to initialize system configuration with the default plugin repository. /// diff --git a/Jellyfin.Server/Migrations/Routines/RefreshCleanNames.cs b/Jellyfin.Server/Migrations/Routines/RefreshCleanNames.cs index 8f4cb872..1fe87680 100644 --- a/Jellyfin.Server/Migrations/Routines/RefreshCleanNames.cs +++ b/Jellyfin.Server/Migrations/Routines/RefreshCleanNames.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.Routines; + using System; using System.Diagnostics; using System.Linq; @@ -16,8 +18,6 @@ using Jellyfin.Server.ServerSetupApp; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Migrations.Routines; - /// /// Migration to refresh CleanName values for all library items. /// diff --git a/Jellyfin.Server/Migrations/Routines/RefreshInternalDateModified.cs b/Jellyfin.Server/Migrations/Routines/RefreshInternalDateModified.cs index 2f3fa6ba..393bf7ed 100644 --- a/Jellyfin.Server/Migrations/Routines/RefreshInternalDateModified.cs +++ b/Jellyfin.Server/Migrations/Routines/RefreshInternalDateModified.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.Routines; + using System; using System.Collections.Generic; using System.Diagnostics; @@ -18,8 +20,6 @@ using MediaBrowser.Model.IO; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Migrations.Routines; - /// /// Migration to re-read creation dates for library items with internal metadata paths. /// diff --git a/Jellyfin.Server/Migrations/Routines/RemoveDownloadImagesInAdvance.cs b/Jellyfin.Server/Migrations/Routines/RemoveDownloadImagesInAdvance.cs index d41a6f40..64ac5c5f 100644 --- a/Jellyfin.Server/Migrations/Routines/RemoveDownloadImagesInAdvance.cs +++ b/Jellyfin.Server/Migrations/Routines/RemoveDownloadImagesInAdvance.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.Routines; + using System; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Migrations.Routines; - /// /// Removes the old 'RemoveDownloadImagesInAdvance' from library options. /// diff --git a/Jellyfin.Server/Migrations/Routines/RemoveDuplicateExtras.cs b/Jellyfin.Server/Migrations/Routines/RemoveDuplicateExtras.cs index 4f50e28c..398b371e 100644 --- a/Jellyfin.Server/Migrations/Routines/RemoveDuplicateExtras.cs +++ b/Jellyfin.Server/Migrations/Routines/RemoveDuplicateExtras.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.Routines; + using System; using System.Globalization; using System.IO; @@ -11,8 +13,6 @@ using MediaBrowser.Controller; using Microsoft.Data.Sqlite; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Migrations.Routines; - /// /// Remove duplicate entries which were caused by a bug where a file was considered to be an "Extra" to itself. /// diff --git a/Jellyfin.Server/Migrations/Routines/RemoveDuplicatePlaylistChildren.cs b/Jellyfin.Server/Migrations/Routines/RemoveDuplicatePlaylistChildren.cs index abcf0871..61dc79bc 100644 --- a/Jellyfin.Server/Migrations/Routines/RemoveDuplicatePlaylistChildren.cs +++ b/Jellyfin.Server/Migrations/Routines/RemoveDuplicatePlaylistChildren.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.Routines; + using System; using System.Linq; using System.Threading; @@ -10,8 +12,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Playlists; -namespace Jellyfin.Server.Migrations.Routines; - /// /// Remove duplicate playlist entries. /// diff --git a/Jellyfin.Server/Migrations/Routines/UpdateDefaultPluginRepository.cs b/Jellyfin.Server/Migrations/Routines/UpdateDefaultPluginRepository.cs index d820f1cb..4437b77f 100644 --- a/Jellyfin.Server/Migrations/Routines/UpdateDefaultPluginRepository.cs +++ b/Jellyfin.Server/Migrations/Routines/UpdateDefaultPluginRepository.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.Routines; + using System; using MediaBrowser.Controller.Configuration; -namespace Jellyfin.Server.Migrations.Routines; - /// /// Migration to update the default Jellyfin plugin repository. /// diff --git a/Jellyfin.Server/Migrations/Stages/CodeMigration.cs b/Jellyfin.Server/Migrations/Stages/CodeMigration.cs index 0a074389..0ed92bca 100644 --- a/Jellyfin.Server/Migrations/Stages/CodeMigration.cs +++ b/Jellyfin.Server/Migrations/Stages/CodeMigration.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Migrations.Stages; + using System; using System.Globalization; using System.Threading; @@ -11,8 +13,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.Migrations.Stages; - internal class CodeMigration(Type migrationType, JellyfinMigrationAttribute metadata, JellyfinMigrationBackupAttribute? migrationBackupAttribute) { public Type MigrationType { get; } = migrationType; diff --git a/Jellyfin.Server/Migrations/Stages/MigrationStage.cs b/Jellyfin.Server/Migrations/Stages/MigrationStage.cs index 5cbf44e4..59e8916d 100644 --- a/Jellyfin.Server/Migrations/Stages/MigrationStage.cs +++ b/Jellyfin.Server/Migrations/Stages/MigrationStage.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.ObjectModel; - namespace Jellyfin.Server.Migrations.Stages; +using System.Collections.ObjectModel; + /// /// Defines a Stage that can be Invoked and Handled at different times from the code. /// diff --git a/Jellyfin.Server/Program.cs b/Jellyfin.Server/Program.cs index 48ef9633..e083ed29 100644 --- a/Jellyfin.Server/Program.cs +++ b/Jellyfin.Server/Program.cs @@ -2,46 +2,46 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Threading; -using System.Threading.Tasks; -using CommandLine; -using Emby.Server.Implementations; -using Emby.Server.Implementations.Configuration; -using Emby.Server.Implementations.Serialization; -using Jellyfin.Database.Implementations; -using Jellyfin.Server.Extensions; -using Jellyfin.Server.Helpers; -using Jellyfin.Server.Implementations.DatabaseConfiguration; -using Jellyfin.Server.Implementations.Extensions; -using Jellyfin.Server.Implementations.StorageHelpers; -using Jellyfin.Server.Implementations.SystemBackupService; -using Jellyfin.Server.Migrations; -using Jellyfin.Server.Migrations.Stages; -using Jellyfin.Server.ServerSetupApp; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller; -using Microsoft.AspNetCore.Hosting; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Logging.Abstractions; -using Serilog; -using Serilog.Extensions.Logging; -using static MediaBrowser.Controller.Extensions.ConfigurationExtensions; -using ILogger = Microsoft.Extensions.Logging.ILogger; - namespace Jellyfin.Server { + using System; + using System.Collections.Generic; + using System.Diagnostics; + using System.Globalization; + using System.IO; + using System.Linq; + using System.Reflection; + using System.Threading; + using System.Threading.Tasks; + using CommandLine; + using Emby.Server.Implementations; + using Emby.Server.Implementations.Configuration; + using Emby.Server.Implementations.Serialization; + using Jellyfin.Database.Implementations; + using Jellyfin.Server.Extensions; + using Jellyfin.Server.Helpers; + using Jellyfin.Server.Implementations.DatabaseConfiguration; + using Jellyfin.Server.Implementations.Extensions; + using Jellyfin.Server.Implementations.StorageHelpers; + using Jellyfin.Server.Implementations.SystemBackupService; + using Jellyfin.Server.Migrations; + using Jellyfin.Server.Migrations.Stages; + using Jellyfin.Server.ServerSetupApp; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Common.Net; + using MediaBrowser.Controller; + using Microsoft.AspNetCore.Hosting; + using Microsoft.EntityFrameworkCore; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.DependencyInjection; + using Microsoft.Extensions.Hosting; + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + using Serilog; + using Serilog.Extensions.Logging; + using static MediaBrowser.Controller.Extensions.ConfigurationExtensions; + using ILogger = Microsoft.Extensions.Logging.ILogger; + /// /// Class containing the entry point of the application. /// diff --git a/Jellyfin.Server/ServerSetupApp/IStartupLogger.cs b/Jellyfin.Server/ServerSetupApp/IStartupLogger.cs index fd5f33e9..0b963568 100644 --- a/Jellyfin.Server/ServerSetupApp/IStartupLogger.cs +++ b/Jellyfin.Server/ServerSetupApp/IStartupLogger.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.ServerSetupApp; + using System; using ILogger = Microsoft.Extensions.Logging.ILogger; -namespace Jellyfin.Server.ServerSetupApp; - /// /// Defines the Startup Logger. This logger acts an an aggregate logger that will push though all log messages to both the attached logger as well as the startup UI. /// diff --git a/Jellyfin.Server/ServerSetupApp/SetupServer.cs b/Jellyfin.Server/ServerSetupApp/SetupServer.cs index 3e2afaac..fb5ec3a4 100644 --- a/Jellyfin.Server/ServerSetupApp/SetupServer.cs +++ b/Jellyfin.Server/ServerSetupApp/SetupServer.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.ServerSetupApp; + using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -35,8 +37,6 @@ using Morestachio.Rendering; using Serilog; using ILogger = Microsoft.Extensions.Logging.ILogger; -namespace Jellyfin.Server.ServerSetupApp; - /// /// Creates a fake application pipeline that will only exist for as long as the main app is not started. /// diff --git a/Jellyfin.Server/ServerSetupApp/StartupLogTopic.cs b/Jellyfin.Server/ServerSetupApp/StartupLogTopic.cs index 7bc3138c..7b89f6c7 100644 --- a/Jellyfin.Server/ServerSetupApp/StartupLogTopic.cs +++ b/Jellyfin.Server/ServerSetupApp/StartupLogTopic.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.ServerSetupApp; + using System; using System.Collections.ObjectModel; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.ServerSetupApp; - /// /// Defines a topic for the Startup UI. /// diff --git a/Jellyfin.Server/ServerSetupApp/StartupLogger.cs b/Jellyfin.Server/ServerSetupApp/StartupLogger.cs index bd19e093..65643f9e 100644 --- a/Jellyfin.Server/ServerSetupApp/StartupLogger.cs +++ b/Jellyfin.Server/ServerSetupApp/StartupLogger.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.ServerSetupApp; + using System; using System.Globalization; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; -namespace Jellyfin.Server.ServerSetupApp; - /// public class StartupLogger : IStartupLogger { diff --git a/Jellyfin.Server/ServerSetupApp/StartupLoggerExtensions.cs b/Jellyfin.Server/ServerSetupApp/StartupLoggerExtensions.cs index f60dd94e..61e51469 100644 --- a/Jellyfin.Server/ServerSetupApp/StartupLoggerExtensions.cs +++ b/Jellyfin.Server/ServerSetupApp/StartupLoggerExtensions.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.ServerSetupApp; + using System; using System.Globalization; using System.Linq; @@ -9,8 +11,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; -namespace Jellyfin.Server.ServerSetupApp; - internal static class StartupLoggerExtensions { public static IServiceCollection RegisterStartupLogger(this IServiceCollection services) diff --git a/Jellyfin.Server/ServerSetupApp/StartupLoggerOfCategory.cs b/Jellyfin.Server/ServerSetupApp/StartupLoggerOfCategory.cs index 17edfe28..facc7d33 100644 --- a/Jellyfin.Server/ServerSetupApp/StartupLoggerOfCategory.cs +++ b/Jellyfin.Server/ServerSetupApp/StartupLoggerOfCategory.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.ServerSetupApp; + using System; using System.Globalization; using Microsoft.Extensions.Logging; -namespace Jellyfin.Server.ServerSetupApp; - /// /// Startup logger for usage with DI that utilises an underlying logger from the DI. /// diff --git a/Jellyfin.Server/Startup.cs b/Jellyfin.Server/Startup.cs index 8d35e1ae..8edba923 100644 --- a/Jellyfin.Server/Startup.cs +++ b/Jellyfin.Server/Startup.cs @@ -2,40 +2,40 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.IO; -using System.Net; -using System.Net.Http; -using System.Net.Http.Headers; -using System.Net.Mime; -using System.Text; -using Emby.Server.Implementations.EntryPoints; -using Jellyfin.Api.Middleware; -using Jellyfin.Database.Implementations; -using Jellyfin.LiveTv.Extensions; -using Jellyfin.LiveTv.Recordings; -using Jellyfin.MediaEncoding.Hls.Extensions; -using Jellyfin.Networking; -using Jellyfin.Networking.HappyEyeballs; -using Jellyfin.Server.Extensions; -using Jellyfin.Server.HealthChecks; -using Jellyfin.Server.Implementations.Extensions; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Extensions; -using MediaBrowser.XbmcMetadata; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.StaticFiles; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.FileProviders; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Primitives; -using Prometheus; - namespace Jellyfin.Server { + using System; + using System.IO; + using System.Net; + using System.Net.Http; + using System.Net.Http.Headers; + using System.Net.Mime; + using System.Text; + using Emby.Server.Implementations.EntryPoints; + using Jellyfin.Api.Middleware; + using Jellyfin.Database.Implementations; + using Jellyfin.LiveTv.Extensions; + using Jellyfin.LiveTv.Recordings; + using Jellyfin.MediaEncoding.Hls.Extensions; + using Jellyfin.Networking; + using Jellyfin.Networking.HappyEyeballs; + using Jellyfin.Server.Extensions; + using Jellyfin.Server.HealthChecks; + using Jellyfin.Server.Implementations.Extensions; + using MediaBrowser.Common.Net; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Extensions; + using MediaBrowser.XbmcMetadata; + using Microsoft.AspNetCore.Builder; + using Microsoft.AspNetCore.Hosting; + using Microsoft.AspNetCore.StaticFiles; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.DependencyInjection; + using Microsoft.Extensions.FileProviders; + using Microsoft.Extensions.Hosting; + using Microsoft.Extensions.Primitives; + using Prometheus; + /// /// Startup configuration for the Kestrel webhost. /// diff --git a/Jellyfin.Server/StartupOptions.cs b/Jellyfin.Server/StartupOptions.cs index 340996d9..45a00c6b 100644 --- a/Jellyfin.Server/StartupOptions.cs +++ b/Jellyfin.Server/StartupOptions.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using CommandLine; -using Emby.Server.Implementations; -using static MediaBrowser.Controller.Extensions.ConfigurationExtensions; - namespace Jellyfin.Server { + using System.Collections.Generic; + using CommandLine; + using Emby.Server.Implementations; + using static MediaBrowser.Controller.Extensions.ConfigurationExtensions; + /// /// Class used by CommandLine package when parsing the command line arguments. /// diff --git a/Jellyfin.Server/obj/Debug/net10.0/Jellyfin.Server.csproj.AssemblyReference.cache b/Jellyfin.Server/obj/Debug/net10.0/Jellyfin.Server.csproj.AssemblyReference.cache index 94a0d7fa77a0c5c056e7cc86edc26e21794dd947..be91f5a62606558445162e901e7a20e61dbc8dc3 100644 GIT binary patch delta 3223 zcmb_eL2MgE6!kcyxNhtwt_`F~9Vc~YT_qD+iAo5HgkvX=l7ytO0&T6(wKH`$tamrF z>ktDOf)Xu40-;J3LPDtAdW9RR#04TQ}v)P{dz-9yV*QO1Ce}Mf4 zC_2t=#W|HraSBRaK!T9J#*47L0;jXGfU-zbIhB`0C7I&IWE`b(nWTu+NEn8j+rSk; z0LJuyv7zivOtk9^(X`B(V z5IIBUmmQs;ot{fWa4+T+6=mVYoT&0y1e|2S{tVdxKJuQuhYXGe39xtjw!h1dhJO3{ zDz(ua0}vu_z2YNZZ8+S~l%irTT}q8{z=)O6DcxO65(Knw0b`Pw&S6ZmYZz1S-jmPj z;2B85*|AP`7^6 zBBFKT)jW*hysSzY%*ogDCbu5eqc-4NAAw;w93GCm2*5EoH<^e@7)52d)Xfa?SpR?x z%uJ3Y=drX(+d)an8D&ivT-6C^W>quRF@^<86x+FV>5fh@mx&+-o5EIXnlgdwF{hPX zu`zSJXHC?$B&HDyaoUfcXIWuiNtWpGr>(msk(UuA%sRp~4c3&AeOAS-+d`hUX^5lk!#1c^(Rm?zDl+pLmpP%bxJ5i~Gfin_z-l}*r7AEyd$V9bS348r|1rlgO zrM%AM1P<3#q2^=-Ua}YPl23a&$W{B(Ok&UcwflbIb$6(%y6zRRVO}pNRbmuscj*z$ zqO61s=7pX=e6#dCIjOx3WQII&1xTyiTjITOjl*}&QUev3MJqfvfu(m8gkecEYZ@yW zPS&C-jm6!+G4jLy$o161^uGG=+g{Rk^l0&?u5>MCh)(>W(!?LqC;m_^i22j`` zykkyENWx=VZluVt@?L!T4c{KmeBhMJMwcX!T-Uh7Xtvm+jkP7E9 zpXF749UXW4UgxP_lUq-K-KEjXKy$S`bTTs7fJxr9OYXtr~mo>`sXF zBo(}ff%GAY7ZE)5B4HITMNxOw@KXTy5p`n=PYGUKwk&|MP+G5ryR!z}1 zn8%2%6IYk96jWnax2)#cZ{){MZ1%!UApz#|`pCU z{hvdrgYe-&0_N4NT6^?K6ZDttr%9DRra8d7uphdcEb=EmUD@-S=_>i(1Y zscq)|Hj~r)j+GpDp%b@m4#Y0=TDWEoL(4qvzazpPfwJe={}6zBv8Qbw^6xb%2(L=rJ8aARb}85rd>>9?kLkF|f2OgpXc1%c diff --git a/MediaBrowser.Common/Configuration/ConfigurationStore.cs b/MediaBrowser.Common/Configuration/ConfigurationStore.cs index 371fdcab..7d4277bc 100644 --- a/MediaBrowser.Common/Configuration/ConfigurationStore.cs +++ b/MediaBrowser.Common/Configuration/ConfigurationStore.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; - namespace MediaBrowser.Common.Configuration { +#nullable disable + + using System; + /// /// Describes a single entry in the application configuration. /// diff --git a/MediaBrowser.Common/Configuration/ConfigurationUpdateEventArgs.cs b/MediaBrowser.Common/Configuration/ConfigurationUpdateEventArgs.cs index 5d96fdaf..aaf3858d 100644 --- a/MediaBrowser.Common/Configuration/ConfigurationUpdateEventArgs.cs +++ b/MediaBrowser.Common/Configuration/ConfigurationUpdateEventArgs.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace MediaBrowser.Common.Configuration { + using System; + /// /// for the ConfigurationUpdated event. /// diff --git a/MediaBrowser.Common/Configuration/EncodingConfigurationExtensions.cs b/MediaBrowser.Common/Configuration/EncodingConfigurationExtensions.cs index 099c6c7a..89c76f18 100644 --- a/MediaBrowser.Common/Configuration/EncodingConfigurationExtensions.cs +++ b/MediaBrowser.Common/Configuration/EncodingConfigurationExtensions.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.IO; -using MediaBrowser.Model.Configuration; - namespace MediaBrowser.Common.Configuration { + using System; + using System.IO; + using MediaBrowser.Model.Configuration; + /// /// Class containing extension methods for working with the encoding configuration. /// diff --git a/MediaBrowser.Common/Configuration/IConfigurationFactory.cs b/MediaBrowser.Common/Configuration/IConfigurationFactory.cs index eedb5fc0..aa2c58b3 100644 --- a/MediaBrowser.Common/Configuration/IConfigurationFactory.cs +++ b/MediaBrowser.Common/Configuration/IConfigurationFactory.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; - namespace MediaBrowser.Common.Configuration { + using System.Collections.Generic; + /// /// Provides an interface to retrieve a configuration store. Classes with this interface are scanned for at /// application start to dynamically register configuration for various modules/plugins. diff --git a/MediaBrowser.Common/Events/EventHelper.cs b/MediaBrowser.Common/Events/EventHelper.cs index 57a85c67..b968e873 100644 --- a/MediaBrowser.Common/Events/EventHelper.cs +++ b/MediaBrowser.Common/Events/EventHelper.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.Common.Events { + using System; + using System.Threading.Tasks; + using Microsoft.Extensions.Logging; + /// /// Class EventHelper. /// diff --git a/MediaBrowser.Common/Extensions/BaseExtensions.cs b/MediaBrowser.Common/Extensions/BaseExtensions.cs index a7b957e5..315ba19b 100644 --- a/MediaBrowser.Common/Extensions/BaseExtensions.cs +++ b/MediaBrowser.Common/Extensions/BaseExtensions.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Security.Cryptography; -using System.Text; -using System.Text.RegularExpressions; - namespace MediaBrowser.Common.Extensions { + using System; + using System.Security.Cryptography; + using System.Text; + using System.Text.RegularExpressions; + /// /// Class BaseExtensions. /// diff --git a/MediaBrowser.Common/Extensions/HttpContextExtensions.cs b/MediaBrowser.Common/Extensions/HttpContextExtensions.cs index 799da80d..36426340 100644 --- a/MediaBrowser.Common/Extensions/HttpContextExtensions.cs +++ b/MediaBrowser.Common/Extensions/HttpContextExtensions.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Net; -using Microsoft.AspNetCore.Http; - namespace MediaBrowser.Common.Extensions { + using System.Net; + using Microsoft.AspNetCore.Http; + /// /// Static class containing extension methods for . /// diff --git a/MediaBrowser.Common/Extensions/MethodNotAllowedException.cs b/MediaBrowser.Common/Extensions/MethodNotAllowedException.cs index 61cc484b..c8f897ac 100644 --- a/MediaBrowser.Common/Extensions/MethodNotAllowedException.cs +++ b/MediaBrowser.Common/Extensions/MethodNotAllowedException.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace MediaBrowser.Common.Extensions { + using System; + /// /// Class MethodNotAllowedException. /// diff --git a/MediaBrowser.Common/Extensions/ProcessExtensions.cs b/MediaBrowser.Common/Extensions/ProcessExtensions.cs index 1b06bc3f..2002049c 100644 --- a/MediaBrowser.Common/Extensions/ProcessExtensions.cs +++ b/MediaBrowser.Common/Extensions/ProcessExtensions.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Diagnostics; -using System.Threading; -using System.Threading.Tasks; - namespace MediaBrowser.Common.Extensions { + using System; + using System.Diagnostics; + using System.Threading; + using System.Threading.Tasks; + /// /// Extension methods for . /// diff --git a/MediaBrowser.Common/Extensions/ResourceNotFoundException.cs b/MediaBrowser.Common/Extensions/ResourceNotFoundException.cs index bd88bb6d..a43b3132 100644 --- a/MediaBrowser.Common/Extensions/ResourceNotFoundException.cs +++ b/MediaBrowser.Common/Extensions/ResourceNotFoundException.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace MediaBrowser.Common.Extensions { + using System; + /// /// Class ResourceNotFoundException. /// diff --git a/MediaBrowser.Common/FfmpegException.cs b/MediaBrowser.Common/FfmpegException.cs index f4dce670..9f80ee15 100644 --- a/MediaBrowser.Common/FfmpegException.cs +++ b/MediaBrowser.Common/FfmpegException.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace MediaBrowser.Common { + using System; + /// /// Represents errors that occur during interaction with FFmpeg. /// diff --git a/MediaBrowser.Common/IApplicationHost.cs b/MediaBrowser.Common/IApplicationHost.cs index 49660daa..24641cf7 100644 --- a/MediaBrowser.Common/IApplicationHost.cs +++ b/MediaBrowser.Common/IApplicationHost.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Reflection; -using Microsoft.Extensions.DependencyInjection; - namespace MediaBrowser.Common { + using System; + using System.Collections.Generic; + using System.Reflection; + using Microsoft.Extensions.DependencyInjection; + /// /// Delegate used with GetExports{T}. /// diff --git a/MediaBrowser.Common/Net/INetworkManager.cs b/MediaBrowser.Common/Net/INetworkManager.cs index 4e890fc0..0b8db145 100644 --- a/MediaBrowser.Common/Net/INetworkManager.cs +++ b/MediaBrowser.Common/Net/INetworkManager.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Net; -using System.Net.NetworkInformation; -using MediaBrowser.Model.Net; -using Microsoft.AspNetCore.Http; - namespace MediaBrowser.Common.Net { + using System; + using System.Collections.Generic; + using System.Diagnostics.CodeAnalysis; + using System.Net; + using System.Net.NetworkInformation; + using MediaBrowser.Model.Net; + using Microsoft.AspNetCore.Http; + /// /// Interface for the NetworkManager class. /// diff --git a/MediaBrowser.Common/Net/NetworkConfigurationExtensions.cs b/MediaBrowser.Common/Net/NetworkConfigurationExtensions.cs index b74c53b7..9045a6fd 100644 --- a/MediaBrowser.Common/Net/NetworkConfigurationExtensions.cs +++ b/MediaBrowser.Common/Net/NetworkConfigurationExtensions.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Common.Configuration; - namespace MediaBrowser.Common.Net; +using MediaBrowser.Common.Configuration; + /// /// Defines the . /// diff --git a/MediaBrowser.Common/Net/NetworkConfigurationFactory.cs b/MediaBrowser.Common/Net/NetworkConfigurationFactory.cs index b3953fbc..6feed87f 100644 --- a/MediaBrowser.Common/Net/NetworkConfigurationFactory.cs +++ b/MediaBrowser.Common/Net/NetworkConfigurationFactory.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Common.Net; + using System.Collections.Generic; using MediaBrowser.Common.Configuration; -namespace MediaBrowser.Common.Net; - /// /// Defines the . /// diff --git a/MediaBrowser.Common/Net/NetworkConfigurationStore.cs b/MediaBrowser.Common/Net/NetworkConfigurationStore.cs index ac8fbbfa..27077d31 100644 --- a/MediaBrowser.Common/Net/NetworkConfigurationStore.cs +++ b/MediaBrowser.Common/Net/NetworkConfigurationStore.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Common.Configuration; - namespace MediaBrowser.Common.Net; +using MediaBrowser.Common.Configuration; + /// /// A configuration that stores network related settings. /// diff --git a/MediaBrowser.Common/Net/NetworkConstants.cs b/MediaBrowser.Common/Net/NetworkConstants.cs index 9a254cb4..bda22dd3 100644 --- a/MediaBrowser.Common/Net/NetworkConstants.cs +++ b/MediaBrowser.Common/Net/NetworkConstants.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Net; - namespace MediaBrowser.Common.Net; +using System.Net; + /// /// Networking constants. /// diff --git a/MediaBrowser.Common/Net/NetworkUtils.cs b/MediaBrowser.Common/Net/NetworkUtils.cs index e721ac22..3d4ad9bf 100644 --- a/MediaBrowser.Common/Net/NetworkUtils.cs +++ b/MediaBrowser.Common/Net/NetworkUtils.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Common.Net; + using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; @@ -12,8 +14,6 @@ using System.Text.RegularExpressions; using Jellyfin.Extensions; using MediaBrowser.Model.Net; -namespace MediaBrowser.Common.Net; - /// /// Defines the . /// diff --git a/MediaBrowser.Common/Net/RemoteAccessPolicyResult.cs b/MediaBrowser.Common/Net/RemoteAccessPolicyResult.cs index ebc02212..669d967d 100644 --- a/MediaBrowser.Common/Net/RemoteAccessPolicyResult.cs +++ b/MediaBrowser.Common/Net/RemoteAccessPolicyResult.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace MediaBrowser.Common.Net; +using System; + /// /// Result of . /// diff --git a/MediaBrowser.Common/Plugins/BasePlugin.cs b/MediaBrowser.Common/Plugins/BasePlugin.cs index a0202c8c..2839d716 100644 --- a/MediaBrowser.Common/Plugins/BasePlugin.cs +++ b/MediaBrowser.Common/Plugins/BasePlugin.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.IO; -using System.Reflection; -using MediaBrowser.Model.Plugins; - namespace MediaBrowser.Common.Plugins { +#nullable disable + + using System; + using System.IO; + using System.Reflection; + using MediaBrowser.Model.Plugins; + /// /// Provides a common base class for all plugins. /// diff --git a/MediaBrowser.Common/Plugins/IHasPluginConfiguration.cs b/MediaBrowser.Common/Plugins/IHasPluginConfiguration.cs index 02aa3eab..38997ea6 100644 --- a/MediaBrowser.Common/Plugins/IHasPluginConfiguration.cs +++ b/MediaBrowser.Common/Plugins/IHasPluginConfiguration.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using MediaBrowser.Model.Plugins; - namespace MediaBrowser.Common.Plugins { + using System; + using MediaBrowser.Model.Plugins; + /// /// Defines the . /// diff --git a/MediaBrowser.Common/Plugins/IPlugin.cs b/MediaBrowser.Common/Plugins/IPlugin.cs index 52a0db07..cda90ed9 100644 --- a/MediaBrowser.Common/Plugins/IPlugin.cs +++ b/MediaBrowser.Common/Plugins/IPlugin.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using MediaBrowser.Model.Plugins; - namespace MediaBrowser.Common.Plugins { +#nullable disable + + using System; + using MediaBrowser.Model.Plugins; + /// /// Defines the . /// diff --git a/MediaBrowser.Common/Plugins/IPluginManager.cs b/MediaBrowser.Common/Plugins/IPluginManager.cs index f6f6fb02..f6d82e29 100644 --- a/MediaBrowser.Common/Plugins/IPluginManager.cs +++ b/MediaBrowser.Common/Plugins/IPluginManager.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Threading.Tasks; -using MediaBrowser.Model.Plugins; -using MediaBrowser.Model.Updates; -using Microsoft.Extensions.DependencyInjection; - namespace MediaBrowser.Common.Plugins { + using System; + using System.Collections.Generic; + using System.Reflection; + using System.Threading.Tasks; + using MediaBrowser.Model.Plugins; + using MediaBrowser.Model.Updates; + using Microsoft.Extensions.DependencyInjection; + /// /// Defines the . /// diff --git a/MediaBrowser.Common/Plugins/LocalPlugin.cs b/MediaBrowser.Common/Plugins/LocalPlugin.cs index 7b230dfc..9b5dd897 100644 --- a/MediaBrowser.Common/Plugins/LocalPlugin.cs +++ b/MediaBrowser.Common/Plugins/LocalPlugin.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using MediaBrowser.Model.Plugins; - namespace MediaBrowser.Common.Plugins { + using System; + using System.Collections.Generic; + using MediaBrowser.Model.Plugins; + /// /// Local plugin class. /// diff --git a/MediaBrowser.Common/Plugins/PluginManifest.cs b/MediaBrowser.Common/Plugins/PluginManifest.cs index dca1804a..07db5620 100644 --- a/MediaBrowser.Common/Plugins/PluginManifest.cs +++ b/MediaBrowser.Common/Plugins/PluginManifest.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Text.Json.Serialization; -using MediaBrowser.Model.Plugins; - namespace MediaBrowser.Common.Plugins { + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + using MediaBrowser.Model.Plugins; + /// /// Defines a Plugin manifest file. /// diff --git a/MediaBrowser.Common/Providers/ProviderIdParsers.cs b/MediaBrowser.Common/Providers/ProviderIdParsers.cs index 051feb8e..6af7f1d6 100644 --- a/MediaBrowser.Common/Providers/ProviderIdParsers.cs +++ b/MediaBrowser.Common/Providers/ProviderIdParsers.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Diagnostics.CodeAnalysis; - namespace MediaBrowser.Common.Providers { + using System; + using System.Diagnostics.CodeAnalysis; + /// /// Parsers for provider ids. /// diff --git a/MediaBrowser.Common/RequiresSourceSerialisationAttribute.cs b/MediaBrowser.Common/RequiresSourceSerialisationAttribute.cs index 5f0eefc1..21d3113b 100644 --- a/MediaBrowser.Common/RequiresSourceSerialisationAttribute.cs +++ b/MediaBrowser.Common/RequiresSourceSerialisationAttribute.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace MediaBrowser.Common; +using System; + /// /// Marks a BaseItem as needing custom serialisation from the Data field of the db. /// diff --git a/MediaBrowser.Common/Updates/IInstallationManager.cs b/MediaBrowser.Common/Updates/IInstallationManager.cs index d3d56c89..d249a9c9 100644 --- a/MediaBrowser.Common/Updates/IInstallationManager.cs +++ b/MediaBrowser.Common/Updates/IInstallationManager.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Common.Plugins; -using MediaBrowser.Model.Updates; - namespace MediaBrowser.Common.Updates { + using System; + using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Common.Plugins; + using MediaBrowser.Model.Updates; + /// /// Defines the . /// diff --git a/MediaBrowser.Common/Updates/InstallationEventArgs.cs b/MediaBrowser.Common/Updates/InstallationEventArgs.cs index 19c3e914..5df5df98 100644 --- a/MediaBrowser.Common/Updates/InstallationEventArgs.cs +++ b/MediaBrowser.Common/Updates/InstallationEventArgs.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using MediaBrowser.Model.Updates; - namespace MediaBrowser.Common.Updates { +#nullable disable + + using System; + using MediaBrowser.Model.Updates; + /// /// Defines the . /// diff --git a/MediaBrowser.Common/obj/Debug/net10.0/MediaBrowser.Common.csproj.AssemblyReference.cache b/MediaBrowser.Common/obj/Debug/net10.0/MediaBrowser.Common.csproj.AssemblyReference.cache index 7294dcae44ad5e7941122cd1e3d6f07c9704a6cd..811cd4198a8084d90cdea3cf098f3ef55f9fdf9b 100644 GIT binary patch delta 1200 zcmb7DO-vI(6zq2N!%ZBY(h{40ehP^(Z$h#SJv4$X#kXR|v+Y78;) zW{6377eitKdeno4crila!NeF7B#leNthh>|QRlm# zlnkO{o!V}DMYXp(z|pc!wGx)E=oFj87{lhAmUFd-;c4hJ8sQnr)JEr<-6KAA^;&YC zFHbz)*iKHpH+E>UEHt~mr-bOC9eEh6Yima#z@ktegFfyqe{Kw7dv76IF>pW8=dj7N z+ACxB+U8%7hPhNY;;%L)7hbJ8Bkv5`&eM7*3h7m_H%wh(bm%wm@4QCuh&RTCD2Bm7cex%nvk x2pkr_zqs=t(|n>0J~gy>qW_N^b^X@{Ga&`eNf|i1KMK!+5&PKIRzp9#{{R_pgyaAK delta 160 zcmexbHz|>WjZv6^fq^l7@&+d9$sa^`CmOi0&Dy$f%ia8mRR)v)Te41ekm6;`pB%`n zJb8gA@5D|XDgC6(Jbjncq|$W#ywsB7lEl1}#G(` + + + MediaBrowser.Common + + + + + Policies for the API authorization. + + + + + Policy name for requiring first time setup or elevated privileges. + + + + + Policy name for requiring elevated privileges. + + + + + Policy name for allowing local access only. + + + + + Policy name for escaping schedule controls. + + + + + Policy name for requiring download permission. + + + + + Policy name for requiring first time setup or default permissions. + + + + + Policy name for requiring local access or elevated privileges. + + + + + Policy name for requiring (anonymous) LAN access. + + + + + Policy name for escaping schedule controls or requiring first time setup. + + + + + Policy name for accessing SyncPlay. + + + + + Policy name for creating a SyncPlay group. + + + + + Policy name for joining a SyncPlay group. + + + + + Policy name for accessing a SyncPlay group. + + + + + Policy name for accessing collection management. + + + + + Policy name for accessing LiveTV. + + + + + Policy name for managing LiveTV. + + + + + Policy name for accessing subtitles management. + + + + + Policy name for accessing lyric management. + + + + + Describes a single entry in the application configuration. + + + + + Gets or sets the unique identifier for the configuration. + + + + + Gets or sets the type used to store the data for this configuration entry. + + + + + for the ConfigurationUpdated event. + + + + + Initializes a new instance of the class. + + The configuration key. + The new configuration. + + + + Gets the key. + + The key. + + + + Gets the new configuration. + + The new configuration. + + + + Class containing extension methods for working with the encoding configuration. + + + + + Gets the encoding options. + + The configuration manager. + The encoding options. + + + + Retrieves the transcoding temp path from the encoding configuration, falling back to a default if no path + is specified in configuration. If the directory does not exist, it will be created. + + The configuration manager. + The transcoding temp path. + If the directory does not exist, and the caller does not have the required permission to create it. + If there is a custom path transcoding path specified, but it is invalid. + If the directory does not exist, and it also could not be created. + + + + Interface IApplicationPaths. + + + + + Gets the path to the program data folder. + + The program data path. + + + + Gets the path to the web UI resources folder. + + + This value is not relevant if the server is configured to not host any static web content. + + + + + Gets the path to the program system folder. + + The program data path. + + + + Gets the folder path to the data directory. + + The data directory. + + + + Gets the image cache path. + + The image cache path. + + + + Gets the path to the plugin directory. + + The plugins path. + + + + Gets the path to the plugin configurations directory. + + The plugin configurations path. + + + + Gets the path to the log directory. + + The log directory path. + + + + Gets the path to the application configuration root directory. + + The configuration directory path. + + + + Gets the path to the system configuration file. + + The system configuration file path. + + + + Gets the folder path to the cache directory. + + The cache directory. + + + + Gets the folder path to the temp directory within the cache folder. + + The temp directory. + + + + Gets the magic string used for virtual path manipulation. + + The magic string used for virtual path manipulation. + + + + Gets the path used for storing trickplay files. + + The trickplay path. + + + + Gets the path used for storing backup archives. + + The backup path. + + + + Checks and creates all known base paths. + + + + + Checks and creates the given path and adds it with a marker file if non existent. + + The path to check. + The common marker file name. + Check for other settings paths recursively. + + + + Provides an interface to retrieve a configuration store. Classes with this interface are scanned for at + application start to dynamically register configuration for various modules/plugins. + + + + + Get the configuration store for this module. + + The configuration store. + + + + Occurs when [configuration updating]. + + + + + Occurs when [configuration updated]. + + + + + Occurs when [named configuration updated]. + + + + + Gets the application paths. + + The application paths. + + + + Gets the configuration. + + The configuration. + + + + Saves the configuration. + + + + + Replaces the configuration. + + The new configuration. + + + + Manually pre-loads a factory so that it is available pre system initialisation. + + Class to register. + + + + Gets the configuration. + + The key. + System.Object. + + + + Gets the array of configuration stores. + + Array of ConfigurationStore. + + + + Gets the type of the configuration. + + The key. + Type. + + + + Saves the configuration. + + The key. + The configuration. + + + + Adds the parts. + + The factories. + + + + A configuration store that can be validated. + + + + + Validation method to be invoked before saving the configuration. + + The old configuration. + The new configuration. + + + + Class EventHelper. + + + + + Fires the event. + + The handler. + The sender. + The instance containing the event data. + The logger. + + + + Queues the event. + + Argument type for the handler. + The handler. + The sender. + The args. + The logger. + + + + Class BaseExtensions. + + + + + Pattern:
+ <(.|\\n)*?>
+ Explanation:
+ + ○ Match '<'.
+ ○ Loop lazily any number of times.
+ ○ 1st capture group.
+ ○ Match with 2 alternative expressions.
+ ○ Match any character other than '\n'.
+ ○ Match '\n'.
+ ○ Match '>'.
+
+
+
+ + + Strips the HTML. + + The HTML string. + . + + + + Gets the Md5. + + The string. + . + + + + Static class containing extension methods for . + + + + + Checks the origin of the HTTP context. + + The incoming HTTP context. + true if the request is coming from the same machine as is running the server, false otherwise. + + + + Extracts the remote IP address of the caller of the HTTP context. + + The HTTP context. + The remote caller IP address. + + + + Class MethodNotAllowedException. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The message. + + + + Extension methods for . + + + + + Asynchronously wait for the process to exit. + + The process to wait for. + The duration to wait before cancelling waiting for the task. + A task that will complete when the process has exited, cancellation has been requested, or an error occurs. + The timeout ended. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The message. + + + + Class ResourceNotFoundException. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The message. + + + + Represents errors that occur during interaction with FFmpeg. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a specified error message. + + The message that describes the error. + + + + Initializes a new instance of the class with a specified error message and a + reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + + The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if + no inner exception is specified. + + + + + Delegate used with GetExports{T}. + + Type to create. + New instance of type type. + + + + An interface to be implemented by the applications hosting a kernel. + + + + + Occurs when [has pending restart changed]. + + + + + Gets the name. + + The name. + + + + Gets the device identifier. + + The device identifier. + + + + Gets a value indicating whether this instance has pending changes requiring a restart. + + true if this instance has a pending restart; otherwise, false. + + + + Gets or sets a value indicating whether the application should restart. + + + + + Gets the application version. + + The application version. + + + + Gets or sets the service provider. + + + + + Gets the application version. + + The application version. + + + + Gets the application user agent. + + The application user agent. + + + + Gets the email address for use within a comment section of a user agent field. + Presently used to provide contact information to MusicBrainz service. + + + + + Gets all plugin assemblies which implement a custom rest api. + + An containing the plugin assemblies. + + + + Notifies the pending restart. + + + + + Gets the exports. + + The type. + If set to true [manage lifetime]. + . + + + + Gets the exports. + + The type. + Delegate function that gets called to create the object. + If set to true [manage lifetime]. + . + + + + Gets the export types. + + The type. + IEnumerable{Type}. + + + + Resolves this instance. + + The Type. + ``0. + + + + Initializes this instance. + + Instance of the interface. + + + + Interface for the NetworkManager class. + + + + + Event triggered on network changes. + + + + + Gets a value indicating whether IPv4 is enabled. + + + + + Gets a value indicating whether IPv6 is enabled. + + + + + Calculates the list of interfaces to use for Kestrel. + + A IReadOnlyList{IPData} object containing all the interfaces to bind. + If all the interfaces are specified, and none are excluded, it returns zero items + to represent any address. + When false, return or for all interfaces. + + + + Returns a list containing the loopback interfaces. + + IReadOnlyList{IPData}. + + + + Retrieves the bind address to use in system URLs. (Server Discovery, PlayTo, LiveTV, SystemInfo) + If no bind addresses are specified, an internal interface address is selected. + The priority of selection is as follows:- + + The value contained in the startup parameter --published-server-url. + + If the user specified custom subnet overrides, the correct subnet for the source address. + + If the user specified bind interfaces to use:- + The bind interface that contains the source subnet. + The first bind interface specified that suits best first the source's endpoint. eg. external or internal. + + If the source is from a public subnet address range and the user hasn't specified any bind addresses:- + The first public interface that isn't a loopback and contains the source subnet. + The first public interface that isn't a loopback. + The first internal interface that isn't a loopback. + + If the source is from a private subnet address range and the user hasn't specified any bind addresses:- + The first private interface that contains the source subnet. + The first private interface that isn't a loopback. + + If no interfaces meet any of these criteria, then a loopback address is returned. + + Interfaces that have been specifically excluded from binding are not used in any of the calculations. + + Source of the request. + Optional port returned, if it's part of an override. + IP address to use, or loopback address if all else fails. + + + + Retrieves the bind address to use in system URLs. (Server Discovery, PlayTo, LiveTV, SystemInfo) + If no bind addresses are specified, an internal interface address is selected. + + IP address of the request. + Optional port returned, if it's part of an override. + Optional boolean denoting if published server overrides should be ignored. Defaults to false. + IP address to use, or loopback address if all else fails. + + + + Retrieves the bind address to use in system URLs. (Server Discovery, PlayTo, LiveTV, SystemInfo) + If no bind addresses are specified, an internal interface address is selected. + (See . + + Source of the request. + Optional port returned, if it's part of an override. + IP address to use, or loopback address if all else fails. + + + + Returns true if the address is part of the user defined LAN. + + IP to check. + True if endpoint is within the LAN range. + + + + Returns true if the address is part of the user defined LAN. + + IP to check. + True if endpoint is within the LAN range. + + + + Attempts to convert the interface name to an IP address. + eg. "eth1", or "enp3s5". + + Interface name. + Resulting object's IP addresses, if successful. + Success of the operation. + + + + Returns all internal (LAN) bind interface addresses. + + An list of internal (LAN) interfaces addresses. + + + + Checks if has access to the server. + + IP address of the client. + The result of evaluating the access policy, Allow if it should be allowed. + + + + Registered http client names. + + + + + Gets the value for the default named http client which implements happy eyeballs. + + + + + Gets the value for the MusicBrainz named http client. + + + + + Gets the value for the DLNA named http client. + + + + + Non happy eyeballs implementation. + + + + + Defines the . + + + + + The default value for . + + + + + The default value for and . + + + + + Gets or sets a value used to specify the URL prefix that your Jellyfin instance can be accessed at. + + + + + Gets or sets a value indicating whether to use HTTPS. + + + In order for HTTPS to be used, in addition to setting this to true, valid values must also be + provided for and . + + + + + Gets or sets a value indicating whether the server should force connections over HTTPS. + + + + + Gets or sets the filesystem path of an X.509 certificate to use for SSL. + + + + + Gets or sets the password required to access the X.509 certificate data in the file specified by . + + + + + Gets or sets the internal HTTP server port. + + The HTTP server port. + + + + Gets or sets the internal HTTPS server port. + + The HTTPS server port. + + + + Gets or sets the public HTTP port. + + The public HTTP port. + + + + Gets or sets the public HTTPS port. + + The public HTTPS port. + + + + Gets or sets a value indicating whether Autodiscovery is enabled. + + + + + Gets or sets a value indicating whether to enable automatic port forwarding. + + + + + Gets or sets a value indicating whether IPv6 is enabled. + + + + + Gets or sets a value indicating whether IPv6 is enabled. + + + + + Gets or sets a value indicating whether access from outside of the LAN is permitted. + + + + + Gets or sets the subnets that are deemed to make up the LAN. + + + + + Gets or sets the interface addresses which Jellyfin will bind to. If empty, all interfaces will be used. + + + + + Gets or sets the known proxies. + + + + + Gets or sets a value indicating whether address names that match should be ignored for the purposes of binding. + + + + + Gets or sets a value indicating the interface name prefixes that should be ignored. The list can be comma separated and values are case-insensitive. . + + + + + Gets or sets a value indicating whether the published server uri is based on information in HTTP requests. + + + + + Gets or sets the PublishedServerUriBySubnet + Gets or sets PublishedServerUri to advertise for specific subnets. + + + + + Gets or sets the filter for remote IP connectivity. Used in conjunction with . + + + + + Gets or sets a value indicating whether contains a blacklist or a whitelist. Default is a whitelist. + + + + + Defines the . + + + + + Retrieves the network configuration. + + The . + The . + + + + Defines the . + + + + + The GetConfigurations. + + The . + + + + A configuration that stores network related settings. + + + + + The name of the configuration in the storage. + + + + + Initializes a new instance of the class. + + + + + Networking constants. + + + + + IPv4 mask bytes. + + + + + IPv6 mask bytes. + + + + + Minimum IPv4 prefix size. + + + + + Minimum IPv6 prefix size. + + + + + Whole IPv4 address space. + + + + + Whole IPv6 address space. + + + + + IPv4 Loopback as defined in RFC 5735. + + + + + IPv4 private class A as defined in RFC 1918. + + + + + IPv4 private class B as defined in RFC 1918. + + + + + IPv4 private class C as defined in RFC 1918. + + + + + IPv4 Link-Local as defined in RFC 3927. + + + + + IPv6 loopback as defined in RFC 4291. + + + + + IPv6 site local as defined in RFC 4291. + + + + + IPv6 unique local as defined in RFC 4193. + + + + + Defines the . + + + + + Pattern:
+ (?im)^(?!:\\/\\/)(?=.{1,255}$)((.{1,63}\\.){0,127}(?![0-9]*$)[a-z0-9-]+\\.?)(:(\\d){1,5}){0,1}$
+ Options:
+ RegexOptions.IgnoreCase
+ Explanation:
+ + ○ Match if at the beginning of a line.
+ ○ Zero-width negative lookahead.
+ ○ Match the string "://".
+ ○ Zero-width positive lookahead.
+ ○ Match a character other than '\n' greedily at least 1 and at most 255 times.
+ ○ Match if at the end of a line.
+ ○ 1st capture group.
+ ○ Loop greedily at most 127 times.
+ ○ 2nd capture group.
+ ○ Match a character other than '\n' greedily at least 1 and at most 63 times.
+ ○ Match '.'.
+ ○ Zero-width negative lookahead.
+ ○ Match a character in the set [0-9] atomically any number of times.
+ ○ Match if at the end of a line.
+ ○ Match a character in the set [\-0-9A-Za-z\u0130\u212A] greedily at least once.
+ ○ Match '.' greedily, optionally.
+ ○ Optional (greedy).
+ ○ 3rd capture group.
+ ○ Match ':'.
+ ○ Loop greedily at least 1 and at most 5 times.
+ ○ 4th capture group.
+ ○ Match a Unicode digit.
+ ○ Match if at the end of a line.
+
+
+
+ + + Returns true if the IPAddress contains an IP6 Local link address. + + IPAddress object to check. + True if it is a local link address. + + See https://stackoverflow.com/questions/6459928/explain-the-instance-properties-of-system-net-ipaddress + it appears that the IPAddress.IsIPv6LinkLocal is out of date. + + + + + Convert a subnet mask in CIDR notation to a dotted decimal string value. IPv4 only. + + Subnet mask in CIDR notation. + IPv4 or IPv6 family. + String value of the subnet mask in dotted decimal notation. + + + + Convert a subnet mask in CIDR notation to a dotted decimal string value. IPv4 only. + + Subnet mask in CIDR notation. + IPv4 or IPv6 family. + String value of the subnet mask in dotted decimal notation. + + + + Convert a subnet mask to a CIDR. IPv4 only. + https://stackoverflow.com/questions/36954345/get-cidr-from-netmask. + + Subnet mask. + Byte CIDR representing the mask. + + + + Converts an IPAddress into a string. + IPv6 addresses are returned in [ ], with their scope removed. + + Address to convert. + URI safe conversion of the address. + + + + Try parsing an array of strings into objects, respecting exclusions. + Elements without a subnet mask will be represented as with a single IP. + + Input string array to be parsed. + Collection of . + Boolean signaling if negated or not negated values should be parsed. + True if parsing was successful. + + + + Try parsing a string into an , respecting exclusions. + Inputs without a subnet mask will be represented as with a single IP. + + Input string to be parsed. + An . + Boolean signaling if negated or not negated values should be parsed. + True if parsing was successful. + + + + Attempts to parse a host span. + + Host name to parse. + Object representing the span, if it has successfully been parsed. + true if IPv4 is enabled. + true if IPv6 is enabled. + true if the parsing is successful, false if not. + + + + Gets the broadcast address for a . + + The . + The broadcast address. + + + + Check if a subnet contains an address. This method also handles IPv4 mapped to IPv6 addresses. + + The . + The . + Whether the supplied IP is in the supplied network. + + + + Result of . + + + + + The connection should be allowed. + + + + + The connection should be rejected since it is not from a local IP and remote access is disabled. + + + + + The connection should be rejected since it is from a blocklisted IP. + + + + + The connection should be rejected since it is from a remote IP that is not in the allowlist. + + + + + Provides a common base class for all plugins. + + + + + Gets the name of the plugin. + + The name. + + + + Gets the description. + + The description. + + + + Gets the unique id. + + The unique id. + + + + Gets the plugin version. + + The version. + + + + Gets the path to the assembly file. + + The assembly file path. + + + + Gets the full path to the data folder, where the plugin can store any miscellaneous files needed. + + The data folder path. + + + + Gets a value indicating whether the plugin can be uninstalled. + + + + + Gets the plugin info. + + PluginInfo. + + + + Called just before the plugin is uninstalled from the server. + + + + + + + + + + + Provides a common base class for all plugins. + + The type of the T configuration type. + + + + The configuration sync lock. + + + + + The configuration save lock. + + + + + The configuration. + + + + + Initializes a new instance of the class. + + The application paths. + The XML serializer. + + + + Gets the application paths. + + The application paths. + + + + Gets the XML serializer. + + The XML serializer. + + + + Gets the type of configuration this plugin uses. + + The type of the configuration. + + + + Gets or sets the event handler that is triggered when this configuration changes. + + + + + Gets the name the assembly file. + + The name of the assembly file. + + + + Gets or sets the plugin configuration. + + The configuration. + + + + Gets the name of the configuration file. Subclasses should override. + + The name of the configuration file. + + + + Gets the full path to the configuration file. + + The configuration file path. + + + + Gets the plugin configuration. + + The configuration. + + + + Saves the current configuration to the file system. + + Configuration to save. + + + + Saves the current configuration to the file system. + + + + + + + + + + + Defines the . + + + + + Gets the type of configuration this plugin uses. + + + + + Gets the plugin's configuration. + + + + + Completely overwrites the current configuration with a new copy. + + The configuration. + + + + Defines the . + + + + + Gets the name of the plugin. + + + + + Gets the Description. + + + + + Gets the unique id. + + + + + Gets the plugin version. + + + + + Gets the path to the assembly file. + + + + + Gets a value indicating whether the plugin can be uninstalled. + + + + + Gets the full path to the data folder, where the plugin can store any miscellaneous files needed. + + + + + Gets the . + + PluginInfo. + + + + Called when just before the plugin is uninstalled from the server. + + + + + Defines the . + + + + + Gets the Plugins. + + + + + Creates the plugins. + + + + + Returns all the assemblies. + + An IEnumerable{Assembly}. + + + + Registers the plugin's services with the DI. + Note: DI is not yet instantiated yet. + + A instance. + + + + Saves the manifest back to disk. + + The to save. + The path where to save the manifest. + True if successful. + + + + Generates a manifest from repository data. + + The used to generate a manifest. + Version to be installed. + The path where to save the manifest. + Initial status of the plugin. + True if successful. + + + + Imports plugin details from a folder. + + Folder of the plugin. + + + + Disable the plugin. + + The of the plug to disable. + + + + Disable the plugin. + + The of the plug to disable. + + + + Enables the plugin, disabling all other versions. + + The of the plug to disable. + + + + Attempts to find the plugin with and id of . + + Id of plugin. + The version of the plugin to locate. + A if located, or null if not. + + + + Removes the plugin. + + The plugin. + Outcome of the operation. + + + + Local plugin class. + + + + + Initializes a new instance of the class. + + The plugin path. + True if Jellyfin supports this version of the plugin. + The manifest record for this plugin, or null if one does not exist. + + + + Gets the plugin id. + + + + + Gets the plugin name. + + + + + Gets the plugin version. + + + + + Gets the plugin path. + + + + + Gets or sets the list of dll files for this plugin. + + + + + Gets or sets the instance of this plugin. + + + + + Gets a value indicating whether Jellyfin supports this version of the plugin, and it's enabled. + + + + + Gets a value indicating whether the plugin has a manifest. + + + + + Compare two . + + The first item. + The second item. + Comparison result. + + + + Returns the plugin information. + + A instance containing the information. + + + + + + + + + + + + + Defines a Plugin manifest file. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the category of the plugin. + + + + + Gets or sets the changelog information. + + + + + Gets or sets the description of the plugin. + + + + + Gets or sets the Global Unique Identifier for the plugin. + + + + + Gets or sets the Name of the plugin. + + + + + Gets or sets an overview of the plugin. + + + + + Gets or sets the owner of the plugin. + + + + + Gets or sets the compatibility version for the plugin. + + + + + Gets or sets the timestamp of the plugin. + + + + + Gets or sets the Version number of the plugin. + + + + + Gets or sets a value indicating the operational status of this plugin. + + + + + Gets or sets a value indicating whether this plugin should automatically update. + + + + + Gets or sets the ImagePath + Gets or sets a value indicating whether this plugin has an image. + Image must be located in the local plugin folder. + + + + + Gets or sets the collection of assemblies that should be loaded. + Paths are considered relative to the plugin folder. + + + + + Parsers for provider ids. + + + + + Parses an IMDb id from a string. + + The text to parse. + The parsed IMDb id. + True if parsing was successful, false otherwise. + + + + Parses an TMDb id from a movie url. + + The text with the url to parse. + The parsed TMDb id. + True if parsing was successful, false otherwise. + + + + Parses an TMDb id from a series url. + + The text with the url to parse. + The parsed TMDb id. + True if parsing was successful, false otherwise. + + + + Parses an TVDb id from a url. + + The text with the url to parse. + The parsed TVDb id. + True if parsing was successful, false otherwise. + + + + + + + Marks a BaseItem as needing custom serialisation from the Data field of the db. + + + + + Defines the . + + + + + Gets the completed installations. + + + + + Parses a plugin manifest at the supplied URL. + + Name of the repository. + The URL to query. + Filter out incompatible plugins. + The cancellation token. + Task{IReadOnlyList{PackageInfo}}. + + + + Gets all available packages that are supported by this version. + + The cancellation token. + Task{IReadOnlyList{PackageInfo}}. + + + + Returns all plugins matching the requirements. + + The available packages. + The name of the plugin. + The id of the plugin. + The version of the plugin. + All plugins matching the requirements. + + + + Returns all compatible versions ordered from newest to oldest. + + The available packages. + The name. + The id of the plugin. + The minimum required version of the plugin. + The specific version of the plugin to install. + All compatible versions ordered from newest to oldest. + + + + Returns the available compatible plugin updates. + + The cancellation token. + The available plugin updates. + + + + Installs the package. + + The package. + The cancellation token. + . + + + + Uninstalls a plugin. + + The plugin. + + + + Cancels the installation. + + The id of the package that is being installed. + Returns true if the install was cancelled. + + + + Defines the . + + + + + Gets or sets the . + + + + + Gets or sets the . + + + + Custom -derived type for the StripHtmlRegex method. + + + Cached, thread-safe singleton instance. + + + Initializes the instance. + + + Provides a factory for creating instances to be used by methods on . + + + Creates an instance of a used by methods on . + + + Provides the runner that contains the custom logic implementing the specified regular expression. + + + Scan the starting from base.runtextstart for the next match. + The text being scanned by the regular expression. + + + Search starting from base.runtextpos for the next location a match could possibly start. + The text being scanned by the regular expression. + true if a possible match was found; false if no more matches are possible. + + + Determine whether at base.runtextpos is a match for the regular expression. + The text being scanned by the regular expression. + true if the regular expression matches at the current position; otherwise, false. + + + Custom -derived type for the FqdnGeneratedRegex method. + + + Cached, thread-safe singleton instance. + + + Initializes the instance. + + + Provides a factory for creating instances to be used by methods on . + + + Creates an instance of a used by methods on . + + + Provides the runner that contains the custom logic implementing the specified regular expression. + + + Scan the starting from base.runtextstart for the next match. + The text being scanned by the regular expression. + + + Search starting from base.runtextpos for the next location a match could possibly start. + The text being scanned by the regular expression. + true if a possible match was found; false if no more matches are possible. + + + Determine whether at base.runtextpos is a match for the regular expression. + The text being scanned by the regular expression. + true if the regular expression matches at the current position; otherwise, false. + + + Helper methods used by generated -derived implementations. + + + Default timeout value set in , or if none was set. + + + Whether is non-infinite. + + + Pops 2 values from the backtracking stack. + + + Pushes 1 value onto the backtracking stack. + + + Pushes 2 values onto the backtracking stack. + + + Pushes 3 values onto the backtracking stack. + + + Supports searching for characters in or not in "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzİK". + +
+
diff --git a/MediaBrowser.Controller/Authentication/AuthenticationException.cs b/MediaBrowser.Controller/Authentication/AuthenticationException.cs index 906a0e23..e9e876e7 100644 --- a/MediaBrowser.Controller/Authentication/AuthenticationException.cs +++ b/MediaBrowser.Controller/Authentication/AuthenticationException.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace MediaBrowser.Controller.Authentication { + using System; + /// /// The exception that is thrown when an attempt to authenticate fails. /// diff --git a/MediaBrowser.Controller/Authentication/AuthenticationResult.cs b/MediaBrowser.Controller/Authentication/AuthenticationResult.cs index d10a20de..e486ace5 100644 --- a/MediaBrowser.Controller/Authentication/AuthenticationResult.cs +++ b/MediaBrowser.Controller/Authentication/AuthenticationResult.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Authentication; + #nullable disable using MediaBrowser.Model.Dto; -namespace MediaBrowser.Controller.Authentication; - /// /// A class representing an authentication result. /// diff --git a/MediaBrowser.Controller/BaseItemManager/BaseItemManager.cs b/MediaBrowser.Controller/BaseItemManager/BaseItemManager.cs index 3d403b09..72cec9bf 100644 --- a/MediaBrowser.Controller/BaseItemManager/BaseItemManager.cs +++ b/MediaBrowser.Controller/BaseItemManager/BaseItemManager.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Jellyfin.Extensions; -using MediaBrowser.Controller.Channels; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.Configuration; - namespace MediaBrowser.Controller.BaseItemManager { + using System; + using Jellyfin.Extensions; + using MediaBrowser.Controller.Channels; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Library; + using MediaBrowser.Model.Configuration; + /// public class BaseItemManager : IBaseItemManager { diff --git a/MediaBrowser.Controller/BaseItemManager/IBaseItemManager.cs b/MediaBrowser.Controller/BaseItemManager/IBaseItemManager.cs index 7f7360e3..8383f27d 100644 --- a/MediaBrowser.Controller/BaseItemManager/IBaseItemManager.cs +++ b/MediaBrowser.Controller/BaseItemManager/IBaseItemManager.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Controller.Entities; -using MediaBrowser.Model.Configuration; - namespace MediaBrowser.Controller.BaseItemManager { + using MediaBrowser.Controller.Entities; + using MediaBrowser.Model.Configuration; + /// /// The BaseItem manager. /// diff --git a/MediaBrowser.Controller/Channels/IRequiresMediaInfoCallback.cs b/MediaBrowser.Controller/Channels/IRequiresMediaInfoCallback.cs index 486b3316..8080a0d0 100644 --- a/MediaBrowser.Controller/Channels/IRequiresMediaInfoCallback.cs +++ b/MediaBrowser.Controller/Channels/IRequiresMediaInfoCallback.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Model.Dto; - namespace MediaBrowser.Controller.Channels { + using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Model.Dto; + /// /// The channel requires a media info callback. /// diff --git a/MediaBrowser.Controller/Chapters/IChapterManager.cs b/MediaBrowser.Controller/Chapters/IChapterManager.cs index 3a0e4665..dcb271d9 100644 --- a/MediaBrowser.Controller/Chapters/IChapterManager.cs +++ b/MediaBrowser.Controller/Chapters/IChapterManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Chapters; + using System; using System.Collections.Generic; using System.Threading; @@ -10,8 +12,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Controller.Chapters; - /// /// Interface IChapterManager. /// diff --git a/MediaBrowser.Controller/ClientEvent/ClientEventLogger.cs b/MediaBrowser.Controller/ClientEvent/ClientEventLogger.cs index a7f74297..ff2dc686 100644 --- a/MediaBrowser.Controller/ClientEvent/ClientEventLogger.cs +++ b/MediaBrowser.Controller/ClientEvent/ClientEventLogger.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.IO; -using System.Threading.Tasks; - namespace MediaBrowser.Controller.ClientEvent { + using System; + using System.IO; + using System.Threading.Tasks; + /// public class ClientEventLogger : IClientEventLogger { diff --git a/MediaBrowser.Controller/ClientEvent/IClientEventLogger.cs b/MediaBrowser.Controller/ClientEvent/IClientEventLogger.cs index a7bc511a..1f0d04aa 100644 --- a/MediaBrowser.Controller/ClientEvent/IClientEventLogger.cs +++ b/MediaBrowser.Controller/ClientEvent/IClientEventLogger.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; -using System.Threading.Tasks; - namespace MediaBrowser.Controller.ClientEvent { + using System.IO; + using System.Threading.Tasks; + /// /// The client event logger. /// diff --git a/MediaBrowser.Controller/Configuration/IServerConfigurationManager.cs b/MediaBrowser.Controller/Configuration/IServerConfigurationManager.cs index 3a6795a7..7beba20c 100644 --- a/MediaBrowser.Controller/Configuration/IServerConfigurationManager.cs +++ b/MediaBrowser.Controller/Configuration/IServerConfigurationManager.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Common.Configuration; -using MediaBrowser.Model.Configuration; - namespace MediaBrowser.Controller.Configuration { + using MediaBrowser.Common.Configuration; + using MediaBrowser.Model.Configuration; + /// /// Interface IServerConfigurationManager. /// diff --git a/MediaBrowser.Controller/Devices/IDeviceManager.cs b/MediaBrowser.Controller/Devices/IDeviceManager.cs index 5bc83eb6..208c0f9c 100644 --- a/MediaBrowser.Controller/Devices/IDeviceManager.cs +++ b/MediaBrowser.Controller/Devices/IDeviceManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Devices; + using System; using System.Threading.Tasks; using Jellyfin.Data.Dtos; @@ -14,8 +16,6 @@ using MediaBrowser.Model.Dto; using MediaBrowser.Model.Querying; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Devices; - /// /// Device manager interface. /// diff --git a/MediaBrowser.Controller/Drawing/ImageCollageOptions.cs b/MediaBrowser.Controller/Drawing/ImageCollageOptions.cs index f33f870f..150f6946 100644 --- a/MediaBrowser.Controller/Drawing/ImageCollageOptions.cs +++ b/MediaBrowser.Controller/Drawing/ImageCollageOptions.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System.Collections.Generic; - #pragma warning disable CS1591 namespace MediaBrowser.Controller.Drawing { +#nullable disable + + using System.Collections.Generic; + public class ImageCollageOptions { /// diff --git a/MediaBrowser.Controller/Entities/Extensions.cs b/MediaBrowser.Controller/Entities/Extensions.cs index 7c6efd57..1f0897cc 100644 --- a/MediaBrowser.Controller/Entities/Extensions.cs +++ b/MediaBrowser.Controller/Entities/Extensions.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Linq; -using Jellyfin.Extensions; -using MediaBrowser.Model.Entities; - namespace MediaBrowser.Controller.Entities { + using System; + using System.Linq; + using Jellyfin.Extensions; + using MediaBrowser.Model.Entities; + /// /// Class Extensions. /// diff --git a/MediaBrowser.Controller/Entities/IHasDisplayOrder.cs b/MediaBrowser.Controller/Entities/IHasDisplayOrder.cs index d9ced339..a7a52631 100644 --- a/MediaBrowser.Controller/Entities/IHasDisplayOrder.cs +++ b/MediaBrowser.Controller/Entities/IHasDisplayOrder.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using Jellyfin.Data.Enums; - namespace MediaBrowser.Controller.Entities { +#nullable disable + + using Jellyfin.Data.Enums; + /// /// Interface IHasDisplayOrder. /// diff --git a/MediaBrowser.Controller/Entities/MediaSourceWidthComparator.cs b/MediaBrowser.Controller/Entities/MediaSourceWidthComparator.cs index 9c907ecc..ccd4039f 100644 --- a/MediaBrowser.Controller/Entities/MediaSourceWidthComparator.cs +++ b/MediaBrowser.Controller/Entities/MediaSourceWidthComparator.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Entities; + using System; using System.Collections.Generic; using System.Runtime.Intrinsics.X86; using MediaBrowser.Model.Dto; -namespace MediaBrowser.Controller.Entities; - /// /// Compare MediaSource of the same file by Video width . /// diff --git a/MediaBrowser.Controller/Events/Authentication/AuthenticationRequestEventArgs.cs b/MediaBrowser.Controller/Events/Authentication/AuthenticationRequestEventArgs.cs index 82699c11..dc39c5c0 100644 --- a/MediaBrowser.Controller/Events/Authentication/AuthenticationRequestEventArgs.cs +++ b/MediaBrowser.Controller/Events/Authentication/AuthenticationRequestEventArgs.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Events.Authentication; + using System; using MediaBrowser.Controller.Session; -namespace MediaBrowser.Controller.Events.Authentication; - /// /// A class representing an authentication result event. /// diff --git a/MediaBrowser.Controller/Events/Authentication/AuthenticationResultEventArgs.cs b/MediaBrowser.Controller/Events/Authentication/AuthenticationResultEventArgs.cs index c8dcefd1..5d73ea45 100644 --- a/MediaBrowser.Controller/Events/Authentication/AuthenticationResultEventArgs.cs +++ b/MediaBrowser.Controller/Events/Authentication/AuthenticationResultEventArgs.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Events.Authentication; + using System; using MediaBrowser.Controller.Authentication; using MediaBrowser.Model.Dto; -namespace MediaBrowser.Controller.Events.Authentication; - /// /// A class representing an authentication result event. /// diff --git a/MediaBrowser.Controller/Events/IEventConsumer.cs b/MediaBrowser.Controller/Events/IEventConsumer.cs index 82620482..c17ab9b8 100644 --- a/MediaBrowser.Controller/Events/IEventConsumer.cs +++ b/MediaBrowser.Controller/Events/IEventConsumer.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Threading.Tasks; - namespace MediaBrowser.Controller.Events { + using System; + using System.Threading.Tasks; + /// /// An interface representing a type that consumes events of type T. /// diff --git a/MediaBrowser.Controller/Events/IEventManager.cs b/MediaBrowser.Controller/Events/IEventManager.cs index c5864e29..e4c6f5c4 100644 --- a/MediaBrowser.Controller/Events/IEventManager.cs +++ b/MediaBrowser.Controller/Events/IEventManager.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Threading.Tasks; - namespace MediaBrowser.Controller.Events { + using System; + using System.Threading.Tasks; + /// /// An interface that handles eventing. /// diff --git a/MediaBrowser.Controller/Events/Session/SessionEndedEventArgs.cs b/MediaBrowser.Controller/Events/Session/SessionEndedEventArgs.cs index ff4fc933..700a581a 100644 --- a/MediaBrowser.Controller/Events/Session/SessionEndedEventArgs.cs +++ b/MediaBrowser.Controller/Events/Session/SessionEndedEventArgs.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Jellyfin.Data.Events; -using MediaBrowser.Controller.Session; - namespace MediaBrowser.Controller.Events.Session { + using Jellyfin.Data.Events; + using MediaBrowser.Controller.Session; + /// /// An event that fires when a session is ended. /// diff --git a/MediaBrowser.Controller/Events/Session/SessionStartedEventArgs.cs b/MediaBrowser.Controller/Events/Session/SessionStartedEventArgs.cs index adfde5c7..af49c57c 100644 --- a/MediaBrowser.Controller/Events/Session/SessionStartedEventArgs.cs +++ b/MediaBrowser.Controller/Events/Session/SessionStartedEventArgs.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Jellyfin.Data.Events; -using MediaBrowser.Controller.Session; - namespace MediaBrowser.Controller.Events.Session { + using Jellyfin.Data.Events; + using MediaBrowser.Controller.Session; + /// /// An event that fires when a session is started. /// diff --git a/MediaBrowser.Controller/Events/Updates/PluginInstallationCancelledEventArgs.cs b/MediaBrowser.Controller/Events/Updates/PluginInstallationCancelledEventArgs.cs index 3ad5ba74..b2403e49 100644 --- a/MediaBrowser.Controller/Events/Updates/PluginInstallationCancelledEventArgs.cs +++ b/MediaBrowser.Controller/Events/Updates/PluginInstallationCancelledEventArgs.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Jellyfin.Data.Events; -using MediaBrowser.Model.Updates; - namespace MediaBrowser.Controller.Events.Updates { + using Jellyfin.Data.Events; + using MediaBrowser.Model.Updates; + /// /// An event that occurs when a plugin installation is cancelled. /// diff --git a/MediaBrowser.Controller/Events/Updates/PluginInstalledEventArgs.cs b/MediaBrowser.Controller/Events/Updates/PluginInstalledEventArgs.cs index 9dae5307..c370c2ce 100644 --- a/MediaBrowser.Controller/Events/Updates/PluginInstalledEventArgs.cs +++ b/MediaBrowser.Controller/Events/Updates/PluginInstalledEventArgs.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Jellyfin.Data.Events; -using MediaBrowser.Model.Updates; - namespace MediaBrowser.Controller.Events.Updates { + using Jellyfin.Data.Events; + using MediaBrowser.Model.Updates; + /// /// An event that occurs when a plugin is installed. /// diff --git a/MediaBrowser.Controller/Events/Updates/PluginInstallingEventArgs.cs b/MediaBrowser.Controller/Events/Updates/PluginInstallingEventArgs.cs index 41fecb56..03d71abc 100644 --- a/MediaBrowser.Controller/Events/Updates/PluginInstallingEventArgs.cs +++ b/MediaBrowser.Controller/Events/Updates/PluginInstallingEventArgs.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Jellyfin.Data.Events; -using MediaBrowser.Model.Updates; - namespace MediaBrowser.Controller.Events.Updates { + using Jellyfin.Data.Events; + using MediaBrowser.Model.Updates; + /// /// An event that occurs when a plugin is installing. /// diff --git a/MediaBrowser.Controller/Events/Updates/PluginUninstalledEventArgs.cs b/MediaBrowser.Controller/Events/Updates/PluginUninstalledEventArgs.cs index 5bc09919..e55b8bde 100644 --- a/MediaBrowser.Controller/Events/Updates/PluginUninstalledEventArgs.cs +++ b/MediaBrowser.Controller/Events/Updates/PluginUninstalledEventArgs.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Jellyfin.Data.Events; -using MediaBrowser.Model.Plugins; - namespace MediaBrowser.Controller.Events.Updates { + using Jellyfin.Data.Events; + using MediaBrowser.Model.Plugins; + /// /// An event that occurs when a plugin is uninstalled. /// diff --git a/MediaBrowser.Controller/Events/Updates/PluginUpdatedEventArgs.cs b/MediaBrowser.Controller/Events/Updates/PluginUpdatedEventArgs.cs index 6209aa72..3c5bb095 100644 --- a/MediaBrowser.Controller/Events/Updates/PluginUpdatedEventArgs.cs +++ b/MediaBrowser.Controller/Events/Updates/PluginUpdatedEventArgs.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Jellyfin.Data.Events; -using MediaBrowser.Model.Updates; - namespace MediaBrowser.Controller.Events.Updates { + using Jellyfin.Data.Events; + using MediaBrowser.Model.Updates; + /// /// An event that occurs when a plugin is updated. /// diff --git a/MediaBrowser.Controller/Extensions/ConfigurationExtensions.cs b/MediaBrowser.Controller/Extensions/ConfigurationExtensions.cs index 35621813..18f3a1cd 100644 --- a/MediaBrowser.Controller/Extensions/ConfigurationExtensions.cs +++ b/MediaBrowser.Controller/Extensions/ConfigurationExtensions.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Microsoft.Extensions.Configuration; - namespace MediaBrowser.Controller.Extensions { + using System; + using Microsoft.Extensions.Configuration; + /// /// Configuration extensions for MediaBrowser.Controller. /// diff --git a/MediaBrowser.Controller/Extensions/XmlReaderExtensions.cs b/MediaBrowser.Controller/Extensions/XmlReaderExtensions.cs index 6ab38e16..829b4763 100644 --- a/MediaBrowser.Controller/Extensions/XmlReaderExtensions.cs +++ b/MediaBrowser.Controller/Extensions/XmlReaderExtensions.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Extensions; + using System; using System.Collections.Generic; using System.Globalization; @@ -10,8 +12,6 @@ using System.Xml; using Jellyfin.Data.Enums; using MediaBrowser.Controller.Entities; -namespace MediaBrowser.Controller.Extensions; - /// /// Provides extension methods for to parse 's. /// diff --git a/MediaBrowser.Controller/IDisplayPreferencesManager.cs b/MediaBrowser.Controller/IDisplayPreferencesManager.cs index 13e430ee..00a3c6c7 100644 --- a/MediaBrowser.Controller/IDisplayPreferencesManager.cs +++ b/MediaBrowser.Controller/IDisplayPreferencesManager.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using Jellyfin.Database.Implementations.Entities; - namespace MediaBrowser.Controller { + using System; + using System.Collections.Generic; + using Jellyfin.Database.Implementations.Entities; + /// /// Manages the storage and retrieval of display preferences. /// diff --git a/MediaBrowser.Controller/IO/FileData.cs b/MediaBrowser.Controller/IO/FileData.cs index b518001f..df29c46b 100644 --- a/MediaBrowser.Controller/IO/FileData.cs +++ b/MediaBrowser.Controller/IO/FileData.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.Controller.IO { + using System; + using System.Collections.Generic; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// Provides low level File access that is much faster than the File/Directory api's. /// diff --git a/MediaBrowser.Controller/IO/FileSystemHelper.cs b/MediaBrowser.Controller/IO/FileSystemHelper.cs index 1495d8e9..9d5918d7 100644 --- a/MediaBrowser.Controller/IO/FileSystemHelper.cs +++ b/MediaBrowser.Controller/IO/FileSystemHelper.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.IO; + using System; using System.Collections.Generic; using System.IO; @@ -9,8 +11,6 @@ using System.Linq; using MediaBrowser.Model.IO; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Controller.IO; - /// /// Helper methods for file system management. /// diff --git a/MediaBrowser.Controller/IO/IExternalDataManager.cs b/MediaBrowser.Controller/IO/IExternalDataManager.cs index b899ffc3..388e52f5 100644 --- a/MediaBrowser.Controller/IO/IExternalDataManager.cs +++ b/MediaBrowser.Controller/IO/IExternalDataManager.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.IO; + using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Entities; -namespace MediaBrowser.Controller.IO; - /// /// Interface IPathManager. /// diff --git a/MediaBrowser.Controller/IO/IPathManager.cs b/MediaBrowser.Controller/IO/IPathManager.cs index 2299e64d..0f528287 100644 --- a/MediaBrowser.Controller/IO/IPathManager.cs +++ b/MediaBrowser.Controller/IO/IPathManager.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.IO; + using System.Collections.Generic; using MediaBrowser.Controller.Entities; -namespace MediaBrowser.Controller.IO; - /// /// Interface IPathManager. /// diff --git a/MediaBrowser.Controller/ISystemManager.cs b/MediaBrowser.Controller/ISystemManager.cs index 1fd7bbbf..0b8ff776 100644 --- a/MediaBrowser.Controller/ISystemManager.cs +++ b/MediaBrowser.Controller/ISystemManager.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller; + using MediaBrowser.Model.System; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace MediaBrowser.Controller; - /// /// A service for managing the application instance. /// diff --git a/MediaBrowser.Controller/Library/IDirectStreamProvider.cs b/MediaBrowser.Controller/Library/IDirectStreamProvider.cs index 53932068..de1757e2 100644 --- a/MediaBrowser.Controller/Library/IDirectStreamProvider.cs +++ b/MediaBrowser.Controller/Library/IDirectStreamProvider.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; - namespace MediaBrowser.Controller.Library { + using System.IO; + /// /// The direct live TV stream provider. /// diff --git a/MediaBrowser.Controller/Library/IIntroProvider.cs b/MediaBrowser.Controller/Library/IIntroProvider.cs index 04ea46c8..84783a31 100644 --- a/MediaBrowser.Controller/Library/IIntroProvider.cs +++ b/MediaBrowser.Controller/Library/IIntroProvider.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System.Collections.Generic; -using System.Threading.Tasks; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Entities; - namespace MediaBrowser.Controller.Library { +#nullable disable + + using System.Collections.Generic; + using System.Threading.Tasks; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Entities; + /// /// Class BaseIntroProvider. /// diff --git a/MediaBrowser.Controller/Library/IKeyframeManager.cs b/MediaBrowser.Controller/Library/IKeyframeManager.cs index 7dedeecf..4f72f0e7 100644 --- a/MediaBrowser.Controller/Library/IKeyframeManager.cs +++ b/MediaBrowser.Controller/Library/IKeyframeManager.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.IO; + using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Jellyfin.MediaEncoding.Keyframes; -namespace MediaBrowser.Controller.IO; - /// /// Interface IKeyframeManager. /// diff --git a/MediaBrowser.Controller/Library/ILibraryPostScanTask.cs b/MediaBrowser.Controller/Library/ILibraryPostScanTask.cs index 61bcdecc..66f1698b 100644 --- a/MediaBrowser.Controller/Library/ILibraryPostScanTask.cs +++ b/MediaBrowser.Controller/Library/ILibraryPostScanTask.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Threading; -using System.Threading.Tasks; - namespace MediaBrowser.Controller.Library { + using System; + using System.Threading; + using System.Threading.Tasks; + /// /// An interface for tasks that run after the media library scan. /// diff --git a/MediaBrowser.Controller/Library/IMetadataSaver.cs b/MediaBrowser.Controller/Library/IMetadataSaver.cs index b3cd84fd..e9464fd2 100644 --- a/MediaBrowser.Controller/Library/IMetadataSaver.cs +++ b/MediaBrowser.Controller/Library/IMetadataSaver.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Controller.Entities; - namespace MediaBrowser.Controller.Library { + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Controller.Entities; + /// /// Interface IMetadataSaver. /// diff --git a/MediaBrowser.Controller/Library/ISearchEngine.cs b/MediaBrowser.Controller/Library/ISearchEngine.cs index a77ce28e..f2009dcb 100644 --- a/MediaBrowser.Controller/Library/ISearchEngine.cs +++ b/MediaBrowser.Controller/Library/ISearchEngine.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Model.Querying; -using MediaBrowser.Model.Search; - namespace MediaBrowser.Controller.Library { + using MediaBrowser.Model.Querying; + using MediaBrowser.Model.Search; + /// /// Interface ILibrarySearchEngine. /// diff --git a/MediaBrowser.Controller/Library/IUserDataManager.cs b/MediaBrowser.Controller/Library/IUserDataManager.cs index f40f2735..6698a9d2 100644 --- a/MediaBrowser.Controller/Library/IUserDataManager.cs +++ b/MediaBrowser.Controller/Library/IUserDataManager.cs @@ -2,17 +2,17 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Threading; -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Dto; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Entities; - namespace MediaBrowser.Controller.Library { + using System; + using System.Collections.Generic; + using System.Threading; + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Dto; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Model.Dto; + using MediaBrowser.Model.Entities; + /// /// Interface IUserDataManager. /// diff --git a/MediaBrowser.Controller/Library/SearchHintInfo.cs b/MediaBrowser.Controller/Library/SearchHintInfo.cs index 4ce1aa3d..331c3b35 100644 --- a/MediaBrowser.Controller/Library/SearchHintInfo.cs +++ b/MediaBrowser.Controller/Library/SearchHintInfo.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using MediaBrowser.Controller.Entities; - namespace MediaBrowser.Controller.Library { +#nullable disable + + using MediaBrowser.Controller.Entities; + /// /// Class SearchHintInfo. /// diff --git a/MediaBrowser.Controller/Library/TVUtils.cs b/MediaBrowser.Controller/Library/TVUtils.cs index bf0bf97f..4e0ecb5d 100644 --- a/MediaBrowser.Controller/Library/TVUtils.cs +++ b/MediaBrowser.Controller/Library/TVUtils.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Diagnostics.CodeAnalysis; - namespace MediaBrowser.Controller.Library { + using System; + using System.Diagnostics.CodeAnalysis; + /// /// Class TVUtils. /// diff --git a/MediaBrowser.Controller/LibraryTaskScheduler/ILimitedConcurrencyLibraryScheduler.cs b/MediaBrowser.Controller/LibraryTaskScheduler/ILimitedConcurrencyLibraryScheduler.cs index 2f0099d2..8500a016 100644 --- a/MediaBrowser.Controller/LibraryTaskScheduler/ILimitedConcurrencyLibraryScheduler.cs +++ b/MediaBrowser.Controller/LibraryTaskScheduler/ILimitedConcurrencyLibraryScheduler.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.LibraryTaskScheduler; + using System; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Configuration; -namespace MediaBrowser.Controller.LibraryTaskScheduler; - /// /// Provides a shared scheduler to run library related tasks based on the . /// diff --git a/MediaBrowser.Controller/LibraryTaskScheduler/LimitedConcurrencyLibraryScheduler.cs b/MediaBrowser.Controller/LibraryTaskScheduler/LimitedConcurrencyLibraryScheduler.cs index 05be0f2d..4261beb4 100644 --- a/MediaBrowser.Controller/LibraryTaskScheduler/LimitedConcurrencyLibraryScheduler.cs +++ b/MediaBrowser.Controller/LibraryTaskScheduler/LimitedConcurrencyLibraryScheduler.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.LibraryTaskScheduler; + using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -14,8 +16,6 @@ using MediaBrowser.Controller.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Controller.LibraryTaskScheduler; - /// /// Provides Parallel action interface to process tasks with a set concurrency level. /// diff --git a/MediaBrowser.Controller/LiveTv/IGuideManager.cs b/MediaBrowser.Controller/LiveTv/IGuideManager.cs index e1793c30..c24a1032 100644 --- a/MediaBrowser.Controller/LiveTv/IGuideManager.cs +++ b/MediaBrowser.Controller/LiveTv/IGuideManager.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.LiveTv; + using System; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.LiveTv; -namespace MediaBrowser.Controller.LiveTv; - /// /// Service responsible for managing the Live TV guide. /// diff --git a/MediaBrowser.Controller/LiveTv/IListingsManager.cs b/MediaBrowser.Controller/LiveTv/IListingsManager.cs index aa861cd2..cce58b00 100644 --- a/MediaBrowser.Controller/LiveTv/IListingsManager.cs +++ b/MediaBrowser.Controller/LiveTv/IListingsManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.LiveTv; + using System; using System.Collections.Generic; using System.Threading; @@ -9,8 +11,6 @@ using System.Threading.Tasks; using MediaBrowser.Model.Dto; using MediaBrowser.Model.LiveTv; -namespace MediaBrowser.Controller.LiveTv; - /// /// Service responsible for managing s and mapping /// their channels to channels provided by s. diff --git a/MediaBrowser.Controller/LiveTv/IRecordingsManager.cs b/MediaBrowser.Controller/LiveTv/IRecordingsManager.cs index 2eef17f0..65ff6d1e 100644 --- a/MediaBrowser.Controller/LiveTv/IRecordingsManager.cs +++ b/MediaBrowser.Controller/LiveTv/IRecordingsManager.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.LiveTv; + using System; using System.Collections.Generic; using System.Threading.Tasks; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Controller.LiveTv; - /// /// Service responsible for managing LiveTV recordings. /// diff --git a/MediaBrowser.Controller/LiveTv/ITunerHostManager.cs b/MediaBrowser.Controller/LiveTv/ITunerHostManager.cs index 4af3518b..2eec50e9 100644 --- a/MediaBrowser.Controller/LiveTv/ITunerHostManager.cs +++ b/MediaBrowser.Controller/LiveTv/ITunerHostManager.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.LiveTv; + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Dto; using MediaBrowser.Model.LiveTv; -namespace MediaBrowser.Controller.LiveTv; - /// /// Service responsible for managing the s. /// diff --git a/MediaBrowser.Controller/Lyrics/ILyricManager.cs b/MediaBrowser.Controller/Lyrics/ILyricManager.cs index f3b944f8..5f15d497 100644 --- a/MediaBrowser.Controller/Lyrics/ILyricManager.cs +++ b/MediaBrowser.Controller/Lyrics/ILyricManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Lyrics; + using System; using System.Collections.Generic; using System.IO; @@ -13,8 +15,6 @@ using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Lyrics; using MediaBrowser.Model.Providers; -namespace MediaBrowser.Controller.Lyrics; - /// /// Interface ILyricManager. /// diff --git a/MediaBrowser.Controller/Lyrics/ILyricParser.cs b/MediaBrowser.Controller/Lyrics/ILyricParser.cs index b553736b..98f5449d 100644 --- a/MediaBrowser.Controller/Lyrics/ILyricParser.cs +++ b/MediaBrowser.Controller/Lyrics/ILyricParser.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Lyrics; + using MediaBrowser.Controller.Resolvers; using MediaBrowser.Model.Lyrics; -namespace MediaBrowser.Controller.Lyrics; - /// /// Interface ILyricParser. /// diff --git a/MediaBrowser.Controller/Lyrics/ILyricProvider.cs b/MediaBrowser.Controller/Lyrics/ILyricProvider.cs index 702aefc7..8e0dca2d 100644 --- a/MediaBrowser.Controller/Lyrics/ILyricProvider.cs +++ b/MediaBrowser.Controller/Lyrics/ILyricProvider.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Lyrics; + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Lyrics; using MediaBrowser.Model.Providers; -namespace MediaBrowser.Controller.Lyrics; - /// /// Interface ILyricsProvider. /// diff --git a/MediaBrowser.Controller/Lyrics/LyricDownloadFailureEventArgs.cs b/MediaBrowser.Controller/Lyrics/LyricDownloadFailureEventArgs.cs index fb92b3c7..7e0ab382 100644 --- a/MediaBrowser.Controller/Lyrics/LyricDownloadFailureEventArgs.cs +++ b/MediaBrowser.Controller/Lyrics/LyricDownloadFailureEventArgs.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using MediaBrowser.Controller.Entities; - namespace MediaBrowser.Controller.Lyrics { + using System; + using MediaBrowser.Controller.Entities; + /// /// An event that occurs when subtitle downloading fails. /// diff --git a/MediaBrowser.Controller/MediaEncoding/DownMixAlgorithmsHelper.cs b/MediaBrowser.Controller/MediaEncoding/DownMixAlgorithmsHelper.cs index ae1d11d6..52437113 100644 --- a/MediaBrowser.Controller/MediaEncoding/DownMixAlgorithmsHelper.cs +++ b/MediaBrowser.Controller/MediaEncoding/DownMixAlgorithmsHelper.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.MediaEncoding; + using System.Collections.Generic; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Controller.MediaEncoding; - /// /// Describes the downmix algorithms capabilities. /// diff --git a/MediaBrowser.Controller/MediaEncoding/ITranscodeManager.cs b/MediaBrowser.Controller/MediaEncoding/ITranscodeManager.cs index 4b5e4994..74d9f273 100644 --- a/MediaBrowser.Controller/MediaEncoding/ITranscodeManager.cs +++ b/MediaBrowser.Controller/MediaEncoding/ITranscodeManager.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.MediaEncoding; + using System; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Streaming; -namespace MediaBrowser.Controller.MediaEncoding; - /// /// A service for managing media transcoding. /// diff --git a/MediaBrowser.Controller/MediaEncoding/TranscodingJob.cs b/MediaBrowser.Controller/MediaEncoding/TranscodingJob.cs index ab63b163..80209bc5 100644 --- a/MediaBrowser.Controller/MediaEncoding/TranscodingJob.cs +++ b/MediaBrowser.Controller/MediaEncoding/TranscodingJob.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.MediaEncoding; + using System; using System.Diagnostics; using System.Threading; using MediaBrowser.Model.Dto; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Controller.MediaEncoding; - /// /// Class TranscodingJob. /// diff --git a/MediaBrowser.Controller/MediaEncoding/TranscodingSegmentCleaner.cs b/MediaBrowser.Controller/MediaEncoding/TranscodingSegmentCleaner.cs index 8f30974d..cb7c6ca7 100644 --- a/MediaBrowser.Controller/MediaEncoding/TranscodingSegmentCleaner.cs +++ b/MediaBrowser.Controller/MediaEncoding/TranscodingSegmentCleaner.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.MediaEncoding; + using System; using System.Collections.Generic; using System.IO; @@ -13,8 +15,6 @@ using MediaBrowser.Model.Configuration; using MediaBrowser.Model.IO; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Controller.MediaEncoding; - /// /// Transcoding segment cleaner. /// diff --git a/MediaBrowser.Controller/MediaEncoding/TranscodingThrottler.cs b/MediaBrowser.Controller/MediaEncoding/TranscodingThrottler.cs index ff9a9294..56f2a4d6 100644 --- a/MediaBrowser.Controller/MediaEncoding/TranscodingThrottler.cs +++ b/MediaBrowser.Controller/MediaEncoding/TranscodingThrottler.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.MediaEncoding; + using System; using System.Threading; using System.Threading.Tasks; @@ -10,8 +12,6 @@ using MediaBrowser.Model.Configuration; using MediaBrowser.Model.IO; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Controller.MediaEncoding; - /// /// Transcoding throttler. /// diff --git a/MediaBrowser.Controller/MediaSegments/IMediaSegmentManager.cs b/MediaBrowser.Controller/MediaSegments/IMediaSegmentManager.cs index d80754b1..37ab80a1 100644 --- a/MediaBrowser.Controller/MediaSegments/IMediaSegmentManager.cs +++ b/MediaBrowser.Controller/MediaSegments/IMediaSegmentManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.MediaSegments; + using System; using System.Collections.Generic; using System.Threading; @@ -12,8 +14,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.MediaSegments; -namespace MediaBrowser.Controller.MediaSegments; - /// /// Defines methods for interacting with media segments. /// diff --git a/MediaBrowser.Controller/MediaSegments/IMediaSegmentProvider.cs b/MediaBrowser.Controller/MediaSegments/IMediaSegmentProvider.cs index 684c59e9..db40bb6e 100644 --- a/MediaBrowser.Controller/MediaSegments/IMediaSegmentProvider.cs +++ b/MediaBrowser.Controller/MediaSegments/IMediaSegmentProvider.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.MediaSegments; + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -9,8 +11,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Model; using MediaBrowser.Model.MediaSegments; -namespace MediaBrowser.Controller.MediaSegments; - /// /// Provides methods for Obtaining the Media Segments from an Item. /// diff --git a/MediaBrowser.Controller/Net/AuthorizationInfo.cs b/MediaBrowser.Controller/Net/AuthorizationInfo.cs index 5fdc6ed4..491ab8b4 100644 --- a/MediaBrowser.Controller/Net/AuthorizationInfo.cs +++ b/MediaBrowser.Controller/Net/AuthorizationInfo.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Diagnostics.CodeAnalysis; -using Jellyfin.Database.Implementations.Entities; - namespace MediaBrowser.Controller.Net { + using System; + using System.Diagnostics.CodeAnalysis; + using Jellyfin.Database.Implementations.Entities; + /// /// The request authorization info. /// diff --git a/MediaBrowser.Controller/Net/IAuthService.cs b/MediaBrowser.Controller/Net/IAuthService.cs index f664850c..45ec9877 100644 --- a/MediaBrowser.Controller/Net/IAuthService.cs +++ b/MediaBrowser.Controller/Net/IAuthService.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; - namespace MediaBrowser.Controller.Net { + using System.Threading.Tasks; + using Microsoft.AspNetCore.Http; + /// /// IAuthService. /// diff --git a/MediaBrowser.Controller/Net/IAuthorizationContext.cs b/MediaBrowser.Controller/Net/IAuthorizationContext.cs index 2dd05d7c..24f22817 100644 --- a/MediaBrowser.Controller/Net/IAuthorizationContext.cs +++ b/MediaBrowser.Controller/Net/IAuthorizationContext.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; - namespace MediaBrowser.Controller.Net { + using System.Threading.Tasks; + using Microsoft.AspNetCore.Http; + /// /// IAuthorization context. /// diff --git a/MediaBrowser.Controller/Net/IWebSocketConnection.cs b/MediaBrowser.Controller/Net/IWebSocketConnection.cs index 29d1d393..e369bf35 100644 --- a/MediaBrowser.Controller/Net/IWebSocketConnection.cs +++ b/MediaBrowser.Controller/Net/IWebSocketConnection.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Net; -using System.Net.WebSockets; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Controller.Net.WebSocketMessages; - namespace MediaBrowser.Controller.Net { + using System; + using System.Net; + using System.Net.WebSockets; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Controller.Net.WebSocketMessages; + /// /// Interface for WebSocket connections. /// diff --git a/MediaBrowser.Controller/Net/IWebSocketListener.cs b/MediaBrowser.Controller/Net/IWebSocketListener.cs index 5b33c4d9..c5da3d70 100644 --- a/MediaBrowser.Controller/Net/IWebSocketListener.cs +++ b/MediaBrowser.Controller/Net/IWebSocketListener.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; - namespace MediaBrowser.Controller.Net { + using System.Threading.Tasks; + using Microsoft.AspNetCore.Http; + /// /// Interface for listening to messages coming through a web socket connection. /// diff --git a/MediaBrowser.Controller/Net/IWebSocketManager.cs b/MediaBrowser.Controller/Net/IWebSocketManager.cs index 99d0e805..0cbb1b75 100644 --- a/MediaBrowser.Controller/Net/IWebSocketManager.cs +++ b/MediaBrowser.Controller/Net/IWebSocketManager.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; - namespace MediaBrowser.Controller.Net { + using System.Threading.Tasks; + using Microsoft.AspNetCore.Http; + /// /// Interface IHttpServer. /// diff --git a/MediaBrowser.Controller/Net/SecurityException.cs b/MediaBrowser.Controller/Net/SecurityException.cs index 9265e1ee..cdc9967c 100644 --- a/MediaBrowser.Controller/Net/SecurityException.cs +++ b/MediaBrowser.Controller/Net/SecurityException.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace MediaBrowser.Controller.Net { + using System; + /// /// The exception that is thrown when a user is authenticated, but not authorized to access a requested resource. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessage.cs index 10708322..089ed93e 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessage.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net; + using System.Text.Json.Serialization; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net; - /// /// Websocket message without data. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessageInfo.cs b/MediaBrowser.Controller/Net/WebSocketMessageInfo.cs index d26e71f5..6e76def8 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessageInfo.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessageInfo.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using MediaBrowser.Controller.Net.WebSocketMessages; - namespace MediaBrowser.Controller.Net { +#nullable disable + + using MediaBrowser.Controller.Net.WebSocketMessages; + /// /// Class WebSocketMessageInfo. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/ActivityLogEntryStartMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/ActivityLogEntryStartMessage.cs index 93dd6fb2..2a416fbe 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/ActivityLogEntryStartMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/ActivityLogEntryStartMessage.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Inbound; + using System.ComponentModel; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Inbound; - /// /// Activity log entry start message. /// Data is the timing data encoded as "$initialDelay,$interval" in ms. diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/ActivityLogEntryStopMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/ActivityLogEntryStopMessage.cs index 2928f061..d246ef31 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/ActivityLogEntryStopMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/ActivityLogEntryStopMessage.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Inbound; + using System.ComponentModel; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Inbound; - /// /// Activity log entry stop message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/InboundKeepAliveMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/InboundKeepAliveMessage.cs index d18714ff..82f6700d 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/InboundKeepAliveMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/InboundKeepAliveMessage.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Inbound; + using System.ComponentModel; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Inbound; - /// /// Keep alive websocket messages. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/ScheduledTasksInfoStartMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/ScheduledTasksInfoStartMessage.cs index bd55f46b..24683008 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/ScheduledTasksInfoStartMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/ScheduledTasksInfoStartMessage.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Inbound; + using System.ComponentModel; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Inbound; - /// /// Scheduled tasks info start message. /// Data is the timing data encoded as "$initialDelay,$interval" in ms. diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/ScheduledTasksInfoStopMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/ScheduledTasksInfoStopMessage.cs index 16f8e551..d305b704 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/ScheduledTasksInfoStopMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/ScheduledTasksInfoStopMessage.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Inbound; + using System.ComponentModel; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Inbound; - /// /// Scheduled tasks info stop message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/SessionsStartMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/SessionsStartMessage.cs index 16851f7d..749d7455 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/SessionsStartMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/SessionsStartMessage.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Inbound; + using System.ComponentModel; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Inbound; - /// /// Sessions start message. /// Data is the timing data encoded as "$initialDelay,$interval" in ms. diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/SessionsStopMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/SessionsStopMessage.cs index 3c54a5c9..100971ea 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/SessionsStopMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Inbound/SessionsStopMessage.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Inbound; + using System.ComponentModel; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Inbound; - /// /// Sessions stop message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ActivityLogEntryMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ActivityLogEntryMessage.cs index 1778b151..42fde9d7 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ActivityLogEntryMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ActivityLogEntryMessage.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.Collections.Generic; using System.ComponentModel; using MediaBrowser.Model.Activity; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Activity log created message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ForceKeepAliveMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ForceKeepAliveMessage.cs index e2f22f69..de59670d 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ForceKeepAliveMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ForceKeepAliveMessage.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Force keep alive websocket messages. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/GeneralCommandMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/GeneralCommandMessage.cs index 539d01e9..9115aa23 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/GeneralCommandMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/GeneralCommandMessage.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// General command websocket message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/LibraryChangedMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/LibraryChangedMessage.cs index 7f8e1b83..a379c1f2 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/LibraryChangedMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/LibraryChangedMessage.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Library changed message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/OutboundKeepAliveMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/OutboundKeepAliveMessage.cs index 1ac12ec4..06d7019e 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/OutboundKeepAliveMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/OutboundKeepAliveMessage.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Keep alive websocket messages. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PlayMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PlayMessage.cs index f2eb9faf..279df7bb 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PlayMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PlayMessage.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Play command websocket message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PlaystateMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PlaystateMessage.cs index bfbd939a..1b8a837b 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PlaystateMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PlaystateMessage.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Playstate message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PluginInstallationCancelledMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PluginInstallationCancelledMessage.cs index eea9cd03..3dfc797e 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PluginInstallationCancelledMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PluginInstallationCancelledMessage.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Model.Session; using MediaBrowser.Model.Updates; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Plugin installation cancelled message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PluginInstallationCompletedMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PluginInstallationCompletedMessage.cs index 8023bc3d..f34995b1 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PluginInstallationCompletedMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PluginInstallationCompletedMessage.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Model.Session; using MediaBrowser.Model.Updates; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Plugin installation completed message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PluginInstallationFailedMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PluginInstallationFailedMessage.cs index affb2067..5d6ec39e 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PluginInstallationFailedMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PluginInstallationFailedMessage.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Model.Session; using MediaBrowser.Model.Updates; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Plugin installation failed message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PluginInstallingMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PluginInstallingMessage.cs index 029911bd..412572cb 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PluginInstallingMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PluginInstallingMessage.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Model.Session; using MediaBrowser.Model.Updates; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Package installing message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PluginUninstalledMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PluginUninstalledMessage.cs index e550c8bd..64b0124c 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PluginUninstalledMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/PluginUninstalledMessage.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Model.Plugins; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Plugin uninstalled message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/RefreshProgressMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/RefreshProgressMessage.cs index cc64d7c6..1e2cf874 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/RefreshProgressMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/RefreshProgressMessage.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.Collections.Generic; using System.ComponentModel; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Refresh progress message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/RestartRequiredMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/RestartRequiredMessage.cs index 7b660d2f..fd1a89dc 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/RestartRequiredMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/RestartRequiredMessage.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Restart required. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ScheduledTaskEndedMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ScheduledTaskEndedMessage.cs index 275c1738..4177c97a 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ScheduledTaskEndedMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ScheduledTaskEndedMessage.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Model.Session; using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Scheduled task ended message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ScheduledTasksInfoMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ScheduledTasksInfoMessage.cs index a3690389..69e8bc64 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ScheduledTasksInfoMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ScheduledTasksInfoMessage.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.Collections.Generic; using System.ComponentModel; using MediaBrowser.Model.Session; using MediaBrowser.Model.Tasks; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Scheduled tasks info message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/SeriesTimerCancelledMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/SeriesTimerCancelledMessage.cs index d42ff5f8..90729f56 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/SeriesTimerCancelledMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/SeriesTimerCancelledMessage.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Controller.LiveTv; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Series timer cancelled message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/SeriesTimerCreatedMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/SeriesTimerCreatedMessage.cs index 0dcbe5c6..788bf0ed 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/SeriesTimerCreatedMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/SeriesTimerCreatedMessage.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Controller.LiveTv; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Series timer created message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ServerRestartingMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ServerRestartingMessage.cs index 3f2b0280..62f1853d 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ServerRestartingMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ServerRestartingMessage.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Server restarting down message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ServerShuttingDownMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ServerShuttingDownMessage.cs index 768611b3..625436ec 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ServerShuttingDownMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/ServerShuttingDownMessage.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Server shutting down message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/SessionsMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/SessionsMessage.cs index 9f1deabb..81db1825 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/SessionsMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/SessionsMessage.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.Collections.Generic; using System.ComponentModel; using MediaBrowser.Controller.Session; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Sessions message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/SyncPlayCommandMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/SyncPlayCommandMessage.cs index 5597e6e6..c1b3ff97 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/SyncPlayCommandMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/SyncPlayCommandMessage.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Model.Session; using MediaBrowser.Model.SyncPlay; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Sync play command. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/TimerCancelledMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/TimerCancelledMessage.cs index e778e81d..f82ddf3f 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/TimerCancelledMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/TimerCancelledMessage.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Controller.LiveTv; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Timer cancelled message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/TimerCreatedMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/TimerCreatedMessage.cs index ef2179e5..22c0235f 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/TimerCreatedMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/TimerCreatedMessage.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Controller.LiveTv; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// Timer created message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/UserDataChangedMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/UserDataChangedMessage.cs index e4bd83b7..0c1864a6 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/UserDataChangedMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/UserDataChangedMessage.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// User data changed message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/UserDeletedMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/UserDeletedMessage.cs index fd6d77be..53092e02 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/UserDeletedMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/UserDeletedMessage.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System; using System.ComponentModel; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// User deleted message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/UserUpdatedMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/UserUpdatedMessage.cs index c74f4b50..faab144b 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/UserUpdatedMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/Outbound/UserUpdatedMessage.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; + using System.ComponentModel; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Session; -namespace MediaBrowser.Controller.Net.WebSocketMessages.Outbound; - /// /// User updated message. /// diff --git a/MediaBrowser.Controller/Net/WebSocketMessages/OutboundWebSocketMessage.cs b/MediaBrowser.Controller/Net/WebSocketMessages/OutboundWebSocketMessage.cs index 5817262e..c8264e33 100644 --- a/MediaBrowser.Controller/Net/WebSocketMessages/OutboundWebSocketMessage.cs +++ b/MediaBrowser.Controller/Net/WebSocketMessages/OutboundWebSocketMessage.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace MediaBrowser.Controller.Net.WebSocketMessages; +using System; + /// /// Outbound websocket message. /// diff --git a/MediaBrowser.Controller/Persistence/IChapterRepository.cs b/MediaBrowser.Controller/Persistence/IChapterRepository.cs index 2a5073b0..94ac4e5a 100644 --- a/MediaBrowser.Controller/Persistence/IChapterRepository.cs +++ b/MediaBrowser.Controller/Persistence/IChapterRepository.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Persistence; + using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Controller.Persistence; - /// /// Interface IChapterRepository. /// diff --git a/MediaBrowser.Controller/Persistence/IItemTypeLookup.cs b/MediaBrowser.Controller/Persistence/IItemTypeLookup.cs index 0d4ab00d..9f325a70 100644 --- a/MediaBrowser.Controller/Persistence/IItemTypeLookup.cs +++ b/MediaBrowser.Controller/Persistence/IItemTypeLookup.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Persistence; + using System; using System.Collections.Generic; using Jellyfin.Data.Enums; using MediaBrowser.Model.Querying; -namespace MediaBrowser.Controller.Persistence; - /// /// Provides static lookup data for and for the domain. /// diff --git a/MediaBrowser.Controller/Persistence/IKeyframeRepository.cs b/MediaBrowser.Controller/Persistence/IKeyframeRepository.cs index 786c8dd8..b2755112 100644 --- a/MediaBrowser.Controller/Persistence/IKeyframeRepository.cs +++ b/MediaBrowser.Controller/Persistence/IKeyframeRepository.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Persistence; + using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Jellyfin.MediaEncoding.Keyframes; -namespace MediaBrowser.Controller.Persistence; - /// /// Provides methods for accessing keyframe data. /// diff --git a/MediaBrowser.Controller/Plugins/IPluginServiceRegistrator.cs b/MediaBrowser.Controller/Plugins/IPluginServiceRegistrator.cs index b35e7cbf..dd04a2b6 100644 --- a/MediaBrowser.Controller/Plugins/IPluginServiceRegistrator.cs +++ b/MediaBrowser.Controller/Plugins/IPluginServiceRegistrator.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.Extensions.DependencyInjection; - namespace MediaBrowser.Controller.Plugins; +using Microsoft.Extensions.DependencyInjection; + /// /// Defines the . /// diff --git a/MediaBrowser.Controller/Providers/IExternalId.cs b/MediaBrowser.Controller/Providers/IExternalId.cs index 3615d694..e2d8e6c9 100644 --- a/MediaBrowser.Controller/Providers/IExternalId.cs +++ b/MediaBrowser.Controller/Providers/IExternalId.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Providers; - namespace MediaBrowser.Controller.Providers { + using System; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Providers; + /// /// Represents an identifier for an external provider. /// diff --git a/MediaBrowser.Controller/Providers/IExternalUrlProvider.cs b/MediaBrowser.Controller/Providers/IExternalUrlProvider.cs index 587ab3ea..d1ae6047 100644 --- a/MediaBrowser.Controller/Providers/IExternalUrlProvider.cs +++ b/MediaBrowser.Controller/Providers/IExternalUrlProvider.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Providers; + using System.Collections.Generic; using MediaBrowser.Controller.Entities; -namespace MediaBrowser.Controller.Providers; - /// /// Interface to include related urls for an item. /// diff --git a/MediaBrowser.Controller/Providers/IImageProvider.cs b/MediaBrowser.Controller/Providers/IImageProvider.cs index 2b5426ce..1ee3d4a1 100644 --- a/MediaBrowser.Controller/Providers/IImageProvider.cs +++ b/MediaBrowser.Controller/Providers/IImageProvider.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Controller.Entities; - namespace MediaBrowser.Controller.Providers { + using MediaBrowser.Controller.Entities; + /// /// Interface IImageProvider. /// diff --git a/MediaBrowser.Controller/Providers/IRemoteImageProvider.cs b/MediaBrowser.Controller/Providers/IRemoteImageProvider.cs index 115b9a98..54e2fe9d 100644 --- a/MediaBrowser.Controller/Providers/IRemoteImageProvider.cs +++ b/MediaBrowser.Controller/Providers/IRemoteImageProvider.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Providers; - namespace MediaBrowser.Controller.Providers { + using System.Collections.Generic; + using System.Net.Http; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Providers; + /// /// Interface IImageProvider. /// diff --git a/MediaBrowser.Controller/Providers/IRemoteMetadataProvider.cs b/MediaBrowser.Controller/Providers/IRemoteMetadataProvider.cs index 19757b13..7aa8346a 100644 --- a/MediaBrowser.Controller/Providers/IRemoteMetadataProvider.cs +++ b/MediaBrowser.Controller/Providers/IRemoteMetadataProvider.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Model.Providers; - namespace MediaBrowser.Controller.Providers { + using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Model.Providers; + /// /// Interface IRemoteMetadataProvider. /// diff --git a/MediaBrowser.Controller/QuickConnect/IQuickConnect.cs b/MediaBrowser.Controller/QuickConnect/IQuickConnect.cs index 345d1d2a..b64f285e 100644 --- a/MediaBrowser.Controller/QuickConnect/IQuickConnect.cs +++ b/MediaBrowser.Controller/QuickConnect/IQuickConnect.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Threading.Tasks; -using MediaBrowser.Controller.Authentication; -using MediaBrowser.Controller.Net; -using MediaBrowser.Model.QuickConnect; - namespace MediaBrowser.Controller.QuickConnect { + using System; + using System.Threading.Tasks; + using MediaBrowser.Controller.Authentication; + using MediaBrowser.Controller.Net; + using MediaBrowser.Model.QuickConnect; + /// /// Quick connect standard interface. /// diff --git a/MediaBrowser.Controller/Resolvers/IResolverIgnoreRule.cs b/MediaBrowser.Controller/Resolvers/IResolverIgnoreRule.cs index 098c9d2b..752d100a 100644 --- a/MediaBrowser.Controller/Resolvers/IResolverIgnoreRule.cs +++ b/MediaBrowser.Controller/Resolvers/IResolverIgnoreRule.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Controller.Entities; -using MediaBrowser.Model.IO; - namespace MediaBrowser.Controller.Resolvers { + using MediaBrowser.Controller.Entities; + using MediaBrowser.Model.IO; + /// /// Provides a base "rule" that anyone can use to have paths ignored by the resolver. /// diff --git a/MediaBrowser.Controller/Resolvers/ItemResolver.cs b/MediaBrowser.Controller/Resolvers/ItemResolver.cs index 5b3aa826..00f30a8f 100644 --- a/MediaBrowser.Controller/Resolvers/ItemResolver.cs +++ b/MediaBrowser.Controller/Resolvers/ItemResolver.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; - namespace MediaBrowser.Controller.Resolvers { + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Library; + /// /// Class ItemResolver. /// diff --git a/MediaBrowser.Controller/Security/IAuthenticationManager.cs b/MediaBrowser.Controller/Security/IAuthenticationManager.cs index 4a789680..bf39df6e 100644 --- a/MediaBrowser.Controller/Security/IAuthenticationManager.cs +++ b/MediaBrowser.Controller/Security/IAuthenticationManager.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Threading.Tasks; - namespace MediaBrowser.Controller.Security { + using System.Collections.Generic; + using System.Threading.Tasks; + /// /// Handles the retrieval and storage of API keys. /// diff --git a/MediaBrowser.Controller/Session/SessionInfo.cs b/MediaBrowser.Controller/Session/SessionInfo.cs index d2d40f5c..9b8d3cff 100644 --- a/MediaBrowser.Controller/Session/SessionInfo.cs +++ b/MediaBrowser.Controller/Session/SessionInfo.cs @@ -2,22 +2,22 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text.Json.Serialization; -using System.Threading; -using System.Threading.Tasks; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Session; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.Controller.Session { +#nullable disable + + using System; + using System.Collections.Generic; + using System.Linq; + using System.Text.Json.Serialization; + using System.Threading; + using System.Threading.Tasks; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Model.Dto; + using MediaBrowser.Model.Session; + using Microsoft.Extensions.Logging; + /// /// Class SessionInfo. /// diff --git a/MediaBrowser.Controller/Sorting/IBaseItemComparer.cs b/MediaBrowser.Controller/Sorting/IBaseItemComparer.cs index 91844220..68bea5e3 100644 --- a/MediaBrowser.Controller/Sorting/IBaseItemComparer.cs +++ b/MediaBrowser.Controller/Sorting/IBaseItemComparer.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Entities; - namespace MediaBrowser.Controller.Sorting { + using System.Collections.Generic; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Entities; + /// /// Interface IBaseItemComparer. /// diff --git a/MediaBrowser.Controller/Sorting/IUserBaseItemComparer.cs b/MediaBrowser.Controller/Sorting/IUserBaseItemComparer.cs index 838dc7d0..04f21e7d 100644 --- a/MediaBrowser.Controller/Sorting/IUserBaseItemComparer.cs +++ b/MediaBrowser.Controller/Sorting/IUserBaseItemComparer.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using Jellyfin.Database.Implementations.Entities; -using MediaBrowser.Controller.Library; - namespace MediaBrowser.Controller.Sorting { +#nullable disable + + using Jellyfin.Database.Implementations.Entities; + using MediaBrowser.Controller.Library; + /// /// Represents a BaseItem comparer that requires a User to perform its comparison. /// diff --git a/MediaBrowser.Controller/Streaming/ProgressiveFileStream.cs b/MediaBrowser.Controller/Streaming/ProgressiveFileStream.cs index 6ff8417d..a9328583 100644 --- a/MediaBrowser.Controller/Streaming/ProgressiveFileStream.cs +++ b/MediaBrowser.Controller/Streaming/ProgressiveFileStream.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Streaming; + using System; using System.Diagnostics; using System.IO; @@ -10,8 +12,6 @@ using System.Threading.Tasks; using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Model.IO; -namespace MediaBrowser.Controller.Streaming; - /// /// A progressive file stream for transferring transcoded files as they are written to. /// diff --git a/MediaBrowser.Controller/Streaming/StreamState.cs b/MediaBrowser.Controller/Streaming/StreamState.cs index d30853fc..873b0cc3 100644 --- a/MediaBrowser.Controller/Streaming/StreamState.cs +++ b/MediaBrowser.Controller/Streaming/StreamState.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Streaming; + using System; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Model.Dlna; -namespace MediaBrowser.Controller.Streaming; - /// /// The stream state dto. /// diff --git a/MediaBrowser.Controller/Streaming/StreamingRequestDto.cs b/MediaBrowser.Controller/Streaming/StreamingRequestDto.cs index 0461f350..58c5c9d3 100644 --- a/MediaBrowser.Controller/Streaming/StreamingRequestDto.cs +++ b/MediaBrowser.Controller/Streaming/StreamingRequestDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Controller.MediaEncoding; - namespace MediaBrowser.Controller.Streaming; +using MediaBrowser.Controller.MediaEncoding; + /// /// The audio streaming request dto. /// diff --git a/MediaBrowser.Controller/Subtitles/SubtitleDownloadFailureEventArgs.cs b/MediaBrowser.Controller/Subtitles/SubtitleDownloadFailureEventArgs.cs index 2206b877..44310308 100644 --- a/MediaBrowser.Controller/Subtitles/SubtitleDownloadFailureEventArgs.cs +++ b/MediaBrowser.Controller/Subtitles/SubtitleDownloadFailureEventArgs.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using MediaBrowser.Controller.Entities; - namespace MediaBrowser.Controller.Subtitles { +#nullable disable + + using System; + using MediaBrowser.Controller.Entities; + /// /// An event that occurs when subtitle downloading fails. /// diff --git a/MediaBrowser.Controller/SyncPlay/GroupMember.cs b/MediaBrowser.Controller/SyncPlay/GroupMember.cs index 26998cfb..09d9ba58 100644 --- a/MediaBrowser.Controller/SyncPlay/GroupMember.cs +++ b/MediaBrowser.Controller/SyncPlay/GroupMember.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using MediaBrowser.Controller.Session; - namespace MediaBrowser.Controller.SyncPlay { +#nullable disable + + using System; + using MediaBrowser.Controller.Session; + /// /// Class GroupMember. /// diff --git a/MediaBrowser.Controller/SyncPlay/GroupStates/AbstractGroupState.cs b/MediaBrowser.Controller/SyncPlay/GroupStates/AbstractGroupState.cs index 2841700d..d0e7043e 100644 --- a/MediaBrowser.Controller/SyncPlay/GroupStates/AbstractGroupState.cs +++ b/MediaBrowser.Controller/SyncPlay/GroupStates/AbstractGroupState.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Controller.SyncPlay.PlaybackRequests; -using MediaBrowser.Model.SyncPlay; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.Controller.SyncPlay.GroupStates { +#nullable disable + + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Controller.SyncPlay.PlaybackRequests; + using MediaBrowser.Model.SyncPlay; + using Microsoft.Extensions.Logging; + /// /// Class AbstractGroupState. /// diff --git a/MediaBrowser.Controller/SyncPlay/GroupStates/IdleGroupState.cs b/MediaBrowser.Controller/SyncPlay/GroupStates/IdleGroupState.cs index cac8bab6..807a0112 100644 --- a/MediaBrowser.Controller/SyncPlay/GroupStates/IdleGroupState.cs +++ b/MediaBrowser.Controller/SyncPlay/GroupStates/IdleGroupState.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Controller.SyncPlay.PlaybackRequests; -using MediaBrowser.Model.SyncPlay; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.Controller.SyncPlay.GroupStates { +#nullable disable + + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Controller.SyncPlay.PlaybackRequests; + using MediaBrowser.Model.SyncPlay; + using Microsoft.Extensions.Logging; + /// /// Class IdleGroupState. /// diff --git a/MediaBrowser.Controller/SyncPlay/GroupStates/PausedGroupState.cs b/MediaBrowser.Controller/SyncPlay/GroupStates/PausedGroupState.cs index e5a3ace9..8fc10d48 100644 --- a/MediaBrowser.Controller/SyncPlay/GroupStates/PausedGroupState.cs +++ b/MediaBrowser.Controller/SyncPlay/GroupStates/PausedGroupState.cs @@ -2,17 +2,17 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Controller.SyncPlay.PlaybackRequests; -using MediaBrowser.Model.SyncPlay; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.Controller.SyncPlay.GroupStates { +#nullable disable + + using System; + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Controller.SyncPlay.PlaybackRequests; + using MediaBrowser.Model.SyncPlay; + using Microsoft.Extensions.Logging; + /// /// Class PausedGroupState. /// diff --git a/MediaBrowser.Controller/SyncPlay/GroupStates/PlayingGroupState.cs b/MediaBrowser.Controller/SyncPlay/GroupStates/PlayingGroupState.cs index 774fa523..8e0b1417 100644 --- a/MediaBrowser.Controller/SyncPlay/GroupStates/PlayingGroupState.cs +++ b/MediaBrowser.Controller/SyncPlay/GroupStates/PlayingGroupState.cs @@ -2,17 +2,17 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Controller.SyncPlay.PlaybackRequests; -using MediaBrowser.Model.SyncPlay; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.Controller.SyncPlay.GroupStates { +#nullable disable + + using System; + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Controller.SyncPlay.PlaybackRequests; + using MediaBrowser.Model.SyncPlay; + using Microsoft.Extensions.Logging; + /// /// Class PlayingGroupState. /// diff --git a/MediaBrowser.Controller/SyncPlay/GroupStates/WaitingGroupState.cs b/MediaBrowser.Controller/SyncPlay/GroupStates/WaitingGroupState.cs index 22ff2e43..a5b9a9b1 100644 --- a/MediaBrowser.Controller/SyncPlay/GroupStates/WaitingGroupState.cs +++ b/MediaBrowser.Controller/SyncPlay/GroupStates/WaitingGroupState.cs @@ -2,17 +2,17 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Controller.SyncPlay.PlaybackRequests; -using MediaBrowser.Model.SyncPlay; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.Controller.SyncPlay.GroupStates { +#nullable disable + + using System; + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Controller.SyncPlay.PlaybackRequests; + using MediaBrowser.Model.SyncPlay; + using Microsoft.Extensions.Logging; + /// /// Class WaitingGroupState. /// diff --git a/MediaBrowser.Controller/SyncPlay/IGroupPlaybackRequest.cs b/MediaBrowser.Controller/SyncPlay/IGroupPlaybackRequest.cs index 393d3477..3b772634 100644 --- a/MediaBrowser.Controller/SyncPlay/IGroupPlaybackRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/IGroupPlaybackRequest.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay { +#nullable disable + + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.SyncPlay; + /// /// Interface IGroupPlaybackRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/IGroupState.cs b/MediaBrowser.Controller/SyncPlay/IGroupState.cs index 97742836..9b003c13 100644 --- a/MediaBrowser.Controller/SyncPlay/IGroupState.cs +++ b/MediaBrowser.Controller/SyncPlay/IGroupState.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Controller.SyncPlay.PlaybackRequests; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay { +#nullable disable + + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Controller.SyncPlay.PlaybackRequests; + using MediaBrowser.Model.SyncPlay; + /// /// Interface IGroupState. /// diff --git a/MediaBrowser.Controller/SyncPlay/IGroupStateContext.cs b/MediaBrowser.Controller/SyncPlay/IGroupStateContext.cs index 139893bf..011f785c 100644 --- a/MediaBrowser.Controller/SyncPlay/IGroupStateContext.cs +++ b/MediaBrowser.Controller/SyncPlay/IGroupStateContext.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Controller.Session; -using MediaBrowser.Controller.SyncPlay.Queue; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay { +#nullable disable + + using System; + using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Controller.Session; + using MediaBrowser.Controller.SyncPlay.Queue; + using MediaBrowser.Model.SyncPlay; + /// /// Interface IGroupStateContext. /// diff --git a/MediaBrowser.Controller/SyncPlay/ISyncPlayManager.cs b/MediaBrowser.Controller/SyncPlay/ISyncPlayManager.cs index 09690e16..28798879 100644 --- a/MediaBrowser.Controller/SyncPlay/ISyncPlayManager.cs +++ b/MediaBrowser.Controller/SyncPlay/ISyncPlayManager.cs @@ -2,17 +2,17 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Collections.Generic; -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Controller.SyncPlay.Requests; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay { +#nullable disable + + using System; + using System.Collections.Generic; + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Controller.SyncPlay.Requests; + using MediaBrowser.Model.SyncPlay; + /// /// Interface ISyncPlayManager. /// diff --git a/MediaBrowser.Controller/SyncPlay/ISyncPlayRequest.cs b/MediaBrowser.Controller/SyncPlay/ISyncPlayRequest.cs index 82a8c6f7..449876c9 100644 --- a/MediaBrowser.Controller/SyncPlay/ISyncPlayRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/ISyncPlayRequest.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay { + using MediaBrowser.Model.SyncPlay; + /// /// Interface ISyncPlayRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/AbstractPlaybackRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/AbstractPlaybackRequest.cs index bee25d6a..36f18d7a 100644 --- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/AbstractPlaybackRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/AbstractPlaybackRequest.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests { +#nullable disable + + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.SyncPlay; + /// /// Class AbstractPlaybackRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/BufferGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/BufferGroupRequest.cs index 20a0bc5c..49ea94b2 100644 --- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/BufferGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/BufferGroupRequest.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests { +#nullable disable + + using System; + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.SyncPlay; + /// /// Class BufferGroupRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/IgnoreWaitGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/IgnoreWaitGroupRequest.cs index cb6ecdf9..f19bbd79 100644 --- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/IgnoreWaitGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/IgnoreWaitGroupRequest.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests { +#nullable disable + + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.SyncPlay; + /// /// Class IgnoreWaitGroupRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/MovePlaylistItemGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/MovePlaylistItemGroupRequest.cs index eb51d8c7..0a2efa02 100644 --- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/MovePlaylistItemGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/MovePlaylistItemGroupRequest.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests { +#nullable disable + + using System; + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.SyncPlay; + /// /// Class MovePlaylistItemGroupRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/NextItemGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/NextItemGroupRequest.cs index e53e1758..32d21b12 100644 --- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/NextItemGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/NextItemGroupRequest.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests { +#nullable disable + + using System; + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.SyncPlay; + /// /// Class NextItemGroupRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PauseGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PauseGroupRequest.cs index ff288065..bb15794b 100644 --- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PauseGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PauseGroupRequest.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests { +#nullable disable + + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.SyncPlay; + /// /// Class PauseGroupRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PingGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PingGroupRequest.cs index 814232ee..3aa42315 100644 --- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PingGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PingGroupRequest.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests { +#nullable disable + + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.SyncPlay; + /// /// Class PingGroupRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PlayGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PlayGroupRequest.cs index 37e05169..a050133c 100644 --- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PlayGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PlayGroupRequest.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Collections.Generic; -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests { +#nullable disable + + using System; + using System.Collections.Generic; + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.SyncPlay; + /// /// Class PlayGroupRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PreviousItemGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PreviousItemGroupRequest.cs index 94d33dd8..30aab8bf 100644 --- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PreviousItemGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PreviousItemGroupRequest.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests { +#nullable disable + + using System; + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.SyncPlay; + /// /// Class PreviousItemGroupRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/QueueGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/QueueGroupRequest.cs index 1211bd58..5475a72a 100644 --- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/QueueGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/QueueGroupRequest.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Collections.Generic; -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests { +#nullable disable + + using System; + using System.Collections.Generic; + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.SyncPlay; + /// /// Class QueueGroupRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/ReadyGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/ReadyGroupRequest.cs index 793939ab..78da98ee 100644 --- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/ReadyGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/ReadyGroupRequest.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests { +#nullable disable + + using System; + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.SyncPlay; + /// /// Class ReadyGroupRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/RemoveFromPlaylistGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/RemoveFromPlaylistGroupRequest.cs index 7b58d17b..749f324c 100644 --- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/RemoveFromPlaylistGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/RemoveFromPlaylistGroupRequest.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Collections.Generic; -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests { +#nullable disable + + using System; + using System.Collections.Generic; + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.SyncPlay; + /// /// Class RemoveFromPlaylistGroupRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SeekGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SeekGroupRequest.cs index b6af02df..e68e4de2 100644 --- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SeekGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SeekGroupRequest.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests { +#nullable disable + + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.SyncPlay; + /// /// Class SeekGroupRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetPlaylistItemGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetPlaylistItemGroupRequest.cs index a8a8f116..46d9c84c 100644 --- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetPlaylistItemGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetPlaylistItemGroupRequest.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests { +#nullable disable + + using System; + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.SyncPlay; + /// /// Class SetPlaylistItemGroupRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetRepeatModeGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetRepeatModeGroupRequest.cs index d990e899..5cdf5926 100644 --- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetRepeatModeGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetRepeatModeGroupRequest.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests { +#nullable disable + + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.SyncPlay; + /// /// Class SetRepeatModeGroupRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetShuffleModeGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetShuffleModeGroupRequest.cs index 48b8ab8a..6b161386 100644 --- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetShuffleModeGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetShuffleModeGroupRequest.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests { +#nullable disable + + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.SyncPlay; + /// /// Class SetShuffleModeGroupRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/StopGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/StopGroupRequest.cs index 19e15ad3..c6f0698d 100644 --- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/StopGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/StopGroupRequest.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests { + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.SyncPlay; + /// /// Class StopGroupRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/UnpauseGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/UnpauseGroupRequest.cs index 92291312..e1a4082d 100644 --- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/UnpauseGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/UnpauseGroupRequest.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests { + using System.Threading; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.SyncPlay; + /// /// Class UnpauseGroupRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/Queue/PlayQueueManager.cs b/MediaBrowser.Controller/SyncPlay/Queue/PlayQueueManager.cs index cd89574d..ea3e9048 100644 --- a/MediaBrowser.Controller/SyncPlay/Queue/PlayQueueManager.cs +++ b/MediaBrowser.Controller/SyncPlay/Queue/PlayQueueManager.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Collections.Generic; -using System.Linq; -using Jellyfin.Extensions; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.Queue { +#nullable disable + + using System; + using System.Collections.Generic; + using System.Linq; + using Jellyfin.Extensions; + using MediaBrowser.Model.SyncPlay; + /// /// Class PlayQueueManager. /// diff --git a/MediaBrowser.Controller/SyncPlay/Requests/JoinGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/Requests/JoinGroupRequest.cs index 4279ec87..b484e7f0 100644 --- a/MediaBrowser.Controller/SyncPlay/Requests/JoinGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/Requests/JoinGroupRequest.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.Requests { + using System; + using MediaBrowser.Model.SyncPlay; + /// /// Class JoinGroupRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/Requests/LeaveGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/Requests/LeaveGroupRequest.cs index c1e7b271..1abccf97 100644 --- a/MediaBrowser.Controller/SyncPlay/Requests/LeaveGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/Requests/LeaveGroupRequest.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.Requests { + using MediaBrowser.Model.SyncPlay; + /// /// Class LeaveGroupRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/Requests/ListGroupsRequest.cs b/MediaBrowser.Controller/SyncPlay/Requests/ListGroupsRequest.cs index 0b93c490..8c6e6d2c 100644 --- a/MediaBrowser.Controller/SyncPlay/Requests/ListGroupsRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/Requests/ListGroupsRequest.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.Requests { + using MediaBrowser.Model.SyncPlay; + /// /// Class ListGroupsRequest. /// diff --git a/MediaBrowser.Controller/SyncPlay/Requests/NewGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/Requests/NewGroupRequest.cs index 2c780d13..303ac1e6 100644 --- a/MediaBrowser.Controller/SyncPlay/Requests/NewGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/Requests/NewGroupRequest.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Model.SyncPlay; - namespace MediaBrowser.Controller.SyncPlay.Requests { + using MediaBrowser.Model.SyncPlay; + /// /// Class NewGroupRequest. /// diff --git a/MediaBrowser.Controller/SystemBackupService/BackupManifestDto.cs b/MediaBrowser.Controller/SystemBackupService/BackupManifestDto.cs index 2eec8b36..af34a3d2 100644 --- a/MediaBrowser.Controller/SystemBackupService/BackupManifestDto.cs +++ b/MediaBrowser.Controller/SystemBackupService/BackupManifestDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace MediaBrowser.Controller.SystemBackupService; +using System; + /// /// Manifest type for backups internal structure. /// diff --git a/MediaBrowser.Controller/SystemBackupService/BackupOptionsDto.cs b/MediaBrowser.Controller/SystemBackupService/BackupOptionsDto.cs index 45553673..6edcb6cb 100644 --- a/MediaBrowser.Controller/SystemBackupService/BackupOptionsDto.cs +++ b/MediaBrowser.Controller/SystemBackupService/BackupOptionsDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace MediaBrowser.Controller.SystemBackupService; +using System; + /// /// Defines the optional contents of the backup archive. /// diff --git a/MediaBrowser.Controller/SystemBackupService/BackupRestoreRequestDto.cs b/MediaBrowser.Controller/SystemBackupService/BackupRestoreRequestDto.cs index ea6de187..3cdf6a2b 100644 --- a/MediaBrowser.Controller/SystemBackupService/BackupRestoreRequestDto.cs +++ b/MediaBrowser.Controller/SystemBackupService/BackupRestoreRequestDto.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.SystemBackupService; + using System; using MediaBrowser.Common.Configuration; -namespace MediaBrowser.Controller.SystemBackupService; - /// /// Defines properties used to start a restore process. /// diff --git a/MediaBrowser.Controller/SystemBackupService/IBackupService.cs b/MediaBrowser.Controller/SystemBackupService/IBackupService.cs index 340fce65..b66ad92b 100644 --- a/MediaBrowser.Controller/SystemBackupService/IBackupService.cs +++ b/MediaBrowser.Controller/SystemBackupService/IBackupService.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Server.Implementations.SystemBackupService; + using System; using System.IO; using System.Threading.Tasks; using MediaBrowser.Controller.SystemBackupService; -namespace Jellyfin.Server.Implementations.SystemBackupService; - /// /// Defines an interface to restore and backup the jellyfin system. /// diff --git a/MediaBrowser.Controller/Trickplay/ITrickplayManager.cs b/MediaBrowser.Controller/Trickplay/ITrickplayManager.cs index 238993c9..f536fc7a 100644 --- a/MediaBrowser.Controller/Trickplay/ITrickplayManager.cs +++ b/MediaBrowser.Controller/Trickplay/ITrickplayManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Controller.Trickplay; + using System; using System.Collections.Generic; using System.Threading; @@ -10,8 +12,6 @@ using Jellyfin.Database.Implementations.Entities; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Configuration; -namespace MediaBrowser.Controller.Trickplay; - /// /// Interface ITrickplayManager. /// diff --git a/MediaBrowser.Controller/obj/Debug/net10.0/MediaBrowser.Controller.csproj.AssemblyReference.cache b/MediaBrowser.Controller/obj/Debug/net10.0/MediaBrowser.Controller.csproj.AssemblyReference.cache index d6f262c93ebdc7ae2c7a246189751a03039b5828..4985e939444c619e2091b492b268ed9c07e5341a 100644 GIT binary patch delta 3143 zcmb_e%Wo4$9QHT_LLip$qeMJHLP8oxX6!Uk)mEz1;3O)LP)Je=)IzN7!7Sa~+02ep z+@hvZ)k_YQtWghbRjH3Nh>BBDK}cK>;yYeK$RP z9uY^!)|))osaII0Z=Br(y9Z;!Hvo~9szZ?pmn#<4O$7Scx$sNu4oI?(!--@}?&h#z z@cQsu9IwU1$SGMXIHysqpg9PhG;IT!$fBA&z&-8d*T&iIaCD6SaF^Qw9>9R-0=Fc} zc(T=azl`UCX~1Qql@NK4=oAreP-7!1Y}3XTkHl>qoV6^hf@;n)9+d}H(G3buIoMJc zrqZb;y-2WwuTnUFgCa}R(t(S(T-L2JoGmz%XsxA5-}<@wTI#pkS40B!Oq0^d8ARb( zqMJI^*HKG7RmFwT3NC(tXp04#3JiD1*(~bTnm3-q2jteAu9Yq9P`&8zgmDo$ExAMoq~#JaF{!F+QlrCi zBZoa53@Y2mkhGU$3{P5oDzLqR$hyw`s+&c@VuA!hpnrV^X5n;pdg^rm_P{gqtDDmNE?P<2zE#PW;<|DV>51u+nR$- zQ0tr6s8e0uQ(`~z>oyL4XOw!J_~hRAazZ>bd$0@7E_h{5cHvUjV1s5PDmvMDMvky2 z(K!1uvX6oAp|||n@FFxi<9E?vHA_m9ARnS)g%Hm49;7D@)CEJZ6sK>SQ=!Y>UNd%U zd_R95>=L?{eEj3{N6(%ed)hp|6YODhh;1hN*&lH?#gt!Ub+r`Z!9z05CLM8^x}h`I z2v;wzAKo}rxc{@hDOCy7@kk&_5`%T!a%*_5f=E>>7%eXaFv%-4$x{2=>P-7p=aB5% z3gWHOX%*&3)uy;iH2YeE`dxya-aat%9G90H;?)Uv4J(DTqdfbQGu|r9Rxe~b=Vnp2_<~)%VimrD~3h_=e+wIuz&dTP$J>wzka&;#XFJI w!Db|Mcqs*{`S|wf|HyxzmPCiyWnc9Uv)*t5iWJ1!5+wIq2j0Is&~rTXFHo1aC;$Ke delta 96 zcmV-m0H6Qcg#o%)2nGQZ00001XOpl38 -using System.IO; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.IO; - namespace MediaBrowser.LocalMetadata { + using System.IO; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.IO; + /// /// The BaseXmlProvider. /// diff --git a/MediaBrowser.LocalMetadata/Images/CollectionFolderLocalImageProvider.cs b/MediaBrowser.LocalMetadata/Images/CollectionFolderLocalImageProvider.cs index d5585e11..0d5511d2 100644 --- a/MediaBrowser.LocalMetadata/Images/CollectionFolderLocalImageProvider.cs +++ b/MediaBrowser.LocalMetadata/Images/CollectionFolderLocalImageProvider.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.IO; - namespace MediaBrowser.LocalMetadata.Images { + using System.Collections.Generic; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.IO; + /// /// Collection folder local image provider. /// diff --git a/MediaBrowser.LocalMetadata/Images/EpisodeLocalImageProvider.cs b/MediaBrowser.LocalMetadata/Images/EpisodeLocalImageProvider.cs index 5a63ef73..5baf3bb1 100644 --- a/MediaBrowser.LocalMetadata/Images/EpisodeLocalImageProvider.cs +++ b/MediaBrowser.LocalMetadata/Images/EpisodeLocalImageProvider.cs @@ -2,19 +2,19 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using Jellyfin.Extensions; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.IO; - namespace MediaBrowser.LocalMetadata.Images { + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using Jellyfin.Extensions; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.IO; + /// /// Episode local image provider. /// diff --git a/MediaBrowser.LocalMetadata/Images/InternalMetadataFolderImageProvider.cs b/MediaBrowser.LocalMetadata/Images/InternalMetadataFolderImageProvider.cs index b1d58443..8c00e5d9 100644 --- a/MediaBrowser.LocalMetadata/Images/InternalMetadataFolderImageProvider.cs +++ b/MediaBrowser.LocalMetadata/Images/InternalMetadataFolderImageProvider.cs @@ -2,17 +2,17 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.IO; -using System.Linq; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.LocalMetadata.Images { + using System.Collections.Generic; + using System.IO; + using System.Linq; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// Internal metadata folder image provider. /// diff --git a/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs b/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs index 269e3a54..144a4fd3 100644 --- a/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs +++ b/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs @@ -2,22 +2,22 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using Jellyfin.Extensions; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.IO; - namespace MediaBrowser.LocalMetadata.Images { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.IO; + using System.Linq; + using Jellyfin.Extensions; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.IO; + /// /// Local image provider. /// diff --git a/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs index 55cf6a84..564d2316 100644 --- a/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs +++ b/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs @@ -2,25 +2,25 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading; -using System.Xml; -using Jellyfin.Data.Enums; -using Jellyfin.Extensions; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Extensions; -using MediaBrowser.Controller.Playlists; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.LocalMetadata.Parsers { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.IO; + using System.Linq; + using System.Text; + using System.Threading; + using System.Xml; + using Jellyfin.Data.Enums; + using Jellyfin.Extensions; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Extensions; + using MediaBrowser.Controller.Playlists; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using Microsoft.Extensions.Logging; + /// /// Provides a base class for parsing metadata xml. /// diff --git a/MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs index 3290d1ed..30241bf6 100644 --- a/MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs +++ b/MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Xml; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Providers; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.LocalMetadata.Parsers { + using System.Collections.Generic; + using System.Xml; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Providers; + using Microsoft.Extensions.Logging; + /// /// The box set xml parser. /// diff --git a/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs index 45af6f57..cd04e801 100644 --- a/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs +++ b/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Xml; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Extensions; -using MediaBrowser.Controller.Playlists; -using MediaBrowser.Controller.Providers; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.LocalMetadata.Parsers { + using System; + using System.Collections.Generic; + using System.Xml; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Extensions; + using MediaBrowser.Controller.Playlists; + using MediaBrowser.Controller.Providers; + using Microsoft.Extensions.Logging; + /// /// Playlist xml parser. /// diff --git a/MediaBrowser.LocalMetadata/Providers/BoxSetXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/BoxSetXmlProvider.cs index fd860ab7..67d8250b 100644 --- a/MediaBrowser.LocalMetadata/Providers/BoxSetXmlProvider.cs +++ b/MediaBrowser.LocalMetadata/Providers/BoxSetXmlProvider.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; -using System.Threading; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Providers; -using MediaBrowser.LocalMetadata.Parsers; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.LocalMetadata.Providers { + using System.IO; + using System.Threading; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Providers; + using MediaBrowser.LocalMetadata.Parsers; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// Class BoxSetXmlProvider. /// diff --git a/MediaBrowser.LocalMetadata/Providers/PlaylistXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/PlaylistXmlProvider.cs index b2fd0e82..f7abd88b 100644 --- a/MediaBrowser.LocalMetadata/Providers/PlaylistXmlProvider.cs +++ b/MediaBrowser.LocalMetadata/Providers/PlaylistXmlProvider.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading; -using MediaBrowser.Controller.Playlists; -using MediaBrowser.Controller.Providers; -using MediaBrowser.LocalMetadata.Parsers; -using MediaBrowser.LocalMetadata.Savers; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.LocalMetadata.Providers { + using System.Threading; + using MediaBrowser.Controller.Playlists; + using MediaBrowser.Controller.Providers; + using MediaBrowser.LocalMetadata.Parsers; + using MediaBrowser.LocalMetadata.Savers; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// Playlist xml provider. /// diff --git a/MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs index a1013684..fb551ed0 100644 --- a/MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs @@ -2,27 +2,27 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using System.Xml; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Playlists; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.LocalMetadata.Savers { + using System; + using System.Globalization; + using System.IO; + using System.Linq; + using System.Text; + using System.Threading; + using System.Threading.Tasks; + using System.Xml; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Playlists; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// public abstract class BaseXmlSaver : IMetadataFileSaver { diff --git a/MediaBrowser.LocalMetadata/Savers/BoxSetXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/BoxSetXmlSaver.cs index a55e6e31..172e4449 100644 --- a/MediaBrowser.LocalMetadata/Savers/BoxSetXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/BoxSetXmlSaver.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; -using System.Threading.Tasks; -using System.Xml; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.LocalMetadata.Savers { + using System.IO; + using System.Threading.Tasks; + using System.Xml; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Library; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// Box set xml saver. /// diff --git a/MediaBrowser.LocalMetadata/Savers/PlaylistXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/PlaylistXmlSaver.cs index 24e5f81a..43e12982 100644 --- a/MediaBrowser.LocalMetadata/Savers/PlaylistXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/PlaylistXmlSaver.cs @@ -2,19 +2,19 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; -using System.Threading.Tasks; -using System.Xml; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Playlists; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.LocalMetadata.Savers { + using System.IO; + using System.Threading.Tasks; + using System.Xml; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Playlists; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// Playlist xml saver. /// diff --git a/MediaBrowser.LocalMetadata/obj/Debug/net10.0/MediaBrowser.LocalMetadata.csproj.AssemblyReference.cache b/MediaBrowser.LocalMetadata/obj/Debug/net10.0/MediaBrowser.LocalMetadata.csproj.AssemblyReference.cache index d6f262c93ebdc7ae2c7a246189751a03039b5828..8c622db6a74af30c097229fe3450aacf4cd3290d 100644 GIT binary patch delta 3210 zcmb_e&u<$=6!vVClBP}M`Uj1gHcgr|#8EnSNQ3|hiPT9&OH$e-lmb@OwLNvW?Cxx4 z$DxLb95^85fMiA-03q>19E)1@)QVO}Tu{}20ea`cwGxLivl)-Q_U@Wg?8)-HnfJ|m z@B6;Fck%IOpl1&ls`qT{nR)-=w-21#AN{0lU08axaE{<>s6^d@Q*k%U6W5Sw)~*jBM79`svvYN3^a3KTf$i5g*x46Zwr`T% z0DFfLA|8OjwVF$j1y`#!H7o@B*?H}Gb_=B0$66|#kgIuYn!G;z6xSayHFieU3NGqY zFX}FWr!B`s7P6@>H}FjR`LRj1SBp;woZ{O748VZz0Iwt}czP$a8GKOUxoDYi73pO} z-XR7>#1Cp>Ou@DsY;z=D>)?WIV+E@9p2@h}u#T=%c*e!HIxsVnSusikyZ8!)OV=r~ zMJ-*pj4KtxuE2$&ONriInwgt-YcFU1`1x|{P17>TSw!JEVps+>Hc?wWRmDZn8ZLc+ zXj=rE)kYLLuS>^|H4!ej4&Rx_1i?2bb>Jza(<*7r0)wC>RTG+5^tWQ9y%qc9ZI%st z!;k04A-S|@=oK5g)F`?9!nlOow!6d!WaJ96FsZ3yGUKCiA&-3>3@h8%h>VwG3{Ts9 zDzLML$fm*bs*^>*5?fwZ`Zwoc4$kG~W?undA3VFXF3PsxINrrY$W!@&7+8)F2~|76 zfB=2)tqZbFc-nC5>vw;6u%it@91yCo&Q;-U-}V4O@U6FK!71NDm<;stdv=q7U6cGJ zQ9bcBNIo9i&h?su^4Q))q=UoHM7v`_vmH99iFps=uI6AH)cdBk8d6vAl{iTJx{X87 z9_1b)}9lNn*ROAr@uXUa{N&%Gp5+D@e#J2>SvFW-W4-J$QnK@29HCstQLpzJfP`d zR|)q;?o56h3hw{xoXW34UkHPt{7Vfr9MP-c`6?ncy=b<*LBKSx&@{^&@TxNxRGq`J zZ)=FR%AhrvCpCxS3elabO;hote{T1bFL1_RYT9BHqnlBR!|6}|`c85<++>B;mpNx! z(nN96pGLB9S+TIW97a3u-5E{0l(JOsO|*(CRZ}OSbKZRp*gyQ?DVgxX-?wjk{?=e- wxRnVJZ?MpJ!sPCa<>-H(mQ=*-vafnaS+ACY;tJy1u{!TpgrnRU=sA)37h=fS`2YX_ delta 41 xcmccL&bTXrgN;#yfq{WBeX;_x^kj2B-iZb-Y_qm5+;TU6W7Sfo%}1o9H39Wv4P5{L diff --git a/MediaBrowser.MediaEncoding/Attachments/AttachmentExtractor.cs b/MediaBrowser.MediaEncoding/Attachments/AttachmentExtractor.cs index 1d75fa3c..52028f9e 100644 --- a/MediaBrowser.MediaEncoding/Attachments/AttachmentExtractor.cs +++ b/MediaBrowser.MediaEncoding/Attachments/AttachmentExtractor.cs @@ -2,27 +2,27 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Diagnostics; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using AsyncKeyedLock; -using MediaBrowser.Common.Extensions; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.IO; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.MediaEncoding; -using MediaBrowser.MediaEncoding.Encoder; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.MediaEncoding.Attachments { + using System; + using System.Diagnostics; + using System.Globalization; + using System.IO; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using AsyncKeyedLock; + using MediaBrowser.Common.Extensions; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.IO; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.MediaEncoding; + using MediaBrowser.MediaEncoding.Encoder; + using MediaBrowser.Model.Dto; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// public sealed class AttachmentExtractor : IAttachmentExtractor, IDisposable { diff --git a/MediaBrowser.MediaEncoding/BdInfo/BdInfoDirectoryInfo.cs b/MediaBrowser.MediaEncoding/BdInfo/BdInfoDirectoryInfo.cs index c8cb2932..55c50c98 100644 --- a/MediaBrowser.MediaEncoding/BdInfo/BdInfoDirectoryInfo.cs +++ b/MediaBrowser.MediaEncoding/BdInfo/BdInfoDirectoryInfo.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.MediaEncoding.BdInfo; + using System; using System.IO; using System.Linq; using BDInfo.IO; using MediaBrowser.Model.IO; -namespace MediaBrowser.MediaEncoding.BdInfo; - /// /// Class BdInfoDirectoryInfo. /// diff --git a/MediaBrowser.MediaEncoding/BdInfo/BdInfoExaminer.cs b/MediaBrowser.MediaEncoding/BdInfo/BdInfoExaminer.cs index f9d7f4ef..8b386408 100644 --- a/MediaBrowser.MediaEncoding/BdInfo/BdInfoExaminer.cs +++ b/MediaBrowser.MediaEncoding/BdInfo/BdInfoExaminer.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.MediaEncoding.BdInfo; + using System; using System.Collections.Generic; using System.Globalization; @@ -12,8 +14,6 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.IO; using MediaBrowser.Model.MediaInfo; -namespace MediaBrowser.MediaEncoding.BdInfo; - /// /// Class BdInfoExaminer. /// diff --git a/MediaBrowser.MediaEncoding/BdInfo/BdInfoFileInfo.cs b/MediaBrowser.MediaEncoding/BdInfo/BdInfoFileInfo.cs index 89e85df8..0f1037e4 100644 --- a/MediaBrowser.MediaEncoding/BdInfo/BdInfoFileInfo.cs +++ b/MediaBrowser.MediaEncoding/BdInfo/BdInfoFileInfo.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.MediaEncoding.BdInfo; + using System.IO; using MediaBrowser.Model.IO; -namespace MediaBrowser.MediaEncoding.BdInfo; - /// /// Class BdInfoFileInfo. /// diff --git a/MediaBrowser.MediaEncoding/Probing/FFProbeHelpers.cs b/MediaBrowser.MediaEncoding/Probing/FFProbeHelpers.cs index b2a26c9b..14980a8e 100644 --- a/MediaBrowser.MediaEncoding/Probing/FFProbeHelpers.cs +++ b/MediaBrowser.MediaEncoding/Probing/FFProbeHelpers.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; - namespace MediaBrowser.MediaEncoding.Probing { + using System; + using System.Collections.Generic; + using System.Globalization; + /// /// Class containing helper methods for working with FFprobe output. /// diff --git a/MediaBrowser.MediaEncoding/Probing/InternalMediaInfoResult.cs b/MediaBrowser.MediaEncoding/Probing/InternalMediaInfoResult.cs index 4f8b3eb5..ee2bef79 100644 --- a/MediaBrowser.MediaEncoding/Probing/InternalMediaInfoResult.cs +++ b/MediaBrowser.MediaEncoding/Probing/InternalMediaInfoResult.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System.Collections.Generic; -using System.Text.Json.Serialization; - namespace MediaBrowser.MediaEncoding.Probing { +#nullable disable + + using System.Collections.Generic; + using System.Text.Json.Serialization; + /// /// Class MediaInfoResult. /// diff --git a/MediaBrowser.MediaEncoding/Probing/MediaFormatInfo.cs b/MediaBrowser.MediaEncoding/Probing/MediaFormatInfo.cs index ea863718..28bf9a6f 100644 --- a/MediaBrowser.MediaEncoding/Probing/MediaFormatInfo.cs +++ b/MediaBrowser.MediaEncoding/Probing/MediaFormatInfo.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System.Collections.Generic; -using System.Text.Json.Serialization; - namespace MediaBrowser.MediaEncoding.Probing { +#nullable disable + + using System.Collections.Generic; + using System.Text.Json.Serialization; + /// /// Class MediaFormat. /// diff --git a/MediaBrowser.MediaEncoding/Probing/MediaFrameInfo.cs b/MediaBrowser.MediaEncoding/Probing/MediaFrameInfo.cs index 0c7584ec..6ca7efd1 100644 --- a/MediaBrowser.MediaEncoding/Probing/MediaFrameInfo.cs +++ b/MediaBrowser.MediaEncoding/Probing/MediaFrameInfo.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.MediaEncoding.Probing; + using System.Collections.Generic; using System.Text.Json.Serialization; -namespace MediaBrowser.MediaEncoding.Probing; - /// /// Class MediaFrameInfo. /// diff --git a/MediaBrowser.MediaEncoding/Probing/MediaFrameSideDataInfo.cs b/MediaBrowser.MediaEncoding/Probing/MediaFrameSideDataInfo.cs index a14e4d2a..b71f0b7f 100644 --- a/MediaBrowser.MediaEncoding/Probing/MediaFrameSideDataInfo.cs +++ b/MediaBrowser.MediaEncoding/Probing/MediaFrameSideDataInfo.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace MediaBrowser.MediaEncoding.Probing; +using System.Text.Json.Serialization; + /// /// Class MediaFrameSideDataInfo. /// Currently only records the SideDataType for HDR10+ detection. diff --git a/MediaBrowser.MediaEncoding/Probing/MediaStreamInfo.cs b/MediaBrowser.MediaEncoding/Probing/MediaStreamInfo.cs index ea6f6d56..320e10a8 100644 --- a/MediaBrowser.MediaEncoding/Probing/MediaStreamInfo.cs +++ b/MediaBrowser.MediaEncoding/Probing/MediaStreamInfo.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System.Collections.Generic; -using System.Text.Json.Serialization; - namespace MediaBrowser.MediaEncoding.Probing { +#nullable disable + + using System.Collections.Generic; + using System.Text.Json.Serialization; + /// /// Represents a stream within the output. /// diff --git a/MediaBrowser.MediaEncoding/Probing/MediaStreamInfoSideData.cs b/MediaBrowser.MediaEncoding/Probing/MediaStreamInfoSideData.cs index e6c26c42..314ba77d 100644 --- a/MediaBrowser.MediaEncoding/Probing/MediaStreamInfoSideData.cs +++ b/MediaBrowser.MediaEncoding/Probing/MediaStreamInfoSideData.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace MediaBrowser.MediaEncoding.Probing { + using System.Text.Json.Serialization; + /// /// Class MediaStreamInfoSideData. /// diff --git a/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs b/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs index 316e946d..cede3c8e 100644 --- a/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs +++ b/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs @@ -2,28 +2,28 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using System.Xml; -using Jellyfin.Data.Enums; -using Jellyfin.Extensions; -using MediaBrowser.Controller.Extensions; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Globalization; -using MediaBrowser.Model.MediaInfo; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.MediaEncoding.Probing { +#nullable disable + + using System; + using System.Collections.Generic; + using System.Globalization; + using System.IO; + using System.Linq; + using System.Text; + using System.Text.RegularExpressions; + using System.Xml; + using Jellyfin.Data.Enums; + using Jellyfin.Extensions; + using MediaBrowser.Controller.Extensions; + using MediaBrowser.Controller.Library; + using MediaBrowser.Model.Dto; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Globalization; + using MediaBrowser.Model.MediaInfo; + using Microsoft.Extensions.Logging; + /// /// Class responsible for normalizing FFprobe output. /// diff --git a/MediaBrowser.MediaEncoding/Subtitles/AssWriter.cs b/MediaBrowser.MediaEncoding/Subtitles/AssWriter.cs index 67b9a0e9..c5822c53 100644 --- a/MediaBrowser.MediaEncoding/Subtitles/AssWriter.cs +++ b/MediaBrowser.MediaEncoding/Subtitles/AssWriter.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading; -using MediaBrowser.Model.MediaInfo; - namespace MediaBrowser.MediaEncoding.Subtitles { + using System; + using System.Globalization; + using System.IO; + using System.Text; + using System.Text.RegularExpressions; + using System.Threading; + using MediaBrowser.Model.MediaInfo; + /// /// ASS subtitle writer. /// diff --git a/MediaBrowser.MediaEncoding/Subtitles/ISubtitleWriter.cs b/MediaBrowser.MediaEncoding/Subtitles/ISubtitleWriter.cs index 896bb9c7..9c7c36f6 100644 --- a/MediaBrowser.MediaEncoding/Subtitles/ISubtitleWriter.cs +++ b/MediaBrowser.MediaEncoding/Subtitles/ISubtitleWriter.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; -using System.Threading; -using MediaBrowser.Model.MediaInfo; - namespace MediaBrowser.MediaEncoding.Subtitles { + using System.IO; + using System.Threading; + using MediaBrowser.Model.MediaInfo; + /// /// Interface ISubtitleWriter. /// diff --git a/MediaBrowser.MediaEncoding/Subtitles/JsonWriter.cs b/MediaBrowser.MediaEncoding/Subtitles/JsonWriter.cs index e38f5296..89131d2d 100644 --- a/MediaBrowser.MediaEncoding/Subtitles/JsonWriter.cs +++ b/MediaBrowser.MediaEncoding/Subtitles/JsonWriter.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; -using System.Text.Json; -using System.Threading; -using MediaBrowser.Model.MediaInfo; - namespace MediaBrowser.MediaEncoding.Subtitles { + using System.IO; + using System.Text.Json; + using System.Threading; + using MediaBrowser.Model.MediaInfo; + /// /// JSON subtitle writer. /// diff --git a/MediaBrowser.MediaEncoding/Subtitles/SrtWriter.cs b/MediaBrowser.MediaEncoding/Subtitles/SrtWriter.cs index a6ade078..3362f3ed 100644 --- a/MediaBrowser.MediaEncoding/Subtitles/SrtWriter.cs +++ b/MediaBrowser.MediaEncoding/Subtitles/SrtWriter.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading; -using MediaBrowser.Model.MediaInfo; - namespace MediaBrowser.MediaEncoding.Subtitles { + using System; + using System.Globalization; + using System.IO; + using System.Text; + using System.Text.RegularExpressions; + using System.Threading; + using MediaBrowser.Model.MediaInfo; + /// /// SRT subtitle writer. /// diff --git a/MediaBrowser.MediaEncoding/Subtitles/SsaWriter.cs b/MediaBrowser.MediaEncoding/Subtitles/SsaWriter.cs index 7bdc73fb..3d34a8f2 100644 --- a/MediaBrowser.MediaEncoding/Subtitles/SsaWriter.cs +++ b/MediaBrowser.MediaEncoding/Subtitles/SsaWriter.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading; -using MediaBrowser.Model.MediaInfo; - namespace MediaBrowser.MediaEncoding.Subtitles { + using System; + using System.Globalization; + using System.IO; + using System.Text; + using System.Text.RegularExpressions; + using System.Threading; + using MediaBrowser.Model.MediaInfo; + /// /// SSA subtitle writer. /// diff --git a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEditParser.cs b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEditParser.cs index f784134e..8aa8b6a6 100644 --- a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEditParser.cs +++ b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEditParser.cs @@ -2,19 +2,19 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using Jellyfin.Extensions; -using MediaBrowser.Model.MediaInfo; -using Microsoft.Extensions.Logging; -using Nikse.SubtitleEdit.Core.Common; -using SubtitleFormat = Nikse.SubtitleEdit.Core.SubtitleFormats.SubtitleFormat; - namespace MediaBrowser.MediaEncoding.Subtitles { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.IO; + using System.Linq; + using Jellyfin.Extensions; + using MediaBrowser.Model.MediaInfo; + using Microsoft.Extensions.Logging; + using Nikse.SubtitleEdit.Core.Common; + using SubtitleFormat = Nikse.SubtitleEdit.Core.SubtitleFormats.SubtitleFormat; + /// /// SubStation Alpha subtitle parser. /// diff --git a/MediaBrowser.MediaEncoding/Subtitles/SubtitleFormatExtensions.cs b/MediaBrowser.MediaEncoding/Subtitles/SubtitleFormatExtensions.cs index ea9d7e81..d41950ff 100644 --- a/MediaBrowser.MediaEncoding/Subtitles/SubtitleFormatExtensions.cs +++ b/MediaBrowser.MediaEncoding/Subtitles/SubtitleFormatExtensions.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.MediaEncoding.Subtitles; + using System.Diagnostics.CodeAnalysis; using Nikse.SubtitleEdit.Core.SubtitleFormats; -namespace MediaBrowser.MediaEncoding.Subtitles; - internal static class SubtitleFormatExtensions { /// diff --git a/MediaBrowser.MediaEncoding/Subtitles/TtmlWriter.cs b/MediaBrowser.MediaEncoding/Subtitles/TtmlWriter.cs index 47031fe2..7a1a4ac9 100644 --- a/MediaBrowser.MediaEncoding/Subtitles/TtmlWriter.cs +++ b/MediaBrowser.MediaEncoding/Subtitles/TtmlWriter.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading; -using MediaBrowser.Model.MediaInfo; - namespace MediaBrowser.MediaEncoding.Subtitles { + using System.IO; + using System.Text; + using System.Text.RegularExpressions; + using System.Threading; + using MediaBrowser.Model.MediaInfo; + /// /// TTML subtitle writer. /// diff --git a/MediaBrowser.MediaEncoding/Subtitles/VttWriter.cs b/MediaBrowser.MediaEncoding/Subtitles/VttWriter.cs index 47a929cd..6893a07f 100644 --- a/MediaBrowser.MediaEncoding/Subtitles/VttWriter.cs +++ b/MediaBrowser.MediaEncoding/Subtitles/VttWriter.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading; -using MediaBrowser.Model.MediaInfo; - namespace MediaBrowser.MediaEncoding.Subtitles { + using System; + using System.IO; + using System.Text; + using System.Text.RegularExpressions; + using System.Threading; + using MediaBrowser.Model.MediaInfo; + /// /// Subtitle writer for the WebVTT format. /// diff --git a/MediaBrowser.MediaEncoding/Transcoding/TranscodeManager.cs b/MediaBrowser.MediaEncoding/Transcoding/TranscodeManager.cs index 0ad601aa..a86be4d3 100644 --- a/MediaBrowser.MediaEncoding/Transcoding/TranscodeManager.cs +++ b/MediaBrowser.MediaEncoding/Transcoding/TranscodeManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.MediaEncoding.Transcoding; + using System; using System.Collections.Generic; using System.Diagnostics; @@ -32,8 +34,6 @@ using MediaBrowser.Model.MediaInfo; using MediaBrowser.Model.Session; using Microsoft.Extensions.Logging; -namespace MediaBrowser.MediaEncoding.Transcoding; - /// public sealed class TranscodeManager : ITranscodeManager, IDisposable { diff --git a/MediaBrowser.MediaEncoding/obj/Debug/net10.0/MediaBrowser.MediaEncoding.csproj.AssemblyReference.cache b/MediaBrowser.MediaEncoding/obj/Debug/net10.0/MediaBrowser.MediaEncoding.csproj.AssemblyReference.cache index 011424eb7a263073ab1cdccd0476deb602d4ad57..a5e71c99cf1a8ae27eb18fdb87f1173b1752b6b8 100644 GIT binary patch delta 3191 zcmb_e&u<$=6!vVC67q}S*llQtrQ%4{swWWbg$qA=;EV)+00+31Q<>R}$6kAPok;A-^1PY%y*Kas zzWJH{eG7CP0Ao8Hn+Imz`{k<#&fO2c(Y7xvy^=pi@Ksc#Zr&-oo966QWSZ5>hMiwQ zB||?+@CPm;a0Qo;nJ@6a7g3>7&fAD)GcXen1WTp~Kr9y1A6}pT!TGZb01$6I3v}}k z(91T`33j8i4_w;0KT&E8OY@XzFJ)S$Ot%J!lrfPq2Ht30of*4;h-+Z`RgO6OJkxuo z*lY2wXFyzR0HA-Z>QZFE)rw6G3xRHSUOUL{fF%1!OC;lRHHS@;cZnb4`Xi>t&&ZC! zMV;ye-9_-U<(SAqHr3?@o~f4~JIJ2Y1||hi@$Di8pwD-J*BBN2+-_(+_>jbN(K6vG z(o2ZEO$>^NAJpWyf^9k2=19B?gbTKf6{yBK2M6Sab##rwGcLB(fvJ(yicuuk#g{2u zx<-*Ln(4x2TrL}SnSGi($S!J6iH^;D`(5>=)E~Du8p}({lg}aw&k@5isIi5bnyA_= zg4S^HeMFlgSXLWVki4roeyk2_!FBk~93}|9PN@S=A)Qu8V-^?$ZBTW-UYEcBqs{&A zk<~04_NE`t$YHs(Xy|1dyVNMUykJ~JZc{A-eKK+dS(sGSF{z0$xsb!YYYS`J_^6DR zvkOn#d=#*=hRBw|^Qx0Y!{XcCt#ohA!wj6u%w=B&pa-5^S{H3wa2&625%O4mAO@Br z^g;DbjD3JK_|^qQCp}rX^W{5VKiHLpz`?Hx!a5g(w|r*=Xn}9NK?Y9w7D5%ElULhL z0rt)B7eo)mSL63Y@TIO-9hAfN79uV5-8Bb<>tLsAdb=iVd0%6L z#ID^W1np6taq^SzZ_45D$?9;FuF8qgz5qM-GYVE zNa)WcX}7FsS6>e0nfJ(y=2=3SsQ2_)MdgaAlh7G&KL>2KcdEvMXaBkT@#k;$r-mC@ u5b@LseHl#c-$ah?eP$97v&(+%8e^SW0*VsEw`*(OuLvW#*Vl34#s2`lHqa^n delta 41 zcmV+^0M`HRqXEfu2nGQh00001XOkcU8 -using System; -using Microsoft.Extensions.Logging; +namespace MediaBrowser.Model.Activity; + using global::System; + using Microsoft.Extensions.Logging; -namespace MediaBrowser.Model.Activity -{ - /// - /// An activity log entry. - /// - public class ActivityLogEntry - { - /// - /// Initializes a new instance of the class. - /// - /// The name. - /// The type. - /// The user id. - public ActivityLogEntry(string name, string type, Guid userId) - { - Name = name; - Type = type; - UserId = userId; - } + /// + /// An activity log entry. + /// + public class ActivityLogEntry + { + /// + /// Initializes a new instance of the class. + /// + /// The name. + /// The type. + /// The user id. + public ActivityLogEntry(string name, string type, Guid userId) + { + this.Name = name; + this.Type = type; + this.UserId = userId; + } - /// - /// Gets or sets the identifier. - /// - /// The identifier. - public long Id { get; set; } + /// + /// Gets or sets the identifier. + /// + /// The identifier. + public long Id { get; set; } - /// - /// Gets or sets the name. - /// - /// The name. - public string Name { get; set; } + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } - /// - /// Gets or sets the overview. - /// - /// The overview. - public string? Overview { get; set; } + /// + /// Gets or sets the overview. + /// + /// The overview. + public string? Overview { get; set; } - /// - /// Gets or sets the short overview. - /// - /// The short overview. - public string? ShortOverview { get; set; } + /// + /// Gets or sets the short overview. + /// + /// The short overview. + public string? ShortOverview { get; set; } - /// - /// Gets or sets the type. - /// - /// The type. - public string Type { get; set; } + /// + /// Gets or sets the type. + /// + /// The type. + public string Type { get; set; } - /// - /// Gets or sets the item identifier. - /// - /// The item identifier. - public string? ItemId { get; set; } + /// + /// Gets or sets the item identifier. + /// + /// The item identifier. + public string? ItemId { get; set; } - /// - /// Gets or sets the date. - /// - /// The date. - public DateTime Date { get; set; } + /// + /// Gets or sets the date. + /// + /// The date. + public DateTime Date { get; set; } - /// - /// Gets or sets the user identifier. - /// - /// The user identifier. - public Guid UserId { get; set; } + /// + /// Gets or sets the user identifier. + /// + /// The user identifier. + public Guid UserId { get; set; } - /// - /// Gets or sets the user primary image tag. - /// - /// The user primary image tag. - [Obsolete("UserPrimaryImageTag is not used.")] - public string? UserPrimaryImageTag { get; set; } + /// + /// Gets or sets the user primary image tag. + /// + /// The user primary image tag. + [Obsolete("UserPrimaryImageTag is not used.")] + public string? UserPrimaryImageTag { get; set; } - /// - /// Gets or sets the log severity. - /// - /// The log severity. - public LogLevel Severity { get; set; } - } -} + /// + /// Gets or sets the log severity. + /// + /// The log severity. + public LogLevel Severity { get; set; } + } diff --git a/MediaBrowser.Model/Activity/IActivityManager.cs b/MediaBrowser.Model/Activity/IActivityManager.cs index 5d81e59a..cd436080 100644 --- a/MediaBrowser.Model/Activity/IActivityManager.cs +++ b/MediaBrowser.Model/Activity/IActivityManager.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Threading.Tasks; +namespace MediaBrowser.Model.Activity; + +using global::System; +using global::System.Threading.Tasks; using Jellyfin.Data.Events; using Jellyfin.Data.Queries; using Jellyfin.Database.Implementations.Entities; using MediaBrowser.Model.Querying; -namespace MediaBrowser.Model.Activity; - /// /// Interface for the activity manager. /// diff --git a/MediaBrowser.Model/ApiClient/ServerDiscoveryInfo.cs b/MediaBrowser.Model/ApiClient/ServerDiscoveryInfo.cs index e17a121d..0a6a409c 100644 --- a/MediaBrowser.Model/ApiClient/ServerDiscoveryInfo.cs +++ b/MediaBrowser.Model/ApiClient/ServerDiscoveryInfo.cs @@ -2,46 +2,44 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.ApiClient -{ - /// - /// The server discovery info model. - /// - public class ServerDiscoveryInfo - { - /// - /// Initializes a new instance of the class. - /// - /// The server address. - /// The server id. - /// The server name. - /// The endpoint address. - public ServerDiscoveryInfo(string address, string id, string name, string? endpointAddress = null) - { - Address = address; - Id = id; - Name = name; - EndpointAddress = endpointAddress; - } +namespace MediaBrowser.Model.ApiClient; + /// + /// The server discovery info model. + /// + public class ServerDiscoveryInfo + { + /// + /// Initializes a new instance of the class. + /// + /// The server address. + /// The server id. + /// The server name. + /// The endpoint address. + public ServerDiscoveryInfo(string address, string id, string name, string? endpointAddress = null) + { + Address = address; + Id = id; + Name = name; + EndpointAddress = endpointAddress; + } - /// - /// Gets the address. - /// - public string Address { get; } + /// + /// Gets the address. + /// + public string Address { get; } - /// - /// Gets the server identifier. - /// - public string Id { get; } + /// + /// Gets the server identifier. + /// + public string Id { get; } - /// - /// Gets the name. - /// - public string Name { get; } + /// + /// Gets the name. + /// + public string Name { get; } - /// - /// Gets the endpoint address. - /// - public string? EndpointAddress { get; } - } -} + /// + /// Gets the endpoint address. + /// + public string? EndpointAddress { get; } + } diff --git a/MediaBrowser.Model/Channels/ChannelFeatures.cs b/MediaBrowser.Model/Channels/ChannelFeatures.cs index 02710488..06d74a69 100644 --- a/MediaBrowser.Model/Channels/ChannelFeatures.cs +++ b/MediaBrowser.Model/Channels/ChannelFeatures.cs @@ -4,90 +4,88 @@ #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.Channels -{ - public class ChannelFeatures - { - public ChannelFeatures(string name, Guid id) - { - MediaTypes = Array.Empty(); - ContentTypes = Array.Empty(); - DefaultSortFields = Array.Empty(); +namespace MediaBrowser.Model.Channels; + public class ChannelFeatures + { + public ChannelFeatures(string name, Guid id) + { + MediaTypes = Array.Empty(); + ContentTypes = Array.Empty(); + DefaultSortFields = Array.Empty(); - Name = name; - Id = id; - } + Name = name; + Id = id; + } - /// - /// Gets or sets the name. - /// - /// The name. - public string Name { get; set; } + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } - /// - /// Gets or sets the identifier. - /// - /// The identifier. - public Guid Id { get; set; } + /// + /// Gets or sets the identifier. + /// + /// The identifier. + public Guid Id { get; set; } - /// - /// Gets or sets a value indicating whether this instance can search. - /// - /// true if this instance can search; otherwise, false. - public bool CanSearch { get; set; } + /// + /// Gets or sets a value indicating whether this instance can search. + /// + /// true if this instance can search; otherwise, false. + public bool CanSearch { get; set; } - /// - /// Gets or sets the media types. - /// - /// The media types. - public ChannelMediaType[] MediaTypes { get; set; } + /// + /// Gets or sets the media types. + /// + /// The media types. + public ChannelMediaType[] MediaTypes { get; set; } - /// - /// Gets or sets the content types. - /// - /// The content types. - public ChannelMediaContentType[] ContentTypes { get; set; } + /// + /// Gets or sets the content types. + /// + /// The content types. + public ChannelMediaContentType[] ContentTypes { get; set; } - /// - /// Gets or sets the maximum number of records the channel allows retrieving at a time. - /// - public int? MaxPageSize { get; set; } + /// + /// Gets or sets the maximum number of records the channel allows retrieving at a time. + /// + public int? MaxPageSize { get; set; } - /// - /// Gets or sets the automatic refresh levels. - /// - /// The automatic refresh levels. - public int? AutoRefreshLevels { get; set; } + /// + /// Gets or sets the automatic refresh levels. + /// + /// The automatic refresh levels. + public int? AutoRefreshLevels { get; set; } - /// - /// Gets or sets the default sort orders. - /// - /// The default sort orders. - public ChannelItemSortField[] DefaultSortFields { get; set; } + /// + /// Gets or sets the default sort orders. + /// + /// The default sort orders. + public ChannelItemSortField[] DefaultSortFields { get; set; } - /// - /// Gets or sets a value indicating whether a sort ascending/descending toggle is supported. - /// - public bool SupportsSortOrderToggle { get; set; } + /// + /// Gets or sets a value indicating whether a sort ascending/descending toggle is supported. + /// + public bool SupportsSortOrderToggle { get; set; } - /// - /// Gets or sets a value indicating whether [supports latest media]. - /// - /// true if [supports latest media]; otherwise, false. - public bool SupportsLatestMedia { get; set; } + /// + /// Gets or sets a value indicating whether [supports latest media]. + /// + /// true if [supports latest media]; otherwise, false. + public bool SupportsLatestMedia { get; set; } - /// - /// Gets or sets a value indicating whether this instance can filter. - /// - /// true if this instance can filter; otherwise, false. - public bool CanFilter { get; set; } + /// + /// Gets or sets a value indicating whether this instance can filter. + /// + /// true if this instance can filter; otherwise, false. + public bool CanFilter { get; set; } - /// - /// Gets or sets a value indicating whether [supports content downloading]. - /// - /// true if [supports content downloading]; otherwise, false. - public bool SupportsContentDownloading { get; set; } - } -} + /// + /// Gets or sets a value indicating whether [supports content downloading]. + /// + /// true if [supports content downloading]; otherwise, false. + public bool SupportsContentDownloading { get; set; } + } diff --git a/MediaBrowser.Model/Channels/ChannelFolderType.cs b/MediaBrowser.Model/Channels/ChannelFolderType.cs index 3149ab3b..ce75f558 100644 --- a/MediaBrowser.Model/Channels/ChannelFolderType.cs +++ b/MediaBrowser.Model/Channels/ChannelFolderType.cs @@ -4,20 +4,18 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Channels -{ - public enum ChannelFolderType - { - Container = 0, +namespace MediaBrowser.Model.Channels; + public enum ChannelFolderType + { + Container = 0, - MusicAlbum = 1, + MusicAlbum = 1, - PhotoAlbum = 2, + PhotoAlbum = 2, - MusicArtist = 3, + MusicArtist = 3, - Series = 4, + Series = 4, - Season = 5 - } -} + Season = 5, + } diff --git a/MediaBrowser.Model/Channels/ChannelItemSortField.cs b/MediaBrowser.Model/Channels/ChannelItemSortField.cs index 21804fd2..4b5ae088 100644 --- a/MediaBrowser.Model/Channels/ChannelItemSortField.cs +++ b/MediaBrowser.Model/Channels/ChannelItemSortField.cs @@ -4,16 +4,14 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Channels -{ - public enum ChannelItemSortField - { - Name = 0, - CommunityRating = 1, - PremiereDate = 2, - DateCreated = 3, - Runtime = 4, - PlayCount = 5, - CommunityPlayCount = 6 - } -} +namespace MediaBrowser.Model.Channels; + public enum ChannelItemSortField + { + Name = 0, + CommunityRating = 1, + PremiereDate = 2, + DateCreated = 3, + Runtime = 4, + PlayCount = 5, + CommunityPlayCount = 6, + } diff --git a/MediaBrowser.Model/Channels/ChannelMediaContentType.cs b/MediaBrowser.Model/Channels/ChannelMediaContentType.cs index 7705c1f0..1d4b98dc 100644 --- a/MediaBrowser.Model/Channels/ChannelMediaContentType.cs +++ b/MediaBrowser.Model/Channels/ChannelMediaContentType.cs @@ -4,24 +4,22 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Channels -{ - public enum ChannelMediaContentType - { - Clip = 0, +namespace MediaBrowser.Model.Channels; + public enum ChannelMediaContentType + { + Clip = 0, - Podcast = 1, + Podcast = 1, - Trailer = 2, + Trailer = 2, - Movie = 3, + Movie = 3, - Episode = 4, + Episode = 4, - Song = 5, + Song = 5, - MovieExtra = 6, + MovieExtra = 6, - TvExtra = 7 - } -} + TvExtra = 7, + } diff --git a/MediaBrowser.Model/Channels/ChannelMediaType.cs b/MediaBrowser.Model/Channels/ChannelMediaType.cs index fcd549c6..6dac9e61 100644 --- a/MediaBrowser.Model/Channels/ChannelMediaType.cs +++ b/MediaBrowser.Model/Channels/ChannelMediaType.cs @@ -4,14 +4,12 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Channels -{ - public enum ChannelMediaType - { - Audio = 0, +namespace MediaBrowser.Model.Channels; + public enum ChannelMediaType + { + Audio = 0, - Video = 1, + Video = 1, - Photo = 2 - } -} + Photo = 2, + } diff --git a/MediaBrowser.Model/Channels/ChannelQuery.cs b/MediaBrowser.Model/Channels/ChannelQuery.cs index a9d3d706..77c3b381 100644 --- a/MediaBrowser.Model/Channels/ChannelQuery.cs +++ b/MediaBrowser.Model/Channels/ChannelQuery.cs @@ -4,60 +4,58 @@ #pragma warning disable CS1591 -using System; +using global::System; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Querying; -namespace MediaBrowser.Model.Channels -{ - public class ChannelQuery - { - /// - /// Gets or sets the fields to return within the items, in addition to basic information. - /// - /// The fields. - public ItemFields[]? Fields { get; set; } +namespace MediaBrowser.Model.Channels; + public class ChannelQuery + { + /// + /// Gets or sets the fields to return within the items, in addition to basic information. + /// + /// The fields. + public ItemFields[]? Fields { get; set; } - public bool? EnableImages { get; set; } + public bool? EnableImages { get; set; } - public int? ImageTypeLimit { get; set; } + public int? ImageTypeLimit { get; set; } - public ImageType[]? EnableImageTypes { get; set; } + public ImageType[]? EnableImageTypes { get; set; } - /// - /// Gets or sets the user identifier. - /// - /// The user identifier. - public Guid UserId { get; set; } + /// + /// Gets or sets the user identifier. + /// + /// The user identifier. + public Guid UserId { get; set; } - /// - /// Gets or sets the start index. Use for paging. - /// - /// The start index. - public int? StartIndex { get; set; } + /// + /// Gets or sets the start index. Use for paging. + /// + /// The start index. + public int? StartIndex { get; set; } - /// - /// Gets or sets the maximum number of items to return. - /// - /// The limit. - public int? Limit { get; set; } + /// + /// Gets or sets the maximum number of items to return. + /// + /// The limit. + public int? Limit { get; set; } - /// - /// Gets or sets a value indicating whether [supports latest items]. - /// - /// true if [supports latest items]; otherwise, false. - public bool? SupportsLatestItems { get; set; } + /// + /// Gets or sets a value indicating whether [supports latest items]. + /// + /// true if [supports latest items]; otherwise, false. + public bool? SupportsLatestItems { get; set; } - public bool? SupportsMediaDeletion { get; set; } + public bool? SupportsMediaDeletion { get; set; } - /// - /// Gets or sets a value indicating whether this instance is favorite. - /// - /// null if [is favorite] contains no value, true if [is favorite]; otherwise, false. - public bool? IsFavorite { get; set; } + /// + /// Gets or sets a value indicating whether this instance is favorite. + /// + /// null if [is favorite] contains no value, true if [is favorite]; otherwise, false. + public bool? IsFavorite { get; set; } - public bool? IsRecordingsFolder { get; set; } + public bool? IsRecordingsFolder { get; set; } - public bool RefreshLatestChannelItems { get; set; } - } -} + public bool RefreshLatestChannelItems { get; set; } + } diff --git a/MediaBrowser.Model/Collections/CollectionCreationResult.cs b/MediaBrowser.Model/Collections/CollectionCreationResult.cs index 1d849ecc..cc8efa44 100644 --- a/MediaBrowser.Model/Collections/CollectionCreationResult.cs +++ b/MediaBrowser.Model/Collections/CollectionCreationResult.cs @@ -4,12 +4,10 @@ #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.Collections -{ - public class CollectionCreationResult - { - public Guid Id { get; set; } - } -} +namespace MediaBrowser.Model.Collections; + public class CollectionCreationResult + { + public Guid Id { get; set; } + } diff --git a/MediaBrowser.Model/Configuration/BaseApplicationConfiguration.cs b/MediaBrowser.Model/Configuration/BaseApplicationConfiguration.cs index 1dbd2edb..fb60ab84 100644 --- a/MediaBrowser.Model/Configuration/BaseApplicationConfiguration.cs +++ b/MediaBrowser.Model/Configuration/BaseApplicationConfiguration.cs @@ -2,66 +2,64 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Xml.Serialization; +namespace MediaBrowser.Model.Configuration; + using global::System; + using global::System.Xml.Serialization; -namespace MediaBrowser.Model.Configuration -{ - /// - /// Serves as a common base class for the Server and UI application Configurations - /// ProtoInclude tells Protobuf about subclasses, - /// The number 50 can be any number, so long as it doesn't clash with any of the ProtoMember numbers either here or in subclasses. - /// - public class BaseApplicationConfiguration - { - /// - /// Initializes a new instance of the class. - /// - public BaseApplicationConfiguration() - { - LogFileRetentionDays = 3; - } + /// + /// Serves as a common base class for the Server and UI application Configurations + /// ProtoInclude tells Protobuf about subclasses, + /// The number 50 can be any number, so long as it doesn't clash with any of the ProtoMember numbers either here or in subclasses. + /// + public class BaseApplicationConfiguration + { + /// + /// Initializes a new instance of the class. + /// + public BaseApplicationConfiguration() + { + this.LogFileRetentionDays = 3; + } - /// - /// Gets or sets the number of days we should retain log files. - /// - /// The log file retention days. - public int LogFileRetentionDays { get; set; } + /// + /// Gets or sets the number of days we should retain log files. + /// + /// The log file retention days. + public int LogFileRetentionDays { get; set; } - /// - /// Gets or sets a value indicating whether this instance is first run. - /// - /// true if this instance is first run; otherwise, false. - public bool IsStartupWizardCompleted { get; set; } + /// + /// Gets or sets a value indicating whether this instance is first run. + /// + /// true if this instance is first run; otherwise, false. + public bool IsStartupWizardCompleted { get; set; } - /// - /// Gets or sets the cache path. - /// - /// The cache path. - public string? CachePath { get; set; } + /// + /// Gets or sets the cache path. + /// + /// The cache path. + public string? CachePath { get; set; } - /// - /// Gets or sets the last known version that was ran using the configuration. - /// - /// The version from previous run. - [XmlIgnore] - public Version? PreviousVersion { get; set; } + /// + /// Gets or sets the last known version that was ran using the configuration. + /// + /// The version from previous run. + [XmlIgnore] + public Version? PreviousVersion { get; set; } - /// - /// Gets or sets the stringified PreviousVersion to be stored/loaded, - /// because System.Version itself isn't xml-serializable. - /// - /// String value of PreviousVersion. - public string? PreviousVersionStr - { - get => PreviousVersion?.ToString(); - set - { - if (Version.TryParse(value, out var version)) - { - PreviousVersion = version; - } - } - } - } -} + /// + /// Gets or sets the stringified PreviousVersion to be stored/loaded, + /// because System.Version itself isn't xml-serializable. + /// + /// String value of PreviousVersion. + public string? PreviousVersionStr + { + get => this.PreviousVersion?.ToString(); + set + { + if (Version.TryParse(value, out var version)) + { + this.PreviousVersion = version; + } + } + } + } diff --git a/MediaBrowser.Model/Configuration/EmbeddedSubtitleOptions.cs b/MediaBrowser.Model/Configuration/EmbeddedSubtitleOptions.cs index 3b7ec0e5..49b2a303 100644 --- a/MediaBrowser.Model/Configuration/EmbeddedSubtitleOptions.cs +++ b/MediaBrowser.Model/Configuration/EmbeddedSubtitleOptions.cs @@ -2,31 +2,29 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Configuration -{ - /// - /// An enum representing the options to disable embedded subs. - /// - public enum EmbeddedSubtitleOptions - { - /// - /// Allow all embedded subs. - /// - AllowAll = 0, +namespace MediaBrowser.Model.Configuration; + /// + /// An enum representing the options to disable embedded subs. + /// + public enum EmbeddedSubtitleOptions + { + /// + /// Allow all embedded subs. + /// + AllowAll = 0, - /// - /// Allow only embedded subs that are text based. - /// - AllowText = 1, + /// + /// Allow only embedded subs that are text based. + /// + AllowText = 1, - /// - /// Allow only embedded subs that are image based. - /// - AllowImage = 2, + /// + /// Allow only embedded subs that are image based. + /// + AllowImage = 2, - /// - /// Disable all embedded subs. - /// - AllowNone = 3, - } -} + /// + /// Disable all embedded subs. + /// + AllowNone = 3, + } diff --git a/MediaBrowser.Model/Configuration/EncodingOptions.cs b/MediaBrowser.Model/Configuration/EncodingOptions.cs index 97977ab7..f1963694 100644 --- a/MediaBrowser.Model/Configuration/EncodingOptions.cs +++ b/MediaBrowser.Model/Configuration/EncodingOptions.cs @@ -5,7 +5,7 @@ #pragma warning disable CA1819 // XML serialization handles collections improperly, so we need to use arrays #nullable disable -using System.ComponentModel; +using global::System.ComponentModel; using MediaBrowser.Model.Entities; namespace MediaBrowser.Model.Configuration; @@ -30,6 +30,7 @@ public class EncodingOptions EnableSegmentDeletion = false; SegmentKeepSeconds = 720; EncodingThreadCount = -1; + // This is a DRM device that is almost guaranteed to be there on every intel platform, // plus it's the default one in ffmpeg if you don't specify anything VaapiDevice = "/dev/dri/renderD128"; @@ -53,6 +54,7 @@ public class EncodingOptions EnableDecodingColorDepth10Vp9 = true; EnableDecodingColorDepth10HevcRext = false; EnableDecodingColorDepth12HevcRext = false; + // Enhanced Nvdec or system native decoder is required for DoVi to SDR tone-mapping. EnableEnhancedNvdecDecoder = true; PreferSystemNativeHwDecoder = true; diff --git a/MediaBrowser.Model/Configuration/HlsAudioSeekStrategy.cs b/MediaBrowser.Model/Configuration/HlsAudioSeekStrategy.cs index 38e1fee7..4d0c7afd 100644 --- a/MediaBrowser.Model/Configuration/HlsAudioSeekStrategy.cs +++ b/MediaBrowser.Model/Configuration/HlsAudioSeekStrategy.cs @@ -2,26 +2,24 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Configuration -{ - /// - /// An enum representing the options to seek the input audio stream when - /// transcoding HLS segments. - /// - public enum HlsAudioSeekStrategy - { - /// - /// If the video stream is transcoded and the audio stream is copied, - /// seek the video stream to the same keyframe as the audio stream. The - /// resulting timestamps in the output streams may be inaccurate. - /// - DisableAccurateSeek = 0, +namespace MediaBrowser.Model.Configuration; + /// + /// An enum representing the options to seek the input audio stream when + /// transcoding HLS segments. + /// + public enum HlsAudioSeekStrategy + { + /// + /// If the video stream is transcoded and the audio stream is copied, + /// seek the video stream to the same keyframe as the audio stream. The + /// resulting timestamps in the output streams may be inaccurate. + /// + DisableAccurateSeek = 0, - /// - /// Prevent audio streams from being copied if the video stream is transcoded. - /// The resulting timestamps will be accurate, but additional audio transcoding - /// overhead will be incurred. - /// - TranscodeAudio = 1, - } -} + /// + /// Prevent audio streams from being copied if the video stream is transcoded. + /// The resulting timestamps will be accurate, but additional audio transcoding + /// overhead will be incurred. + /// + TranscodeAudio = 1, + } diff --git a/MediaBrowser.Model/Configuration/ImageOption.cs b/MediaBrowser.Model/Configuration/ImageOption.cs index 89fd074e..5ce0cf23 100644 --- a/MediaBrowser.Model/Configuration/ImageOption.cs +++ b/MediaBrowser.Model/Configuration/ImageOption.cs @@ -6,31 +6,29 @@ using MediaBrowser.Model.Entities; -namespace MediaBrowser.Model.Configuration -{ - public class ImageOption - { - public ImageOption() - { - Limit = 1; - } +namespace MediaBrowser.Model.Configuration; + public class ImageOption + { + public ImageOption() + { + Limit = 1; + } - /// - /// Gets or sets the type. - /// - /// The type. - public ImageType Type { get; set; } + /// + /// Gets or sets the type. + /// + /// The type. + public ImageType Type { get; set; } - /// - /// Gets or sets the limit. - /// - /// The limit. - public int Limit { get; set; } + /// + /// Gets or sets the limit. + /// + /// The limit. + public int Limit { get; set; } - /// - /// Gets or sets the minimum width. - /// - /// The minimum width. - public int MinWidth { get; set; } - } -} + /// + /// Gets or sets the minimum width. + /// + /// The minimum width. + public int MinWidth { get; set; } + } diff --git a/MediaBrowser.Model/Configuration/ImageSavingConvention.cs b/MediaBrowser.Model/Configuration/ImageSavingConvention.cs index 56400c17..3299e526 100644 --- a/MediaBrowser.Model/Configuration/ImageSavingConvention.cs +++ b/MediaBrowser.Model/Configuration/ImageSavingConvention.cs @@ -4,11 +4,9 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Configuration -{ - public enum ImageSavingConvention - { - Legacy, - Compatible - } -} +namespace MediaBrowser.Model.Configuration; + public enum ImageSavingConvention + { + Legacy, + Compatible + } diff --git a/MediaBrowser.Model/Configuration/LibraryOptions.cs b/MediaBrowser.Model/Configuration/LibraryOptions.cs index c12c1049..caddb315 100644 --- a/MediaBrowser.Model/Configuration/LibraryOptions.cs +++ b/MediaBrowser.Model/Configuration/LibraryOptions.cs @@ -4,154 +4,152 @@ #pragma warning disable CS1591 -using System; -using System.ComponentModel; -using System.Linq; +using global::System; +using global::System.ComponentModel; +using global::System.Linq; -namespace MediaBrowser.Model.Configuration -{ - public class LibraryOptions - { - private static readonly string[] _defaultTagDelimiters = ["/", "|", ";", "\\"]; +namespace MediaBrowser.Model.Configuration; + public class LibraryOptions + { + private static readonly string[] _defaultTagDelimiters = ["/", "|", ";", "\\"]; - public LibraryOptions() - { - TypeOptions = Array.Empty(); - DisabledSubtitleFetchers = Array.Empty(); - DisabledMediaSegmentProviders = Array.Empty(); - MediaSegmentProviderOrder = Array.Empty(); - SubtitleFetcherOrder = Array.Empty(); - DisabledLocalMetadataReaders = Array.Empty(); - DisabledLyricFetchers = Array.Empty(); - LyricFetcherOrder = Array.Empty(); + public LibraryOptions() + { + TypeOptions = Array.Empty(); + DisabledSubtitleFetchers = Array.Empty(); + DisabledMediaSegmentProviders = Array.Empty(); + MediaSegmentProviderOrder = Array.Empty(); + SubtitleFetcherOrder = Array.Empty(); + DisabledLocalMetadataReaders = Array.Empty(); + DisabledLyricFetchers = Array.Empty(); + LyricFetcherOrder = Array.Empty(); - SkipSubtitlesIfAudioTrackMatches = true; - RequirePerfectSubtitleMatch = true; - AllowEmbeddedSubtitles = EmbeddedSubtitleOptions.AllowAll; + SkipSubtitlesIfAudioTrackMatches = true; + RequirePerfectSubtitleMatch = true; + AllowEmbeddedSubtitles = EmbeddedSubtitleOptions.AllowAll; - AutomaticallyAddToCollection = false; - EnablePhotos = true; - SaveSubtitlesWithMedia = true; - SaveLyricsWithMedia = false; - SaveTrickplayWithMedia = false; - PathInfos = Array.Empty(); - EnableAutomaticSeriesGrouping = true; - SeasonZeroDisplayName = "Specials"; + AutomaticallyAddToCollection = false; + EnablePhotos = true; + SaveSubtitlesWithMedia = true; + SaveLyricsWithMedia = false; + SaveTrickplayWithMedia = false; + PathInfos = Array.Empty(); + EnableAutomaticSeriesGrouping = true; + SeasonZeroDisplayName = "Specials"; - PreferNonstandardArtistsTag = false; - UseCustomTagDelimiters = false; - CustomTagDelimiters = _defaultTagDelimiters; - DelimiterWhitelist = Array.Empty(); - } + PreferNonstandardArtistsTag = false; + UseCustomTagDelimiters = false; + CustomTagDelimiters = _defaultTagDelimiters; + DelimiterWhitelist = Array.Empty(); + } - public bool Enabled { get; set; } = true; + public bool Enabled { get; set; } = true; - public bool EnablePhotos { get; set; } + public bool EnablePhotos { get; set; } - public bool EnableRealtimeMonitor { get; set; } + public bool EnableRealtimeMonitor { get; set; } - public bool EnableLUFSScan { get; set; } + public bool EnableLUFSScan { get; set; } - public bool EnableChapterImageExtraction { get; set; } + public bool EnableChapterImageExtraction { get; set; } - public bool ExtractChapterImagesDuringLibraryScan { get; set; } + public bool ExtractChapterImagesDuringLibraryScan { get; set; } - public bool EnableTrickplayImageExtraction { get; set; } + public bool EnableTrickplayImageExtraction { get; set; } - public bool ExtractTrickplayImagesDuringLibraryScan { get; set; } + public bool ExtractTrickplayImagesDuringLibraryScan { get; set; } - public MediaPathInfo[] PathInfos { get; set; } + public MediaPathInfo[] PathInfos { get; set; } - public bool SaveLocalMetadata { get; set; } + public bool SaveLocalMetadata { get; set; } - [Obsolete("Disable remote providers in TypeOptions instead")] - public bool EnableInternetProviders { get; set; } + [Obsolete("Disable remote providers in TypeOptions instead")] + public bool EnableInternetProviders { get; set; } - public bool EnableAutomaticSeriesGrouping { get; set; } + public bool EnableAutomaticSeriesGrouping { get; set; } - public bool EnableEmbeddedTitles { get; set; } + public bool EnableEmbeddedTitles { get; set; } - public bool EnableEmbeddedExtrasTitles { get; set; } + public bool EnableEmbeddedExtrasTitles { get; set; } - public bool EnableEmbeddedEpisodeInfos { get; set; } + public bool EnableEmbeddedEpisodeInfos { get; set; } - public int AutomaticRefreshIntervalDays { get; set; } + public int AutomaticRefreshIntervalDays { get; set; } - /// - /// Gets or sets the preferred metadata language. - /// - /// The preferred metadata language. - public string? PreferredMetadataLanguage { get; set; } + /// + /// Gets or sets the preferred metadata language. + /// + /// The preferred metadata language. + public string? PreferredMetadataLanguage { get; set; } - /// - /// Gets or sets the metadata country code. - /// - /// The metadata country code. - public string? MetadataCountryCode { get; set; } + /// + /// Gets or sets the metadata country code. + /// + /// The metadata country code. + public string? MetadataCountryCode { get; set; } - public string SeasonZeroDisplayName { get; set; } + public string SeasonZeroDisplayName { get; set; } - public string[]? MetadataSavers { get; set; } + public string[]? MetadataSavers { get; set; } - public string[] DisabledLocalMetadataReaders { get; set; } + public string[] DisabledLocalMetadataReaders { get; set; } - public string[]? LocalMetadataReaderOrder { get; set; } + public string[]? LocalMetadataReaderOrder { get; set; } - public string[] DisabledSubtitleFetchers { get; set; } + public string[] DisabledSubtitleFetchers { get; set; } - public string[] SubtitleFetcherOrder { get; set; } + public string[] SubtitleFetcherOrder { get; set; } - public string[] DisabledMediaSegmentProviders { get; set; } + public string[] DisabledMediaSegmentProviders { get; set; } - public string[] MediaSegmentProviderOrder { get; set; } + public string[] MediaSegmentProviderOrder { get; set; } - public bool SkipSubtitlesIfEmbeddedSubtitlesPresent { get; set; } + public bool SkipSubtitlesIfEmbeddedSubtitlesPresent { get; set; } - public bool SkipSubtitlesIfAudioTrackMatches { get; set; } + public bool SkipSubtitlesIfAudioTrackMatches { get; set; } - public string[]? SubtitleDownloadLanguages { get; set; } + public string[]? SubtitleDownloadLanguages { get; set; } - public bool RequirePerfectSubtitleMatch { get; set; } + public bool RequirePerfectSubtitleMatch { get; set; } - public bool SaveSubtitlesWithMedia { get; set; } + public bool SaveSubtitlesWithMedia { get; set; } - [DefaultValue(false)] - public bool SaveLyricsWithMedia { get; set; } + [DefaultValue(false)] + public bool SaveLyricsWithMedia { get; set; } - [DefaultValue(false)] - public bool SaveTrickplayWithMedia { get; set; } + [DefaultValue(false)] + public bool SaveTrickplayWithMedia { get; set; } - public string[] DisabledLyricFetchers { get; set; } + public string[] DisabledLyricFetchers { get; set; } - public string[] LyricFetcherOrder { get; set; } + public string[] LyricFetcherOrder { get; set; } - [DefaultValue(false)] - public bool PreferNonstandardArtistsTag { get; set; } + [DefaultValue(false)] + public bool PreferNonstandardArtistsTag { get; set; } - [DefaultValue(false)] - public bool UseCustomTagDelimiters { get; set; } + [DefaultValue(false)] + public bool UseCustomTagDelimiters { get; set; } - public string[] CustomTagDelimiters { get; set; } + public string[] CustomTagDelimiters { get; set; } - public string[] DelimiterWhitelist { get; set; } + public string[] DelimiterWhitelist { get; set; } - public bool AutomaticallyAddToCollection { get; set; } + public bool AutomaticallyAddToCollection { get; set; } - public EmbeddedSubtitleOptions AllowEmbeddedSubtitles { get; set; } + public EmbeddedSubtitleOptions AllowEmbeddedSubtitles { get; set; } - public TypeOptions[] TypeOptions { get; set; } + public TypeOptions[] TypeOptions { get; set; } - public TypeOptions? GetTypeOptions(string type) - { - foreach (var options in TypeOptions) - { - if (string.Equals(options.Type, type, StringComparison.OrdinalIgnoreCase)) - { - return options; - } - } + public TypeOptions? GetTypeOptions(string type) + { + foreach (var options in TypeOptions) + { + if (string.Equals(options.Type, type, StringComparison.OrdinalIgnoreCase)) + { + return options; + } + } - return null; - } - } -} + return null; + } + } diff --git a/MediaBrowser.Model/Configuration/MediaPathInfo.cs b/MediaBrowser.Model/Configuration/MediaPathInfo.cs index f579c40e..c79a69e8 100644 --- a/MediaBrowser.Model/Configuration/MediaPathInfo.cs +++ b/MediaBrowser.Model/Configuration/MediaPathInfo.cs @@ -4,21 +4,19 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Configuration -{ - public class MediaPathInfo - { - public MediaPathInfo(string path) - { - Path = path; - } +namespace MediaBrowser.Model.Configuration; + public class MediaPathInfo + { + public MediaPathInfo(string path) + { + Path = path; + } - // Needed for xml serialization - public MediaPathInfo() - { - Path = string.Empty; - } + // Needed for xml serialization + public MediaPathInfo() + { + Path = string.Empty; + } - public string Path { get; set; } - } -} + public string Path { get; set; } + } diff --git a/MediaBrowser.Model/Configuration/MetadataConfiguration.cs b/MediaBrowser.Model/Configuration/MetadataConfiguration.cs index 06bfc195..969844ef 100644 --- a/MediaBrowser.Model/Configuration/MetadataConfiguration.cs +++ b/MediaBrowser.Model/Configuration/MetadataConfiguration.cs @@ -4,15 +4,13 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Configuration -{ - public class MetadataConfiguration - { - public MetadataConfiguration() - { - UseFileCreationTimeForDateAdded = true; - } +namespace MediaBrowser.Model.Configuration; + public class MetadataConfiguration + { + public MetadataConfiguration() + { + UseFileCreationTimeForDateAdded = true; + } - public bool UseFileCreationTimeForDateAdded { get; set; } - } -} + public bool UseFileCreationTimeForDateAdded { get; set; } + } diff --git a/MediaBrowser.Model/Configuration/MetadataOptions.cs b/MediaBrowser.Model/Configuration/MetadataOptions.cs index 90b50934..2555614e 100644 --- a/MediaBrowser.Model/Configuration/MetadataOptions.cs +++ b/MediaBrowser.Model/Configuration/MetadataOptions.cs @@ -5,37 +5,35 @@ #nullable disable #pragma warning disable CS1591, CA1819 -using System; +using global::System; -namespace MediaBrowser.Model.Configuration -{ - /// - /// Class MetadataOptions. - /// - public class MetadataOptions - { - public MetadataOptions() - { - DisabledMetadataSavers = Array.Empty(); - LocalMetadataReaderOrder = Array.Empty(); - DisabledMetadataFetchers = Array.Empty(); - MetadataFetcherOrder = Array.Empty(); - DisabledImageFetchers = Array.Empty(); - ImageFetcherOrder = Array.Empty(); - } +namespace MediaBrowser.Model.Configuration; + /// + /// Class MetadataOptions. + /// + public class MetadataOptions + { + public MetadataOptions() + { + DisabledMetadataSavers = Array.Empty(); + LocalMetadataReaderOrder = Array.Empty(); + DisabledMetadataFetchers = Array.Empty(); + MetadataFetcherOrder = Array.Empty(); + DisabledImageFetchers = Array.Empty(); + ImageFetcherOrder = Array.Empty(); + } - public string ItemType { get; set; } + public string ItemType { get; set; } - public string[] DisabledMetadataSavers { get; set; } + public string[] DisabledMetadataSavers { get; set; } - public string[] LocalMetadataReaderOrder { get; set; } + public string[] LocalMetadataReaderOrder { get; set; } - public string[] DisabledMetadataFetchers { get; set; } + public string[] DisabledMetadataFetchers { get; set; } - public string[] MetadataFetcherOrder { get; set; } + public string[] MetadataFetcherOrder { get; set; } - public string[] DisabledImageFetchers { get; set; } + public string[] DisabledImageFetchers { get; set; } - public string[] ImageFetcherOrder { get; set; } - } -} + public string[] ImageFetcherOrder { get; set; } + } diff --git a/MediaBrowser.Model/Configuration/MetadataPlugin.cs b/MediaBrowser.Model/Configuration/MetadataPlugin.cs index 9c94065c..5b278fe8 100644 --- a/MediaBrowser.Model/Configuration/MetadataPlugin.cs +++ b/MediaBrowser.Model/Configuration/MetadataPlugin.cs @@ -5,20 +5,18 @@ #nullable disable #pragma warning disable CS1591 -namespace MediaBrowser.Model.Configuration -{ - public class MetadataPlugin - { - /// - /// Gets or sets the name. - /// - /// The name. - public string Name { get; set; } +namespace MediaBrowser.Model.Configuration; + public class MetadataPlugin + { + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } - /// - /// Gets or sets the type. - /// - /// The type. - public MetadataPluginType Type { get; set; } - } -} + /// + /// Gets or sets the type. + /// + /// The type. + public MetadataPluginType Type { get; set; } + } diff --git a/MediaBrowser.Model/Configuration/MetadataPluginSummary.cs b/MediaBrowser.Model/Configuration/MetadataPluginSummary.cs index cca8983f..403ad3ee 100644 --- a/MediaBrowser.Model/Configuration/MetadataPluginSummary.cs +++ b/MediaBrowser.Model/Configuration/MetadataPluginSummary.cs @@ -5,35 +5,33 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Model.Configuration -{ - public class MetadataPluginSummary - { - public MetadataPluginSummary() - { - SupportedImageTypes = Array.Empty(); - Plugins = Array.Empty(); - } +namespace MediaBrowser.Model.Configuration; + public class MetadataPluginSummary + { + public MetadataPluginSummary() + { + SupportedImageTypes = Array.Empty(); + Plugins = Array.Empty(); + } - /// - /// Gets or sets the type of the item. - /// - /// The type of the item. - public string ItemType { get; set; } + /// + /// Gets or sets the type of the item. + /// + /// The type of the item. + public string ItemType { get; set; } - /// - /// Gets or sets the plugins. - /// - /// The plugins. - public MetadataPlugin[] Plugins { get; set; } + /// + /// Gets or sets the plugins. + /// + /// The plugins. + public MetadataPlugin[] Plugins { get; set; } - /// - /// Gets or sets the supported image types. - /// - /// The supported image types. - public ImageType[] SupportedImageTypes { get; set; } - } -} + /// + /// Gets or sets the supported image types. + /// + /// The supported image types. + public ImageType[] SupportedImageTypes { get; set; } + } diff --git a/MediaBrowser.Model/Configuration/MetadataPluginType.cs b/MediaBrowser.Model/Configuration/MetadataPluginType.cs index be2a8ca1..5494fff8 100644 --- a/MediaBrowser.Model/Configuration/MetadataPluginType.cs +++ b/MediaBrowser.Model/Configuration/MetadataPluginType.cs @@ -4,21 +4,19 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Configuration -{ - /// - /// Enum MetadataPluginType. - /// - public enum MetadataPluginType - { - LocalImageProvider, - ImageFetcher, - ImageSaver, - LocalMetadataProvider, - MetadataFetcher, - MetadataSaver, - SubtitleFetcher, - LyricFetcher, - MediaSegmentProvider - } -} +namespace MediaBrowser.Model.Configuration; + /// + /// Enum MetadataPluginType. + /// + public enum MetadataPluginType + { + LocalImageProvider, + ImageFetcher, + ImageSaver, + LocalMetadataProvider, + MetadataFetcher, + MetadataSaver, + SubtitleFetcher, + LyricFetcher, + MediaSegmentProvider + } diff --git a/MediaBrowser.Model/Configuration/PathSubstitution.cs b/MediaBrowser.Model/Configuration/PathSubstitution.cs index d5a6721c..756e95e3 100644 --- a/MediaBrowser.Model/Configuration/PathSubstitution.cs +++ b/MediaBrowser.Model/Configuration/PathSubstitution.cs @@ -2,21 +2,19 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Configuration -{ - /// - /// Defines the . - /// - public class PathSubstitution - { - /// - /// Gets or sets the value to substitute. - /// - public string From { get; set; } = string.Empty; +namespace MediaBrowser.Model.Configuration; + /// + /// Defines the . + /// + public class PathSubstitution + { + /// + /// Gets or sets the value to substitute. + /// + public string From { get; set; } = string.Empty; - /// - /// Gets or sets the value to substitution with. - /// - public string To { get; set; } = string.Empty; - } -} + /// + /// Gets or sets the value to substitution with. + /// + public string To { get; set; } = string.Empty; + } diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs index bffcc314..c7b7179a 100644 --- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs +++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs @@ -5,7 +5,7 @@ #pragma warning disable CS1591 #pragma warning disable CA1819 -using System; +using global::System; using MediaBrowser.Model.Drawing; using MediaBrowser.Model.Dto; using MediaBrowser.Model.System; @@ -27,17 +27,17 @@ public class ServerConfiguration : BaseApplicationConfiguration { new MetadataOptions() { - ItemType = "Book" + ItemType = "Book", }, new MetadataOptions() { - ItemType = "Movie" + ItemType = "Movie", }, new MetadataOptions { ItemType = "MusicVideo", DisabledMetadataFetchers = new[] { "The Open Movie Database" }, - DisabledImageFetchers = new[] { "The Open Movie Database" } + DisabledImageFetchers = new[] { "The Open Movie Database" }, }, new MetadataOptions { @@ -46,16 +46,16 @@ public class ServerConfiguration : BaseApplicationConfiguration new MetadataOptions { ItemType = "MusicAlbum", - DisabledMetadataFetchers = new[] { "TheAudioDB" } + DisabledMetadataFetchers = new[] { "TheAudioDB" }, }, new MetadataOptions { ItemType = "MusicArtist", - DisabledMetadataFetchers = new[] { "TheAudioDB" } + DisabledMetadataFetchers = new[] { "TheAudioDB" }, }, new MetadataOptions { - ItemType = "BoxSet" + ItemType = "BoxSet", }, new MetadataOptions { diff --git a/MediaBrowser.Model/Configuration/TrickplayOptions.cs b/MediaBrowser.Model/Configuration/TrickplayOptions.cs index 7dc2aff1..e1f54301 100644 --- a/MediaBrowser.Model/Configuration/TrickplayOptions.cs +++ b/MediaBrowser.Model/Configuration/TrickplayOptions.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Diagnostics; - namespace MediaBrowser.Model.Configuration; +using global::System.Collections.Generic; +using global::System.Diagnostics; + /// /// Class TrickplayOptions. /// diff --git a/MediaBrowser.Model/Configuration/TypeOptions.cs b/MediaBrowser.Model/Configuration/TypeOptions.cs index c0fdde3a..f72d1efe 100644 --- a/MediaBrowser.Model/Configuration/TypeOptions.cs +++ b/MediaBrowser.Model/Configuration/TypeOptions.cs @@ -5,365 +5,363 @@ #nullable disable #pragma warning disable CS1591 -using System; -using System.Collections.Generic; +using global::System; +using global::System.Collections.Generic; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Model.Configuration -{ - public class TypeOptions - { - public static readonly ImageOption DefaultInstance = new ImageOption(); +namespace MediaBrowser.Model.Configuration; + public class TypeOptions + { + public static readonly ImageOption DefaultInstance = new ImageOption(); - public static readonly Dictionary DefaultImageOptions = new Dictionary - { - { - "Movie", new[] - { - new ImageOption - { - Limit = 1, - MinWidth = 1280, - Type = ImageType.Backdrop - }, + public static readonly Dictionary DefaultImageOptions = new Dictionary + { + { + "Movie", new[] + { + new ImageOption + { + Limit = 1, + MinWidth = 1280, + Type = ImageType.Backdrop, + }, - // Don't download this by default as it's rarely used. - new ImageOption - { - Limit = 0, - Type = ImageType.Art - }, + // Don't download this by default as it's rarely used. + new ImageOption + { + Limit = 0, + Type = ImageType.Art, + }, - // Don't download this by default as it's rarely used. - new ImageOption - { - Limit = 0, - Type = ImageType.Disc - }, + // Don't download this by default as it's rarely used. + new ImageOption + { + Limit = 0, + Type = ImageType.Disc, + }, - new ImageOption - { - Limit = 1, - Type = ImageType.Primary - }, + new ImageOption + { + Limit = 1, + Type = ImageType.Primary, + }, - new ImageOption - { - Limit = 0, - Type = ImageType.Banner - }, + new ImageOption + { + Limit = 0, + Type = ImageType.Banner, + }, - new ImageOption - { - Limit = 1, - Type = ImageType.Thumb - }, + new ImageOption + { + Limit = 1, + Type = ImageType.Thumb, + }, - new ImageOption - { - Limit = 1, - Type = ImageType.Logo - } - } - }, - { - "MusicVideo", new[] - { - new ImageOption - { - Limit = 1, - MinWidth = 1280, - Type = ImageType.Backdrop - }, + new ImageOption + { + Limit = 1, + Type = ImageType.Logo, + } + } + }, + { + "MusicVideo", new[] + { + new ImageOption + { + Limit = 1, + MinWidth = 1280, + Type = ImageType.Backdrop, + }, - // Don't download this by default as it's rarely used. - new ImageOption - { - Limit = 0, - Type = ImageType.Art - }, + // Don't download this by default as it's rarely used. + new ImageOption + { + Limit = 0, + Type = ImageType.Art, + }, - // Don't download this by default as it's rarely used. - new ImageOption - { - Limit = 0, - Type = ImageType.Disc - }, + // Don't download this by default as it's rarely used. + new ImageOption + { + Limit = 0, + Type = ImageType.Disc, + }, - new ImageOption - { - Limit = 1, - Type = ImageType.Primary - }, + new ImageOption + { + Limit = 1, + Type = ImageType.Primary, + }, - new ImageOption - { - Limit = 0, - Type = ImageType.Banner - }, + new ImageOption + { + Limit = 0, + Type = ImageType.Banner, + }, - new ImageOption - { - Limit = 1, - Type = ImageType.Thumb - }, + new ImageOption + { + Limit = 1, + Type = ImageType.Thumb, + }, - new ImageOption - { - Limit = 1, - Type = ImageType.Logo - } - } - }, - { - "Series", new[] - { - new ImageOption - { - Limit = 1, - MinWidth = 1280, - Type = ImageType.Backdrop - }, + new ImageOption + { + Limit = 1, + Type = ImageType.Logo, + } + } + }, + { + "Series", new[] + { + new ImageOption + { + Limit = 1, + MinWidth = 1280, + Type = ImageType.Backdrop, + }, - // Don't download this by default as it's rarely used. - new ImageOption - { - Limit = 0, - Type = ImageType.Art - }, + // Don't download this by default as it's rarely used. + new ImageOption + { + Limit = 0, + Type = ImageType.Art, + }, - new ImageOption - { - Limit = 1, - Type = ImageType.Primary - }, + new ImageOption + { + Limit = 1, + Type = ImageType.Primary, + }, - new ImageOption - { - Limit = 1, - Type = ImageType.Banner - }, + new ImageOption + { + Limit = 1, + Type = ImageType.Banner, + }, - new ImageOption - { - Limit = 1, - Type = ImageType.Thumb - }, + new ImageOption + { + Limit = 1, + Type = ImageType.Thumb, + }, - new ImageOption - { - Limit = 1, - Type = ImageType.Logo - } - } - }, - { - "MusicAlbum", new[] - { - new ImageOption - { - Limit = 0, - MinWidth = 1280, - Type = ImageType.Backdrop - }, + new ImageOption + { + Limit = 1, + Type = ImageType.Logo, + } + } + }, + { + "MusicAlbum", new[] + { + new ImageOption + { + Limit = 0, + MinWidth = 1280, + Type = ImageType.Backdrop, + }, - // Don't download this by default as it's rarely used. - new ImageOption - { - Limit = 0, - Type = ImageType.Disc - } - } - }, - { - "MusicArtist", new[] - { - new ImageOption - { - Limit = 1, - MinWidth = 1280, - Type = ImageType.Backdrop - }, + // Don't download this by default as it's rarely used. + new ImageOption + { + Limit = 0, + Type = ImageType.Disc, + } + } + }, + { + "MusicArtist", new[] + { + new ImageOption + { + Limit = 1, + MinWidth = 1280, + Type = ImageType.Backdrop, + }, - // Don't download this by default - // They do look great, but most artists won't have them, which means a banner view isn't really possible - new ImageOption - { - Limit = 0, - Type = ImageType.Banner - }, + // Don't download this by default + // They do look great, but most artists won't have them, which means a banner view isn't really possible + new ImageOption + { + Limit = 0, + Type = ImageType.Banner, + }, - // Don't download this by default - // Generally not used - new ImageOption - { - Limit = 0, - Type = ImageType.Art - }, + // Don't download this by default + // Generally not used + new ImageOption + { + Limit = 0, + Type = ImageType.Art, + }, - new ImageOption - { - Limit = 1, - Type = ImageType.Logo - } - } - }, - { - "BoxSet", new[] - { - new ImageOption - { - Limit = 1, - MinWidth = 1280, - Type = ImageType.Backdrop - }, + new ImageOption + { + Limit = 1, + Type = ImageType.Logo, + } + } + }, + { + "BoxSet", new[] + { + new ImageOption + { + Limit = 1, + MinWidth = 1280, + Type = ImageType.Backdrop, + }, - new ImageOption - { - Limit = 1, - Type = ImageType.Primary - }, + new ImageOption + { + Limit = 1, + Type = ImageType.Primary, + }, - new ImageOption - { - Limit = 1, - Type = ImageType.Thumb - }, + new ImageOption + { + Limit = 1, + Type = ImageType.Thumb, + }, - new ImageOption - { - Limit = 1, - Type = ImageType.Logo - }, + new ImageOption + { + Limit = 1, + Type = ImageType.Logo, + }, - // Don't download this by default as it's rarely used. - new ImageOption - { - Limit = 0, - Type = ImageType.Art - }, + // Don't download this by default as it's rarely used. + new ImageOption + { + Limit = 0, + Type = ImageType.Art, + }, - // Don't download this by default as it's rarely used. - new ImageOption - { - Limit = 0, - Type = ImageType.Disc - }, + // Don't download this by default as it's rarely used. + new ImageOption + { + Limit = 0, + Type = ImageType.Disc, + }, - // Don't download this by default as it's rarely used. - new ImageOption - { - Limit = 0, - Type = ImageType.Banner - } - } - }, - { - "Season", new[] - { - new ImageOption - { - Limit = 0, - MinWidth = 1280, - Type = ImageType.Backdrop - }, + // Don't download this by default as it's rarely used. + new ImageOption + { + Limit = 0, + Type = ImageType.Banner, + } + } + }, + { + "Season", new[] + { + new ImageOption + { + Limit = 0, + MinWidth = 1280, + Type = ImageType.Backdrop, + }, - new ImageOption - { - Limit = 1, - Type = ImageType.Primary - }, + new ImageOption + { + Limit = 1, + Type = ImageType.Primary, + }, - new ImageOption - { - Limit = 0, - Type = ImageType.Banner - }, + new ImageOption + { + Limit = 0, + Type = ImageType.Banner, + }, - new ImageOption - { - Limit = 0, - Type = ImageType.Thumb - } - } - }, - { - "Episode", new[] - { - new ImageOption - { - Limit = 0, - MinWidth = 1280, - Type = ImageType.Backdrop - }, + new ImageOption + { + Limit = 0, + Type = ImageType.Thumb, + } + } + }, + { + "Episode", new[] + { + new ImageOption + { + Limit = 0, + MinWidth = 1280, + Type = ImageType.Backdrop, + }, - new ImageOption - { - Limit = 1, - Type = ImageType.Primary - } - } - } - }; + new ImageOption + { + Limit = 1, + Type = ImageType.Primary, + } + } + } + }; - public TypeOptions() - { - MetadataFetchers = Array.Empty(); - MetadataFetcherOrder = Array.Empty(); - ImageFetchers = Array.Empty(); - ImageFetcherOrder = Array.Empty(); - ImageOptions = Array.Empty(); - } + public TypeOptions() + { + MetadataFetchers = Array.Empty(); + MetadataFetcherOrder = Array.Empty(); + ImageFetchers = Array.Empty(); + ImageFetcherOrder = Array.Empty(); + ImageOptions = Array.Empty(); + } - public string Type { get; set; } + public string Type { get; set; } - public string[] MetadataFetchers { get; set; } + public string[] MetadataFetchers { get; set; } - public string[] MetadataFetcherOrder { get; set; } + public string[] MetadataFetcherOrder { get; set; } - public string[] ImageFetchers { get; set; } + public string[] ImageFetchers { get; set; } - public string[] ImageFetcherOrder { get; set; } + public string[] ImageFetcherOrder { get; set; } - public ImageOption[] ImageOptions { get; set; } + public ImageOption[] ImageOptions { get; set; } - public ImageOption GetImageOptions(ImageType type) - { - foreach (var i in ImageOptions) - { - if (i.Type == type) - { - return i; - } - } + public ImageOption GetImageOptions(ImageType type) + { + foreach (var i in ImageOptions) + { + if (i.Type == type) + { + return i; + } + } - if (DefaultImageOptions.TryGetValue(Type, out ImageOption[] options)) - { - foreach (var i in options) - { - if (i.Type == type) - { - return i; - } - } - } + if (DefaultImageOptions.TryGetValue(Type, out ImageOption[] options)) + { + foreach (var i in options) + { + if (i.Type == type) + { + return i; + } + } + } - return DefaultInstance; - } + return DefaultInstance; + } - public int GetLimit(ImageType type) - { - return GetImageOptions(type).Limit; - } + public int GetLimit(ImageType type) + { + return GetImageOptions(type).Limit; + } - public int GetMinWidth(ImageType type) - { - return GetImageOptions(type).MinWidth; - } + public int GetMinWidth(ImageType type) + { + return GetImageOptions(type).MinWidth; + } - public bool IsEnabled(ImageType type) - { - return GetLimit(type) > 0; - } - } -} + public bool IsEnabled(ImageType type) + { + return GetLimit(type) > 0; + } + } diff --git a/MediaBrowser.Model/Configuration/UserConfiguration.cs b/MediaBrowser.Model/Configuration/UserConfiguration.cs index 4b7dd88a..6e66bbc9 100644 --- a/MediaBrowser.Model/Configuration/UserConfiguration.cs +++ b/MediaBrowser.Model/Configuration/UserConfiguration.cs @@ -4,79 +4,77 @@ #pragma warning disable CS1591 -using System; +using global::System; using Jellyfin.Database.Implementations.Enums; -namespace MediaBrowser.Model.Configuration -{ - /// - /// Class UserConfiguration. - /// - public class UserConfiguration - { - /// - /// Initializes a new instance of the class. - /// - public UserConfiguration() - { - EnableNextEpisodeAutoPlay = true; - RememberAudioSelections = true; - RememberSubtitleSelections = true; +namespace MediaBrowser.Model.Configuration; + /// + /// Class UserConfiguration. + /// + public class UserConfiguration + { + /// + /// Initializes a new instance of the class. + /// + public UserConfiguration() + { + EnableNextEpisodeAutoPlay = true; + RememberAudioSelections = true; + RememberSubtitleSelections = true; - HidePlayedInLatest = true; - PlayDefaultAudioTrack = true; + HidePlayedInLatest = true; + PlayDefaultAudioTrack = true; - LatestItemsExcludes = Array.Empty(); - OrderedViews = Array.Empty(); - MyMediaExcludes = Array.Empty(); - GroupedFolders = Array.Empty(); - } + LatestItemsExcludes = Array.Empty(); + OrderedViews = Array.Empty(); + MyMediaExcludes = Array.Empty(); + GroupedFolders = Array.Empty(); + } - /// - /// Gets or sets the audio language preference. - /// - /// The audio language preference. - public string? AudioLanguagePreference { get; set; } + /// + /// Gets or sets the audio language preference. + /// + /// The audio language preference. + public string? AudioLanguagePreference { get; set; } - /// - /// Gets or sets a value indicating whether [play default audio track]. - /// - /// true if [play default audio track]; otherwise, false. - public bool PlayDefaultAudioTrack { get; set; } + /// + /// Gets or sets a value indicating whether [play default audio track]. + /// + /// true if [play default audio track]; otherwise, false. + public bool PlayDefaultAudioTrack { get; set; } - /// - /// Gets or sets the subtitle language preference. - /// - /// The subtitle language preference. - public string? SubtitleLanguagePreference { get; set; } + /// + /// Gets or sets the subtitle language preference. + /// + /// The subtitle language preference. + public string? SubtitleLanguagePreference { get; set; } - public bool DisplayMissingEpisodes { get; set; } + public bool DisplayMissingEpisodes { get; set; } - public Guid[] GroupedFolders { get; set; } + public Guid[] GroupedFolders { get; set; } - public SubtitlePlaybackMode SubtitleMode { get; set; } + public SubtitlePlaybackMode SubtitleMode { get; set; } - public bool DisplayCollectionsView { get; set; } + public bool DisplayCollectionsView { get; set; } - public bool EnableLocalPassword { get; set; } + public bool EnableLocalPassword { get; set; } - public Guid[] OrderedViews { get; set; } + public Guid[] OrderedViews { get; set; } - public Guid[] LatestItemsExcludes { get; set; } + public Guid[] LatestItemsExcludes { get; set; } - public Guid[] MyMediaExcludes { get; set; } + public Guid[] MyMediaExcludes { get; set; } - public bool HidePlayedInLatest { get; set; } + public bool HidePlayedInLatest { get; set; } - public bool RememberAudioSelections { get; set; } + public bool RememberAudioSelections { get; set; } - public bool RememberSubtitleSelections { get; set; } + public bool RememberSubtitleSelections { get; set; } - public bool EnableNextEpisodeAutoPlay { get; set; } + public bool EnableNextEpisodeAutoPlay { get; set; } - /// - /// Gets or sets the id of the selected cast receiver. - /// - public string? CastReceiverId { get; set; } - } -} + /// + /// Gets or sets the id of the selected cast receiver. + /// + public string? CastReceiverId { get; set; } + } diff --git a/MediaBrowser.Model/Configuration/XbmcMetadataOptions.cs b/MediaBrowser.Model/Configuration/XbmcMetadataOptions.cs index 2185c34c..c2175945 100644 --- a/MediaBrowser.Model/Configuration/XbmcMetadataOptions.cs +++ b/MediaBrowser.Model/Configuration/XbmcMetadataOptions.cs @@ -4,26 +4,24 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Configuration -{ - public class XbmcMetadataOptions - { - public XbmcMetadataOptions() +namespace MediaBrowser.Model.Configuration; + public class XbmcMetadataOptions + { + public XbmcMetadataOptions() { - ReleaseDateFormat = "yyyy-MM-dd"; + this.ReleaseDateFormat = "yyyy-MM-dd"; - SaveImagePathsInNfo = true; - EnablePathSubstitution = true; + this.SaveImagePathsInNfo = true; + this.EnablePathSubstitution = true; } - public string? UserId { get; set; } + public string? UserId { get; set; } - public string ReleaseDateFormat { get; set; } + public string ReleaseDateFormat { get; set; } - public bool SaveImagePathsInNfo { get; set; } + public bool SaveImagePathsInNfo { get; set; } - public bool EnablePathSubstitution { get; set; } + public bool EnablePathSubstitution { get; set; } - public bool EnableExtraThumbsDuplication { get; set; } - } -} + public bool EnableExtraThumbsDuplication { get; set; } + } diff --git a/MediaBrowser.Model/Cryptography/Constants.cs b/MediaBrowser.Model/Cryptography/Constants.cs index 9d52bb15..1f08ea66 100644 --- a/MediaBrowser.Model/Cryptography/Constants.cs +++ b/MediaBrowser.Model/Cryptography/Constants.cs @@ -2,26 +2,24 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Cryptography -{ - /// - /// Class containing global constants for Jellyfin Cryptography. - /// - public static class Constants - { - /// - /// The default length for new salts. - /// - public const int DefaultSaltLength = 128 / 8; +namespace MediaBrowser.Model.Cryptography; + /// + /// Class containing global constants for Jellyfin Cryptography. + /// + public static class Constants + { + /// + /// The default length for new salts. + /// + public const int DefaultSaltLength = 128 / 8; - /// - /// The default output length. - /// - public const int DefaultOutputLength = 512 / 8; + /// + /// The default output length. + /// + public const int DefaultOutputLength = 512 / 8; - /// - /// The default amount of iterations for hashing passwords. - /// - public const int DefaultIterations = 210000; - } -} + /// + /// The default amount of iterations for hashing passwords. + /// + public const int DefaultIterations = 210000; + } diff --git a/MediaBrowser.Model/Cryptography/ICryptoProvider.cs b/MediaBrowser.Model/Cryptography/ICryptoProvider.cs index a055dfea..105e1a0b 100644 --- a/MediaBrowser.Model/Cryptography/ICryptoProvider.cs +++ b/MediaBrowser.Model/Cryptography/ICryptoProvider.cs @@ -4,25 +4,23 @@ #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.Cryptography -{ - public interface ICryptoProvider - { - string DefaultHashMethod { get; } +namespace MediaBrowser.Model.Cryptography; + public interface ICryptoProvider + { + string DefaultHashMethod { get; } - /// - /// Creates a new instance. - /// - /// The password that will be hashed. - /// A instance with the hash method, hash, salt and number of iterations. - PasswordHash CreatePasswordHash(ReadOnlySpan password); + /// + /// Creates a new instance. + /// + /// The password that will be hashed. + /// A instance with the hash method, hash, salt and number of iterations. + PasswordHash CreatePasswordHash(ReadOnlySpan password); - bool Verify(PasswordHash hash, ReadOnlySpan password); + bool Verify(PasswordHash hash, ReadOnlySpan password); - byte[] GenerateSalt(); + byte[] GenerateSalt(); - byte[] GenerateSalt(int length); - } -} + byte[] GenerateSalt(int length); + } diff --git a/MediaBrowser.Model/Cryptography/PasswordHash.cs b/MediaBrowser.Model/Cryptography/PasswordHash.cs index 5656f6c0..81fe1c6b 100644 --- a/MediaBrowser.Model/Cryptography/PasswordHash.cs +++ b/MediaBrowser.Model/Cryptography/PasswordHash.cs @@ -4,213 +4,212 @@ #pragma warning disable CS1591 -using System; -using System.Collections.Generic; -using System.Text; +using global::System; +using global::System.Collections.Generic; +using global::System.Text; -namespace MediaBrowser.Model.Cryptography -{ - // Defined from this hash storage spec - // https://github.com/P-H-C/phc-string-format/blob/master/phc-sf-spec.md - // $[$=(,=)*][$[$]] - // with one slight amendment to ease the transition, we're writing out the bytes in hex - // rather than making them a BASE64 string with stripped padding - public class PasswordHash - { - private readonly Dictionary _parameters; - private readonly byte[] _salt; - private readonly byte[] _hash; +namespace MediaBrowser.Model.Cryptography; - public PasswordHash(string id, byte[] hash) - : this(id, hash, Array.Empty()) - { - } + // Defined from this hash storage spec + // https://github.com/P-H-C/phc-string-format/blob/master/phc-sf-spec.md + // $[$=(,=)*][$[$]] + // with one slight amendment to ease the transition, we're writing out the bytes in hex + // rather than making them a BASE64 string with stripped padding + public class PasswordHash + { + private readonly Dictionary _parameters; + private readonly byte[] _salt; + private readonly byte[] _hash; - public PasswordHash(string id, byte[] hash, byte[] salt) - : this(id, hash, salt, new Dictionary()) - { - } + public PasswordHash(string id, byte[] hash) + : this(id, hash, Array.Empty()) + { + } - public PasswordHash(string id, byte[] hash, byte[] salt, Dictionary parameters) - { - ArgumentException.ThrowIfNullOrEmpty(id); + public PasswordHash(string id, byte[] hash, byte[] salt) + : this(id, hash, salt, new Dictionary()) + { + } - Id = id; - _hash = hash; - _salt = salt; - _parameters = parameters; - } + public PasswordHash(string id, byte[] hash, byte[] salt, Dictionary parameters) + { + ArgumentException.ThrowIfNullOrEmpty(id); - /// - /// Gets the symbolic name for the function used. - /// - /// Returns the symbolic name for the function used. - public string Id { get; } + Id = id; + _hash = hash; + _salt = salt; + _parameters = parameters; + } - /// - /// Gets the additional parameters used by the hash function. - /// - public IReadOnlyDictionary Parameters => _parameters; + /// + /// Gets the symbolic name for the function used. + /// + /// Returns the symbolic name for the function used. + public string Id { get; } - /// - /// Gets the salt used for hashing the password. - /// - /// Returns the salt used for hashing the password. - public ReadOnlySpan Salt => _salt; + /// + /// Gets the additional parameters used by the hash function. + /// + public IReadOnlyDictionary Parameters => _parameters; - /// - /// Gets the hashed password. - /// - /// Return the hashed password. - public ReadOnlySpan Hash => _hash; + /// + /// Gets the salt used for hashing the password. + /// + /// Returns the salt used for hashing the password. + public ReadOnlySpan Salt => _salt; - public static PasswordHash Parse(ReadOnlySpan hashString) - { - if (hashString.IsEmpty) - { - throw new ArgumentException("String can't be empty", nameof(hashString)); - } + /// + /// Gets the hashed password. + /// + /// Return the hashed password. + public ReadOnlySpan Hash => _hash; - if (hashString[0] != '$') - { - throw new FormatException("Hash string must start with a $"); - } + public static PasswordHash Parse(ReadOnlySpan hashString) + { + if (hashString.IsEmpty) + { + throw new ArgumentException("String can't be empty", nameof(hashString)); + } - // Ignore first $ - hashString = hashString[1..]; + if (hashString[0] != '$') + { + throw new FormatException("Hash string must start with a $"); + } - int nextSegment = hashString.IndexOf('$'); - if (hashString.IsEmpty || nextSegment == 0) - { - throw new FormatException("Hash string must contain a valid id"); - } + // Ignore first $ + hashString = hashString[1..]; - if (nextSegment == -1) - { - return new PasswordHash(hashString.ToString(), Array.Empty()); - } + int nextSegment = hashString.IndexOf('$'); + if (hashString.IsEmpty || nextSegment == 0) + { + throw new FormatException("Hash string must contain a valid id"); + } - ReadOnlySpan id = hashString[..nextSegment]; - hashString = hashString[(nextSegment + 1)..]; - Dictionary? parameters = null; + if (nextSegment == -1) + { + return new PasswordHash(hashString.ToString(), Array.Empty()); + } - nextSegment = hashString.IndexOf('$'); + ReadOnlySpan id = hashString[..nextSegment]; + hashString = hashString[(nextSegment + 1)..]; + Dictionary? parameters = null; - // Optional parameters - ReadOnlySpan parametersSpan = nextSegment == -1 ? hashString : hashString[..nextSegment]; - if (parametersSpan.Contains('=')) - { - while (!parametersSpan.IsEmpty) - { - ReadOnlySpan parameter; - int index = parametersSpan.IndexOf(','); - if (index == -1) - { - parameter = parametersSpan; - parametersSpan = ReadOnlySpan.Empty; - } - else - { - parameter = parametersSpan[..index]; - parametersSpan = parametersSpan[(index + 1)..]; - } + nextSegment = hashString.IndexOf('$'); - int splitIndex = parameter.IndexOf('='); - if (splitIndex == -1 || splitIndex == 0 || splitIndex == parameter.Length - 1) - { - throw new FormatException("Malformed parameter in password hash string"); - } + // Optional parameters + ReadOnlySpan parametersSpan = nextSegment == -1 ? hashString : hashString[..nextSegment]; + if (parametersSpan.Contains('=')) + { + while (!parametersSpan.IsEmpty) + { + ReadOnlySpan parameter; + int index = parametersSpan.IndexOf(','); + if (index == -1) + { + parameter = parametersSpan; + parametersSpan = ReadOnlySpan.Empty; + } + else + { + parameter = parametersSpan[..index]; + parametersSpan = parametersSpan[(index + 1)..]; + } - (parameters ??= new Dictionary()).Add( - parameter[..splitIndex].ToString(), - parameter[(splitIndex + 1)..].ToString()); - } + int splitIndex = parameter.IndexOf('='); + if (splitIndex == -1 || splitIndex == 0 || splitIndex == parameter.Length - 1) + { + throw new FormatException("Malformed parameter in password hash string"); + } - if (nextSegment == -1) - { - // parameters can't be null here - return new PasswordHash(id.ToString(), Array.Empty(), Array.Empty(), parameters!); - } + (parameters ??= new Dictionary()).Add( + parameter[..splitIndex].ToString(), + parameter[(splitIndex + 1)..].ToString()); + } - hashString = hashString[(nextSegment + 1)..]; - nextSegment = hashString.IndexOf('$'); - } + if (nextSegment == -1) + { + // parameters can't be null here + return new PasswordHash(id.ToString(), Array.Empty(), Array.Empty(), parameters!); + } - if (nextSegment == 0) - { - throw new FormatException("Hash string contains an empty segment"); - } + hashString = hashString[(nextSegment + 1)..]; + nextSegment = hashString.IndexOf('$'); + } - byte[] hash; - byte[] salt; + if (nextSegment == 0) + { + throw new FormatException("Hash string contains an empty segment"); + } - if (nextSegment == -1) - { - salt = Array.Empty(); - hash = Convert.FromHexString(hashString); - } - else - { - salt = Convert.FromHexString(hashString[..nextSegment]); - hashString = hashString[(nextSegment + 1)..]; - nextSegment = hashString.IndexOf('$'); - if (nextSegment != -1) - { - throw new FormatException("Hash string contains too many segments"); - } + byte[] hash; + byte[] salt; - if (hashString.IsEmpty) - { - throw new FormatException("Hash segment is empty"); - } + if (nextSegment == -1) + { + salt = Array.Empty(); + hash = Convert.FromHexString(hashString); + } + else + { + salt = Convert.FromHexString(hashString[..nextSegment]); + hashString = hashString[(nextSegment + 1)..]; + nextSegment = hashString.IndexOf('$'); + if (nextSegment != -1) + { + throw new FormatException("Hash string contains too many segments"); + } - hash = Convert.FromHexString(hashString); - } + if (hashString.IsEmpty) + { + throw new FormatException("Hash segment is empty"); + } - return new PasswordHash(id.ToString(), hash, salt, parameters ?? new Dictionary()); - } + hash = Convert.FromHexString(hashString); + } - private void SerializeParameters(StringBuilder stringBuilder) - { - if (_parameters.Count == 0) - { - return; - } + return new PasswordHash(id.ToString(), hash, salt, parameters ?? new Dictionary()); + } - stringBuilder.Append('$'); - foreach (var pair in _parameters) - { - stringBuilder.Append(pair.Key) - .Append('=') - .Append(pair.Value) - .Append(','); - } + private void SerializeParameters(StringBuilder stringBuilder) + { + if (_parameters.Count == 0) + { + return; + } - // Remove last ',' - stringBuilder.Length -= 1; - } + stringBuilder.Append('$'); + foreach (var pair in _parameters) + { + stringBuilder.Append(pair.Key) + .Append('=') + .Append(pair.Value) + .Append(','); + } - /// - public override string ToString() - { - var str = new StringBuilder() - .Append('$') - .Append(Id); - SerializeParameters(str); + // Remove last ',' + stringBuilder.Length -= 1; + } - if (_salt.Length != 0) - { - str.Append('$') - .Append(Convert.ToHexString(_salt)); - } + /// + public override string ToString() + { + var str = new StringBuilder() + .Append('$') + .Append(Id); + SerializeParameters(str); - if (_hash.Length != 0) - { - str.Append('$') - .Append(Convert.ToHexString(_hash)); - } + if (_salt.Length != 0) + { + str.Append('$') + .Append(Convert.ToHexString(_salt)); + } - return str.ToString(); - } - } -} + if (_hash.Length != 0) + { + str.Append('$') + .Append(Convert.ToHexString(_hash)); + } + + return str.ToString(); + } + } diff --git a/MediaBrowser.Model/Devices/DeviceInfo.cs b/MediaBrowser.Model/Devices/DeviceInfo.cs index 2c8ccf14..c2b2566d 100644 --- a/MediaBrowser.Model/Devices/DeviceInfo.cs +++ b/MediaBrowser.Model/Devices/DeviceInfo.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using MediaBrowser.Model.Session; - namespace MediaBrowser.Model.Devices; +using global::System; +using MediaBrowser.Model.Session; + /// /// A class for device Information. /// @@ -17,7 +17,7 @@ public class DeviceInfo /// public DeviceInfo() { - Capabilities = new ClientCapabilities(); + this.Capabilities = new ClientCapabilities(); } /// diff --git a/MediaBrowser.Model/Dlna/CodecProfile.cs b/MediaBrowser.Model/Dlna/CodecProfile.cs index 7d39d2f2..e2e68ed4 100644 --- a/MediaBrowser.Model/Dlna/CodecProfile.cs +++ b/MediaBrowser.Model/Dlna/CodecProfile.cs @@ -2,14 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Linq; -using System.Xml.Serialization; -using MediaBrowser.Model.Extensions; +#pragma warning disable SA1615 // Element should be documented namespace MediaBrowser.Model.Dlna; +using global::System; +using global::System.Collections.Generic; +using global::System.Linq; +using global::System.Xml.Serialization; +using MediaBrowser.Model.Extensions; + /// /// Defines the . /// @@ -20,8 +22,8 @@ public class CodecProfile /// public CodecProfile() { - Conditions = []; - ApplyConditions = []; + this.Conditions = []; + this.ApplyConditions = []; } /// @@ -33,12 +35,12 @@ public class CodecProfile /// /// Gets or sets the list of which this profile must meet. /// - public ProfileCondition[] Conditions { get; set; } + public List Conditions { get; set; } = []; /// /// Gets or sets the list of to apply if this profile is met. /// - public ProfileCondition[] ApplyConditions { get; set; } + public List ApplyConditions { get; set; } = []; /// /// Gets or sets the codec(s) that this profile applies to. @@ -61,38 +63,43 @@ public class CodecProfile /// /// Checks to see whether the codecs and containers contain the given parameters. /// - /// The codecs to match. + /// The codec to match (single codec or comma-separated list). /// The container to match. - /// Consider sub-containers. - /// True if both conditions are met. - public bool ContainsAnyCodec(IReadOnlyList codecs, string? container, bool useSubContainer = false) - { - var containerToCheck = useSubContainer && string.Equals(Container, "hls", StringComparison.OrdinalIgnoreCase) ? SubContainer : Container; - return ContainerHelper.ContainsContainer(containerToCheck, container) && codecs.Any(c => ContainerHelper.ContainsContainer(Codec, false, c)); - } - - /// - /// Checks to see whether the codecs and containers contain the given parameters. - /// - /// The codec to match. - /// The container to match. - /// Consider sub-containers. - /// True if both conditions are met. + /// When true and Container is "hls", uses SubContainer instead of Container for matching. + /// True if both the codec and container conditions are met. public bool ContainsAnyCodec(string? codec, string? container, bool useSubContainer = false) { - return ContainsAnyCodec(codec.AsSpan(), container, useSubContainer); + if (codec is null) + { + return false; + } + + var containerToCheck = + useSubContainer && + string.Equals(this.Container, "hls", StringComparison.OrdinalIgnoreCase) + ? this.SubContainer + : this.Container; + + return ContainerHelper.ContainsContainer(containerToCheck, container) + && ContainerHelper.ContainsContainer(this.Codec, codec); } /// /// Checks to see whether the codecs and containers contain the given parameters. /// - /// The codec to match. + /// The list of codecs to match. /// The container to match. - /// Consider sub-containers. - /// True if both conditions are met. - public bool ContainsAnyCodec(ReadOnlySpan codec, string? container, bool useSubContainer = false) + /// When true and Container is "hls", uses SubContainer instead of Container for matching. + /// True if both the codec and container conditions are met. + public bool ContainsAnyCodec(IReadOnlyList codecs, string? container, bool useSubContainer = false) { - var containerToCheck = useSubContainer && string.Equals(Container, "hls", StringComparison.OrdinalIgnoreCase) ? SubContainer : Container; - return ContainerHelper.ContainsContainer(containerToCheck, container) && ContainerHelper.ContainsContainer(Codec, false, codec); + if (codecs == null || codecs.Count == 0) + { + return false; + } + + // Join codecs with comma to match ContainerHelper's expected format + var codecString = string.Join(',', codecs); + return ContainsAnyCodec(codecString, container, useSubContainer); } } diff --git a/MediaBrowser.Model/Dlna/CodecType.cs b/MediaBrowser.Model/Dlna/CodecType.cs index 7067021a..67865880 100644 --- a/MediaBrowser.Model/Dlna/CodecType.cs +++ b/MediaBrowser.Model/Dlna/CodecType.cs @@ -4,12 +4,10 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Dlna -{ - public enum CodecType - { - Video = 0, - VideoAudio = 1, - Audio = 2 - } -} +namespace MediaBrowser.Model.Dlna; + public enum CodecType + { + Video = 0, + VideoAudio = 1, + Audio = 2, + } diff --git a/MediaBrowser.Model/Dlna/ConditionProcessor.cs b/MediaBrowser.Model/Dlna/ConditionProcessor.cs index 4cb394db..b80c888a 100644 --- a/MediaBrowser.Model/Dlna/ConditionProcessor.cs +++ b/MediaBrowser.Model/Dlna/ConditionProcessor.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; +namespace MediaBrowser.Model.Dlna; + +using global::System; +using global::System.Globalization; using Jellyfin.Data.Enums; using Jellyfin.Extensions; using MediaBrowser.Model.MediaInfo; -namespace MediaBrowser.Model.Dlna -{ - /// - /// The condition processor. - /// - public static class ConditionProcessor +/// +/// The condition processor. +/// +public static class ConditionProcessor { /// /// Checks if a video condition is satisfied. @@ -379,11 +379,10 @@ namespace MediaBrowser.Model.Dlna { ProfileConditionType.Equals => currentValue.Value == expected, ProfileConditionType.NotEquals => currentValue.Value != expected, - _ => throw new InvalidOperationException("Unexpected ProfileConditionType: " + condition.Condition) + _ => throw new InvalidOperationException("Unexpected ProfileConditionType: " + condition.Condition), }; } return false; } } -} diff --git a/MediaBrowser.Model/Dlna/ContainerProfile.cs b/MediaBrowser.Model/Dlna/ContainerProfile.cs index a6bbe64f..d4ff1d9f 100644 --- a/MediaBrowser.Model/Dlna/ContainerProfile.cs +++ b/MediaBrowser.Model/Dlna/ContainerProfile.cs @@ -4,9 +4,9 @@ #pragma warning disable CA1819 // Properties should not return arrays -using System; -using System.Collections.Generic; -using System.Xml.Serialization; +using global::System; +using global::System.Collections.Generic; +using global::System.Xml.Serialization; using MediaBrowser.Model.Extensions; namespace MediaBrowser.Model.Dlna; diff --git a/MediaBrowser.Model/Dlna/DeviceProfile.cs b/MediaBrowser.Model/Dlna/DeviceProfile.cs index 75388ed9..b570c6cd 100644 --- a/MediaBrowser.Model/Dlna/DeviceProfile.cs +++ b/MediaBrowser.Model/Dlna/DeviceProfile.cs @@ -4,7 +4,7 @@ #pragma warning disable CA1819 // Properties should not return arrays -using System; +using global::System; namespace MediaBrowser.Model.Dlna; diff --git a/MediaBrowser.Model/Dlna/DirectPlayProfile.cs b/MediaBrowser.Model/Dlna/DirectPlayProfile.cs index 8fc55821..80e1d897 100644 --- a/MediaBrowser.Model/Dlna/DirectPlayProfile.cs +++ b/MediaBrowser.Model/Dlna/DirectPlayProfile.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Xml.Serialization; -using MediaBrowser.Model.Extensions; - namespace MediaBrowser.Model.Dlna; +using global::System.Xml.Serialization; +using MediaBrowser.Model.Extensions; + /// /// Defines the . /// diff --git a/MediaBrowser.Model/Dlna/DlnaProfileType.cs b/MediaBrowser.Model/Dlna/DlnaProfileType.cs index 335f2266..fb5eb065 100644 --- a/MediaBrowser.Model/Dlna/DlnaProfileType.cs +++ b/MediaBrowser.Model/Dlna/DlnaProfileType.cs @@ -4,14 +4,12 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Dlna -{ - public enum DlnaProfileType - { - Audio = 0, - Video = 1, - Photo = 2, - Subtitle = 3, - Lyric = 4 - } -} +namespace MediaBrowser.Model.Dlna; + public enum DlnaProfileType + { + Audio = 0, + Video = 1, + Photo = 2, + Subtitle = 3, + Lyric = 4, + } diff --git a/MediaBrowser.Model/Dlna/EncodingContext.cs b/MediaBrowser.Model/Dlna/EncodingContext.cs index ccb942b0..589e8427 100644 --- a/MediaBrowser.Model/Dlna/EncodingContext.cs +++ b/MediaBrowser.Model/Dlna/EncodingContext.cs @@ -4,11 +4,9 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Dlna -{ - public enum EncodingContext - { - Streaming = 0, - Static = 1 - } -} +namespace MediaBrowser.Model.Dlna; + public enum EncodingContext + { + Streaming = 0, + Static = 1, + } diff --git a/MediaBrowser.Model/Dlna/ITranscoderSupport.cs b/MediaBrowser.Model/Dlna/ITranscoderSupport.cs index 71c50147..6b5e6a37 100644 --- a/MediaBrowser.Model/Dlna/ITranscoderSupport.cs +++ b/MediaBrowser.Model/Dlna/ITranscoderSupport.cs @@ -4,14 +4,12 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Dlna -{ - public interface ITranscoderSupport - { - bool CanEncodeToAudioCodec(string codec); +namespace MediaBrowser.Model.Dlna; + public interface ITranscoderSupport + { + bool CanEncodeToAudioCodec(string codec); - bool CanEncodeToSubtitleCodec(string codec); + bool CanEncodeToSubtitleCodec(string codec); - bool CanExtractSubtitles(string codec); - } -} + bool CanExtractSubtitles(string codec); + } diff --git a/MediaBrowser.Model/Dlna/MediaOptions.cs b/MediaBrowser.Model/Dlna/MediaOptions.cs index 69364504..e384a9d4 100644 --- a/MediaBrowser.Model/Dlna/MediaOptions.cs +++ b/MediaBrowser.Model/Dlna/MediaOptions.cs @@ -2,148 +2,146 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using MediaBrowser.Model.Dto; +namespace MediaBrowser.Model.Dlna; + using global::System; + using MediaBrowser.Model.Dto; -namespace MediaBrowser.Model.Dlna -{ - /// - /// Class MediaOptions. - /// - public class MediaOptions - { - /// - /// Initializes a new instance of the class. - /// - public MediaOptions() - { - Context = EncodingContext.Streaming; + /// + /// Class MediaOptions. + /// + public class MediaOptions + { + /// + /// Initializes a new instance of the class. + /// + public MediaOptions() + { + Context = EncodingContext.Streaming; - EnableDirectPlay = true; - EnableDirectStream = true; - } + EnableDirectPlay = true; + EnableDirectStream = true; + } - /// - /// Gets or sets a value indicating whether direct playback is allowed. - /// - public bool EnableDirectPlay { get; set; } + /// + /// Gets or sets a value indicating whether direct playback is allowed. + /// + public bool EnableDirectPlay { get; set; } - /// - /// Gets or sets a value indicating whether direct streaming is allowed. - /// - public bool EnableDirectStream { get; set; } + /// + /// Gets or sets a value indicating whether direct streaming is allowed. + /// + public bool EnableDirectStream { get; set; } - /// - /// Gets or sets a value indicating whether direct playback is forced. - /// - public bool ForceDirectPlay { get; set; } + /// + /// Gets or sets a value indicating whether direct playback is forced. + /// + public bool ForceDirectPlay { get; set; } - /// - /// Gets or sets a value indicating whether direct streaming is forced. - /// - public bool ForceDirectStream { get; set; } + /// + /// Gets or sets a value indicating whether direct streaming is forced. + /// + public bool ForceDirectStream { get; set; } - /// - /// Gets or sets a value indicating whether audio stream copy is allowed. - /// - public bool AllowAudioStreamCopy { get; set; } + /// + /// Gets or sets a value indicating whether audio stream copy is allowed. + /// + public bool AllowAudioStreamCopy { get; set; } - /// - /// Gets or sets a value indicating whether video stream copy is allowed. - /// - public bool AllowVideoStreamCopy { get; set; } + /// + /// Gets or sets a value indicating whether video stream copy is allowed. + /// + public bool AllowVideoStreamCopy { get; set; } - /// - /// Gets or sets a value indicating whether always burn in subtitles when transcoding. - /// - public bool AlwaysBurnInSubtitleWhenTranscoding { get; set; } + /// + /// Gets or sets a value indicating whether always burn in subtitles when transcoding. + /// + public bool AlwaysBurnInSubtitleWhenTranscoding { get; set; } - /// - /// Gets or sets the item id. - /// - public Guid ItemId { get; set; } + /// + /// Gets or sets the item id. + /// + public Guid ItemId { get; set; } - /// - /// Gets or sets the media sources. - /// - public MediaSourceInfo[] MediaSources { get; set; } = Array.Empty(); + /// + /// Gets or sets the media sources. + /// + public MediaSourceInfo[] MediaSources { get; set; } = Array.Empty(); - /// - /// Gets or sets the device profile. - /// - public required DeviceProfile Profile { get; set; } + /// + /// Gets or sets the device profile. + /// + public required DeviceProfile Profile { get; set; } - /// - /// Gets or sets a media source id. Optional. Only needed if a specific AudioStreamIndex or SubtitleStreamIndex are requested. - /// - public string? MediaSourceId { get; set; } + /// + /// Gets or sets a media source id. Optional. Only needed if a specific AudioStreamIndex or SubtitleStreamIndex are requested. + /// + public string? MediaSourceId { get; set; } - /// - /// Gets or sets the device id. - /// - public string? DeviceId { get; set; } + /// + /// Gets or sets the device id. + /// + public string? DeviceId { get; set; } - /// - /// Gets or sets an override of supported number of audio channels - /// Example: DeviceProfile supports five channel, but user only has stereo speakers. - /// - public int? MaxAudioChannels { get; set; } + /// + /// Gets or sets an override of supported number of audio channels + /// Example: DeviceProfile supports five channel, but user only has stereo speakers. + /// + public int? MaxAudioChannels { get; set; } - /// - /// Gets or sets the application's configured maximum bitrate. - /// - public int? MaxBitrate { get; set; } + /// + /// Gets or sets the application's configured maximum bitrate. + /// + public int? MaxBitrate { get; set; } - /// - /// Gets or sets the context. - /// - /// The context. - public EncodingContext Context { get; set; } + /// + /// Gets or sets the context. + /// + /// The context. + public EncodingContext Context { get; set; } - /// - /// Gets or sets the audio transcoding bitrate. - /// - /// The audio transcoding bitrate. - public int? AudioTranscodingBitrate { get; set; } + /// + /// Gets or sets the audio transcoding bitrate. + /// + /// The audio transcoding bitrate. + public int? AudioTranscodingBitrate { get; set; } - /// - /// Gets or sets an override for the audio stream index. - /// - public int? AudioStreamIndex { get; set; } + /// + /// Gets or sets an override for the audio stream index. + /// + public int? AudioStreamIndex { get; set; } - /// - /// Gets or sets an override for the subtitle stream index. - /// - public int? SubtitleStreamIndex { get; set; } + /// + /// Gets or sets an override for the subtitle stream index. + /// + public int? SubtitleStreamIndex { get; set; } - /// - /// Gets the maximum bitrate. - /// - /// Whether or not this is audio. - /// System.Nullable<System.Int32>. - public int? GetMaxBitrate(bool isAudio) - { - if (MaxBitrate.HasValue) - { - return MaxBitrate; - } + /// + /// Gets the maximum bitrate. + /// + /// Whether or not this is audio. + /// System.Nullable<System.Int32>. + public int? GetMaxBitrate(bool isAudio) + { + if (MaxBitrate.HasValue) + { + return MaxBitrate; + } - if (Profile is null) - { - return null; - } + if (Profile is null) + { + return null; + } - if (Context == EncodingContext.Static) - { - if (isAudio && Profile.MaxStaticMusicBitrate.HasValue) - { - return Profile.MaxStaticMusicBitrate; - } + if (Context == EncodingContext.Static) + { + if (isAudio && Profile.MaxStaticMusicBitrate.HasValue) + { + return Profile.MaxStaticMusicBitrate; + } - return Profile.MaxStaticBitrate; - } + return Profile.MaxStaticBitrate; + } - return Profile.MaxStreamingBitrate; - } - } -} + return Profile.MaxStreamingBitrate; + } + } diff --git a/MediaBrowser.Model/Dlna/PlaybackErrorCode.cs b/MediaBrowser.Model/Dlna/PlaybackErrorCode.cs index 3f2ba683..92e81a55 100644 --- a/MediaBrowser.Model/Dlna/PlaybackErrorCode.cs +++ b/MediaBrowser.Model/Dlna/PlaybackErrorCode.cs @@ -4,12 +4,10 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Dlna -{ - public enum PlaybackErrorCode - { - NotAllowed = 0, - NoCompatibleStream = 1, - RateLimitExceeded = 2 - } -} +namespace MediaBrowser.Model.Dlna; + public enum PlaybackErrorCode + { + NotAllowed = 0, + NoCompatibleStream = 1, + RateLimitExceeded = 2, + } diff --git a/MediaBrowser.Model/Dlna/ProfileCondition.cs b/MediaBrowser.Model/Dlna/ProfileCondition.cs index 1c304dcf..644449ab 100644 --- a/MediaBrowser.Model/Dlna/ProfileCondition.cs +++ b/MediaBrowser.Model/Dlna/ProfileCondition.cs @@ -5,40 +5,38 @@ #nullable disable #pragma warning disable CS1591 -using System.Xml.Serialization; +using global::System.Xml.Serialization; -namespace MediaBrowser.Model.Dlna -{ - public class ProfileCondition - { - public ProfileCondition() - { - IsRequired = true; - } +namespace MediaBrowser.Model.Dlna; + public class ProfileCondition + { + public ProfileCondition() + { + IsRequired = true; + } - public ProfileCondition(ProfileConditionType condition, ProfileConditionValue property, string value) - : this(condition, property, value, false) - { - } + public ProfileCondition(ProfileConditionType condition, ProfileConditionValue property, string value) + : this(condition, property, value, false) + { + } - public ProfileCondition(ProfileConditionType condition, ProfileConditionValue property, string value, bool isRequired) - { - Condition = condition; - Property = property; - Value = value; - IsRequired = isRequired; - } + public ProfileCondition(ProfileConditionType condition, ProfileConditionValue property, string value, bool isRequired) + { + Condition = condition; + Property = property; + Value = value; + IsRequired = isRequired; + } - [XmlAttribute("condition")] - public ProfileConditionType Condition { get; set; } + [XmlAttribute("condition")] + public ProfileConditionType Condition { get; set; } - [XmlAttribute("property")] - public ProfileConditionValue Property { get; set; } + [XmlAttribute("property")] + public ProfileConditionValue Property { get; set; } - [XmlAttribute("value")] - public string Value { get; set; } + [XmlAttribute("value")] + public string Value { get; set; } - [XmlAttribute("isRequired")] - public bool IsRequired { get; set; } - } -} + [XmlAttribute("isRequired")] + public bool IsRequired { get; set; } + } diff --git a/MediaBrowser.Model/Dlna/ProfileConditionType.cs b/MediaBrowser.Model/Dlna/ProfileConditionType.cs index 5336b380..f8ff045e 100644 --- a/MediaBrowser.Model/Dlna/ProfileConditionType.cs +++ b/MediaBrowser.Model/Dlna/ProfileConditionType.cs @@ -4,14 +4,12 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Dlna -{ - public enum ProfileConditionType - { - Equals = 0, - NotEquals = 1, - LessThanEqual = 2, - GreaterThanEqual = 3, - EqualsAny = 4 - } -} +namespace MediaBrowser.Model.Dlna; + public enum ProfileConditionType + { + Equals = 0, + NotEquals = 1, + LessThanEqual = 2, + GreaterThanEqual = 3, + EqualsAny = 4, + } diff --git a/MediaBrowser.Model/Dlna/ProfileConditionValue.cs b/MediaBrowser.Model/Dlna/ProfileConditionValue.cs index 6719e215..69c3aa11 100644 --- a/MediaBrowser.Model/Dlna/ProfileConditionValue.cs +++ b/MediaBrowser.Model/Dlna/ProfileConditionValue.cs @@ -4,34 +4,32 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Dlna -{ - public enum ProfileConditionValue - { - AudioChannels = 0, - AudioBitrate = 1, - AudioProfile = 2, - Width = 3, - Height = 4, - Has64BitOffsets = 5, - PacketLength = 6, - VideoBitDepth = 7, - VideoBitrate = 8, - VideoFramerate = 9, - VideoLevel = 10, - VideoProfile = 11, - VideoTimestamp = 12, - IsAnamorphic = 13, - RefFrames = 14, - NumAudioStreams = 16, - NumVideoStreams = 17, - IsSecondaryAudio = 18, - VideoCodecTag = 19, - IsAvc = 20, - IsInterlaced = 21, - AudioSampleRate = 22, - AudioBitDepth = 23, - VideoRangeType = 24, - NumStreams = 25 - } -} +namespace MediaBrowser.Model.Dlna; + public enum ProfileConditionValue + { + AudioChannels = 0, + AudioBitrate = 1, + AudioProfile = 2, + Width = 3, + Height = 4, + Has64BitOffsets = 5, + PacketLength = 6, + VideoBitDepth = 7, + VideoBitrate = 8, + VideoFramerate = 9, + VideoLevel = 10, + VideoProfile = 11, + VideoTimestamp = 12, + IsAnamorphic = 13, + RefFrames = 14, + NumAudioStreams = 16, + NumVideoStreams = 17, + IsSecondaryAudio = 18, + VideoCodecTag = 19, + IsAvc = 20, + IsInterlaced = 21, + AudioSampleRate = 22, + AudioBitDepth = 23, + VideoRangeType = 24, + NumStreams = 25, + } diff --git a/MediaBrowser.Model/Dlna/ResolutionConfiguration.cs b/MediaBrowser.Model/Dlna/ResolutionConfiguration.cs index 673fa941..edfadc3d 100644 --- a/MediaBrowser.Model/Dlna/ResolutionConfiguration.cs +++ b/MediaBrowser.Model/Dlna/ResolutionConfiguration.cs @@ -4,18 +4,21 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Dlna -{ - public class ResolutionConfiguration - { - public ResolutionConfiguration(int maxWidth, int maxBitrate) - { - MaxWidth = maxWidth; - MaxBitrate = maxBitrate; - } +namespace MediaBrowser.Model.Dlna; + public class ResolutionConfiguration + { + /// + /// Initializes a new instance of the class. + /// + /// The maximum width. + /// The maximum bitrate. + public ResolutionConfiguration(int maxWidth, int maxBitrate) + { + MaxWidth = maxWidth; + MaxBitrate = maxBitrate; + } - public int MaxWidth { get; set; } + public int MaxWidth { get; set; } - public int MaxBitrate { get; set; } - } -} + public int MaxBitrate { get; set; } + } diff --git a/MediaBrowser.Model/Dlna/ResolutionNormalizer.cs b/MediaBrowser.Model/Dlna/ResolutionNormalizer.cs index 7c4eca8d..fde4b7cd 100644 --- a/MediaBrowser.Model/Dlna/ResolutionNormalizer.cs +++ b/MediaBrowser.Model/Dlna/ResolutionNormalizer.cs @@ -5,85 +5,94 @@ #nullable disable #pragma warning disable CS1591 -using System; -using System.Linq; +using global::System; +using global::System.Linq; -namespace MediaBrowser.Model.Dlna -{ - public static class ResolutionNormalizer - { - // Please note: all bitrate here are in the scale of SDR h264 bitrate at 30fps - private static readonly ResolutionConfiguration[] _configurations = - [ - new ResolutionConfiguration(416, 365000), - new ResolutionConfiguration(640, 730000), - new ResolutionConfiguration(768, 1100000), - new ResolutionConfiguration(960, 3000000), - new ResolutionConfiguration(1280, 6000000), - new ResolutionConfiguration(1920, 13500000), - new ResolutionConfiguration(2560, 28000000), - new ResolutionConfiguration(3840, 50000000) - ]; +namespace MediaBrowser.Model.Dlna; + public static class ResolutionNormalizer + { + // Please note: all bitrate here are in the scale of SDR h264 bitrate at 30fps + private static readonly ResolutionConfiguration[] _configurations = + [ + new ResolutionConfiguration(416, 365000), + new ResolutionConfiguration(640, 730000), + new ResolutionConfiguration(768, 1100000), + new ResolutionConfiguration(960, 3000000), + new ResolutionConfiguration(1280, 6000000), + new ResolutionConfiguration(1920, 13500000), + new ResolutionConfiguration(2560, 28000000), + new ResolutionConfiguration(3840, 50000000) + ]; - public static ResolutionOptions Normalize( - int? inputBitrate, - int outputBitrate, - int h264EquivalentOutputBitrate, - int? maxWidth, - int? maxHeight, - float? targetFps, - bool isHdr = false) // We are not doing HDR transcoding for now, leave for future use - { - // If the bitrate isn't changing, then don't downscale the resolution - if (inputBitrate.HasValue && outputBitrate >= inputBitrate.Value) - { - if (maxWidth.HasValue || maxHeight.HasValue) - { - return new ResolutionOptions - { - MaxWidth = maxWidth, - MaxHeight = maxHeight - }; - } - } + /// + /// Normalizes resolution options based on bitrate and dimensions. + /// + /// The input bitrate. + /// The output bitrate. + /// The H264 equivalent output bitrate. + /// The maximum width. + /// The maximum height. + /// The target frames per second. + /// Whether the content is HDR. + /// The normalized resolution options. + public static ResolutionOptions Normalize( + int? inputBitrate, + int outputBitrate, + int h264EquivalentOutputBitrate, + int? maxWidth, + int? maxHeight, + float? targetFps, + bool isHdr = false) // We are not doing HDR transcoding for now, leave for future use + { + // If the bitrate isn't changing, then don't downscale the resolution + if (inputBitrate.HasValue && outputBitrate >= inputBitrate.Value) + { + if (maxWidth.HasValue || maxHeight.HasValue) + { + return new ResolutionOptions + { + MaxWidth = maxWidth, + MaxHeight = maxHeight, + }; + } + } - // Our reference bitrate is based on SDR h264 at 30fps - var referenceFps = targetFps ?? 30.0f; - var referenceScale = referenceFps <= 30.0f - ? 30.0f / referenceFps - : 1.0f / MathF.Sqrt(referenceFps / 30.0f); - var referenceBitrate = h264EquivalentOutputBitrate * referenceScale; + // Our reference bitrate is based on SDR h264 at 30fps + var referenceFps = targetFps ?? 30.0f; + var referenceScale = referenceFps <= 30.0f + ? 30.0f / referenceFps + : 1.0f / MathF.Sqrt(referenceFps / 30.0f); + var referenceBitrate = h264EquivalentOutputBitrate * referenceScale; - if (isHdr) - { - referenceBitrate *= 0.8f; - } + if (isHdr) + { + referenceBitrate *= 0.8f; + } - var resolutionConfig = GetResolutionConfiguration(Convert.ToInt32(referenceBitrate)); + var resolutionConfig = GetResolutionConfiguration(Convert.ToInt32(referenceBitrate)); - if (resolutionConfig is null) - { - return new ResolutionOptions { MaxWidth = maxWidth, MaxHeight = maxHeight }; - } + if (resolutionConfig is null) + { + return new ResolutionOptions { MaxWidth = maxWidth, MaxHeight = maxHeight }; + } - var originWidthValue = maxWidth; + var originWidthValue = maxWidth; - maxWidth = Math.Min(resolutionConfig.MaxWidth, maxWidth ?? resolutionConfig.MaxWidth); - if (!originWidthValue.HasValue || originWidthValue.Value != maxWidth.Value) - { - maxHeight = null; - } + maxWidth = Math.Min(resolutionConfig.MaxWidth, maxWidth ?? resolutionConfig.MaxWidth); + if (!originWidthValue.HasValue || originWidthValue.Value != maxWidth.Value) + { + maxHeight = null; + } - return new ResolutionOptions - { - MaxWidth = maxWidth, - MaxHeight = maxHeight - }; - } + return new ResolutionOptions + { + MaxWidth = maxWidth, + MaxHeight = maxHeight, + }; + } - private static ResolutionConfiguration GetResolutionConfiguration(int outputBitrate) - { - return _configurations.FirstOrDefault(config => outputBitrate <= config.MaxBitrate); - } - } -} + private static ResolutionConfiguration GetResolutionConfiguration(int outputBitrate) + { + return _configurations.FirstOrDefault(config => outputBitrate <= config.MaxBitrate); + } + } diff --git a/MediaBrowser.Model/Dlna/ResolutionOptions.cs b/MediaBrowser.Model/Dlna/ResolutionOptions.cs index a6275810..dac2d8bd 100644 --- a/MediaBrowser.Model/Dlna/ResolutionOptions.cs +++ b/MediaBrowser.Model/Dlna/ResolutionOptions.cs @@ -4,12 +4,10 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Dlna -{ - public class ResolutionOptions - { - public int? MaxWidth { get; set; } +namespace MediaBrowser.Model.Dlna; + public class ResolutionOptions + { + public int? MaxWidth { get; set; } - public int? MaxHeight { get; set; } - } -} + public int? MaxHeight { get; set; } + } diff --git a/MediaBrowser.Model/Dlna/StreamBuilder.cs b/MediaBrowser.Model/Dlna/StreamBuilder.cs index 3b556a4d..fbd694f3 100644 --- a/MediaBrowser.Model/Dlna/StreamBuilder.cs +++ b/MediaBrowser.Model/Dlna/StreamBuilder.cs @@ -2,10 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; +namespace MediaBrowser.Model.Dlna; + +using global::System; +using global::System.Collections.Generic; +using global::System.Globalization; +using global::System.Linq; using Jellyfin.Data.Enums; using Jellyfin.Extensions; using MediaBrowser.Model.Dto; @@ -15,12 +17,10 @@ using MediaBrowser.Model.MediaInfo; using MediaBrowser.Model.Session; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Model.Dlna -{ - /// - /// Class StreamBuilder. - /// - public class StreamBuilder +/// +/// Class StreamBuilder. +/// +public class StreamBuilder { // Aliases internal const TranscodeReason ContainerReasons = TranscodeReason.ContainerNotSupported | TranscodeReason.ContainerBitrateExceedsLimit; @@ -86,7 +86,7 @@ namespace MediaBrowser.Model.Dlna MediaSource = item, RunTimeTicks = item.RunTimeTicks, Context = options.Context, - DeviceProfile = options.Profile + DeviceProfile = options.Profile, }; if (options.ForceDirectPlay) @@ -130,6 +130,7 @@ namespace MediaBrowser.Model.Dlna { var remuxContainer = item.TranscodingContainer ?? "ts"; string[] supportedHlsContainers = ["ts", "mp4"]; + // If the container specified for the profile is an HLS supported container, use that container instead, overriding the preference // The client should be responsible to ensure this container is compatible remuxContainer = Array.Exists(supportedHlsContainers, element => string.Equals(element, directPlayInfo.Profile?.Container, StringComparison.OrdinalIgnoreCase)) ? directPlayInfo.Profile?.Container : remuxContainer; @@ -323,6 +324,7 @@ namespace MediaBrowser.Model.Dlna return TranscodeReason.AudioSampleRateNotSupported; case ProfileConditionValue.Has64BitOffsets: + // TODO return 0; @@ -333,6 +335,7 @@ namespace MediaBrowser.Model.Dlna return TranscodeReason.AnamorphicVideoNotSupported; case ProfileConditionValue.IsAvc: + // TODO return 0; @@ -346,14 +349,17 @@ namespace MediaBrowser.Model.Dlna return TranscodeReason.StreamCountExceedsLimit; case ProfileConditionValue.NumAudioStreams: + // TODO return 0; case ProfileConditionValue.NumVideoStreams: + // TODO return 0; case ProfileConditionValue.PacketLength: + // TODO return 0; @@ -385,6 +391,7 @@ namespace MediaBrowser.Model.Dlna return TranscodeReason.VideoRangeTypeNotSupported; case ProfileConditionValue.VideoTimestamp: + // TODO return 0; @@ -655,7 +662,7 @@ namespace MediaBrowser.Model.Dlna Context = options.Context, DeviceProfile = options.Profile, SubtitleStreamIndex = options.SubtitleStreamIndex ?? GetDefaultSubtitleStreamIndex(item, options.Profile.SubtitleProfiles), - AlwaysBurnInSubtitleWhenTranscoding = options.AlwaysBurnInSubtitleWhenTranscoding + AlwaysBurnInSubtitleWhenTranscoding = options.AlwaysBurnInSubtitleWhenTranscoding, }; var subtitleStream = playlistItem.SubtitleStreamIndex.HasValue ? item.GetMediaStream(MediaStreamType.Subtitle, playlistItem.SubtitleStreamIndex.Value) : null; @@ -668,6 +675,7 @@ namespace MediaBrowser.Model.Dlna // Collect candidate audio streams ICollection candidateAudioStreams = audioStream is null ? [] : [audioStream]; + // When the index is explicitly required by client or the default is specified by user, don't do any stream reselection. if (!item.DefaultAudioIndexSource.HasFlag(AudioIndexSource.User) && (options.AudioStreamIndex is null or < 0)) { @@ -706,7 +714,7 @@ namespace MediaBrowser.Model.Dlna var videoStream = item.VideoStream; - var bitrateLimitExceeded = IsBitrateLimitExceeded(item, options.GetMaxBitrate(false) ?? 0); + var bitrateLimitExceeded = this.IsBitrateLimitExceeded(item, options.GetMaxBitrate(false) ?? 0); var isEligibleForDirectPlay = options.EnableDirectPlay && (options.ForceDirectPlay || !bitrateLimitExceeded); var isEligibleForDirectStream = options.EnableDirectStream && (options.ForceDirectStream || !bitrateLimitExceeded); TranscodeReason transcodeReasons = 0; @@ -722,7 +730,7 @@ namespace MediaBrowser.Model.Dlna transcodeReasons = TranscodeReason.ContainerBitrateExceedsLimit; } - _logger.LogDebug( + this._logger.LogDebug( "Profile: {0}, Path: {1}, isEligibleForDirectPlay: {2}, isEligibleForDirectStream: {3}", options.Profile.Name ?? "Unknown Profile", item.Path ?? "Unknown path", @@ -733,7 +741,7 @@ namespace MediaBrowser.Model.Dlna if (isEligibleForDirectPlay || isEligibleForDirectStream) { // See if it can be direct played - var directPlayInfo = GetVideoDirectPlayProfile(options, item, videoStream, audioStream, candidateAudioStreams, subtitleStream, isEligibleForDirectPlay, isEligibleForDirectStream); + var directPlayInfo = this.GetVideoDirectPlayProfile(options, item, videoStream, audioStream, candidateAudioStreams, subtitleStream, isEligibleForDirectPlay, isEligibleForDirectStream); var directPlay = directPlayInfo.PlayMethod; transcodeReasons |= directPlayInfo.TranscodeReasons; @@ -771,14 +779,14 @@ namespace MediaBrowser.Model.Dlna if (subtitleStream is not null) { - var subtitleProfile = GetSubtitleProfile(item, subtitleStream, options.Profile.SubtitleProfiles, directPlay.Value, _transcoderSupport, directPlayProfile?.Container, null); + var subtitleProfile = GetSubtitleProfile(item, subtitleStream, options.Profile.SubtitleProfiles, directPlay.Value, this._transcoderSupport, directPlayProfile?.Container, null); playlistItem.SubtitleDeliveryMethod = subtitleProfile.Method; playlistItem.SubtitleFormat = subtitleProfile.Format; } } - _logger.LogDebug( + this._logger.LogDebug( "DirectPlay Result for Profile: {0}, Path: {1}, PlayMethod: {2}, AudioStreamIndex: {3}, SubtitleStreamIndex: {4}, Reasons: {5}", options.Profile.Name ?? "Anonymous Profile", item.Path ?? "Unknown path", @@ -794,19 +802,19 @@ namespace MediaBrowser.Model.Dlna { // Can't direct play, find the transcoding profile // If we do this for direct-stream we will overwrite the info - var (transcodingProfile, playMethod) = GetVideoTranscodeProfile(item, options, videoStream, audioStream, playlistItem); + var (transcodingProfile, playMethod) = this.GetVideoTranscodeProfile(item, options, videoStream, audioStream, playlistItem); if (transcodingProfile is not null && playMethod.HasValue) { SetStreamInfoOptionsFromTranscodingProfile(item, playlistItem, transcodingProfile); - BuildStreamVideoItem(playlistItem, options, item, videoStream, audioStream, candidateAudioStreams, transcodingProfile.Container, transcodingProfile.VideoCodec, transcodingProfile.AudioCodec); + this.BuildStreamVideoItem(playlistItem, options, item, videoStream, audioStream, candidateAudioStreams, transcodingProfile.Container, transcodingProfile.VideoCodec, transcodingProfile.AudioCodec); playlistItem.PlayMethod = PlayMethod.Transcode; if (subtitleStream is not null) { - var subtitleProfile = GetSubtitleProfile(item, subtitleStream, options.Profile.SubtitleProfiles, PlayMethod.Transcode, _transcoderSupport, transcodingProfile.Container, transcodingProfile.Protocol); + var subtitleProfile = GetSubtitleProfile(item, subtitleStream, options.Profile.SubtitleProfiles, PlayMethod.Transcode, this._transcoderSupport, transcodingProfile.Container, transcodingProfile.Protocol); playlistItem.SubtitleDeliveryMethod = subtitleProfile.Method; playlistItem.SubtitleFormat = subtitleProfile.Format; playlistItem.SubtitleCodecs = [subtitleProfile.Format]; @@ -814,12 +822,12 @@ namespace MediaBrowser.Model.Dlna if ((playlistItem.TranscodeReasons & (VideoReasons | TranscodeReason.ContainerBitrateExceedsLimit)) != 0) { - ApplyTranscodingConditions(playlistItem, transcodingProfile.Conditions, null, true, true); + this.ApplyTranscodingConditions(playlistItem, transcodingProfile.Conditions, null, true, true); } } } - _logger.LogDebug( + this._logger.LogDebug( "StreamBuilder.BuildVideoItem( Profile={0}, Path={1}, AudioStreamIndex={2}, SubtitleStreamIndex={3} ) => ( PlayMethod={4}, TranscodeReason={5} ) {6}", options.Profile.Name ?? "Anonymous Profile", item.Path ?? "Unknown path", @@ -1059,6 +1067,7 @@ namespace MediaBrowser.Model.Dlna .Where(i => i.Type == CodecType.Video && i.ContainsAnyCodec(playlistItem.VideoCodecs, container, useSubContainer) && i.ApplyConditions.All(applyCondition => ConditionProcessor.IsVideoConditionSatisfied(applyCondition, width, height, bitDepth, videoBitrate, videoProfile, videoRangeType, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, isInterlaced, refFrames, numStreams, numVideoStreams, numAudioStreams, videoCodecTag, isAvc))) + // Reverse codec profiles for backward compatibility - first codec profile has higher priority .Reverse(); foreach (var condition in appliedVideoConditions) @@ -1090,6 +1099,7 @@ namespace MediaBrowser.Model.Dlna .Where(i => i.Type == CodecType.VideoAudio && i.ContainsAnyCodec(playlistItem.AudioCodecs, container) && i.ApplyConditions.All(applyCondition => ConditionProcessor.IsVideoAudioConditionSatisfied(applyCondition, audioChannels, inputAudioBitrate, inputAudioSampleRate, inputAudioBitDepth, audioProfile, isSecondaryAudio))) + // Reverse codec profiles for backward compatibility - first codec profile has higher priority .Reverse(); @@ -1106,6 +1116,7 @@ namespace MediaBrowser.Model.Dlna } var maxBitrateSetting = options.GetMaxBitrate(false); + // Honor max rate if (maxBitrateSetting.HasValue) { @@ -1518,7 +1529,7 @@ namespace MediaBrowser.Model.Dlna new SubtitleProfile { Method = SubtitleDeliveryMethod.Encode, - Format = subtitleStream.Codec + Format = subtitleStream.Codec, }; } @@ -2309,13 +2320,13 @@ namespace MediaBrowser.Model.Dlna { var profile = options.Profile; - var failures = AggregateFailureConditions( + var failures = this.AggregateFailureConditions( mediaSource, profile, "VideoCodecProfile", profile.ContainerProfiles .Where(containerProfile => containerProfile.Type == DlnaProfileType.Video && containerProfile.ContainsContainer(container)) - .SelectMany(containerProfile => CheckVideoConditions(containerProfile.Conditions, mediaSource, videoStream))); + .SelectMany(containerProfile => this.CheckVideoConditions(containerProfile.Conditions, mediaSource, videoStream))); return failures; } @@ -2334,15 +2345,15 @@ namespace MediaBrowser.Model.Dlna string videoCodec = videoStream.Codec; - var failures = AggregateFailureConditions( + var failures = this.AggregateFailureConditions( mediaSource, profile, "VideoCodecProfile", profile.CodecProfiles .Where(codecProfile => codecProfile.Type == CodecType.Video && codecProfile.ContainsAnyCodec(videoCodec, container) && - !CheckVideoConditions(codecProfile.ApplyConditions, mediaSource, videoStream).Any()) - .SelectMany(codecProfile => CheckVideoConditions(codecProfile.Conditions, mediaSource, videoStream))); + !this.CheckVideoConditions(codecProfile.ApplyConditions.ToArray(), mediaSource, videoStream).Any()) + .SelectMany(codecProfile => this.CheckVideoConditions(codecProfile.Conditions.ToArray(), mediaSource, videoStream))); return failures; } @@ -2373,7 +2384,7 @@ namespace MediaBrowser.Model.Dlna ? GetProfileConditionsForVideoAudio(profile.CodecProfiles, container, audioCodec, audioChannels, audioBitrate, audioSampleRate, audioBitDepth, audioProfile, isSecondaryAudio) : GetProfileConditionsForAudio(profile.CodecProfiles, container, audioCodec, audioChannels, audioBitrate, audioSampleRate, audioBitDepth, true); - var failures = AggregateFailureConditions(mediaSource, profile, "AudioCodecProfile", audioFailureConditions); + var failures = this.AggregateFailureConditions(mediaSource, profile, "AudioCodecProfile", audioFailureConditions); return failures; } @@ -2390,7 +2401,7 @@ namespace MediaBrowser.Model.Dlna /// Transcode reasons if the audio stream is not fully compatible for direct playback. private TranscodeReason GetCompatibilityAudioCodecDirect(MediaOptions options, MediaSourceInfo mediaSource, string container, MediaStream audioStream, bool isVideo, bool isSecondaryAudio) { - var failures = GetCompatibilityAudioCodec(options, mediaSource, container, audioStream, null, isVideo, isSecondaryAudio); + var failures = this.GetCompatibilityAudioCodec(options, mediaSource, container, audioStream, null, isVideo, isSecondaryAudio); if (audioStream.IsExternal) { @@ -2400,4 +2411,3 @@ namespace MediaBrowser.Model.Dlna return failures; } } -} diff --git a/MediaBrowser.Model/Dlna/StreamInfo.cs b/MediaBrowser.Model/Dlna/StreamInfo.cs index 8bdf28e4..64eca0d3 100644 --- a/MediaBrowser.Model/Dlna/StreamInfo.cs +++ b/MediaBrowser.Model/Dlna/StreamInfo.cs @@ -4,12 +4,12 @@ #pragma warning disable CA1819 // Properties should not return arrays -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Globalization; -using System.Linq; -using System.Text; +using global::System; +using global::System.Collections.Generic; +using global::System.ComponentModel; +using global::System.Globalization; +using global::System.Linq; +using global::System.Text; using Jellyfin.Data.Enums; using Jellyfin.Extensions; using MediaBrowser.Model.Drawing; @@ -618,8 +618,10 @@ public class StreamInfo int? totalBitrate = TargetTotalBitrate; double totalSeconds = RunTimeTicks.Value; + // Convert to ms totalSeconds /= 10000; + // Convert to seconds totalSeconds /= 1000; @@ -1241,7 +1243,7 @@ public class StreamInfo Format = subtitleProfile.Format, Index = stream.Index, DeliveryMethod = subtitleProfile.Method, - DisplayTitle = stream.DisplayTitle + DisplayTitle = stream.DisplayTitle, }; if (info.DeliveryMethod == SubtitleDeliveryMethod.External) diff --git a/MediaBrowser.Model/Dlna/SubtitleDeliveryMethod.cs b/MediaBrowser.Model/Dlna/SubtitleDeliveryMethod.cs index 7de6fe5a..6fb92a59 100644 --- a/MediaBrowser.Model/Dlna/SubtitleDeliveryMethod.cs +++ b/MediaBrowser.Model/Dlna/SubtitleDeliveryMethod.cs @@ -4,36 +4,34 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Dlna -{ - /// - /// Delivery method to use during playback of a specific subtitle format. - /// - public enum SubtitleDeliveryMethod - { - /// - /// Burn the subtitles in the video track. - /// - Encode = 0, +namespace MediaBrowser.Model.Dlna; + /// + /// Delivery method to use during playback of a specific subtitle format. + /// + public enum SubtitleDeliveryMethod + { + /// + /// Burn the subtitles in the video track. + /// + Encode = 0, - /// - /// Embed the subtitles in the file or stream. - /// - Embed = 1, + /// + /// Embed the subtitles in the file or stream. + /// + Embed = 1, - /// - /// Serve the subtitles as an external file. - /// - External = 2, + /// + /// Serve the subtitles as an external file. + /// + External = 2, - /// - /// Serve the subtitles as a separate HLS stream. - /// - Hls = 3, + /// + /// Serve the subtitles as a separate HLS stream. + /// + Hls = 3, - /// - /// Drop the subtitle. - /// - Drop = 4 - } -} + /// + /// Drop the subtitle. + /// + Drop = 4, + } diff --git a/MediaBrowser.Model/Dlna/SubtitleProfile.cs b/MediaBrowser.Model/Dlna/SubtitleProfile.cs index 904a7c8f..e975ce1b 100644 --- a/MediaBrowser.Model/Dlna/SubtitleProfile.cs +++ b/MediaBrowser.Model/Dlna/SubtitleProfile.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Model.Dlna; + #nullable disable -using System.Xml.Serialization; +using global::System.Xml.Serialization; using MediaBrowser.Model.Extensions; -namespace MediaBrowser.Model.Dlna; - /// /// A class for subtitle profile information. /// diff --git a/MediaBrowser.Model/Dlna/SubtitleStreamInfo.cs b/MediaBrowser.Model/Dlna/SubtitleStreamInfo.cs index 2be119c8..451d6b42 100644 --- a/MediaBrowser.Model/Dlna/SubtitleStreamInfo.cs +++ b/MediaBrowser.Model/Dlna/SubtitleStreamInfo.cs @@ -5,26 +5,24 @@ #nullable disable #pragma warning disable CS1591 -namespace MediaBrowser.Model.Dlna -{ - public class SubtitleStreamInfo - { - public string Url { get; set; } +namespace MediaBrowser.Model.Dlna; + public class SubtitleStreamInfo + { + public string Url { get; set; } - public string Language { get; set; } + public string Language { get; set; } - public string Name { get; set; } + public string Name { get; set; } - public bool IsForced { get; set; } + public bool IsForced { get; set; } - public string Format { get; set; } + public string Format { get; set; } - public string DisplayTitle { get; set; } + public string DisplayTitle { get; set; } - public int Index { get; set; } + public int Index { get; set; } - public SubtitleDeliveryMethod DeliveryMethod { get; set; } + public SubtitleDeliveryMethod DeliveryMethod { get; set; } - public bool IsExternalUrl { get; set; } - } -} + public bool IsExternalUrl { get; set; } + } diff --git a/MediaBrowser.Model/Dlna/TranscodeSeekInfo.cs b/MediaBrowser.Model/Dlna/TranscodeSeekInfo.cs index 27338723..97938597 100644 --- a/MediaBrowser.Model/Dlna/TranscodeSeekInfo.cs +++ b/MediaBrowser.Model/Dlna/TranscodeSeekInfo.cs @@ -4,11 +4,9 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Dlna -{ - public enum TranscodeSeekInfo - { - Auto = 0, - Bytes = 1 - } -} +namespace MediaBrowser.Model.Dlna; + public enum TranscodeSeekInfo + { + Auto = 0, + Bytes = 1, + } diff --git a/MediaBrowser.Model/Dlna/TranscodingProfile.cs b/MediaBrowser.Model/Dlna/TranscodingProfile.cs index 28455c09..d97b6a58 100644 --- a/MediaBrowser.Model/Dlna/TranscodingProfile.cs +++ b/MediaBrowser.Model/Dlna/TranscodingProfile.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.ComponentModel; -using System.Xml.Serialization; -using Jellyfin.Data.Enums; - namespace MediaBrowser.Model.Dlna; +using global::System; +using global::System.ComponentModel; +using global::System.Xml.Serialization; +using Jellyfin.Data.Enums; + /// /// A class for transcoding profile information. /// Note for client developers: Conditions defined in has higher priority and can override values defined here. diff --git a/MediaBrowser.Model/Drawing/DrawingUtils.cs b/MediaBrowser.Model/Drawing/DrawingUtils.cs index 40792a07..e3880458 100644 --- a/MediaBrowser.Model/Drawing/DrawingUtils.cs +++ b/MediaBrowser.Model/Drawing/DrawingUtils.cs @@ -2,129 +2,127 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; +namespace MediaBrowser.Model.Drawing; + using global::System; -namespace MediaBrowser.Model.Drawing -{ - /// - /// Class DrawingUtils. - /// - public static class DrawingUtils - { - /// - /// Resizes a set of dimensions. - /// - /// The original size object. - /// A new fixed width, if desired. - /// A new fixed height, if desired. - /// A max fixed width, if desired. - /// A max fixed height, if desired. - /// A new size object. - public static ImageDimensions Resize( - ImageDimensions size, - int width, - int height, - int maxWidth, - int maxHeight) - { - int newWidth = size.Width; - int newHeight = size.Height; + /// + /// Class DrawingUtils. + /// + public static class DrawingUtils + { + /// + /// Resizes a set of dimensions. + /// + /// The original size object. + /// A new fixed width, if desired. + /// A new fixed height, if desired. + /// A max fixed width, if desired. + /// A max fixed height, if desired. + /// A new size object. + public static ImageDimensions Resize( + ImageDimensions size, + int width, + int height, + int maxWidth, + int maxHeight) + { + int newWidth = size.Width; + int newHeight = size.Height; - if (width > 0 && height > 0) - { - newWidth = width; - newHeight = height; - } - else if (height > 0) - { - newWidth = GetNewWidth(newHeight, newWidth, height); - newHeight = height; - } - else if (width > 0) - { - newHeight = GetNewHeight(newHeight, newWidth, width); - newWidth = width; - } + if (width > 0 && height > 0) + { + newWidth = width; + newHeight = height; + } + else if (height > 0) + { + newWidth = GetNewWidth(newHeight, newWidth, height); + newHeight = height; + } + else if (width > 0) + { + newHeight = GetNewHeight(newHeight, newWidth, width); + newWidth = width; + } - if (maxHeight > 0 && maxHeight < newHeight) - { - newWidth = GetNewWidth(newHeight, newWidth, maxHeight); - newHeight = maxHeight; - } + if (maxHeight > 0 && maxHeight < newHeight) + { + newWidth = GetNewWidth(newHeight, newWidth, maxHeight); + newHeight = maxHeight; + } - if (maxWidth > 0 && maxWidth < newWidth) - { - newHeight = GetNewHeight(newHeight, newWidth, maxWidth); - newWidth = maxWidth; - } + if (maxWidth > 0 && maxWidth < newWidth) + { + newHeight = GetNewHeight(newHeight, newWidth, maxWidth); + newWidth = maxWidth; + } - return new ImageDimensions(newWidth, newHeight); - } + return new ImageDimensions(newWidth, newHeight); + } - /// - /// Scale down to fill box. - /// Returns original size if both width and height are null or zero. - /// - /// The original size object. - /// A new fixed width, if desired. - /// A new fixed height, if desired. - /// A new size object or size. - public static ImageDimensions ResizeFill( - ImageDimensions size, - int? fillWidth, - int? fillHeight) - { - // Return original size if input is invalid. - if ((fillWidth is null || fillWidth == 0) - && (fillHeight is null || fillHeight == 0)) - { - return size; - } + /// + /// Scale down to fill box. + /// Returns original size if both width and height are null or zero. + /// + /// The original size object. + /// A new fixed width, if desired. + /// A new fixed height, if desired. + /// A new size object or size. + public static ImageDimensions ResizeFill( + ImageDimensions size, + int? fillWidth, + int? fillHeight) + { + // Return original size if input is invalid. + if ((fillWidth is null || fillWidth == 0) + && (fillHeight is null || fillHeight == 0)) + { + return size; + } - if (fillWidth is null || fillWidth == 0) - { - fillWidth = 1; - } + if (fillWidth is null || fillWidth == 0) + { + fillWidth = 1; + } - if (fillHeight is null || fillHeight == 0) - { - fillHeight = 1; - } + if (fillHeight is null || fillHeight == 0) + { + fillHeight = 1; + } - double widthRatio = size.Width / (double)fillWidth; - double heightRatio = size.Height / (double)fillHeight; - double scaleRatio = Math.Min(widthRatio, heightRatio); + double widthRatio = size.Width / (double)fillWidth; + double heightRatio = size.Height / (double)fillHeight; + double scaleRatio = Math.Min(widthRatio, heightRatio); - // Clamp to current size. - if (scaleRatio < 1) - { - return size; - } + // Clamp to current size. + if (scaleRatio < 1) + { + return size; + } - int newWidth = Convert.ToInt32(Math.Ceiling(size.Width / scaleRatio)); - int newHeight = Convert.ToInt32(Math.Ceiling(size.Height / scaleRatio)); + int newWidth = Convert.ToInt32(Math.Ceiling(size.Width / scaleRatio)); + int newHeight = Convert.ToInt32(Math.Ceiling(size.Height / scaleRatio)); - return new ImageDimensions(newWidth, newHeight); - } + return new ImageDimensions(newWidth, newHeight); + } - /// - /// Gets the new width. - /// - /// Height of the current. - /// Width of the current. - /// The new height. - /// The new width. - private static int GetNewWidth(int currentHeight, int currentWidth, int newHeight) - => Convert.ToInt32((double)newHeight / currentHeight * currentWidth); + /// + /// Gets the new width. + /// + /// Height of the current. + /// Width of the current. + /// The new height. + /// The new width. + private static int GetNewWidth(int currentHeight, int currentWidth, int newHeight) + => Convert.ToInt32((double)newHeight / currentHeight * currentWidth); - /// - /// Gets the new height. - /// - /// Height of the current. - /// Width of the current. - /// The new width. - /// System.Double. - private static int GetNewHeight(int currentHeight, int currentWidth, int newWidth) - => Convert.ToInt32((double)newWidth / currentWidth * currentHeight); - } -} + /// + /// Gets the new height. + /// + /// Height of the current. + /// Width of the current. + /// The new width. + /// System.Double. + private static int GetNewHeight(int currentHeight, int currentWidth, int newWidth) + => Convert.ToInt32((double)newWidth / currentWidth * currentHeight); + } diff --git a/MediaBrowser.Model/Drawing/ImageDimensions.cs b/MediaBrowser.Model/Drawing/ImageDimensions.cs index bb99a5e5..5dbfa538 100644 --- a/MediaBrowser.Model/Drawing/ImageDimensions.cs +++ b/MediaBrowser.Model/Drawing/ImageDimensions.cs @@ -4,46 +4,44 @@ #pragma warning disable CS1591 -using System.Globalization; +using global::System.Globalization; -namespace MediaBrowser.Model.Drawing -{ - /// - /// Struct ImageDimensions. - /// - public readonly struct ImageDimensions - { - public ImageDimensions(int width, int height) - { - Width = width; - Height = height; - } +namespace MediaBrowser.Model.Drawing; + /// + /// Struct ImageDimensions. + /// + public readonly struct ImageDimensions + { + public ImageDimensions(int width, int height) + { + Width = width; + Height = height; + } - /// - /// Gets the height. - /// - /// The height. - public int Height { get; } + /// + /// Gets the height. + /// + /// The height. + public int Height { get; } - /// - /// Gets the width. - /// - /// The width. - public int Width { get; } + /// + /// Gets the width. + /// + /// The width. + public int Width { get; } - public bool Equals(ImageDimensions size) - { - return Width.Equals(size.Width) && Height.Equals(size.Height); - } + public bool Equals(ImageDimensions size) + { + return Width.Equals(size.Width) && Height.Equals(size.Height); + } - /// - public override string ToString() - { - return string.Format( - CultureInfo.InvariantCulture, - "{0}-{1}", - Width, - Height); - } - } -} + /// + public override string ToString() + { + return string.Format( + CultureInfo.InvariantCulture, + "{0}-{1}", + Width, + Height); + } + } diff --git a/MediaBrowser.Model/Drawing/ImageFormat.cs b/MediaBrowser.Model/Drawing/ImageFormat.cs index 23a8d0aa..df13dc7e 100644 --- a/MediaBrowser.Model/Drawing/ImageFormat.cs +++ b/MediaBrowser.Model/Drawing/ImageFormat.cs @@ -2,41 +2,39 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Drawing -{ - /// - /// Enum ImageOutputFormat. - /// - public enum ImageFormat - { - /// - /// BMP format. - /// - Bmp, +namespace MediaBrowser.Model.Drawing; + /// + /// Enum ImageOutputFormat. + /// + public enum ImageFormat + { + /// + /// BMP format. + /// + Bmp, - /// - /// GIF format. - /// - Gif, + /// + /// GIF format. + /// + Gif, - /// - /// JPG format. - /// - Jpg, + /// + /// JPG format. + /// + Jpg, - /// - /// PNG format. - /// - Png, + /// + /// PNG format. + /// + Png, - /// - /// WEBP format. - /// - Webp, + /// + /// WEBP format. + /// + Webp, - /// - /// SVG format. - /// - Svg, - } -} + /// + /// SVG format. + /// + Svg, + } diff --git a/MediaBrowser.Model/Drawing/ImageFormatExtensions.cs b/MediaBrowser.Model/Drawing/ImageFormatExtensions.cs index 84ea295b..8334ea37 100644 --- a/MediaBrowser.Model/Drawing/ImageFormatExtensions.cs +++ b/MediaBrowser.Model/Drawing/ImageFormatExtensions.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.ComponentModel; -using System.Net.Mime; - namespace MediaBrowser.Model.Drawing; +using global::System.ComponentModel; +using global::System.Net.Mime; + /// /// Extension class for the enum. /// @@ -27,7 +27,7 @@ public static class ImageFormatExtensions ImageFormat.Png => MediaTypeNames.Image.Png, ImageFormat.Webp => MediaTypeNames.Image.Webp, ImageFormat.Svg => MediaTypeNames.Image.Svg, - _ => throw new InvalidEnumArgumentException(nameof(format), (int)format, typeof(ImageFormat)) + _ => throw new InvalidEnumArgumentException(nameof(format), (int)format, typeof(ImageFormat)), }; /// @@ -45,6 +45,6 @@ public static class ImageFormatExtensions ImageFormat.Png => ".png", ImageFormat.Webp => ".webp", ImageFormat.Svg => ".svg", - _ => throw new InvalidEnumArgumentException(nameof(format), (int)format, typeof(ImageFormat)) + _ => throw new InvalidEnumArgumentException(nameof(format), (int)format, typeof(ImageFormat)), }; } diff --git a/MediaBrowser.Model/Drawing/ImageOrientation.cs b/MediaBrowser.Model/Drawing/ImageOrientation.cs index 0495ccb0..e2d5f55d 100644 --- a/MediaBrowser.Model/Drawing/ImageOrientation.cs +++ b/MediaBrowser.Model/Drawing/ImageOrientation.cs @@ -4,17 +4,15 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Drawing -{ - public enum ImageOrientation - { - TopLeft = 1, - TopRight = 2, - BottomRight = 3, - BottomLeft = 4, - LeftTop = 5, - RightTop = 6, - RightBottom = 7, - LeftBottom = 8, - } -} +namespace MediaBrowser.Model.Drawing; + public enum ImageOrientation + { + TopLeft = 1, + TopRight = 2, + BottomRight = 3, + BottomLeft = 4, + LeftTop = 5, + RightTop = 6, + RightBottom = 7, + LeftBottom = 8, + } diff --git a/MediaBrowser.Model/Drawing/ImageResolution.cs b/MediaBrowser.Model/Drawing/ImageResolution.cs index 5762dd94..6551126b 100644 --- a/MediaBrowser.Model/Drawing/ImageResolution.cs +++ b/MediaBrowser.Model/Drawing/ImageResolution.cs @@ -52,5 +52,5 @@ public enum ImageResolution /// /// 2160p. /// - P2160 = 8 + P2160 = 8, } diff --git a/MediaBrowser.Model/Dto/BaseItemDto.cs b/MediaBrowser.Model/Dto/BaseItemDto.cs index b0c945a2..dce32638 100644 --- a/MediaBrowser.Model/Dto/BaseItemDto.cs +++ b/MediaBrowser.Model/Dto/BaseItemDto.cs @@ -5,9 +5,9 @@ #nullable disable #pragma warning disable CS1591 -using System; -using System.Collections.Generic; -using System.ComponentModel; +using global::System; +using global::System.Collections.Generic; +using global::System.ComponentModel; using Jellyfin.Data.Enums; using Jellyfin.Database.Implementations.Entities; using MediaBrowser.Model.Drawing; @@ -16,787 +16,785 @@ using MediaBrowser.Model.Library; using MediaBrowser.Model.LiveTv; using MediaBrowser.Model.Providers; -namespace MediaBrowser.Model.Dto -{ - /// - /// This is strictly used as a data transfer object from the api layer. - /// This holds information about a BaseItem in a format that is convenient for the client. - /// - public class BaseItemDto : IHasProviderIds, IItemDto, IHasServerId - { - /// - /// Gets or sets the name. - /// - /// The name. - public string Name { get; set; } - - public string OriginalTitle { get; set; } - - /// - /// Gets or sets the server identifier. - /// - /// The server identifier. - public string ServerId { get; set; } - - /// - /// Gets or sets the id. - /// - /// The id. - public Guid Id { get; set; } - - /// - /// Gets or sets the etag. - /// - /// The etag. - public string Etag { get; set; } - - /// - /// Gets or sets the type of the source. - /// - /// The type of the source. - public string SourceType { get; set; } - - /// - /// Gets or sets the playlist item identifier. - /// - /// The playlist item identifier. - public string PlaylistItemId { get; set; } - - /// - /// Gets or sets the date created. - /// - /// The date created. - public DateTime? DateCreated { get; set; } - - public DateTime? DateLastMediaAdded { get; set; } - - public ExtraType? ExtraType { get; set; } - - public int? AirsBeforeSeasonNumber { get; set; } - - public int? AirsAfterSeasonNumber { get; set; } - - public int? AirsBeforeEpisodeNumber { get; set; } - - public bool? CanDelete { get; set; } - - public bool? CanDownload { get; set; } - - public bool? HasLyrics { get; set; } - - public bool? HasSubtitles { get; set; } - - public string PreferredMetadataLanguage { get; set; } - - public string PreferredMetadataCountryCode { get; set; } - - public string Container { get; set; } - - /// - /// Gets or sets the name of the sort. - /// - /// The name of the sort. - public string SortName { get; set; } - - public string ForcedSortName { get; set; } - - /// - /// Gets or sets the video3 D format. - /// - /// The video3 D format. - public Video3DFormat? Video3DFormat { get; set; } - - /// - /// Gets or sets the premiere date. - /// - /// The premiere date. - public DateTime? PremiereDate { get; set; } - - /// - /// Gets or sets the external urls. - /// - /// The external urls. - public ExternalUrl[] ExternalUrls { get; set; } - - /// - /// Gets or sets the media versions. - /// - /// The media versions. - public MediaSourceInfo[] MediaSources { get; set; } - - /// - /// Gets or sets the critic rating. - /// - /// The critic rating. - public float? CriticRating { get; set; } - - public string[] ProductionLocations { get; set; } - - /// - /// Gets or sets the path. - /// - /// The path. - public string Path { get; set; } - - public bool? EnableMediaSourceDisplay { get; set; } - - /// - /// Gets or sets the official rating. - /// - /// The official rating. - public string OfficialRating { get; set; } - - /// - /// Gets or sets the custom rating. - /// - /// The custom rating. - public string CustomRating { get; set; } - - /// - /// Gets or sets the channel identifier. - /// - /// The channel identifier. - public Guid? ChannelId { get; set; } - - public string ChannelName { get; set; } - - /// - /// Gets or sets the overview. - /// - /// The overview. - public string Overview { get; set; } - - /// - /// Gets or sets the taglines. - /// - /// The taglines. - public string[] Taglines { get; set; } - - /// - /// Gets or sets the genres. - /// - /// The genres. - public string[] Genres { get; set; } - - /// - /// Gets or sets the community rating. - /// - /// The community rating. - public float? CommunityRating { get; set; } - - /// - /// Gets or sets the cumulative run time ticks. - /// - /// The cumulative run time ticks. - public long? CumulativeRunTimeTicks { get; set; } - - /// - /// Gets or sets the run time ticks. - /// - /// The run time ticks. - public long? RunTimeTicks { get; set; } - - /// - /// Gets or sets the play access. - /// - /// The play access. - public PlayAccess? PlayAccess { get; set; } - - /// - /// Gets or sets the aspect ratio. - /// - /// The aspect ratio. - public string AspectRatio { get; set; } - - /// - /// Gets or sets the production year. - /// - /// The production year. - public int? ProductionYear { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is place holder. - /// - /// null if [is place holder] contains no value, true if [is place holder]; otherwise, false. - public bool? IsPlaceHolder { get; set; } - - /// - /// Gets or sets the number. - /// - /// The number. - public string Number { get; set; } - - public string ChannelNumber { get; set; } - - /// - /// Gets or sets the index number. - /// - /// The index number. - public int? IndexNumber { get; set; } - - /// - /// Gets or sets the index number end. - /// - /// The index number end. - public int? IndexNumberEnd { get; set; } - - /// - /// Gets or sets the parent index number. - /// - /// The parent index number. - public int? ParentIndexNumber { get; set; } - - /// - /// Gets or sets the trailer urls. - /// - /// The trailer urls. - public IReadOnlyCollection RemoteTrailers { get; set; } - - /// - /// Gets or sets the provider ids. - /// - /// The provider ids. - public Dictionary ProviderIds { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is HD. - /// - /// null if [is HD] contains no value, true if [is HD]; otherwise, false. - public bool? IsHD { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is folder. - /// - /// true if this instance is folder; otherwise, false. - public bool? IsFolder { get; set; } - - /// - /// Gets or sets the parent id. - /// - /// The parent id. - public Guid? ParentId { get; set; } - - /// - /// Gets or sets the type. - /// - /// The type. - public BaseItemKind Type { get; set; } - - /// - /// Gets or sets the people. - /// - /// The people. - public BaseItemPerson[] People { get; set; } - - /// - /// Gets or sets the studios. - /// - /// The studios. - public NameGuidPair[] Studios { get; set; } - - public NameGuidPair[] GenreItems { get; set; } - - /// - /// Gets or sets whether the item has a logo, this will hold the Id of the Parent that has one. - /// - /// The parent logo item id. - public Guid? ParentLogoItemId { get; set; } - - /// - /// Gets or sets whether the item has any backdrops, this will hold the Id of the Parent that has one. - /// - /// The parent backdrop item id. - public Guid? ParentBackdropItemId { get; set; } - - /// - /// Gets or sets the parent backdrop image tags. - /// - /// The parent backdrop image tags. - public string[] ParentBackdropImageTags { get; set; } - - /// - /// Gets or sets the local trailer count. - /// - /// The local trailer count. - public int? LocalTrailerCount { get; set; } - - /// - /// Gets or sets the user data for this item based on the user it's being requested for. - /// - /// The user data. - public UserItemDataDto UserData { get; set; } - - /// - /// Gets or sets the recursive item count. - /// - /// The recursive item count. - public int? RecursiveItemCount { get; set; } - - /// - /// Gets or sets the child count. - /// - /// The child count. - public int? ChildCount { get; set; } - - /// - /// Gets or sets the name of the series. - /// - /// The name of the series. - public string SeriesName { get; set; } - - /// - /// Gets or sets the series id. - /// - /// The series id. - public Guid? SeriesId { get; set; } - - /// - /// Gets or sets the season identifier. - /// - /// The season identifier. - public Guid? SeasonId { get; set; } - - /// - /// Gets or sets the special feature count. - /// - /// The special feature count. - public int? SpecialFeatureCount { get; set; } - - /// - /// Gets or sets the display preferences id. - /// - /// The display preferences id. - public string DisplayPreferencesId { get; set; } - - /// - /// Gets or sets the status. - /// - /// The status. - public string Status { get; set; } - - /// - /// Gets or sets the air time. - /// - /// The air time. - public string AirTime { get; set; } - - /// - /// Gets or sets the air days. - /// - /// The air days. - public DayOfWeek[] AirDays { get; set; } - - /// - /// Gets or sets the tags. - /// - /// The tags. - public string[] Tags { get; set; } - - /// - /// Gets or sets the primary image aspect ratio, after image enhancements. - /// - /// The primary image aspect ratio. - public double? PrimaryImageAspectRatio { get; set; } - - /// - /// Gets or sets the artists. - /// - /// The artists. - public IReadOnlyList Artists { get; set; } - - /// - /// Gets or sets the artist items. - /// - /// The artist items. - public NameGuidPair[] ArtistItems { get; set; } - - /// - /// Gets or sets the album. - /// - /// The album. - public string Album { get; set; } - - /// - /// Gets or sets the type of the collection. - /// - /// The type of the collection. - public CollectionType? CollectionType { get; set; } - - /// - /// Gets or sets the display order. - /// - /// The display order. - public string DisplayOrder { get; set; } - - /// - /// Gets or sets the album id. - /// - /// The album id. - public Guid? AlbumId { get; set; } - - /// - /// Gets or sets the album image tag. - /// - /// The album image tag. - public string AlbumPrimaryImageTag { get; set; } - - /// - /// Gets or sets the series primary image tag. - /// - /// The series primary image tag. - public string SeriesPrimaryImageTag { get; set; } - - /// - /// Gets or sets the album artist. - /// - /// The album artist. - public string AlbumArtist { get; set; } - - /// - /// Gets or sets the album artists. - /// - /// The album artists. - public NameGuidPair[] AlbumArtists { get; set; } - - /// - /// Gets or sets the name of the season. - /// - /// The name of the season. - public string SeasonName { get; set; } - - /// - /// Gets or sets the media streams. - /// - /// The media streams. - public MediaStream[] MediaStreams { get; set; } - - /// - /// Gets or sets the type of the video. - /// - /// The type of the video. - public VideoType? VideoType { get; set; } - - /// - /// Gets or sets the part count. - /// - /// The part count. - public int? PartCount { get; set; } - - public int? MediaSourceCount { get; set; } - - /// - /// Gets or sets the image tags. - /// - /// The image tags. - public Dictionary ImageTags { get; set; } - - /// - /// Gets or sets the backdrop image tags. - /// - /// The backdrop image tags. - public string[] BackdropImageTags { get; set; } - - /// - /// Gets or sets the screenshot image tags. - /// - /// The screenshot image tags. - public string[] ScreenshotImageTags { get; set; } - - /// - /// Gets or sets the parent logo image tag. - /// - /// The parent logo image tag. - public string ParentLogoImageTag { get; set; } - - /// - /// Gets or sets whether the item has fan art, this will hold the Id of the Parent that has one. - /// - /// The parent art item id. - public Guid? ParentArtItemId { get; set; } - - /// - /// Gets or sets the parent art image tag. - /// - /// The parent art image tag. - public string ParentArtImageTag { get; set; } - - /// - /// Gets or sets the series thumb image tag. - /// - /// The series thumb image tag. - public string SeriesThumbImageTag { get; set; } - - /// - /// Gets or sets the blurhashes for the image tags. - /// Maps image type to dictionary mapping image tag to blurhash value. - /// - /// The blurhashes. - public Dictionary> ImageBlurHashes { get; set; } - - /// - /// Gets or sets the series studio. - /// - /// The series studio. - public string SeriesStudio { get; set; } - - /// - /// Gets or sets the parent thumb item id. - /// - /// The parent thumb item id. - public Guid? ParentThumbItemId { get; set; } - - /// - /// Gets or sets the parent thumb image tag. - /// - /// The parent thumb image tag. - public string ParentThumbImageTag { get; set; } - - /// - /// Gets or sets the parent primary image item identifier. - /// - /// The parent primary image item identifier. - public Guid? ParentPrimaryImageItemId { get; set; } - - /// - /// Gets or sets the parent primary image tag. - /// - /// The parent primary image tag. - public string ParentPrimaryImageTag { get; set; } - - /// - /// Gets or sets the chapters. - /// - /// The chapters. - public List Chapters { get; set; } - - /// - /// Gets or sets the trickplay manifest. - /// - /// The trickplay manifest. - public Dictionary> Trickplay { get; set; } - - /// - /// Gets or sets the type of the location. - /// - /// The type of the location. - public LocationType? LocationType { get; set; } - - /// - /// Gets or sets the type of the iso. - /// - /// The type of the iso. - public IsoType? IsoType { get; set; } - - /// - /// Gets or sets the type of the media. - /// - /// The type of the media. - [DefaultValue(MediaType.Unknown)] - public MediaType MediaType { get; set; } - - /// - /// Gets or sets the end date. - /// - /// The end date. - public DateTime? EndDate { get; set; } - - /// - /// Gets or sets the locked fields. - /// - /// The locked fields. - public MetadataField[] LockedFields { get; set; } - - /// - /// Gets or sets the trailer count. - /// - /// The trailer count. - public int? TrailerCount { get; set; } - - /// - /// Gets or sets the movie count. - /// - /// The movie count. - public int? MovieCount { get; set; } - - /// - /// Gets or sets the series count. - /// - /// The series count. - public int? SeriesCount { get; set; } - - public int? ProgramCount { get; set; } - - /// - /// Gets or sets the episode count. - /// - /// The episode count. - public int? EpisodeCount { get; set; } - - /// - /// Gets or sets the song count. - /// - /// The song count. - public int? SongCount { get; set; } - - /// - /// Gets or sets the album count. - /// - /// The album count. - public int? AlbumCount { get; set; } - - public int? ArtistCount { get; set; } - - /// - /// Gets or sets the music video count. - /// - /// The music video count. - public int? MusicVideoCount { get; set; } - - /// - /// Gets or sets a value indicating whether [enable internet providers]. - /// - /// true if [enable internet providers]; otherwise, false. - public bool? LockData { get; set; } - - public int? Width { get; set; } - - public int? Height { get; set; } - - public string CameraMake { get; set; } - - public string CameraModel { get; set; } - - public string Software { get; set; } - - public double? ExposureTime { get; set; } - - public double? FocalLength { get; set; } - - public ImageOrientation? ImageOrientation { get; set; } - - public double? Aperture { get; set; } - - public double? ShutterSpeed { get; set; } - - public double? Latitude { get; set; } - - public double? Longitude { get; set; } - - public double? Altitude { get; set; } - - public int? IsoSpeedRating { get; set; } - - /// - /// Gets or sets the series timer identifier. - /// - /// The series timer identifier. - public string SeriesTimerId { get; set; } - - /// - /// Gets or sets the program identifier. - /// - /// The program identifier. - public string ProgramId { get; set; } - - /// - /// Gets or sets the channel primary image tag. - /// - /// The channel primary image tag. - public string ChannelPrimaryImageTag { get; set; } - - /// - /// Gets or sets the start date of the recording, in UTC. - /// - public DateTime? StartDate { get; set; } - - /// - /// Gets or sets the completion percentage. - /// - /// The completion percentage. - public double? CompletionPercentage { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is repeat. - /// - /// true if this instance is repeat; otherwise, false. - public bool? IsRepeat { get; set; } - - /// - /// Gets or sets the episode title. - /// - /// The episode title. - public string EpisodeTitle { get; set; } - - /// - /// Gets or sets the type of the channel. - /// - /// The type of the channel. - public ChannelType? ChannelType { get; set; } - - /// - /// Gets or sets the audio. - /// - /// The audio. - public ProgramAudio? Audio { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is movie. - /// - /// true if this instance is movie; otherwise, false. - public bool? IsMovie { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is sports. - /// - /// true if this instance is sports; otherwise, false. - public bool? IsSports { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is series. - /// - /// true if this instance is series; otherwise, false. - public bool? IsSeries { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is live. - /// - /// true if this instance is live; otherwise, false. - public bool? IsLive { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is news. - /// - /// true if this instance is news; otherwise, false. - public bool? IsNews { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is kids. - /// - /// true if this instance is kids; otherwise, false. - public bool? IsKids { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is premiere. - /// - /// true if this instance is premiere; otherwise, false. - public bool? IsPremiere { get; set; } - - /// - /// Gets or sets the timer identifier. - /// - /// The timer identifier. - public string TimerId { get; set; } - - /// - /// Gets or sets the gain required for audio normalization. - /// - /// The gain required for audio normalization. - public float? NormalizationGain { get; set; } - - /// - /// Gets or sets the current program. - /// - /// The current program. - public BaseItemDto CurrentProgram { get; set; } - } -} +namespace MediaBrowser.Model.Dto; + /// + /// This is strictly used as a data transfer object from the api layer. + /// This holds information about a BaseItem in a format that is convenient for the client. + /// + public class BaseItemDto : IHasProviderIds, IItemDto, IHasServerId + { + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } + + public string OriginalTitle { get; set; } + + /// + /// Gets or sets the server identifier. + /// + /// The server identifier. + public string ServerId { get; set; } + + /// + /// Gets or sets the id. + /// + /// The id. + public Guid Id { get; set; } + + /// + /// Gets or sets the etag. + /// + /// The etag. + public string Etag { get; set; } + + /// + /// Gets or sets the type of the source. + /// + /// The type of the source. + public string SourceType { get; set; } + + /// + /// Gets or sets the playlist item identifier. + /// + /// The playlist item identifier. + public string PlaylistItemId { get; set; } + + /// + /// Gets or sets the date created. + /// + /// The date created. + public DateTime? DateCreated { get; set; } + + public DateTime? DateLastMediaAdded { get; set; } + + public ExtraType? ExtraType { get; set; } + + public int? AirsBeforeSeasonNumber { get; set; } + + public int? AirsAfterSeasonNumber { get; set; } + + public int? AirsBeforeEpisodeNumber { get; set; } + + public bool? CanDelete { get; set; } + + public bool? CanDownload { get; set; } + + public bool? HasLyrics { get; set; } + + public bool? HasSubtitles { get; set; } + + public string PreferredMetadataLanguage { get; set; } + + public string PreferredMetadataCountryCode { get; set; } + + public string Container { get; set; } + + /// + /// Gets or sets the name of the sort. + /// + /// The name of the sort. + public string SortName { get; set; } + + public string ForcedSortName { get; set; } + + /// + /// Gets or sets the video3 D format. + /// + /// The video3 D format. + public Video3DFormat? Video3DFormat { get; set; } + + /// + /// Gets or sets the premiere date. + /// + /// The premiere date. + public DateTime? PremiereDate { get; set; } + + /// + /// Gets or sets the external urls. + /// + /// The external urls. + public ExternalUrl[] ExternalUrls { get; set; } + + /// + /// Gets or sets the media versions. + /// + /// The media versions. + public MediaSourceInfo[] MediaSources { get; set; } + + /// + /// Gets or sets the critic rating. + /// + /// The critic rating. + public float? CriticRating { get; set; } + + public string[] ProductionLocations { get; set; } + + /// + /// Gets or sets the path. + /// + /// The path. + public string Path { get; set; } + + public bool? EnableMediaSourceDisplay { get; set; } + + /// + /// Gets or sets the official rating. + /// + /// The official rating. + public string OfficialRating { get; set; } + + /// + /// Gets or sets the custom rating. + /// + /// The custom rating. + public string CustomRating { get; set; } + + /// + /// Gets or sets the channel identifier. + /// + /// The channel identifier. + public Guid? ChannelId { get; set; } + + public string ChannelName { get; set; } + + /// + /// Gets or sets the overview. + /// + /// The overview. + public string Overview { get; set; } + + /// + /// Gets or sets the taglines. + /// + /// The taglines. + public string[] Taglines { get; set; } + + /// + /// Gets or sets the genres. + /// + /// The genres. + public string[] Genres { get; set; } + + /// + /// Gets or sets the community rating. + /// + /// The community rating. + public float? CommunityRating { get; set; } + + /// + /// Gets or sets the cumulative run time ticks. + /// + /// The cumulative run time ticks. + public long? CumulativeRunTimeTicks { get; set; } + + /// + /// Gets or sets the run time ticks. + /// + /// The run time ticks. + public long? RunTimeTicks { get; set; } + + /// + /// Gets or sets the play access. + /// + /// The play access. + public PlayAccess? PlayAccess { get; set; } + + /// + /// Gets or sets the aspect ratio. + /// + /// The aspect ratio. + public string AspectRatio { get; set; } + + /// + /// Gets or sets the production year. + /// + /// The production year. + public int? ProductionYear { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is place holder. + /// + /// null if [is place holder] contains no value, true if [is place holder]; otherwise, false. + public bool? IsPlaceHolder { get; set; } + + /// + /// Gets or sets the number. + /// + /// The number. + public string Number { get; set; } + + public string ChannelNumber { get; set; } + + /// + /// Gets or sets the index number. + /// + /// The index number. + public int? IndexNumber { get; set; } + + /// + /// Gets or sets the index number end. + /// + /// The index number end. + public int? IndexNumberEnd { get; set; } + + /// + /// Gets or sets the parent index number. + /// + /// The parent index number. + public int? ParentIndexNumber { get; set; } + + /// + /// Gets or sets the trailer urls. + /// + /// The trailer urls. + public IReadOnlyCollection RemoteTrailers { get; set; } + + /// + /// Gets or sets the provider ids. + /// + /// The provider ids. + public Dictionary ProviderIds { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is HD. + /// + /// null if [is HD] contains no value, true if [is HD]; otherwise, false. + public bool? IsHD { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is folder. + /// + /// true if this instance is folder; otherwise, false. + public bool? IsFolder { get; set; } + + /// + /// Gets or sets the parent id. + /// + /// The parent id. + public Guid? ParentId { get; set; } + + /// + /// Gets or sets the type. + /// + /// The type. + public BaseItemKind Type { get; set; } + + /// + /// Gets or sets the people. + /// + /// The people. + public BaseItemPerson[] People { get; set; } + + /// + /// Gets or sets the studios. + /// + /// The studios. + public NameGuidPair[] Studios { get; set; } + + public NameGuidPair[] GenreItems { get; set; } + + /// + /// Gets or sets whether the item has a logo, this will hold the Id of the Parent that has one. + /// + /// The parent logo item id. + public Guid? ParentLogoItemId { get; set; } + + /// + /// Gets or sets whether the item has any backdrops, this will hold the Id of the Parent that has one. + /// + /// The parent backdrop item id. + public Guid? ParentBackdropItemId { get; set; } + + /// + /// Gets or sets the parent backdrop image tags. + /// + /// The parent backdrop image tags. + public string[] ParentBackdropImageTags { get; set; } + + /// + /// Gets or sets the local trailer count. + /// + /// The local trailer count. + public int? LocalTrailerCount { get; set; } + + /// + /// Gets or sets the user data for this item based on the user it's being requested for. + /// + /// The user data. + public UserItemDataDto UserData { get; set; } + + /// + /// Gets or sets the recursive item count. + /// + /// The recursive item count. + public int? RecursiveItemCount { get; set; } + + /// + /// Gets or sets the child count. + /// + /// The child count. + public int? ChildCount { get; set; } + + /// + /// Gets or sets the name of the series. + /// + /// The name of the series. + public string SeriesName { get; set; } + + /// + /// Gets or sets the series id. + /// + /// The series id. + public Guid? SeriesId { get; set; } + + /// + /// Gets or sets the season identifier. + /// + /// The season identifier. + public Guid? SeasonId { get; set; } + + /// + /// Gets or sets the special feature count. + /// + /// The special feature count. + public int? SpecialFeatureCount { get; set; } + + /// + /// Gets or sets the display preferences id. + /// + /// The display preferences id. + public string DisplayPreferencesId { get; set; } + + /// + /// Gets or sets the status. + /// + /// The status. + public string Status { get; set; } + + /// + /// Gets or sets the air time. + /// + /// The air time. + public string AirTime { get; set; } + + /// + /// Gets or sets the air days. + /// + /// The air days. + public DayOfWeek[] AirDays { get; set; } + + /// + /// Gets or sets the tags. + /// + /// The tags. + public string[] Tags { get; set; } + + /// + /// Gets or sets the primary image aspect ratio, after image enhancements. + /// + /// The primary image aspect ratio. + public double? PrimaryImageAspectRatio { get; set; } + + /// + /// Gets or sets the artists. + /// + /// The artists. + public IReadOnlyList Artists { get; set; } + + /// + /// Gets or sets the artist items. + /// + /// The artist items. + public NameGuidPair[] ArtistItems { get; set; } + + /// + /// Gets or sets the album. + /// + /// The album. + public string Album { get; set; } + + /// + /// Gets or sets the type of the collection. + /// + /// The type of the collection. + public CollectionType? CollectionType { get; set; } + + /// + /// Gets or sets the display order. + /// + /// The display order. + public string DisplayOrder { get; set; } + + /// + /// Gets or sets the album id. + /// + /// The album id. + public Guid? AlbumId { get; set; } + + /// + /// Gets or sets the album image tag. + /// + /// The album image tag. + public string AlbumPrimaryImageTag { get; set; } + + /// + /// Gets or sets the series primary image tag. + /// + /// The series primary image tag. + public string SeriesPrimaryImageTag { get; set; } + + /// + /// Gets or sets the album artist. + /// + /// The album artist. + public string AlbumArtist { get; set; } + + /// + /// Gets or sets the album artists. + /// + /// The album artists. + public NameGuidPair[] AlbumArtists { get; set; } + + /// + /// Gets or sets the name of the season. + /// + /// The name of the season. + public string SeasonName { get; set; } + + /// + /// Gets or sets the media streams. + /// + /// The media streams. + public MediaStream[] MediaStreams { get; set; } + + /// + /// Gets or sets the type of the video. + /// + /// The type of the video. + public VideoType? VideoType { get; set; } + + /// + /// Gets or sets the part count. + /// + /// The part count. + public int? PartCount { get; set; } + + public int? MediaSourceCount { get; set; } + + /// + /// Gets or sets the image tags. + /// + /// The image tags. + public Dictionary ImageTags { get; set; } + + /// + /// Gets or sets the backdrop image tags. + /// + /// The backdrop image tags. + public string[] BackdropImageTags { get; set; } + + /// + /// Gets or sets the screenshot image tags. + /// + /// The screenshot image tags. + public string[] ScreenshotImageTags { get; set; } + + /// + /// Gets or sets the parent logo image tag. + /// + /// The parent logo image tag. + public string ParentLogoImageTag { get; set; } + + /// + /// Gets or sets whether the item has fan art, this will hold the Id of the Parent that has one. + /// + /// The parent art item id. + public Guid? ParentArtItemId { get; set; } + + /// + /// Gets or sets the parent art image tag. + /// + /// The parent art image tag. + public string ParentArtImageTag { get; set; } + + /// + /// Gets or sets the series thumb image tag. + /// + /// The series thumb image tag. + public string SeriesThumbImageTag { get; set; } + + /// + /// Gets or sets the blurhashes for the image tags. + /// Maps image type to dictionary mapping image tag to blurhash value. + /// + /// The blurhashes. + public Dictionary> ImageBlurHashes { get; set; } + + /// + /// Gets or sets the series studio. + /// + /// The series studio. + public string SeriesStudio { get; set; } + + /// + /// Gets or sets the parent thumb item id. + /// + /// The parent thumb item id. + public Guid? ParentThumbItemId { get; set; } + + /// + /// Gets or sets the parent thumb image tag. + /// + /// The parent thumb image tag. + public string ParentThumbImageTag { get; set; } + + /// + /// Gets or sets the parent primary image item identifier. + /// + /// The parent primary image item identifier. + public Guid? ParentPrimaryImageItemId { get; set; } + + /// + /// Gets or sets the parent primary image tag. + /// + /// The parent primary image tag. + public string ParentPrimaryImageTag { get; set; } + + /// + /// Gets or sets the chapters. + /// + /// The chapters. + public List Chapters { get; set; } + + /// + /// Gets or sets the trickplay manifest. + /// + /// The trickplay manifest. + public Dictionary> Trickplay { get; set; } + + /// + /// Gets or sets the type of the location. + /// + /// The type of the location. + public LocationType? LocationType { get; set; } + + /// + /// Gets or sets the type of the iso. + /// + /// The type of the iso. + public IsoType? IsoType { get; set; } + + /// + /// Gets or sets the type of the media. + /// + /// The type of the media. + [DefaultValue(MediaType.Unknown)] + public MediaType MediaType { get; set; } + + /// + /// Gets or sets the end date. + /// + /// The end date. + public DateTime? EndDate { get; set; } + + /// + /// Gets or sets the locked fields. + /// + /// The locked fields. + public MetadataField[] LockedFields { get; set; } + + /// + /// Gets or sets the trailer count. + /// + /// The trailer count. + public int? TrailerCount { get; set; } + + /// + /// Gets or sets the movie count. + /// + /// The movie count. + public int? MovieCount { get; set; } + + /// + /// Gets or sets the series count. + /// + /// The series count. + public int? SeriesCount { get; set; } + + public int? ProgramCount { get; set; } + + /// + /// Gets or sets the episode count. + /// + /// The episode count. + public int? EpisodeCount { get; set; } + + /// + /// Gets or sets the song count. + /// + /// The song count. + public int? SongCount { get; set; } + + /// + /// Gets or sets the album count. + /// + /// The album count. + public int? AlbumCount { get; set; } + + public int? ArtistCount { get; set; } + + /// + /// Gets or sets the music video count. + /// + /// The music video count. + public int? MusicVideoCount { get; set; } + + /// + /// Gets or sets a value indicating whether [enable internet providers]. + /// + /// true if [enable internet providers]; otherwise, false. + public bool? LockData { get; set; } + + public int? Width { get; set; } + + public int? Height { get; set; } + + public string CameraMake { get; set; } + + public string CameraModel { get; set; } + + public string Software { get; set; } + + public double? ExposureTime { get; set; } + + public double? FocalLength { get; set; } + + public ImageOrientation? ImageOrientation { get; set; } + + public double? Aperture { get; set; } + + public double? ShutterSpeed { get; set; } + + public double? Latitude { get; set; } + + public double? Longitude { get; set; } + + public double? Altitude { get; set; } + + public int? IsoSpeedRating { get; set; } + + /// + /// Gets or sets the series timer identifier. + /// + /// The series timer identifier. + public string SeriesTimerId { get; set; } + + /// + /// Gets or sets the program identifier. + /// + /// The program identifier. + public string ProgramId { get; set; } + + /// + /// Gets or sets the channel primary image tag. + /// + /// The channel primary image tag. + public string ChannelPrimaryImageTag { get; set; } + + /// + /// Gets or sets the start date of the recording, in UTC. + /// + public DateTime? StartDate { get; set; } + + /// + /// Gets or sets the completion percentage. + /// + /// The completion percentage. + public double? CompletionPercentage { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is repeat. + /// + /// true if this instance is repeat; otherwise, false. + public bool? IsRepeat { get; set; } + + /// + /// Gets or sets the episode title. + /// + /// The episode title. + public string EpisodeTitle { get; set; } + + /// + /// Gets or sets the type of the channel. + /// + /// The type of the channel. + public ChannelType? ChannelType { get; set; } + + /// + /// Gets or sets the audio. + /// + /// The audio. + public ProgramAudio? Audio { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is movie. + /// + /// true if this instance is movie; otherwise, false. + public bool? IsMovie { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is sports. + /// + /// true if this instance is sports; otherwise, false. + public bool? IsSports { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is series. + /// + /// true if this instance is series; otherwise, false. + public bool? IsSeries { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is live. + /// + /// true if this instance is live; otherwise, false. + public bool? IsLive { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is news. + /// + /// true if this instance is news; otherwise, false. + public bool? IsNews { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is kids. + /// + /// true if this instance is kids; otherwise, false. + public bool? IsKids { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is premiere. + /// + /// true if this instance is premiere; otherwise, false. + public bool? IsPremiere { get; set; } + + /// + /// Gets or sets the timer identifier. + /// + /// The timer identifier. + public string TimerId { get; set; } + + /// + /// Gets or sets the gain required for audio normalization. + /// + /// The gain required for audio normalization. + public float? NormalizationGain { get; set; } + + /// + /// Gets or sets the current program. + /// + /// The current program. + public BaseItemDto CurrentProgram { get; set; } + } diff --git a/MediaBrowser.Model/Dto/BaseItemPerson.cs b/MediaBrowser.Model/Dto/BaseItemPerson.cs index 9b814b2b..dc1355fb 100644 --- a/MediaBrowser.Model/Dto/BaseItemPerson.cs +++ b/MediaBrowser.Model/Dto/BaseItemPerson.cs @@ -2,63 +2,61 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Model.Dto; #nullable disable -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Text.Json.Serialization; -using Jellyfin.Data.Enums; -using MediaBrowser.Model.Entities; + using global::System; + using global::System.Collections.Generic; + using global::System.ComponentModel; + using global::System.Text.Json.Serialization; + using Jellyfin.Data.Enums; + using MediaBrowser.Model.Entities; -namespace MediaBrowser.Model.Dto -{ - /// - /// This is used by the api to get information about a Person within a BaseItem. - /// - public class BaseItemPerson - { - /// - /// Gets or sets the name. - /// - /// The name. - public string Name { get; set; } + /// + /// This is used by the api to get information about a Person within a BaseItem. + /// + public class BaseItemPerson + { + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } - /// - /// Gets or sets the identifier. - /// - /// The identifier. - public Guid Id { get; set; } + /// + /// Gets or sets the identifier. + /// + /// The identifier. + public Guid Id { get; set; } - /// - /// Gets or sets the role. - /// - /// The role. - public string Role { get; set; } + /// + /// Gets or sets the role. + /// + /// The role. + public string Role { get; set; } - /// - /// Gets or sets the type. - /// - /// The type. - [DefaultValue(PersonKind.Unknown)] - public PersonKind Type { get; set; } + /// + /// Gets or sets the type. + /// + /// The type. + [DefaultValue(PersonKind.Unknown)] + public PersonKind Type { get; set; } - /// - /// Gets or sets the primary image tag. - /// - /// The primary image tag. - public string PrimaryImageTag { get; set; } + /// + /// Gets or sets the primary image tag. + /// + /// The primary image tag. + public string PrimaryImageTag { get; set; } - /// - /// Gets or sets the primary image blurhash. - /// - /// The primary image blurhash. - public Dictionary> ImageBlurHashes { get; set; } + /// + /// Gets or sets the primary image blurhash. + /// + /// The primary image blurhash. + public Dictionary> ImageBlurHashes { get; set; } - /// - /// Gets a value indicating whether this instance has primary image. - /// - /// true if this instance has primary image; otherwise, false. - [JsonIgnore] - public bool HasPrimaryImage => PrimaryImageTag is not null; - } -} + /// + /// Gets a value indicating whether this instance has primary image. + /// + /// true if this instance has primary image; otherwise, false. + [JsonIgnore] + public bool HasPrimaryImage => PrimaryImageTag is not null; + } diff --git a/MediaBrowser.Model/Dto/ClientCapabilitiesDto.cs b/MediaBrowser.Model/Dto/ClientCapabilitiesDto.cs index ffd65099..8ca21e01 100644 --- a/MediaBrowser.Model/Dto/ClientCapabilitiesDto.cs +++ b/MediaBrowser.Model/Dto/ClientCapabilitiesDto.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Text.Json.Serialization; +namespace MediaBrowser.Model.Dto; + +using global::System.Collections.Generic; +using global::System.Text.Json.Serialization; using Jellyfin.Data.Enums; using Jellyfin.Extensions.Json.Converters; using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Session; -namespace MediaBrowser.Model.Dto; - /// /// Client capabilities dto. /// @@ -67,7 +67,7 @@ public class ClientCapabilitiesDto SupportsPersistentIdentifier = SupportsPersistentIdentifier, DeviceProfile = DeviceProfile, AppStoreUrl = AppStoreUrl, - IconUrl = IconUrl + IconUrl = IconUrl, }; } } diff --git a/MediaBrowser.Model/Dto/DeviceInfoDto.cs b/MediaBrowser.Model/Dto/DeviceInfoDto.cs index 462b5b4a..1c8a9513 100644 --- a/MediaBrowser.Model/Dto/DeviceInfoDto.cs +++ b/MediaBrowser.Model/Dto/DeviceInfoDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace MediaBrowser.Model.Dto; +using global::System; + /// /// A DTO representing device information. /// diff --git a/MediaBrowser.Model/Dto/DisplayPreferencesDto.cs b/MediaBrowser.Model/Dto/DisplayPreferencesDto.cs index a482f11c..cac43906 100644 --- a/MediaBrowser.Model/Dto/DisplayPreferencesDto.cs +++ b/MediaBrowser.Model/Dto/DisplayPreferencesDto.cs @@ -2,109 +2,107 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using Jellyfin.Database.Implementations.Enums; +namespace MediaBrowser.Model.Dto; + using global::System.Collections.Generic; + using Jellyfin.Database.Implementations.Enums; -namespace MediaBrowser.Model.Dto -{ - /// - /// Defines the display preferences for any item that supports them (usually Folders). - /// - public class DisplayPreferencesDto - { - /// - /// Initializes a new instance of the class. - /// - public DisplayPreferencesDto() - { - RememberIndexing = false; - PrimaryImageHeight = 250; - PrimaryImageWidth = 250; - ShowBackdrop = true; - CustomPrefs = new Dictionary(); - } + /// + /// Defines the display preferences for any item that supports them (usually Folders). + /// + public class DisplayPreferencesDto + { + /// + /// Initializes a new instance of the class. + /// + public DisplayPreferencesDto() + { + RememberIndexing = false; + PrimaryImageHeight = 250; + PrimaryImageWidth = 250; + ShowBackdrop = true; + CustomPrefs = new Dictionary(); + } - /// - /// Gets or sets the user id. - /// - /// The user id. - public string? Id { get; set; } + /// + /// Gets or sets the user id. + /// + /// The user id. + public string? Id { get; set; } - /// - /// Gets or sets the type of the view. - /// - /// The type of the view. - public string? ViewType { get; set; } + /// + /// Gets or sets the type of the view. + /// + /// The type of the view. + public string? ViewType { get; set; } - /// - /// Gets or sets the sort by. - /// - /// The sort by. - public string? SortBy { get; set; } + /// + /// Gets or sets the sort by. + /// + /// The sort by. + public string? SortBy { get; set; } - /// - /// Gets or sets the index by. - /// - /// The index by. - public string? IndexBy { get; set; } + /// + /// Gets or sets the index by. + /// + /// The index by. + public string? IndexBy { get; set; } - /// - /// Gets or sets a value indicating whether [remember indexing]. - /// - /// true if [remember indexing]; otherwise, false. - public bool RememberIndexing { get; set; } + /// + /// Gets or sets a value indicating whether [remember indexing]. + /// + /// true if [remember indexing]; otherwise, false. + public bool RememberIndexing { get; set; } - /// - /// Gets or sets the height of the primary image. - /// - /// The height of the primary image. - public int PrimaryImageHeight { get; set; } + /// + /// Gets or sets the height of the primary image. + /// + /// The height of the primary image. + public int PrimaryImageHeight { get; set; } - /// - /// Gets or sets the width of the primary image. - /// - /// The width of the primary image. - public int PrimaryImageWidth { get; set; } + /// + /// Gets or sets the width of the primary image. + /// + /// The width of the primary image. + public int PrimaryImageWidth { get; set; } - /// - /// Gets or sets the custom prefs. - /// - /// The custom prefs. - public Dictionary CustomPrefs { get; set; } + /// + /// Gets or sets the custom prefs. + /// + /// The custom prefs. + public Dictionary CustomPrefs { get; set; } - /// - /// Gets or sets the scroll direction. - /// - /// The scroll direction. - public ScrollDirection ScrollDirection { get; set; } + /// + /// Gets or sets the scroll direction. + /// + /// The scroll direction. + public ScrollDirection ScrollDirection { get; set; } - /// - /// Gets or sets a value indicating whether to show backdrops on this item. - /// - /// true if showing backdrops; otherwise, false. - public bool ShowBackdrop { get; set; } + /// + /// Gets or sets a value indicating whether to show backdrops on this item. + /// + /// true if showing backdrops; otherwise, false. + public bool ShowBackdrop { get; set; } - /// - /// Gets or sets a value indicating whether [remember sorting]. - /// - /// true if [remember sorting]; otherwise, false. - public bool RememberSorting { get; set; } + /// + /// Gets or sets a value indicating whether [remember sorting]. + /// + /// true if [remember sorting]; otherwise, false. + public bool RememberSorting { get; set; } - /// - /// Gets or sets the sort order. - /// - /// The sort order. - public SortOrder SortOrder { get; set; } + /// + /// Gets or sets the sort order. + /// + /// The sort order. + public SortOrder SortOrder { get; set; } - /// - /// Gets or sets a value indicating whether [show sidebar]. - /// - /// true if [show sidebar]; otherwise, false. - public bool ShowSidebar { get; set; } + /// + /// Gets or sets a value indicating whether [show sidebar]. + /// + /// true if [show sidebar]; otherwise, false. + public bool ShowSidebar { get; set; } - /// - /// Gets or sets the client. - /// - public string? Client { get; set; } - } -} + /// + /// Gets or sets the client. + /// + public string? Client { get; set; } + } diff --git a/MediaBrowser.Model/Dto/IHasServerId.cs b/MediaBrowser.Model/Dto/IHasServerId.cs index e71c81ef..fd48c202 100644 --- a/MediaBrowser.Model/Dto/IHasServerId.cs +++ b/MediaBrowser.Model/Dto/IHasServerId.cs @@ -5,10 +5,8 @@ #nullable disable #pragma warning disable CS1591 -namespace MediaBrowser.Model.Dto -{ - public interface IHasServerId - { - string ServerId { get; } - } -} +namespace MediaBrowser.Model.Dto; + public interface IHasServerId + { + string ServerId { get; } + } diff --git a/MediaBrowser.Model/Dto/IItemDto.cs b/MediaBrowser.Model/Dto/IItemDto.cs index 96b795b1..80ef5f5a 100644 --- a/MediaBrowser.Model/Dto/IItemDto.cs +++ b/MediaBrowser.Model/Dto/IItemDto.cs @@ -2,17 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Dto -{ - /// - /// Interface IItemDto. - /// - public interface IItemDto - { - /// - /// Gets or sets the primary image aspect ratio. - /// - /// The primary image aspect ratio. - double? PrimaryImageAspectRatio { get; set; } - } -} +namespace MediaBrowser.Model.Dto; + /// + /// Interface IItemDto. + /// + public interface IItemDto + { + /// + /// Gets or sets the primary image aspect ratio. + /// + /// The primary image aspect ratio. + double? PrimaryImageAspectRatio { get; set; } + } diff --git a/MediaBrowser.Model/Dto/ImageInfo.cs b/MediaBrowser.Model/Dto/ImageInfo.cs index 0678f3a6..83666dae 100644 --- a/MediaBrowser.Model/Dto/ImageInfo.cs +++ b/MediaBrowser.Model/Dto/ImageInfo.cs @@ -2,61 +2,59 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Model.Dto; #nullable disable -using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Entities; -namespace MediaBrowser.Model.Dto -{ - /// - /// Class ImageInfo. - /// - public class ImageInfo - { - /// - /// Gets or sets the type of the image. - /// - /// The type of the image. - public ImageType ImageType { get; set; } + /// + /// Class ImageInfo. + /// + public class ImageInfo + { + /// + /// Gets or sets the type of the image. + /// + /// The type of the image. + public ImageType ImageType { get; set; } - /// - /// Gets or sets the index of the image. - /// - /// The index of the image. - public int? ImageIndex { get; set; } + /// + /// Gets or sets the index of the image. + /// + /// The index of the image. + public int? ImageIndex { get; set; } - /// - /// Gets or sets the image tag. - /// - public string ImageTag { get; set; } + /// + /// Gets or sets the image tag. + /// + public string ImageTag { get; set; } - /// - /// Gets or sets the path. - /// - /// The path. - public string Path { get; set; } + /// + /// Gets or sets the path. + /// + /// The path. + public string Path { get; set; } - /// - /// Gets or sets the blurhash. - /// - /// The blurhash. - public string BlurHash { get; set; } + /// + /// Gets or sets the blurhash. + /// + /// The blurhash. + public string BlurHash { get; set; } - /// - /// Gets or sets the height. - /// - /// The height. - public int? Height { get; set; } + /// + /// Gets or sets the height. + /// + /// The height. + public int? Height { get; set; } - /// - /// Gets or sets the width. - /// - /// The width. - public int? Width { get; set; } + /// + /// Gets or sets the width. + /// + /// The width. + public int? Width { get; set; } - /// - /// Gets or sets the size. - /// - /// The size. - public long Size { get; set; } - } -} + /// + /// Gets or sets the size. + /// + /// The size. + public long Size { get; set; } + } diff --git a/MediaBrowser.Model/Dto/ItemCounts.cs b/MediaBrowser.Model/Dto/ItemCounts.cs index 254114db..19d490a9 100644 --- a/MediaBrowser.Model/Dto/ItemCounts.cs +++ b/MediaBrowser.Model/Dto/ItemCounts.cs @@ -2,92 +2,90 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Dto -{ - /// - /// Class LibrarySummary. - /// - public class ItemCounts - { - /// - /// Gets or sets the movie count. - /// - /// The movie count. - public int MovieCount { get; set; } +namespace MediaBrowser.Model.Dto; + /// + /// Class LibrarySummary. + /// + public class ItemCounts + { + /// + /// Gets or sets the movie count. + /// + /// The movie count. + public int MovieCount { get; set; } - /// - /// Gets or sets the series count. - /// - /// The series count. - public int SeriesCount { get; set; } + /// + /// Gets or sets the series count. + /// + /// The series count. + public int SeriesCount { get; set; } - /// - /// Gets or sets the episode count. - /// - /// The episode count. - public int EpisodeCount { get; set; } + /// + /// Gets or sets the episode count. + /// + /// The episode count. + public int EpisodeCount { get; set; } - /// - /// Gets or sets the artist count. - /// - /// The artist count. - public int ArtistCount { get; set; } + /// + /// Gets or sets the artist count. + /// + /// The artist count. + public int ArtistCount { get; set; } - /// - /// Gets or sets the program count. - /// - /// The program count. - public int ProgramCount { get; set; } + /// + /// Gets or sets the program count. + /// + /// The program count. + public int ProgramCount { get; set; } - /// - /// Gets or sets the trailer count. - /// - /// The trailer count. - public int TrailerCount { get; set; } + /// + /// Gets or sets the trailer count. + /// + /// The trailer count. + public int TrailerCount { get; set; } - /// - /// Gets or sets the song count. - /// - /// The song count. - public int SongCount { get; set; } + /// + /// Gets or sets the song count. + /// + /// The song count. + public int SongCount { get; set; } - /// - /// Gets or sets the album count. - /// - /// The album count. - public int AlbumCount { get; set; } + /// + /// Gets or sets the album count. + /// + /// The album count. + public int AlbumCount { get; set; } - /// - /// Gets or sets the music video count. - /// - /// The music video count. - public int MusicVideoCount { get; set; } + /// + /// Gets or sets the music video count. + /// + /// The music video count. + public int MusicVideoCount { get; set; } - /// - /// Gets or sets the box set count. - /// - /// The box set count. - public int BoxSetCount { get; set; } + /// + /// Gets or sets the box set count. + /// + /// The box set count. + public int BoxSetCount { get; set; } - /// - /// Gets or sets the book count. - /// - /// The book count. - public int BookCount { get; set; } + /// + /// Gets or sets the book count. + /// + /// The book count. + public int BookCount { get; set; } - /// - /// Gets or sets the item count. - /// - /// The item count. - public int ItemCount { get; set; } + /// + /// Gets or sets the item count. + /// + /// The item count. + public int ItemCount { get; set; } - /// - /// Adds all counts. - /// - /// The total of the counts. - public int TotalItemCount() - { - return MovieCount + SeriesCount + EpisodeCount + ArtistCount + ProgramCount + TrailerCount + SongCount + AlbumCount + MusicVideoCount + BoxSetCount + BookCount; - } - } -} + /// + /// Adds all counts. + /// + /// The total of the counts. + public int TotalItemCount() + { + return MovieCount + SeriesCount + EpisodeCount + ArtistCount + ProgramCount + TrailerCount + SongCount + AlbumCount + MusicVideoCount + BoxSetCount + BookCount; + } + } diff --git a/MediaBrowser.Model/Dto/MediaSourceInfo.cs b/MediaBrowser.Model/Dto/MediaSourceInfo.cs index aa2845f4..13f1c363 100644 --- a/MediaBrowser.Model/Dto/MediaSourceInfo.cs +++ b/MediaBrowser.Model/Dto/MediaSourceInfo.cs @@ -5,263 +5,261 @@ #nullable disable #pragma warning disable CS1591 -using System.Collections.Generic; -using System.ComponentModel; -using System.Text.Json.Serialization; +using global::System.Collections.Generic; +using global::System.ComponentModel; +using global::System.Text.Json.Serialization; using Jellyfin.Data.Enums; using MediaBrowser.Model.Entities; using MediaBrowser.Model.MediaInfo; using MediaBrowser.Model.Session; -namespace MediaBrowser.Model.Dto -{ - public class MediaSourceInfo - { - public MediaSourceInfo() - { - Formats = []; - MediaStreams = []; - MediaAttachments = []; - RequiredHttpHeaders = []; - SupportsTranscoding = true; - SupportsDirectStream = true; - SupportsDirectPlay = true; - SupportsProbing = true; - UseMostCompatibleTranscodingProfile = false; - DefaultAudioIndexSource = AudioIndexSource.None; - } +namespace MediaBrowser.Model.Dto; + public class MediaSourceInfo + { + public MediaSourceInfo() + { + Formats = []; + MediaStreams = []; + MediaAttachments = []; + RequiredHttpHeaders = []; + SupportsTranscoding = true; + SupportsDirectStream = true; + SupportsDirectPlay = true; + SupportsProbing = true; + UseMostCompatibleTranscodingProfile = false; + DefaultAudioIndexSource = AudioIndexSource.None; + } - public MediaProtocol Protocol { get; set; } + public MediaProtocol Protocol { get; set; } - public string Id { get; set; } + public string Id { get; set; } - public string Path { get; set; } + public string Path { get; set; } - public string EncoderPath { get; set; } + public string EncoderPath { get; set; } - public MediaProtocol? EncoderProtocol { get; set; } + public MediaProtocol? EncoderProtocol { get; set; } - public MediaSourceType Type { get; set; } + public MediaSourceType Type { get; set; } - public string Container { get; set; } + public string Container { get; set; } - public long? Size { get; set; } + public long? Size { get; set; } - public string Name { get; set; } + public string Name { get; set; } - /// - /// Gets or sets a value indicating whether the media is remote. - /// Differentiate internet url vs local network. - /// - public bool IsRemote { get; set; } + /// + /// Gets or sets a value indicating whether the media is remote. + /// Differentiate internet url vs local network. + /// + public bool IsRemote { get; set; } - public string ETag { get; set; } + public string ETag { get; set; } - public long? RunTimeTicks { get; set; } + public long? RunTimeTicks { get; set; } - public bool ReadAtNativeFramerate { get; set; } + public bool ReadAtNativeFramerate { get; set; } - public bool IgnoreDts { get; set; } + public bool IgnoreDts { get; set; } - public bool IgnoreIndex { get; set; } + public bool IgnoreIndex { get; set; } - public bool GenPtsInput { get; set; } + public bool GenPtsInput { get; set; } - public bool SupportsTranscoding { get; set; } + public bool SupportsTranscoding { get; set; } - public bool SupportsDirectStream { get; set; } + public bool SupportsDirectStream { get; set; } - public bool SupportsDirectPlay { get; set; } + public bool SupportsDirectPlay { get; set; } - public bool IsInfiniteStream { get; set; } + public bool IsInfiniteStream { get; set; } - [DefaultValue(false)] - public bool UseMostCompatibleTranscodingProfile { get; set; } + [DefaultValue(false)] + public bool UseMostCompatibleTranscodingProfile { get; set; } - public bool RequiresOpening { get; set; } + public bool RequiresOpening { get; set; } - public string OpenToken { get; set; } + public string OpenToken { get; set; } - public bool RequiresClosing { get; set; } + public bool RequiresClosing { get; set; } - public string LiveStreamId { get; set; } + public string LiveStreamId { get; set; } - public int? BufferMs { get; set; } + public int? BufferMs { get; set; } - public bool RequiresLooping { get; set; } + public bool RequiresLooping { get; set; } - public bool SupportsProbing { get; set; } + public bool SupportsProbing { get; set; } - public VideoType? VideoType { get; set; } + public VideoType? VideoType { get; set; } - public IsoType? IsoType { get; set; } + public IsoType? IsoType { get; set; } - public Video3DFormat? Video3DFormat { get; set; } + public Video3DFormat? Video3DFormat { get; set; } - public IReadOnlyList MediaStreams { get; set; } + public IReadOnlyList MediaStreams { get; set; } - public IReadOnlyList MediaAttachments { get; set; } + public IReadOnlyList MediaAttachments { get; set; } - public string[] Formats { get; set; } + public string[] Formats { get; set; } - public int? Bitrate { get; set; } + public int? Bitrate { get; set; } - public int? FallbackMaxStreamingBitrate { get; set; } + public int? FallbackMaxStreamingBitrate { get; set; } - public TransportStreamTimestamp? Timestamp { get; set; } + public TransportStreamTimestamp? Timestamp { get; set; } - public Dictionary RequiredHttpHeaders { get; set; } + public Dictionary RequiredHttpHeaders { get; set; } - public string TranscodingUrl { get; set; } + public string TranscodingUrl { get; set; } - public MediaStreamProtocol TranscodingSubProtocol { get; set; } + public MediaStreamProtocol TranscodingSubProtocol { get; set; } - public string TranscodingContainer { get; set; } + public string TranscodingContainer { get; set; } - public int? AnalyzeDurationMs { get; set; } + public int? AnalyzeDurationMs { get; set; } - [JsonIgnore] - public TranscodeReason TranscodeReasons { get; set; } + [JsonIgnore] + public TranscodeReason TranscodeReasons { get; set; } - [JsonIgnore] - public AudioIndexSource DefaultAudioIndexSource { get; set; } + [JsonIgnore] + public AudioIndexSource DefaultAudioIndexSource { get; set; } - public int? DefaultAudioStreamIndex { get; set; } + public int? DefaultAudioStreamIndex { get; set; } - public int? DefaultSubtitleStreamIndex { get; set; } + public int? DefaultSubtitleStreamIndex { get; set; } - public bool HasSegments { get; set; } + public bool HasSegments { get; set; } - [JsonIgnore] - public MediaStream VideoStream - { - get - { - foreach (var i in MediaStreams) - { - if (i.Type == MediaStreamType.Video) - { - return i; - } - } + [JsonIgnore] + public MediaStream VideoStream + { + get + { + foreach (var i in MediaStreams) + { + if (i.Type == MediaStreamType.Video) + { + return i; + } + } - return null; - } - } + return null; + } + } - public void InferTotalBitrate(bool force = false) - { - if (MediaStreams is null) - { - return; - } + public void InferTotalBitrate(bool force = false) + { + if (MediaStreams is null) + { + return; + } - if (!force && Bitrate.HasValue) - { - return; - } + if (!force && Bitrate.HasValue) + { + return; + } - var bitrate = 0; - foreach (var stream in MediaStreams) - { - if (!stream.IsExternal) - { - bitrate += stream.BitRate ?? 0; - } - } + var bitrate = 0; + foreach (var stream in MediaStreams) + { + if (!stream.IsExternal) + { + bitrate += stream.BitRate ?? 0; + } + } - if (bitrate > 0) - { - Bitrate = bitrate; - } - } - - public MediaStream GetDefaultAudioStream(int? defaultIndex) - { - if (defaultIndex.HasValue && defaultIndex != -1) - { - var val = defaultIndex.Value; - - foreach (var i in MediaStreams) - { - if (i.Type == MediaStreamType.Audio && i.Index == val) - { - return i; - } - } - } - - foreach (var i in MediaStreams) - { - if (i.Type == MediaStreamType.Audio && i.IsDefault) - { - return i; - } - } - - foreach (var i in MediaStreams) - { - if (i.Type == MediaStreamType.Audio) - { - return i; - } - } - - return null; - } - - public MediaStream GetMediaStream(MediaStreamType type, int index) - { - foreach (var i in MediaStreams) - { - if (i.Type == type && i.Index == index) - { - return i; - } - } - - return null; - } - - public int? GetStreamCount(MediaStreamType type) - { - int numMatches = 0; - int numStreams = 0; - - foreach (var i in MediaStreams) - { - numStreams++; - if (i.Type == type) - { - numMatches++; - } - } - - if (numStreams == 0) - { - return null; - } - - return numMatches; - } - - public bool? IsSecondaryAudio(MediaStream stream) - { - if (stream.IsExternal) - { - return false; - } - - // Look for the first audio track - foreach (var currentStream in MediaStreams) - { - if (currentStream.Type == MediaStreamType.Audio && !currentStream.IsExternal) - { - return currentStream.Index != stream.Index; - } - } - - return null; - } - } -} + if (bitrate > 0) + { + Bitrate = bitrate; + } + } + + public MediaStream GetDefaultAudioStream(int? defaultIndex) + { + if (defaultIndex.HasValue && defaultIndex != -1) + { + var val = defaultIndex.Value; + + foreach (var i in MediaStreams) + { + if (i.Type == MediaStreamType.Audio && i.Index == val) + { + return i; + } + } + } + + foreach (var i in MediaStreams) + { + if (i.Type == MediaStreamType.Audio && i.IsDefault) + { + return i; + } + } + + foreach (var i in MediaStreams) + { + if (i.Type == MediaStreamType.Audio) + { + return i; + } + } + + return null; + } + + public MediaStream GetMediaStream(MediaStreamType type, int index) + { + foreach (var i in MediaStreams) + { + if (i.Type == type && i.Index == index) + { + return i; + } + } + + return null; + } + + public int? GetStreamCount(MediaStreamType type) + { + int numMatches = 0; + int numStreams = 0; + + foreach (var i in MediaStreams) + { + numStreams++; + if (i.Type == type) + { + numMatches++; + } + } + + if (numStreams == 0) + { + return null; + } + + return numMatches; + } + + public bool? IsSecondaryAudio(MediaStream stream) + { + if (stream.IsExternal) + { + return false; + } + + // Look for the first audio track + foreach (var currentStream in MediaStreams) + { + if (currentStream.Type == MediaStreamType.Audio && !currentStream.IsExternal) + { + return currentStream.Index != stream.Index; + } + } + + return null; + } + } diff --git a/MediaBrowser.Model/Dto/MediaSourceType.cs b/MediaBrowser.Model/Dto/MediaSourceType.cs index 0b2b5b71..190856b2 100644 --- a/MediaBrowser.Model/Dto/MediaSourceType.cs +++ b/MediaBrowser.Model/Dto/MediaSourceType.cs @@ -4,12 +4,10 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Dto -{ - public enum MediaSourceType - { - Default = 0, - Grouping = 1, - Placeholder = 2 - } -} +namespace MediaBrowser.Model.Dto; + public enum MediaSourceType + { + Default = 0, + Grouping = 1, + Placeholder = 2, + } diff --git a/MediaBrowser.Model/Dto/MetadataEditorInfo.cs b/MediaBrowser.Model/Dto/MetadataEditorInfo.cs index 289f40dc..34a87fd0 100644 --- a/MediaBrowser.Model/Dto/MetadataEditorInfo.cs +++ b/MediaBrowser.Model/Dto/MetadataEditorInfo.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; +namespace MediaBrowser.Model.Dto; + +using global::System.Collections.Generic; using Jellyfin.Data.Enums; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Providers; -namespace MediaBrowser.Model.Dto; - /// /// A class representing metadata editor information. /// diff --git a/MediaBrowser.Model/Dto/NameGuidPair.cs b/MediaBrowser.Model/Dto/NameGuidPair.cs index 8462a966..a7f88aba 100644 --- a/MediaBrowser.Model/Dto/NameGuidPair.cs +++ b/MediaBrowser.Model/Dto/NameGuidPair.cs @@ -5,14 +5,12 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.Dto -{ - public class NameGuidPair - { - public string Name { get; set; } +namespace MediaBrowser.Model.Dto; + public class NameGuidPair + { + public string Name { get; set; } - public Guid Id { get; set; } - } -} + public Guid Id { get; set; } + } diff --git a/MediaBrowser.Model/Dto/NameIdPair.cs b/MediaBrowser.Model/Dto/NameIdPair.cs index 8ad19caf..db2378ae 100644 --- a/MediaBrowser.Model/Dto/NameIdPair.cs +++ b/MediaBrowser.Model/Dto/NameIdPair.cs @@ -5,20 +5,18 @@ #nullable disable #pragma warning disable CS1591 -namespace MediaBrowser.Model.Dto -{ - public class NameIdPair - { - /// - /// Gets or sets the name. - /// - /// The name. - public string Name { get; set; } +namespace MediaBrowser.Model.Dto; + public class NameIdPair + { + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } - /// - /// Gets or sets the identifier. - /// - /// The identifier. - public string Id { get; set; } - } -} + /// + /// Gets or sets the identifier. + /// + /// The identifier. + public string Id { get; set; } + } diff --git a/MediaBrowser.Model/Dto/NameValuePair.cs b/MediaBrowser.Model/Dto/NameValuePair.cs index 85b346ed..fb9314fb 100644 --- a/MediaBrowser.Model/Dto/NameValuePair.cs +++ b/MediaBrowser.Model/Dto/NameValuePair.cs @@ -5,30 +5,28 @@ #nullable disable #pragma warning disable CS1591 -namespace MediaBrowser.Model.Dto -{ - public class NameValuePair - { - public NameValuePair() - { - } +namespace MediaBrowser.Model.Dto; + public class NameValuePair + { + public NameValuePair() + { + } - public NameValuePair(string name, string value) - { - Name = name; - Value = value; - } + public NameValuePair(string name, string value) + { + Name = name; + Value = value; + } - /// - /// Gets or sets the name. - /// - /// The name. - public string Name { get; set; } + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } - /// - /// Gets or sets the value. - /// - /// The value. - public string Value { get; set; } - } -} + /// + /// Gets or sets the value. + /// + /// The value. + public string Value { get; set; } + } diff --git a/MediaBrowser.Model/Dto/PlaylistDto.cs b/MediaBrowser.Model/Dto/PlaylistDto.cs index 63abb1e7..7b78c580 100644 --- a/MediaBrowser.Model/Dto/PlaylistDto.cs +++ b/MediaBrowser.Model/Dto/PlaylistDto.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using MediaBrowser.Model.Entities; - namespace MediaBrowser.Model.Dto; +using global::System; +using global::System.Collections.Generic; +using MediaBrowser.Model.Entities; + /// /// DTO for playlists. /// diff --git a/MediaBrowser.Model/Dto/RatingType.cs b/MediaBrowser.Model/Dto/RatingType.cs index d51b11df..f270232e 100644 --- a/MediaBrowser.Model/Dto/RatingType.cs +++ b/MediaBrowser.Model/Dto/RatingType.cs @@ -4,11 +4,9 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Dto -{ - public enum RatingType - { - Score, - Likes - } -} +namespace MediaBrowser.Model.Dto; + public enum RatingType + { + Score, + Likes + } diff --git a/MediaBrowser.Model/Dto/RecommendationDto.cs b/MediaBrowser.Model/Dto/RecommendationDto.cs index caebbfd8..e038bac3 100644 --- a/MediaBrowser.Model/Dto/RecommendationDto.cs +++ b/MediaBrowser.Model/Dto/RecommendationDto.cs @@ -5,19 +5,17 @@ #nullable disable #pragma warning disable CS1591 -using System; -using System.Collections.Generic; +using global::System; +using global::System.Collections.Generic; -namespace MediaBrowser.Model.Dto -{ - public class RecommendationDto - { - public IReadOnlyCollection Items { get; set; } +namespace MediaBrowser.Model.Dto; + public class RecommendationDto + { + public IReadOnlyCollection Items { get; set; } - public RecommendationType RecommendationType { get; set; } + public RecommendationType RecommendationType { get; set; } - public string BaselineItemName { get; set; } + public string BaselineItemName { get; set; } - public Guid CategoryId { get; set; } - } -} + public Guid CategoryId { get; set; } + } diff --git a/MediaBrowser.Model/Dto/RecommendationType.cs b/MediaBrowser.Model/Dto/RecommendationType.cs index ee80e666..1710187d 100644 --- a/MediaBrowser.Model/Dto/RecommendationType.cs +++ b/MediaBrowser.Model/Dto/RecommendationType.cs @@ -4,20 +4,18 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Dto -{ - public enum RecommendationType - { - SimilarToRecentlyPlayed = 0, +namespace MediaBrowser.Model.Dto; + public enum RecommendationType + { + SimilarToRecentlyPlayed = 0, - SimilarToLikedItem = 1, + SimilarToLikedItem = 1, - HasDirectorFromRecentlyPlayed = 2, + HasDirectorFromRecentlyPlayed = 2, - HasActorFromRecentlyPlayed = 3, + HasActorFromRecentlyPlayed = 3, - HasLikedDirector = 4, + HasLikedDirector = 4, - HasLikedActor = 5 - } -} + HasLikedActor = 5, + } diff --git a/MediaBrowser.Model/Dto/SessionInfoDto.cs b/MediaBrowser.Model/Dto/SessionInfoDto.cs index 1bcccbe9..36ae9c7e 100644 --- a/MediaBrowser.Model/Dto/SessionInfoDto.cs +++ b/MediaBrowser.Model/Dto/SessionInfoDto.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; +namespace MediaBrowser.Model.Dto; + +using global::System; +using global::System.Collections.Generic; using Jellyfin.Data.Enums; using MediaBrowser.Model.Session; -namespace MediaBrowser.Model.Dto; - /// /// Session info DTO. /// diff --git a/MediaBrowser.Model/Dto/TrickplayInfoDto.cs b/MediaBrowser.Model/Dto/TrickplayInfoDto.cs index d26e2db6..e8582d57 100644 --- a/MediaBrowser.Model/Dto/TrickplayInfoDto.cs +++ b/MediaBrowser.Model/Dto/TrickplayInfoDto.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Jellyfin.Database.Implementations.Entities; - namespace MediaBrowser.Model.Dto; +using global::System; +using Jellyfin.Database.Implementations.Entities; + /// /// The trickplay api model. /// diff --git a/MediaBrowser.Model/Dto/UpdateUserItemDataDto.cs b/MediaBrowser.Model/Dto/UpdateUserItemDataDto.cs index 7c3cc1ea..470bb9bc 100644 --- a/MediaBrowser.Model/Dto/UpdateUserItemDataDto.cs +++ b/MediaBrowser.Model/Dto/UpdateUserItemDataDto.cs @@ -2,79 +2,77 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; +namespace MediaBrowser.Model.Dto; + using global::System; -namespace MediaBrowser.Model.Dto -{ - /// - /// This is used by the api to get information about a item user data. - /// - public class UpdateUserItemDataDto - { - /// - /// Gets or sets the rating. - /// - /// The rating. - public double? Rating { get; set; } + /// + /// This is used by the api to get information about a item user data. + /// + public class UpdateUserItemDataDto + { + /// + /// Gets or sets the rating. + /// + /// The rating. + public double? Rating { get; set; } - /// - /// Gets or sets the played percentage. - /// - /// The played percentage. - public double? PlayedPercentage { get; set; } + /// + /// Gets or sets the played percentage. + /// + /// The played percentage. + public double? PlayedPercentage { get; set; } - /// - /// Gets or sets the unplayed item count. - /// - /// The unplayed item count. - public int? UnplayedItemCount { get; set; } + /// + /// Gets or sets the unplayed item count. + /// + /// The unplayed item count. + public int? UnplayedItemCount { get; set; } - /// - /// Gets or sets the playback position ticks. - /// - /// The playback position ticks. - public long? PlaybackPositionTicks { get; set; } + /// + /// Gets or sets the playback position ticks. + /// + /// The playback position ticks. + public long? PlaybackPositionTicks { get; set; } - /// - /// Gets or sets the play count. - /// - /// The play count. - public int? PlayCount { get; set; } + /// + /// Gets or sets the play count. + /// + /// The play count. + public int? PlayCount { get; set; } - /// - /// Gets or sets a value indicating whether this instance is favorite. - /// - /// true if this instance is favorite; otherwise, false. - public bool? IsFavorite { get; set; } + /// + /// Gets or sets a value indicating whether this instance is favorite. + /// + /// true if this instance is favorite; otherwise, false. + public bool? IsFavorite { get; set; } - /// - /// Gets or sets a value indicating whether this is likes. - /// - /// null if [likes] contains no value, true if [likes]; otherwise, false. - public bool? Likes { get; set; } + /// + /// Gets or sets a value indicating whether this is likes. + /// + /// null if [likes] contains no value, true if [likes]; otherwise, false. + public bool? Likes { get; set; } - /// - /// Gets or sets the last played date. - /// - /// The last played date. - public DateTime? LastPlayedDate { get; set; } + /// + /// Gets or sets the last played date. + /// + /// The last played date. + public DateTime? LastPlayedDate { get; set; } - /// - /// Gets or sets a value indicating whether this is played. - /// - /// true if played; otherwise, false. - public bool? Played { get; set; } + /// + /// Gets or sets a value indicating whether this is played. + /// + /// true if played; otherwise, false. + public bool? Played { get; set; } - /// - /// Gets or sets the key. - /// - /// The key. - public string? Key { get; set; } + /// + /// Gets or sets the key. + /// + /// The key. + public string? Key { get; set; } - /// - /// Gets or sets the item identifier. - /// - /// The item identifier. - public string? ItemId { get; set; } - } -} + /// + /// Gets or sets the item identifier. + /// + /// The item identifier. + public string? ItemId { get; set; } + } diff --git a/MediaBrowser.Model/Dto/UserDto.cs b/MediaBrowser.Model/Dto/UserDto.cs index c4d56604..3d3d19fc 100644 --- a/MediaBrowser.Model/Dto/UserDto.cs +++ b/MediaBrowser.Model/Dto/UserDto.cs @@ -2,119 +2,117 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Model.Dto; #nullable disable -using System; -using System.ComponentModel; -using MediaBrowser.Model.Configuration; -using MediaBrowser.Model.Users; + using global::System; + using global::System.ComponentModel; + using MediaBrowser.Model.Configuration; + using MediaBrowser.Model.Users; -namespace MediaBrowser.Model.Dto -{ - /// - /// Class UserDto. - /// - public class UserDto : IItemDto, IHasServerId - { - /// - /// Initializes a new instance of the class. - /// - public UserDto() - { - Configuration = new UserConfiguration(); - Policy = new UserPolicy(); - } + /// + /// Class UserDto. + /// + public class UserDto : IItemDto, IHasServerId + { + /// + /// Initializes a new instance of the class. + /// + public UserDto() + { + Configuration = new UserConfiguration(); + Policy = new UserPolicy(); + } - /// - /// Gets or sets the name. - /// - /// The name. - public string Name { get; set; } + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } - /// - /// Gets or sets the server identifier. - /// - /// The server identifier. - public string ServerId { get; set; } + /// + /// Gets or sets the server identifier. + /// + /// The server identifier. + public string ServerId { get; set; } - /// - /// Gets or sets the name of the server. - /// This is not used by the server and is for client-side usage only. - /// - /// The name of the server. - public string ServerName { get; set; } + /// + /// Gets or sets the name of the server. + /// This is not used by the server and is for client-side usage only. + /// + /// The name of the server. + public string ServerName { get; set; } - /// - /// Gets or sets the id. - /// - /// The id. - public Guid Id { get; set; } + /// + /// Gets or sets the id. + /// + /// The id. + public Guid Id { get; set; } - /// - /// Gets or sets the primary image tag. - /// - /// The primary image tag. - public string PrimaryImageTag { get; set; } + /// + /// Gets or sets the primary image tag. + /// + /// The primary image tag. + public string PrimaryImageTag { get; set; } - /// - /// Gets or sets a value indicating whether this instance has password. - /// - /// true if this instance has password; otherwise, false. - [Obsolete("This information is no longer provided")] - public bool? HasPassword { get; set; } = true; + /// + /// Gets or sets a value indicating whether this instance has password. + /// + /// true if this instance has password; otherwise, false. + [Obsolete("This information is no longer provided")] + public bool? HasPassword { get; set; } = true; - /// - /// Gets or sets a value indicating whether this instance has configured password. - /// - /// true if this instance has configured password; otherwise, false. - [Obsolete("This is always true")] - public bool? HasConfiguredPassword { get; set; } = true; + /// + /// Gets or sets a value indicating whether this instance has configured password. + /// + /// true if this instance has configured password; otherwise, false. + [Obsolete("This is always true")] + public bool? HasConfiguredPassword { get; set; } = true; - /// - /// Gets or sets a value indicating whether this instance has configured easy password. - /// - /// true if this instance has configured easy password; otherwise, false. - [Obsolete("Easy Password has been replaced with Quick Connect")] - public bool? HasConfiguredEasyPassword { get; set; } = false; + /// + /// Gets or sets a value indicating whether this instance has configured easy password. + /// + /// true if this instance has configured easy password; otherwise, false. + [Obsolete("Easy Password has been replaced with Quick Connect")] + public bool? HasConfiguredEasyPassword { get; set; } = false; - /// - /// Gets or sets whether async login is enabled or not. - /// - public bool? EnableAutoLogin { get; set; } + /// + /// Gets or sets whether async login is enabled or not. + /// + public bool? EnableAutoLogin { get; set; } - /// - /// Gets or sets the last login date. - /// - /// The last login date. - public DateTime? LastLoginDate { get; set; } + /// + /// Gets or sets the last login date. + /// + /// The last login date. + public DateTime? LastLoginDate { get; set; } - /// - /// Gets or sets the last activity date. - /// - /// The last activity date. - public DateTime? LastActivityDate { get; set; } + /// + /// Gets or sets the last activity date. + /// + /// The last activity date. + public DateTime? LastActivityDate { get; set; } - /// - /// Gets or sets the configuration. - /// - /// The configuration. - public UserConfiguration Configuration { get; set; } + /// + /// Gets or sets the configuration. + /// + /// The configuration. + public UserConfiguration Configuration { get; set; } - /// - /// Gets or sets the policy. - /// - /// The policy. - public UserPolicy Policy { get; set; } + /// + /// Gets or sets the policy. + /// + /// The policy. + public UserPolicy Policy { get; set; } - /// - /// Gets or sets the primary image aspect ratio. - /// - /// The primary image aspect ratio. - public double? PrimaryImageAspectRatio { get; set; } + /// + /// Gets or sets the primary image aspect ratio. + /// + /// The primary image aspect ratio. + public double? PrimaryImageAspectRatio { get; set; } - /// - public override string ToString() - { - return Name ?? base.ToString(); - } - } -} + /// + public override string ToString() + { + return Name ?? base.ToString(); + } + } diff --git a/MediaBrowser.Model/Dto/UserItemDataDto.cs b/MediaBrowser.Model/Dto/UserItemDataDto.cs index cd53a49a..294c0e8a 100644 --- a/MediaBrowser.Model/Dto/UserItemDataDto.cs +++ b/MediaBrowser.Model/Dto/UserItemDataDto.cs @@ -2,79 +2,77 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; +namespace MediaBrowser.Model.Dto; + using global::System; -namespace MediaBrowser.Model.Dto -{ - /// - /// Class UserItemDataDto. - /// - public class UserItemDataDto - { - /// - /// Gets or sets the rating. - /// - /// The rating. - public double? Rating { get; set; } + /// + /// Class UserItemDataDto. + /// + public class UserItemDataDto + { + /// + /// Gets or sets the rating. + /// + /// The rating. + public double? Rating { get; set; } - /// - /// Gets or sets the played percentage. - /// - /// The played percentage. - public double? PlayedPercentage { get; set; } + /// + /// Gets or sets the played percentage. + /// + /// The played percentage. + public double? PlayedPercentage { get; set; } - /// - /// Gets or sets the unplayed item count. - /// - /// The unplayed item count. - public int? UnplayedItemCount { get; set; } + /// + /// Gets or sets the unplayed item count. + /// + /// The unplayed item count. + public int? UnplayedItemCount { get; set; } - /// - /// Gets or sets the playback position ticks. - /// - /// The playback position ticks. - public long PlaybackPositionTicks { get; set; } + /// + /// Gets or sets the playback position ticks. + /// + /// The playback position ticks. + public long PlaybackPositionTicks { get; set; } - /// - /// Gets or sets the play count. - /// - /// The play count. - public int PlayCount { get; set; } + /// + /// Gets or sets the play count. + /// + /// The play count. + public int PlayCount { get; set; } - /// - /// Gets or sets a value indicating whether this instance is favorite. - /// - /// true if this instance is favorite; otherwise, false. - public bool IsFavorite { get; set; } + /// + /// Gets or sets a value indicating whether this instance is favorite. + /// + /// true if this instance is favorite; otherwise, false. + public bool IsFavorite { get; set; } - /// - /// Gets or sets a value indicating whether this is likes. - /// - /// null if [likes] contains no value, true if [likes]; otherwise, false. - public bool? Likes { get; set; } + /// + /// Gets or sets a value indicating whether this is likes. + /// + /// null if [likes] contains no value, true if [likes]; otherwise, false. + public bool? Likes { get; set; } - /// - /// Gets or sets the last played date. - /// - /// The last played date. - public DateTime? LastPlayedDate { get; set; } + /// + /// Gets or sets the last played date. + /// + /// The last played date. + public DateTime? LastPlayedDate { get; set; } - /// - /// Gets or sets a value indicating whether this is played. - /// - /// true if played; otherwise, false. - public bool Played { get; set; } + /// + /// Gets or sets a value indicating whether this is played. + /// + /// true if played; otherwise, false. + public bool Played { get; set; } - /// - /// Gets or sets the key. - /// - /// The key. - public required string Key { get; set; } + /// + /// Gets or sets the key. + /// + /// The key. + public required string Key { get; set; } - /// - /// Gets or sets the item identifier. - /// - /// The item identifier. - public Guid ItemId { get; set; } - } -} + /// + /// Gets or sets the item identifier. + /// + /// The item identifier. + public Guid ItemId { get; set; } + } diff --git a/MediaBrowser.Model/Entities/ChapterInfo.cs b/MediaBrowser.Model/Entities/ChapterInfo.cs index d4597d29..647f55b5 100644 --- a/MediaBrowser.Model/Entities/ChapterInfo.cs +++ b/MediaBrowser.Model/Entities/ChapterInfo.cs @@ -4,35 +4,33 @@ #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.Entities -{ - /// - /// Class ChapterInfo. - /// - public class ChapterInfo - { - /// - /// Gets or sets the start position ticks. - /// - /// The start position ticks. - public long StartPositionTicks { get; set; } +namespace MediaBrowser.Model.Entities; + /// + /// Class ChapterInfo. + /// + public class ChapterInfo + { + /// + /// Gets or sets the start position ticks. + /// + /// The start position ticks. + public long StartPositionTicks { get; set; } - /// - /// Gets or sets the name. - /// - /// The name. - public string? Name { get; set; } + /// + /// Gets or sets the name. + /// + /// The name. + public string? Name { get; set; } - /// - /// Gets or sets the image path. - /// - /// The image path. - public string? ImagePath { get; set; } + /// + /// Gets or sets the image path. + /// + /// The image path. + public string? ImagePath { get; set; } - public DateTime ImageDateModified { get; set; } + public DateTime ImageDateModified { get; set; } - public string? ImageTag { get; set; } - } -} + public string? ImageTag { get; set; } + } diff --git a/MediaBrowser.Model/Entities/CollectionTypeOptions.cs b/MediaBrowser.Model/Entities/CollectionTypeOptions.cs index 87af3e8e..0f2be02a 100644 --- a/MediaBrowser.Model/Entities/CollectionTypeOptions.cs +++ b/MediaBrowser.Model/Entities/CollectionTypeOptions.cs @@ -49,5 +49,5 @@ public enum CollectionTypeOptions /// /// Mixed Movies and TV Shows. /// - mixed = 7 + mixed = 7, } diff --git a/MediaBrowser.Model/Entities/DeinterlaceMethod.cs b/MediaBrowser.Model/Entities/DeinterlaceMethod.cs index ca5affa1..247bed4c 100644 --- a/MediaBrowser.Model/Entities/DeinterlaceMethod.cs +++ b/MediaBrowser.Model/Entities/DeinterlaceMethod.cs @@ -19,5 +19,5 @@ public enum DeinterlaceMethod /// /// BWDIF. /// - bwdif = 1 + bwdif = 1, } diff --git a/MediaBrowser.Model/Entities/DownMixStereoAlgorithms.cs b/MediaBrowser.Model/Entities/DownMixStereoAlgorithms.cs index 701c06d2..4ef53389 100644 --- a/MediaBrowser.Model/Entities/DownMixStereoAlgorithms.cs +++ b/MediaBrowser.Model/Entities/DownMixStereoAlgorithms.cs @@ -35,5 +35,5 @@ public enum DownMixStereoAlgorithms /// AC-4 standard algorithm with its default gain values. /// Defined in ETSI TS 103 190 Section 6.2.17. /// - Ac4 = 4 + Ac4 = 4, } diff --git a/MediaBrowser.Model/Entities/EncoderPreset.cs b/MediaBrowser.Model/Entities/EncoderPreset.cs index cf4a5d6c..99f7188d 100644 --- a/MediaBrowser.Model/Entities/EncoderPreset.cs +++ b/MediaBrowser.Model/Entities/EncoderPreset.cs @@ -64,5 +64,5 @@ public enum EncoderPreset /// /// Ultrafast preset. /// - ultrafast = 10 + ultrafast = 10, } diff --git a/MediaBrowser.Model/Entities/ExtraType.cs b/MediaBrowser.Model/Entities/ExtraType.cs index 30893a2a..a412f44f 100644 --- a/MediaBrowser.Model/Entities/ExtraType.cs +++ b/MediaBrowser.Model/Entities/ExtraType.cs @@ -4,21 +4,19 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Entities -{ - public enum ExtraType - { - Unknown = 0, - Clip = 1, - Trailer = 2, - BehindTheScenes = 3, - DeletedScene = 4, - Interview = 5, - Scene = 6, - Sample = 7, - ThemeSong = 8, - ThemeVideo = 9, - Featurette = 10, - Short = 11 - } -} +namespace MediaBrowser.Model.Entities; + public enum ExtraType + { + Unknown = 0, + Clip = 1, + Trailer = 2, + BehindTheScenes = 3, + DeletedScene = 4, + Interview = 5, + Scene = 6, + Sample = 7, + ThemeSong = 8, + ThemeVideo = 9, + Featurette = 10, + Short = 11, + } diff --git a/MediaBrowser.Model/Entities/HardwareAccelerationType.cs b/MediaBrowser.Model/Entities/HardwareAccelerationType.cs index 8156c7fb..bd6858a1 100644 --- a/MediaBrowser.Model/Entities/HardwareAccelerationType.cs +++ b/MediaBrowser.Model/Entities/HardwareAccelerationType.cs @@ -49,5 +49,5 @@ public enum HardwareAccelerationType /// /// Rockchip Media Process Platform (RKMPP). /// - rkmpp = 7 + rkmpp = 7, } diff --git a/MediaBrowser.Model/Entities/IHasProviderIds.cs b/MediaBrowser.Model/Entities/IHasProviderIds.cs index 90d60b51..14ad8353 100644 --- a/MediaBrowser.Model/Entities/IHasProviderIds.cs +++ b/MediaBrowser.Model/Entities/IHasProviderIds.cs @@ -2,19 +2,17 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; +namespace MediaBrowser.Model.Entities; + using global::System.Collections.Generic; -namespace MediaBrowser.Model.Entities -{ - /// - /// Since BaseItem and DTOBaseItem both have ProviderIds, this interface helps avoid code repetition by using extension methods. - /// - public interface IHasProviderIds - { - /// - /// Gets or sets the provider ids. - /// - /// The provider ids. - Dictionary ProviderIds { get; set; } - } -} + /// + /// Since BaseItem and DTOBaseItem both have ProviderIds, this interface helps avoid code repetition by using extension methods. + /// + public interface IHasProviderIds + { + /// + /// Gets or sets the provider ids. + /// + /// The provider ids. + Dictionary ProviderIds { get; set; } + } diff --git a/MediaBrowser.Model/Entities/IHasShares.cs b/MediaBrowser.Model/Entities/IHasShares.cs index 6192e0af..89c0cc82 100644 --- a/MediaBrowser.Model/Entities/IHasShares.cs +++ b/MediaBrowser.Model/Entities/IHasShares.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; - namespace MediaBrowser.Model.Entities; +using global::System.Collections.Generic; + /// /// Interface for access to shares. /// diff --git a/MediaBrowser.Model/Entities/ImageType.cs b/MediaBrowser.Model/Entities/ImageType.cs index 4980bab8..eef664ab 100644 --- a/MediaBrowser.Model/Entities/ImageType.cs +++ b/MediaBrowser.Model/Entities/ImageType.cs @@ -2,80 +2,78 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Entities -{ - /// - /// Enum ImageType. - /// - public enum ImageType - { - /// - /// The primary. - /// - Primary = 0, +namespace MediaBrowser.Model.Entities; + /// + /// Enum ImageType. + /// + public enum ImageType + { + /// + /// The primary. + /// + Primary = 0, - /// - /// The art. - /// - Art = 1, + /// + /// The art. + /// + Art = 1, - /// - /// The backdrop. - /// - Backdrop = 2, + /// + /// The backdrop. + /// + Backdrop = 2, - /// - /// The banner. - /// - Banner = 3, + /// + /// The banner. + /// + Banner = 3, - /// - /// The logo. - /// - Logo = 4, + /// + /// The logo. + /// + Logo = 4, - /// - /// The thumb. - /// - Thumb = 5, + /// + /// The thumb. + /// + Thumb = 5, - /// - /// The disc. - /// - Disc = 6, + /// + /// The disc. + /// + Disc = 6, - /// - /// The box. - /// - Box = 7, + /// + /// The box. + /// + Box = 7, - /// - /// The screenshot. - /// - /// - /// This enum value is obsolete. - /// XmlSerializer does not serialize/deserialize objects that are marked as [Obsolete]. - /// - Screenshot = 8, + /// + /// The screenshot. + /// + /// + /// This enum value is obsolete. + /// XmlSerializer does not serialize/deserialize objects that are marked as [Obsolete]. + /// + Screenshot = 8, - /// - /// The menu. - /// - Menu = 9, + /// + /// The menu. + /// + Menu = 9, - /// - /// The chapter image. - /// - Chapter = 10, + /// + /// The chapter image. + /// + Chapter = 10, - /// - /// The box rear. - /// - BoxRear = 11, + /// + /// The box rear. + /// + BoxRear = 11, - /// - /// The user profile image. - /// - Profile = 12 - } -} + /// + /// The user profile image. + /// + Profile = 12, + } diff --git a/MediaBrowser.Model/Entities/IsoType.cs b/MediaBrowser.Model/Entities/IsoType.cs index 9d62e5c2..f3d64a6e 100644 --- a/MediaBrowser.Model/Entities/IsoType.cs +++ b/MediaBrowser.Model/Entities/IsoType.cs @@ -2,21 +2,19 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Entities -{ - /// - /// Enum IsoType. - /// - public enum IsoType - { - /// - /// The DVD. - /// - Dvd, +namespace MediaBrowser.Model.Entities; + /// + /// Enum IsoType. + /// + public enum IsoType + { + /// + /// The DVD. + /// + Dvd, - /// - /// The blu ray. - /// - BluRay - } -} + /// + /// The blu ray. + /// + BluRay + } diff --git a/MediaBrowser.Model/Entities/LibraryUpdateInfo.cs b/MediaBrowser.Model/Entities/LibraryUpdateInfo.cs index f4f8f1ae..e798cdd0 100644 --- a/MediaBrowser.Model/Entities/LibraryUpdateInfo.cs +++ b/MediaBrowser.Model/Entities/LibraryUpdateInfo.cs @@ -4,60 +4,58 @@ #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.Entities -{ - /// - /// Class LibraryUpdateInfo. - /// - public class LibraryUpdateInfo - { - /// - /// Initializes a new instance of the class. - /// - public LibraryUpdateInfo() - { - FoldersAddedTo = Array.Empty(); - FoldersRemovedFrom = Array.Empty(); - ItemsAdded = Array.Empty(); - ItemsRemoved = Array.Empty(); - ItemsUpdated = Array.Empty(); - CollectionFolders = Array.Empty(); - } +namespace MediaBrowser.Model.Entities; + /// + /// Class LibraryUpdateInfo. + /// + public class LibraryUpdateInfo + { + /// + /// Initializes a new instance of the class. + /// + public LibraryUpdateInfo() + { + FoldersAddedTo = Array.Empty(); + FoldersRemovedFrom = Array.Empty(); + ItemsAdded = Array.Empty(); + ItemsRemoved = Array.Empty(); + ItemsUpdated = Array.Empty(); + CollectionFolders = Array.Empty(); + } - /// - /// Gets or sets the folders added to. - /// - /// The folders added to. - public string[] FoldersAddedTo { get; set; } + /// + /// Gets or sets the folders added to. + /// + /// The folders added to. + public string[] FoldersAddedTo { get; set; } - /// - /// Gets or sets the folders removed from. - /// - /// The folders removed from. - public string[] FoldersRemovedFrom { get; set; } + /// + /// Gets or sets the folders removed from. + /// + /// The folders removed from. + public string[] FoldersRemovedFrom { get; set; } - /// - /// Gets or sets the items added. - /// - /// The items added. - public string[] ItemsAdded { get; set; } + /// + /// Gets or sets the items added. + /// + /// The items added. + public string[] ItemsAdded { get; set; } - /// - /// Gets or sets the items removed. - /// - /// The items removed. - public string[] ItemsRemoved { get; set; } + /// + /// Gets or sets the items removed. + /// + /// The items removed. + public string[] ItemsRemoved { get; set; } - /// - /// Gets or sets the items updated. - /// - /// The items updated. - public string[] ItemsUpdated { get; set; } + /// + /// Gets or sets the items updated. + /// + /// The items updated. + public string[] ItemsUpdated { get; set; } - public string[] CollectionFolders { get; set; } + public string[] CollectionFolders { get; set; } - public bool IsEmpty => FoldersAddedTo.Length == 0 && FoldersRemovedFrom.Length == 0 && ItemsAdded.Length == 0 && ItemsRemoved.Length == 0 && ItemsUpdated.Length == 0 && CollectionFolders.Length == 0; - } -} + public bool IsEmpty => FoldersAddedTo.Length == 0 && FoldersRemovedFrom.Length == 0 && ItemsAdded.Length == 0 && ItemsRemoved.Length == 0 && ItemsUpdated.Length == 0 && CollectionFolders.Length == 0; + } diff --git a/MediaBrowser.Model/Entities/LocationType.cs b/MediaBrowser.Model/Entities/LocationType.cs index a3d8a1c8..e0034841 100644 --- a/MediaBrowser.Model/Entities/LocationType.cs +++ b/MediaBrowser.Model/Entities/LocationType.cs @@ -2,31 +2,29 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Entities -{ - /// - /// Enum LocationType. - /// - public enum LocationType - { - /// - /// The file system. - /// - FileSystem = 0, +namespace MediaBrowser.Model.Entities; + /// + /// Enum LocationType. + /// + public enum LocationType + { + /// + /// The file system. + /// + FileSystem = 0, - /// - /// The remote. - /// - Remote = 1, + /// + /// The remote. + /// + Remote = 1, - /// - /// The virtual. - /// - Virtual = 2, + /// + /// The virtual. + /// + Virtual = 2, - /// - /// The offline. - /// - Offline = 3 - } -} + /// + /// The offline. + /// + Offline = 3, + } diff --git a/MediaBrowser.Model/Entities/MediaStream.cs b/MediaBrowser.Model/Entities/MediaStream.cs index 0fb999e5..d8ba3044 100644 --- a/MediaBrowser.Model/Entities/MediaStream.cs +++ b/MediaBrowser.Model/Entities/MediaStream.cs @@ -5,319 +5,357 @@ #nullable disable #pragma warning disable CS1591 -using System; -using System.Collections.Frozen; -using System.Collections.Generic; -using System.ComponentModel; -using System.Globalization; -using System.Linq; -using System.Text; -using System.Text.Json.Serialization; +namespace MediaBrowser.Model.Entities; + +using global::System; +using global::System.Collections.Frozen; +using global::System.Collections.Generic; +using global::System.ComponentModel; +using global::System.Globalization; +using global::System.Linq; +using global::System.Text; +using global::System.Text.Json.Serialization; using Jellyfin.Data.Enums; using Jellyfin.Extensions; using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Extensions; using MediaBrowser.Model.MediaInfo; -namespace MediaBrowser.Model.Entities +/// +/// Class MediaStream. +/// +public class MediaStream { /// - /// Class MediaStream. + /// Special ISO 639-2 language codes that should not be displayed in the UI. /// - public class MediaStream + private static readonly string[] SpecialCodes = { - private static readonly string[] _specialCodes = + // Uncoded languages. + "mis", + + // Multiple languages. + "mul", + + // Undetermined. + "und", + + // No linguistic content; not applicable. + "zxx", + }; + + /// + /// Gets or sets the codec. + /// + /// The codec. + public string Codec { get; set; } + + /// + /// Gets or sets the codec tag. + /// + /// The codec tag. + public string CodecTag { get; set; } + + /// + /// Gets or sets the language. + /// + /// The language. + public string Language { get; set; } + + /// + /// Gets or sets the color range. + /// + /// The color range. + public string ColorRange { get; set; } + + /// + /// Gets or sets the color space. + /// + /// The color space. + public string ColorSpace { get; set; } + + /// + /// Gets or sets the color transfer. + /// + /// The color transfer. + public string ColorTransfer { get; set; } + + /// + /// Gets or sets the color primaries. + /// + /// The color primaries. + public string ColorPrimaries { get; set; } + + /// + /// Gets or sets the Dolby Vision version major. + /// + /// The Dolby Vision version major. + public int? DvVersionMajor { get; set; } + + /// + /// Gets or sets the Dolby Vision version minor. + /// + /// The Dolby Vision version minor. + public int? DvVersionMinor { get; set; } + + /// + /// Gets or sets the Dolby Vision profile. + /// + /// The Dolby Vision profile. + public int? DvProfile { get; set; } + + /// + /// Gets or sets the Dolby Vision level. + /// + /// The Dolby Vision level. + public int? DvLevel { get; set; } + + /// + /// Gets or sets the Dolby Vision rpu present flag. + /// + /// The Dolby Vision rpu present flag. + public int? RpuPresentFlag { get; set; } + + /// + /// Gets or sets the Dolby Vision el present flag. + /// + /// The Dolby Vision el present flag. + public int? ElPresentFlag { get; set; } + + /// + /// Gets or sets the Dolby Vision bl present flag. + /// + /// The Dolby Vision bl present flag. + public int? BlPresentFlag { get; set; } + + /// + /// Gets or sets the Dolby Vision bl signal compatibility id. + /// + /// The Dolby Vision bl signal compatibility id. + public int? DvBlSignalCompatibilityId { get; set; } + + /// + /// Gets or sets the Rotation in degrees. + /// + /// The video rotation. + public int? Rotation { get; set; } + + /// + /// Gets or sets the comment. + /// + /// The comment. + public string Comment { get; set; } + + /// + /// Gets or sets the time base. + /// + /// The time base. + public string TimeBase { get; set; } + + /// + /// Gets or sets the codec time base. + /// + /// The codec time base. + public string CodecTimeBase { get; set; } + + /// + /// Gets or sets the title. + /// + /// The title. + public string Title { get; set; } + + /// + /// Gets or sets a value indicating whether the HDR10+ present flag. + /// + /// The HDR10+ present flag. + public bool? Hdr10PlusPresentFlag { get; set; } + + /// + /// Gets the video range. + /// + /// The video range. + [DefaultValue(VideoRange.Unknown)] + public VideoRange VideoRange + { + get { - // Uncoded languages. - "mis", - // Multiple languages. - "mul", - // Undetermined. - "und", - // No linguistic content; not applicable. - "zxx" - }; + var (videoRange, _) = this.GetVideoColorRange(); - /// - /// Gets or sets the codec. - /// - /// The codec. - public string Codec { get; set; } - - /// - /// Gets or sets the codec tag. - /// - /// The codec tag. - public string CodecTag { get; set; } - - /// - /// Gets or sets the language. - /// - /// The language. - public string Language { get; set; } - - /// - /// Gets or sets the color range. - /// - /// The color range. - public string ColorRange { get; set; } - - /// - /// Gets or sets the color space. - /// - /// The color space. - public string ColorSpace { get; set; } - - /// - /// Gets or sets the color transfer. - /// - /// The color transfer. - public string ColorTransfer { get; set; } - - /// - /// Gets or sets the color primaries. - /// - /// The color primaries. - public string ColorPrimaries { get; set; } - - /// - /// Gets or sets the Dolby Vision version major. - /// - /// The Dolby Vision version major. - public int? DvVersionMajor { get; set; } - - /// - /// Gets or sets the Dolby Vision version minor. - /// - /// The Dolby Vision version minor. - public int? DvVersionMinor { get; set; } - - /// - /// Gets or sets the Dolby Vision profile. - /// - /// The Dolby Vision profile. - public int? DvProfile { get; set; } - - /// - /// Gets or sets the Dolby Vision level. - /// - /// The Dolby Vision level. - public int? DvLevel { get; set; } - - /// - /// Gets or sets the Dolby Vision rpu present flag. - /// - /// The Dolby Vision rpu present flag. - public int? RpuPresentFlag { get; set; } - - /// - /// Gets or sets the Dolby Vision el present flag. - /// - /// The Dolby Vision el present flag. - public int? ElPresentFlag { get; set; } - - /// - /// Gets or sets the Dolby Vision bl present flag. - /// - /// The Dolby Vision bl present flag. - public int? BlPresentFlag { get; set; } - - /// - /// Gets or sets the Dolby Vision bl signal compatibility id. - /// - /// The Dolby Vision bl signal compatibility id. - public int? DvBlSignalCompatibilityId { get; set; } - - /// - /// Gets or sets the Rotation in degrees. - /// - /// The video rotation. - public int? Rotation { get; set; } - - /// - /// Gets or sets the comment. - /// - /// The comment. - public string Comment { get; set; } - - /// - /// Gets or sets the time base. - /// - /// The time base. - public string TimeBase { get; set; } - - /// - /// Gets or sets the codec time base. - /// - /// The codec time base. - public string CodecTimeBase { get; set; } - - /// - /// Gets or sets the title. - /// - /// The title. - public string Title { get; set; } - - public bool? Hdr10PlusPresentFlag { get; set; } - - /// - /// Gets the video range. - /// - /// The video range. - [DefaultValue(VideoRange.Unknown)] - public VideoRange VideoRange - { - get - { - var (videoRange, _) = GetVideoColorRange(); - - return videoRange; - } + return videoRange; } + } - /// - /// Gets the video range type. - /// - /// The video range type. - [DefaultValue(VideoRangeType.Unknown)] - public VideoRangeType VideoRangeType + /// + /// Gets the video range type. + /// + /// The video range type. + [DefaultValue(VideoRangeType.Unknown)] + public VideoRangeType VideoRangeType + { + get { - get - { - var (_, videoRangeType) = GetVideoColorRange(); + var (_, videoRangeType) = this.GetVideoColorRange(); - return videoRangeType; - } + return videoRangeType; } + } - /// - /// Gets the video dovi title. - /// - /// The video dovi title. - public string VideoDoViTitle + /// + /// Gets the video dovi title. + /// + /// The video dovi title. + public string VideoDoViTitle + { + get { - get - { - var dvProfile = DvProfile; - var rpuPresentFlag = RpuPresentFlag == 1; - var blPresentFlag = BlPresentFlag == 1; - var dvBlCompatId = DvBlSignalCompatibilityId; + var dvProfile = this.DvProfile; + var rpuPresentFlag = this.RpuPresentFlag == 1; + var blPresentFlag = this.BlPresentFlag == 1; + var dvBlCompatId = this.DvBlSignalCompatibilityId; - if (rpuPresentFlag - && blPresentFlag - && (dvProfile == 4 - || dvProfile == 5 - || dvProfile == 7 - || dvProfile == 8 - || dvProfile == 9 - || dvProfile == 10)) + if (rpuPresentFlag + && blPresentFlag + && (dvProfile == 4 + || dvProfile == 5 + || dvProfile == 7 + || dvProfile == 8 + || dvProfile == 9 + || dvProfile == 10)) + { + var title = "Dolby Vision Profile " + dvProfile; + + if (dvBlCompatId > 0) { - var title = "Dolby Vision Profile " + dvProfile; - - if (dvBlCompatId > 0) - { - title += "." + dvBlCompatId; - } - - return dvBlCompatId switch - { - 1 => title + " (HDR10)", - 2 => title + " (SDR)", - 4 => title + " (HLG)", - 6 => title + " (HDR10)", // Technically means Blu-ray, but practically always HDR10 - _ => title - }; + title += "." + dvBlCompatId; } - return null; - } - } - - /// - /// Gets the audio spatial format. - /// - /// The audio spatial format. - [DefaultValue(AudioSpatialFormat.None)] - public AudioSpatialFormat AudioSpatialFormat - { - get - { - if (Type != MediaStreamType.Audio || string.IsNullOrEmpty(Profile)) + return dvBlCompatId switch { - return AudioSpatialFormat.None; - } - - return - Profile.Contains("Dolby Atmos", StringComparison.OrdinalIgnoreCase) ? AudioSpatialFormat.DolbyAtmos : - Profile.Contains("DTS:X", StringComparison.OrdinalIgnoreCase) ? AudioSpatialFormat.DTSX : - AudioSpatialFormat.None; + 1 => title + " (HDR10)", + 2 => title + " (SDR)", + 4 => title + " (HLG)", + 6 => title + " (HDR10)", // Technically means Blu-ray, but practically always HDR10 + _ => title, + }; } + + return null; } + } - public string LocalizedUndefined { get; set; } - - public string LocalizedDefault { get; set; } - - public string LocalizedForced { get; set; } - - public string LocalizedExternal { get; set; } - - public string LocalizedHearingImpaired { get; set; } - - public string LocalizedLanguage { get; set; } - - public string DisplayTitle + /// + /// Gets the audio spatial format. + /// + /// The audio spatial format. + [DefaultValue(AudioSpatialFormat.None)] + public AudioSpatialFormat AudioSpatialFormat + { + get { - get + if (this.Type != MediaStreamType.Audio || string.IsNullOrEmpty(this.Profile)) { - switch (Type) - { - case MediaStreamType.Audio: + return AudioSpatialFormat.None; + } + + return + this.Profile.Contains("Dolby Atmos", StringComparison.OrdinalIgnoreCase) ? AudioSpatialFormat.DolbyAtmos : + this.Profile.Contains("DTS:X", StringComparison.OrdinalIgnoreCase) ? AudioSpatialFormat.DTSX : + AudioSpatialFormat.None; + } + } + + /// + /// Gets or sets the localized text for undefined language. + /// + /// The localized text for undefined language. + public string LocalizedUndefined { get; set; } + + /// + /// Gets or sets the localized text for default stream indicator. + /// + /// The localized text for default stream indicator. + public string LocalizedDefault { get; set; } + + /// + /// Gets or sets the localized text for forced stream indicator. + /// + /// The localized text for forced stream indicator. + public string LocalizedForced { get; set; } + + /// + /// Gets or sets the localized text for external stream indicator. + /// + /// The localized text for external stream indicator. + public string LocalizedExternal { get; set; } + + /// + /// Gets or sets the localized text for hearing impaired indicator. + /// + /// The localized text for hearing impaired indicator. + public string LocalizedHearingImpaired { get; set; } + + /// + /// Gets or sets the localized language name. + /// + /// The localized language name. + public string LocalizedLanguage { get; set; } + + /// + /// Gets the display title for the media stream. + /// + /// The display title. + public string DisplayTitle + { + get + { + switch (this.Type) + { + case MediaStreamType.Audio: { var attributes = new List(); // Do not display the language code in display titles if unset or set to a special code. Show it in all other cases (possibly expanded). - if (!string.IsNullOrEmpty(Language) && !_specialCodes.Contains(Language, StringComparison.OrdinalIgnoreCase)) + if (!string.IsNullOrEmpty(this.Language) && !SpecialCodes.Contains(this.Language, StringComparison.OrdinalIgnoreCase)) { // Use pre-resolved localized language name, falling back to raw language code. - attributes.Add(StringHelper.FirstToUpper(LocalizedLanguage ?? Language)); + attributes.Add(StringHelper.FirstToUpper(this.LocalizedLanguage ?? this.Language)); } - if (!string.IsNullOrEmpty(Profile) && !string.Equals(Profile, "lc", StringComparison.OrdinalIgnoreCase)) + if (!string.IsNullOrEmpty(this.Profile) && !string.Equals(this.Profile, "lc", StringComparison.OrdinalIgnoreCase)) { - attributes.Add(Profile); + attributes.Add(this.Profile); } - else if (!string.IsNullOrEmpty(Codec)) + else if (!string.IsNullOrEmpty(this.Codec)) { - attributes.Add(AudioCodec.GetFriendlyName(Codec)); + attributes.Add(AudioCodec.GetFriendlyName(this.Codec)); } - if (!string.IsNullOrEmpty(ChannelLayout)) + if (!string.IsNullOrEmpty(this.ChannelLayout)) { - attributes.Add(StringHelper.FirstToUpper(ChannelLayout)); + attributes.Add(StringHelper.FirstToUpper(this.ChannelLayout)); } - else if (Channels.HasValue) + else if (this.Channels.HasValue) { - attributes.Add(Channels.Value.ToString(CultureInfo.InvariantCulture) + " ch"); + attributes.Add(this.Channels.Value.ToString(CultureInfo.InvariantCulture) + " ch"); } - if (IsDefault) + if (this.IsDefault) { - attributes.Add(string.IsNullOrEmpty(LocalizedDefault) ? "Default" : LocalizedDefault); + attributes.Add(string.IsNullOrEmpty(this.LocalizedDefault) ? "Default" : this.LocalizedDefault); } - if (IsExternal) + if (this.IsExternal) { - attributes.Add(string.IsNullOrEmpty(LocalizedExternal) ? "External" : LocalizedExternal); + attributes.Add(string.IsNullOrEmpty(this.LocalizedExternal) ? "External" : this.LocalizedExternal); } - if (!string.IsNullOrEmpty(Title)) + if (!string.IsNullOrEmpty(this.Title)) { - var result = new StringBuilder(Title); + var result = new StringBuilder(this.Title); foreach (var tag in attributes) { // Keep Tags that are not already in Title. - if (!Title.Contains(tag, StringComparison.OrdinalIgnoreCase)) + if (!this.Title.Contains(tag, StringComparison.OrdinalIgnoreCase)) { result.Append(" - ").Append(tag); } @@ -329,38 +367,38 @@ namespace MediaBrowser.Model.Entities return string.Join(" - ", attributes); } - case MediaStreamType.Video: + case MediaStreamType.Video: { var attributes = new List(); - var resolutionText = GetResolutionText(); + var resolutionText = this.GetResolutionText(); if (!string.IsNullOrEmpty(resolutionText)) { attributes.Add(resolutionText); } - if (!string.IsNullOrEmpty(Codec)) + if (!string.IsNullOrEmpty(this.Codec)) { - attributes.Add(Codec.ToUpperInvariant()); + attributes.Add(this.Codec.ToUpperInvariant()); } - if (VideoDoViTitle is not null) + if (this.VideoDoViTitle is not null) { - attributes.Add(VideoDoViTitle); + attributes.Add(this.VideoDoViTitle); } - else if (VideoRange != VideoRange.Unknown) + else if (this.VideoRange != VideoRange.Unknown) { - attributes.Add(VideoRange.ToString()); + attributes.Add(this.VideoRange.ToString()); } - if (!string.IsNullOrEmpty(Title)) + if (!string.IsNullOrEmpty(this.Title)) { - var result = new StringBuilder(Title); + var result = new StringBuilder(this.Title); foreach (var tag in attributes) { // Keep Tags that are not already in Title. - if (!Title.Contains(tag, StringComparison.OrdinalIgnoreCase)) + if (!this.Title.Contains(tag, StringComparison.OrdinalIgnoreCase)) { result.Append(" - ").Append(tag); } @@ -372,52 +410,52 @@ namespace MediaBrowser.Model.Entities return string.Join(' ', attributes); } - case MediaStreamType.Subtitle: + case MediaStreamType.Subtitle: { var attributes = new List(); - if (!string.IsNullOrEmpty(Language)) + if (!string.IsNullOrEmpty(this.Language)) { // Use pre-resolved localized language name, falling back to raw language code. - attributes.Add(StringHelper.FirstToUpper(LocalizedLanguage ?? Language)); + attributes.Add(StringHelper.FirstToUpper(this.LocalizedLanguage ?? this.Language)); } else { - attributes.Add(string.IsNullOrEmpty(LocalizedUndefined) ? "Und" : LocalizedUndefined); + attributes.Add(string.IsNullOrEmpty(this.LocalizedUndefined) ? "Und" : this.LocalizedUndefined); } - if (IsHearingImpaired == true) + if (this.IsHearingImpaired == true) { - attributes.Add(string.IsNullOrEmpty(LocalizedHearingImpaired) ? "Hearing Impaired" : LocalizedHearingImpaired); + attributes.Add(string.IsNullOrEmpty(this.LocalizedHearingImpaired) ? "Hearing Impaired" : this.LocalizedHearingImpaired); } - if (IsDefault) + if (this.IsDefault) { - attributes.Add(string.IsNullOrEmpty(LocalizedDefault) ? "Default" : LocalizedDefault); + attributes.Add(string.IsNullOrEmpty(this.LocalizedDefault) ? "Default" : this.LocalizedDefault); } - if (IsForced) + if (this.IsForced) { - attributes.Add(string.IsNullOrEmpty(LocalizedForced) ? "Forced" : LocalizedForced); + attributes.Add(string.IsNullOrEmpty(this.LocalizedForced) ? "Forced" : this.LocalizedForced); } - if (!string.IsNullOrEmpty(Codec)) + if (!string.IsNullOrEmpty(this.Codec)) { - attributes.Add(Codec.ToUpperInvariant()); + attributes.Add(this.Codec.ToUpperInvariant()); } - if (IsExternal) + if (this.IsExternal) { - attributes.Add(string.IsNullOrEmpty(LocalizedExternal) ? "External" : LocalizedExternal); + attributes.Add(string.IsNullOrEmpty(this.LocalizedExternal) ? "External" : this.LocalizedExternal); } - if (!string.IsNullOrEmpty(Title)) + if (!string.IsNullOrEmpty(this.Title)) { - var result = new StringBuilder(Title); + var result = new StringBuilder(this.Title); foreach (var tag in attributes) { // Keep Tags that are not already in Title. - if (!Title.Contains(tag, StringComparison.OrdinalIgnoreCase)) + if (!this.Title.Contains(tag, StringComparison.OrdinalIgnoreCase)) { result.Append(" - ").Append(tag); } @@ -429,416 +467,466 @@ namespace MediaBrowser.Model.Entities return string.Join(" - ", attributes); } - default: - return null; - } + default: + return null; } } - - public string NalLengthSize { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is interlaced. - /// - /// true if this instance is interlaced; otherwise, false. - public bool IsInterlaced { get; set; } - - public bool? IsAVC { get; set; } - - /// - /// Gets or sets the channel layout. - /// - /// The channel layout. - public string ChannelLayout { get; set; } - - /// - /// Gets or sets the bit rate. - /// - /// The bit rate. - public int? BitRate { get; set; } - - /// - /// Gets or sets the bit depth. - /// - /// The bit depth. - public int? BitDepth { get; set; } - - /// - /// Gets or sets the reference frames. - /// - /// The reference frames. - public int? RefFrames { get; set; } - - /// - /// Gets or sets the length of the packet. - /// - /// The length of the packet. - public int? PacketLength { get; set; } - - /// - /// Gets or sets the channels. - /// - /// The channels. - public int? Channels { get; set; } - - /// - /// Gets or sets the sample rate. - /// - /// The sample rate. - public int? SampleRate { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is default. - /// - /// true if this instance is default; otherwise, false. - public bool IsDefault { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is forced. - /// - /// true if this instance is forced; otherwise, false. - public bool IsForced { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is for the hearing impaired. - /// - /// true if this instance is for the hearing impaired; otherwise, false. - public bool IsHearingImpaired { get; set; } - - /// - /// Gets or sets the height. - /// - /// The height. - public int? Height { get; set; } - - /// - /// Gets or sets the width. - /// - /// The width. - public int? Width { get; set; } - - /// - /// Gets or sets the average frame rate. - /// - /// The average frame rate. - public float? AverageFrameRate { get; set; } - - /// - /// Gets or sets the real frame rate. - /// - /// The real frame rate. - public float? RealFrameRate { get; set; } - - /// - /// Gets the framerate used as reference. - /// Prefer AverageFrameRate, if that is null or an unrealistic value - /// then fallback to RealFrameRate. - /// - /// The reference frame rate. - public float? ReferenceFrameRate - { - get - { - // In some cases AverageFrameRate for videos will be read as 1000fps even if it is not. - // This is probably due to a library compatibility issue. - // See https://github.com/jellyfin/jellyfin/pull/12603#discussion_r1748044018 for more info. - return AverageFrameRate < 1000 ? AverageFrameRate : RealFrameRate; - } - } - - /// - /// Gets or sets the profile. - /// - /// The profile. - public string Profile { get; set; } - - /// - /// Gets or sets the type. - /// - /// The type. - public MediaStreamType Type { get; set; } - - /// - /// Gets or sets the aspect ratio. - /// - /// The aspect ratio. - public string AspectRatio { get; set; } - - /// - /// Gets or sets the index. - /// - /// The index. - public int Index { get; set; } - - /// - /// Gets or sets the score. - /// - /// The score. - public int? Score { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is external. - /// - /// true if this instance is external; otherwise, false. - public bool IsExternal { get; set; } - - /// - /// Gets or sets the method. - /// - /// The method. - public SubtitleDeliveryMethod? DeliveryMethod { get; set; } - - /// - /// Gets or sets the delivery URL. - /// - /// The delivery URL. - public string DeliveryUrl { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is external URL. - /// - /// null if [is external URL] contains no value, true if [is external URL]; otherwise, false. - public bool? IsExternalUrl { get; set; } - - public bool IsTextSubtitleStream - { - get - { - if (Type != MediaStreamType.Subtitle) - { - return false; - } - - if (string.IsNullOrEmpty(Codec) && !IsExternal) - { - return false; - } - - return IsTextFormat(Codec); - } - } - - [JsonIgnore] - public bool IsPgsSubtitleStream - { - get - { - if (Type != MediaStreamType.Subtitle) - { - return false; - } - - if (string.IsNullOrEmpty(Codec) && !IsExternal) - { - return false; - } - - return IsPgsFormat(Codec); - } - } - - /// - /// Gets a value indicating whether this is a subtitle steam that is extractable by ffmpeg. - /// All text-based and pgs subtitles can be extracted. - /// - /// true if this is a extractable subtitle steam otherwise, false. - [JsonIgnore] - public bool IsExtractableSubtitleStream => IsTextSubtitleStream || IsPgsSubtitleStream; - - /// - /// Gets or sets a value indicating whether [supports external stream]. - /// - /// true if [supports external stream]; otherwise, false. - public bool SupportsExternalStream { get; set; } - - /// - /// Gets or sets the filename. - /// - /// The filename. - public string Path { get; set; } - - /// - /// Gets or sets the pixel format. - /// - /// The pixel format. - public string PixelFormat { get; set; } - - /// - /// Gets or sets the level. - /// - /// The level. - public double? Level { get; set; } - - /// - /// Gets or sets whether this instance is anamorphic. - /// - /// true if this instance is anamorphic; otherwise, false. - public bool? IsAnamorphic { get; set; } - - internal string GetResolutionText() - { - if (!Width.HasValue || !Height.HasValue) - { - return null; - } - - return Width switch - { - // 256x144 (16:9 square pixel format) - <= 256 when Height <= 144 => IsInterlaced ? "144i" : "144p", - // 426x240 (16:9 square pixel format) - <= 426 when Height <= 240 => IsInterlaced ? "240i" : "240p", - // 640x360 (16:9 square pixel format) - <= 640 when Height <= 360 => IsInterlaced ? "360i" : "360p", - // 682x384 (16:9 square pixel format) - <= 682 when Height <= 384 => IsInterlaced ? "384i" : "384p", - // 720x404 (16:9 square pixel format) - <= 720 when Height <= 404 => IsInterlaced ? "404i" : "404p", - // 854x480 (16:9 square pixel format) - <= 854 when Height <= 480 => IsInterlaced ? "480i" : "480p", - // 960x544 (16:9 square pixel format) - <= 960 when Height <= 544 => IsInterlaced ? "540i" : "540p", - // 1024x576 (16:9 square pixel format) - <= 1024 when Height <= 576 => IsInterlaced ? "576i" : "576p", - // 1280x720 - <= 1280 when Height <= 962 => IsInterlaced ? "720i" : "720p", - // 2560x1080 (FHD ultra wide 21:9) using 1440px width to accommodate WQHD - <= 2560 when Height <= 1440 => IsInterlaced ? "1080i" : "1080p", - // 4K - <= 4096 when Height <= 3072 => "4K", - // 8K - <= 8192 when Height <= 6144 => "8K", - _ => null - }; - } - - public static bool IsTextFormat(string format) - { - string codec = format ?? string.Empty; - - // microdvd and dvdsub/vobsub share the ".sub" file extension, but it's text-based. - - return codec.Contains("microdvd", StringComparison.OrdinalIgnoreCase) - || (!codec.Contains("pgs", StringComparison.OrdinalIgnoreCase) - && !codec.Contains("dvdsub", StringComparison.OrdinalIgnoreCase) - && !codec.Contains("dvbsub", StringComparison.OrdinalIgnoreCase) - && !string.Equals(codec, "sup", StringComparison.OrdinalIgnoreCase) - && !string.Equals(codec, "sub", StringComparison.OrdinalIgnoreCase)); - } - - public static bool IsPgsFormat(string format) - { - string codec = format ?? string.Empty; - - return codec.Contains("pgs", StringComparison.OrdinalIgnoreCase) - || string.Equals(codec, "sup", StringComparison.OrdinalIgnoreCase); - } - - public bool SupportsSubtitleConversionTo(string toCodec) - { - if (!IsTextSubtitleStream) - { - return false; - } - - var fromCodec = Codec; - - // Can't convert from this - if (string.Equals(fromCodec, "ass", StringComparison.OrdinalIgnoreCase)) - { - return false; - } - - if (string.Equals(fromCodec, "ssa", StringComparison.OrdinalIgnoreCase)) - { - return false; - } - - // Can't convert to this - if (string.Equals(toCodec, "ass", StringComparison.OrdinalIgnoreCase)) - { - return false; - } - - if (string.Equals(toCodec, "ssa", StringComparison.OrdinalIgnoreCase)) - { - return false; - } - - return true; - } - - public (VideoRange VideoRange, VideoRangeType VideoRangeType) GetVideoColorRange() - { - if (Type != MediaStreamType.Video) - { - return (VideoRange.Unknown, VideoRangeType.Unknown); - } - - var codecTag = CodecTag; - var dvProfile = DvProfile; - var rpuPresentFlag = RpuPresentFlag == 1; - var blPresentFlag = BlPresentFlag == 1; - var dvBlCompatId = DvBlSignalCompatibilityId; - - var isDoViProfile = dvProfile is 5 or 7 or 8 or 10; - var isDoViFlag = rpuPresentFlag && blPresentFlag && dvBlCompatId is 0 or 1 or 4 or 2 or 6; - - if ((isDoViProfile && isDoViFlag) - || string.Equals(codecTag, "dovi", StringComparison.OrdinalIgnoreCase) - || string.Equals(codecTag, "dvh1", StringComparison.OrdinalIgnoreCase) - || string.Equals(codecTag, "dvhe", StringComparison.OrdinalIgnoreCase) - || string.Equals(codecTag, "dav1", StringComparison.OrdinalIgnoreCase)) - { - var dvRangeSet = dvProfile switch - { - 5 => (VideoRange.HDR, VideoRangeType.DOVI), - 8 => dvBlCompatId switch - { - 1 => (VideoRange.HDR, VideoRangeType.DOVIWithHDR10), - 4 => (VideoRange.HDR, VideoRangeType.DOVIWithHLG), - 2 => (VideoRange.SDR, VideoRangeType.DOVIWithSDR), - // Out of Dolby Spec files should be marked as invalid - _ => (VideoRange.HDR, VideoRangeType.DOVIInvalid) - }, - 7 => (VideoRange.HDR, VideoRangeType.DOVIWithEL), - 10 => dvBlCompatId switch - { - 0 => (VideoRange.HDR, VideoRangeType.DOVI), - 1 => (VideoRange.HDR, VideoRangeType.DOVIWithHDR10), - 2 => (VideoRange.SDR, VideoRangeType.DOVIWithSDR), - 4 => (VideoRange.HDR, VideoRangeType.DOVIWithHLG), - // Out of Dolby Spec files should be marked as invalid - _ => (VideoRange.HDR, VideoRangeType.DOVIInvalid) - }, - _ => (VideoRange.SDR, VideoRangeType.SDR) - }; - - if (Hdr10PlusPresentFlag == true) - { - return dvRangeSet.Item2 switch - { - VideoRangeType.DOVIWithHDR10 => (VideoRange.HDR, VideoRangeType.DOVIWithHDR10Plus), - VideoRangeType.DOVIWithEL => (VideoRange.HDR, VideoRangeType.DOVIWithELHDR10Plus), - _ => dvRangeSet - }; - } - - return dvRangeSet; - } - - var colorTransfer = ColorTransfer; - - if (string.Equals(colorTransfer, "smpte2084", StringComparison.OrdinalIgnoreCase)) - { - return Hdr10PlusPresentFlag == true ? (VideoRange.HDR, VideoRangeType.HDR10Plus) : (VideoRange.HDR, VideoRangeType.HDR10); - } - else if (string.Equals(colorTransfer, "arib-std-b67", StringComparison.OrdinalIgnoreCase)) - { - return (VideoRange.HDR, VideoRangeType.HLG); - } - - return (VideoRange.SDR, VideoRangeType.SDR); - } + } + + /// + /// Gets or sets the NAL length size. + /// + /// The NAL length size. + public string NalLengthSize { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is interlaced. + /// + /// true if this instance is interlaced; otherwise, false. + public bool IsInterlaced { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is AVC. + /// + /// true if this instance is AVC; otherwise, false. + public bool? IsAVC { get; set; } + + /// + /// Gets or sets the channel layout. + /// + /// The channel layout. + public string ChannelLayout { get; set; } + + /// + /// Gets or sets the bit rate. + /// + /// The bit rate. + public int? BitRate { get; set; } + + /// + /// Gets or sets the bit depth. + /// + /// The bit depth. + public int? BitDepth { get; set; } + + /// + /// Gets or sets the reference frames. + /// + /// The reference frames. + public int? RefFrames { get; set; } + + /// + /// Gets or sets the length of the packet. + /// + /// The length of the packet. + public int? PacketLength { get; set; } + + /// + /// Gets or sets the channels. + /// + /// The channels. + public int? Channels { get; set; } + + /// + /// Gets or sets the sample rate. + /// + /// The sample rate. + public int? SampleRate { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is default. + /// + /// true if this instance is default; otherwise, false. + public bool IsDefault { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is forced. + /// + /// true if this instance is forced; otherwise, false. + public bool IsForced { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is for the hearing impaired. + /// + /// true if this instance is for the hearing impaired; otherwise, false. + public bool IsHearingImpaired { get; set; } + + /// + /// Gets or sets the height. + /// + /// The height. + public int? Height { get; set; } + + /// + /// Gets or sets the width. + /// + /// The width. + public int? Width { get; set; } + + /// + /// Gets or sets the average frame rate. + /// + /// The average frame rate. + public float? AverageFrameRate { get; set; } + + /// + /// Gets or sets the real frame rate. + /// + /// The real frame rate. + public float? RealFrameRate { get; set; } + + /// + /// Gets the framerate used as reference. + /// Prefer AverageFrameRate, if that is null or an unrealistic value + /// then fallback to RealFrameRate. + /// + /// The reference frame rate. + public float? ReferenceFrameRate + { + get + { + // In some cases AverageFrameRate for videos will be read as 1000fps even if it is not. + // This is probably due to a library compatibility issue. + // See https://github.com/jellyfin/jellyfin/pull/12603#discussion_r1748044018 for more info. + return this.AverageFrameRate < 1000 ? this.AverageFrameRate : this.RealFrameRate; + } + } + + /// + /// Gets or sets the profile. + /// + /// The profile. + public string Profile { get; set; } + + /// + /// Gets or sets the type. + /// + /// The type. + public MediaStreamType Type { get; set; } + + /// + /// Gets or sets the aspect ratio. + /// + /// The aspect ratio. + public string AspectRatio { get; set; } + + /// + /// Gets or sets the index. + /// + /// The index. + public int Index { get; set; } + + /// + /// Gets or sets the score. + /// + /// The score. + public int? Score { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is external. + /// + /// true if this instance is external; otherwise, false. + public bool IsExternal { get; set; } + + /// + /// Gets or sets the method. + /// + /// The method. + public SubtitleDeliveryMethod? DeliveryMethod { get; set; } + + /// + /// Gets or sets the delivery URL. + /// + /// The delivery URL. + public string DeliveryUrl { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is external URL. + /// + /// null if [is external URL] contains no value, true if [is external URL]; otherwise, false. + public bool? IsExternalUrl { get; set; } + + /// + /// Gets a value indicating whether this instance is a text subtitle stream. + /// + /// true if this instance is a text subtitle stream; otherwise, false. + public bool IsTextSubtitleStream + { + get + { + if (this.Type != MediaStreamType.Subtitle) + { + return false; + } + + if (string.IsNullOrEmpty(this.Codec) && !this.IsExternal) + { + return false; + } + + return IsTextFormat(this.Codec); + } + } + + /// + /// Gets a value indicating whether this instance is a PGS subtitle stream. + /// + /// true if this instance is a PGS subtitle stream; otherwise, false. + [JsonIgnore] + public bool IsPgsSubtitleStream + { + get + { + if (this.Type != MediaStreamType.Subtitle) + { + return false; + } + + if (string.IsNullOrEmpty(this.Codec) && !this.IsExternal) + { + return false; + } + + return IsPgsFormat(this.Codec); + } + } + + /// + /// Gets a value indicating whether this is a subtitle steam that is extractable by ffmpeg. + /// All text-based and pgs subtitles can be extracted. + /// + /// true if this is a extractable subtitle steam otherwise, false. + [JsonIgnore] + public bool IsExtractableSubtitleStream => this.IsTextSubtitleStream || this.IsPgsSubtitleStream; + + /// + /// Gets or sets a value indicating whether [supports external stream]. + /// + /// true if [supports external stream]; otherwise, false. + public bool SupportsExternalStream { get; set; } + + /// + /// Gets or sets the filename. + /// + /// The filename. + public string Path { get; set; } + + /// + /// Gets or sets the pixel format. + /// + /// The pixel format. + public string PixelFormat { get; set; } + + /// + /// Gets or sets the level. + /// + /// The level. + public double? Level { get; set; } + + /// + /// Gets or sets whether this instance is anamorphic. + /// + /// true if this instance is anamorphic; otherwise, false. + public bool? IsAnamorphic { get; set; } + + /// + /// Determines whether the specified format is a text-based subtitle format. + /// + /// The subtitle format/codec to check. + /// true if the format is text-based; otherwise, false. + public static bool IsTextFormat(string format) + { + string codec = format ?? string.Empty; + + // microdvd and dvdsub/vobsub share the ".sub" file extension, but it's text-based. + return codec.Contains("microdvd", StringComparison.OrdinalIgnoreCase) + || (!codec.Contains("pgs", StringComparison.OrdinalIgnoreCase) + && !codec.Contains("dvdsub", StringComparison.OrdinalIgnoreCase) + && !codec.Contains("dvbsub", StringComparison.OrdinalIgnoreCase) + && !string.Equals(codec, "sup", StringComparison.OrdinalIgnoreCase) + && !string.Equals(codec, "sub", StringComparison.OrdinalIgnoreCase)); + } + + /// + /// Determines whether the specified format is a PGS (Presentation Graphic Stream) subtitle format. + /// + /// The subtitle format/codec to check. + /// true if the format is PGS; otherwise, false. + public static bool IsPgsFormat(string format) + { + string codec = format ?? string.Empty; + + return codec.Contains("pgs", StringComparison.OrdinalIgnoreCase) + || string.Equals(codec, "sup", StringComparison.OrdinalIgnoreCase); + } + + /// + /// Determines whether this subtitle stream can be converted to the specified codec. + /// + /// The target codec to convert to. + /// true if the subtitle stream can be converted to the specified codec; otherwise, false. + public bool SupportsSubtitleConversionTo(string toCodec) + { + if (!this.IsTextSubtitleStream) + { + return false; + } + + var fromCodec = this.Codec; + + // Can't convert from this + if (string.Equals(fromCodec, "ass", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + + if (string.Equals(fromCodec, "ssa", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + + // Can't convert to this + if (string.Equals(toCodec, "ass", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + + if (string.Equals(toCodec, "ssa", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + + return true; + } + + /// + /// Gets the video color range information based on codec tags, Dolby Vision properties, and color transfer characteristics. + /// + /// A tuple containing the video range (SDR/HDR) and the specific video range type. + public (VideoRange VideoRange, VideoRangeType VideoRangeType) GetVideoColorRange() + { + if (this.Type != MediaStreamType.Video) + { + return (VideoRange.Unknown, VideoRangeType.Unknown); + } + + var codecTag = this.CodecTag; + var dvProfile = this.DvProfile; + var rpuPresentFlag = this.RpuPresentFlag == 1; + var blPresentFlag = this.BlPresentFlag == 1; + var dvBlCompatId = this.DvBlSignalCompatibilityId; + + var isDoViProfile = dvProfile is 5 or 7 or 8 or 10; + var isDoViFlag = rpuPresentFlag && blPresentFlag && dvBlCompatId is 0 or 1 or 4 or 2 or 6; + + if ((isDoViProfile && isDoViFlag) + || string.Equals(codecTag, "dovi", StringComparison.OrdinalIgnoreCase) + || string.Equals(codecTag, "dvh1", StringComparison.OrdinalIgnoreCase) + || string.Equals(codecTag, "dvhe", StringComparison.OrdinalIgnoreCase) + || string.Equals(codecTag, "dav1", StringComparison.OrdinalIgnoreCase)) + { + var dvRangeSet = dvProfile switch + { + 5 => (VideoRange.HDR, VideoRangeType.DOVI), + 8 => dvBlCompatId switch + { + 1 => (VideoRange.HDR, VideoRangeType.DOVIWithHDR10), + 4 => (VideoRange.HDR, VideoRangeType.DOVIWithHLG), + 2 => (VideoRange.SDR, VideoRangeType.DOVIWithSDR), + + // Out of Dolby Spec files should be marked as invalid + _ => (VideoRange.HDR, VideoRangeType.DOVIInvalid), + }, + 7 => (VideoRange.HDR, VideoRangeType.DOVIWithEL), + 10 => dvBlCompatId switch + { + 0 => (VideoRange.HDR, VideoRangeType.DOVI), + 1 => (VideoRange.HDR, VideoRangeType.DOVIWithHDR10), + 2 => (VideoRange.SDR, VideoRangeType.DOVIWithSDR), + 4 => (VideoRange.HDR, VideoRangeType.DOVIWithHLG), + + // Out of Dolby Spec files should be marked as invalid + _ => (VideoRange.HDR, VideoRangeType.DOVIInvalid), + }, + _ => (VideoRange.SDR, VideoRangeType.SDR), + }; + + if (this.Hdr10PlusPresentFlag == true) + { + return dvRangeSet.Item2 switch + { + VideoRangeType.DOVIWithHDR10 => (VideoRange.HDR, VideoRangeType.DOVIWithHDR10Plus), + VideoRangeType.DOVIWithEL => (VideoRange.HDR, VideoRangeType.DOVIWithELHDR10Plus), + _ => dvRangeSet, + }; + } + + return dvRangeSet; + } + + var colorTransfer = this.ColorTransfer; + + if (string.Equals(colorTransfer, "smpte2084", StringComparison.OrdinalIgnoreCase)) + { + return this.Hdr10PlusPresentFlag == true ? (VideoRange.HDR, VideoRangeType.HDR10Plus) : (VideoRange.HDR, VideoRangeType.HDR10); + } + else if (string.Equals(colorTransfer, "arib-std-b67", StringComparison.OrdinalIgnoreCase)) + { + return (VideoRange.HDR, VideoRangeType.HLG); + } + + return (VideoRange.SDR, VideoRangeType.SDR); + } + + /// + /// Gets the resolution text based on width and height. + /// + /// The resolution text (e.g., "1080p", "4K") or null if width/height are not available. + internal string GetResolutionText() + { + if (!this.Width.HasValue || !this.Height.HasValue) + { + return null; + } + + return this.Width switch + { + // 256x144 (16:9 square pixel format) + <= 256 when this.Height <= 144 => this.IsInterlaced ? "144i" : "144p", + + // 426x240 (16:9 square pixel format) + <= 426 when this.Height <= 240 => this.IsInterlaced ? "240i" : "240p", + + // 640x360 (16:9 square pixel format) + <= 640 when this.Height <= 360 => this.IsInterlaced ? "360i" : "360p", + + // 682x384 (16:9 square pixel format) + <= 682 when this.Height <= 384 => this.IsInterlaced ? "384i" : "384p", + + // 720x404 (16:9 square pixel format) + <= 720 when this.Height <= 404 => this.IsInterlaced ? "404i" : "404p", + + // 854x480 (16:9 square pixel format) + <= 854 when this.Height <= 480 => this.IsInterlaced ? "480i" : "480p", + + // 960x544 (16:9 square pixel format) + <= 960 when this.Height <= 544 => this.IsInterlaced ? "540i" : "540p", + + // 1024x576 (16:9 square pixel format) + <= 1024 when this.Height <= 576 => this.IsInterlaced ? "576i" : "576p", + + // 1280x720 + <= 1280 when this.Height <= 962 => this.IsInterlaced ? "720i" : "720p", + + // 2560x1080 (FHD ultra wide 21:9) using 1440px width to accommodate WQHD + <= 2560 when this.Height <= 1440 => this.IsInterlaced ? "1080i" : "1080p", + + // 4K + <= 4096 when this.Height <= 3072 => "4K", + + // 8K + <= 8192 when this.Height <= 6144 => "8K", + _ => null, + }; } } diff --git a/MediaBrowser.Model/Entities/MediaStreamType.cs b/MediaBrowser.Model/Entities/MediaStreamType.cs index d448780e..485ae42a 100644 --- a/MediaBrowser.Model/Entities/MediaStreamType.cs +++ b/MediaBrowser.Model/Entities/MediaStreamType.cs @@ -2,41 +2,39 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Entities -{ - /// - /// Enum MediaStreamType. - /// - public enum MediaStreamType - { - /// - /// The audio. - /// - Audio, +namespace MediaBrowser.Model.Entities; + /// + /// Enum MediaStreamType. + /// + public enum MediaStreamType + { + /// + /// The audio. + /// + Audio, - /// - /// The video. - /// - Video, + /// + /// The video. + /// + Video, - /// - /// The subtitle. - /// - Subtitle, + /// + /// The subtitle. + /// + Subtitle, - /// - /// The embedded image. - /// - EmbeddedImage, + /// + /// The embedded image. + /// + EmbeddedImage, - /// - /// The data. - /// - Data, + /// + /// The data. + /// + Data, - /// - /// The lyric. - /// - Lyric - } -} + /// + /// The lyric. + /// + Lyric + } diff --git a/MediaBrowser.Model/Entities/MediaUrl.cs b/MediaBrowser.Model/Entities/MediaUrl.cs index 8412c4d0..3fa287f9 100644 --- a/MediaBrowser.Model/Entities/MediaUrl.cs +++ b/MediaBrowser.Model/Entities/MediaUrl.cs @@ -5,12 +5,10 @@ #nullable disable #pragma warning disable CS1591 -namespace MediaBrowser.Model.Entities -{ - public class MediaUrl - { - public string Url { get; set; } +namespace MediaBrowser.Model.Entities; + public class MediaUrl + { + public string Url { get; set; } - public string Name { get; set; } - } -} + public string Name { get; set; } + } diff --git a/MediaBrowser.Model/Entities/MetadataField.cs b/MediaBrowser.Model/Entities/MetadataField.cs index 7c808eff..c1d609c1 100644 --- a/MediaBrowser.Model/Entities/MetadataField.cs +++ b/MediaBrowser.Model/Entities/MetadataField.cs @@ -2,56 +2,54 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Entities -{ - /// - /// Enum MetadataFields. - /// - public enum MetadataField - { - /// - /// The cast. - /// - Cast, +namespace MediaBrowser.Model.Entities; + /// + /// Enum MetadataFields. + /// + public enum MetadataField + { + /// + /// The cast. + /// + Cast, - /// - /// The genres. - /// - Genres, + /// + /// The genres. + /// + Genres, - /// - /// The production locations. - /// - ProductionLocations, + /// + /// The production locations. + /// + ProductionLocations, - /// - /// The studios. - /// - Studios, + /// + /// The studios. + /// + Studios, - /// - /// The tags. - /// - Tags, + /// + /// The tags. + /// + Tags, - /// - /// The name. - /// - Name, + /// + /// The name. + /// + Name, - /// - /// The overview. - /// - Overview, + /// + /// The overview. + /// + Overview, - /// - /// The runtime. - /// - Runtime, + /// + /// The runtime. + /// + Runtime, - /// - /// The official rating. - /// - OfficialRating - } -} + /// + /// The official rating. + /// + OfficialRating + } diff --git a/MediaBrowser.Model/Entities/MetadataProvider.cs b/MediaBrowser.Model/Entities/MetadataProvider.cs index a72d2373..5c3c207b 100644 --- a/MediaBrowser.Model/Entities/MetadataProvider.cs +++ b/MediaBrowser.Model/Entities/MetadataProvider.cs @@ -2,97 +2,95 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Entities -{ - /// - /// Enum MetadataProviders. - /// - public enum MetadataProvider - { - /// - /// This metadata provider is for users and/or plugins to override the - /// default merging behaviour. - /// - Custom = 0, +namespace MediaBrowser.Model.Entities; + /// + /// Enum MetadataProviders. + /// + public enum MetadataProvider + { + /// + /// This metadata provider is for users and/or plugins to override the + /// default merging behaviour. + /// + Custom = 0, - /// - /// The IMDb provider. - /// - Imdb = 2, + /// + /// The IMDb provider. + /// + Imdb = 2, - /// - /// The TMDb provider. - /// - Tmdb = 3, + /// + /// The TMDb provider. + /// + Tmdb = 3, - /// - /// The TVDb provider. - /// - Tvdb = 4, + /// + /// The TVDb provider. + /// + Tvdb = 4, - /// - /// The tvcom provider. - /// - Tvcom = 5, + /// + /// The tvcom provider. + /// + Tvcom = 5, - /// - /// TMDb collection provider. - /// - TmdbCollection = 7, + /// + /// TMDb collection provider. + /// + TmdbCollection = 7, - /// - /// The MusicBrainz album provider. - /// - MusicBrainzAlbum = 8, + /// + /// The MusicBrainz album provider. + /// + MusicBrainzAlbum = 8, - /// - /// The MusicBrainz album artist provider. - /// - MusicBrainzAlbumArtist = 9, + /// + /// The MusicBrainz album artist provider. + /// + MusicBrainzAlbumArtist = 9, - /// - /// The MusicBrainz artist provider. - /// - MusicBrainzArtist = 10, + /// + /// The MusicBrainz artist provider. + /// + MusicBrainzArtist = 10, - /// - /// The MusicBrainz release group provider. - /// - MusicBrainzReleaseGroup = 11, + /// + /// The MusicBrainz release group provider. + /// + MusicBrainzReleaseGroup = 11, - /// - /// The Zap2It provider. - /// - Zap2It = 12, + /// + /// The Zap2It provider. + /// + Zap2It = 12, - /// - /// The TvRage provider. - /// - TvRage = 15, + /// + /// The TvRage provider. + /// + TvRage = 15, - /// - /// The AudioDb artist provider. - /// - AudioDbArtist = 16, + /// + /// The AudioDb artist provider. + /// + AudioDbArtist = 16, - /// - /// The AudioDb collection provider. - /// - AudioDbAlbum = 17, + /// + /// The AudioDb collection provider. + /// + AudioDbAlbum = 17, - /// - /// The MusicBrainz track provider. - /// - MusicBrainzTrack = 18, + /// + /// The MusicBrainz track provider. + /// + MusicBrainzTrack = 18, - /// - /// The TvMaze provider. - /// - TvMaze = 19, + /// + /// The TvMaze provider. + /// + TvMaze = 19, - /// - /// The MusicBrainz recording provider. - /// - MusicBrainzRecording = 20, - } -} + /// + /// The MusicBrainz recording provider. + /// + MusicBrainzRecording = 20, + } diff --git a/MediaBrowser.Model/Entities/ParentalRatingEntry.cs b/MediaBrowser.Model/Entities/ParentalRatingEntry.cs index 84deec25..c6043b2d 100644 --- a/MediaBrowser.Model/Entities/ParentalRatingEntry.cs +++ b/MediaBrowser.Model/Entities/ParentalRatingEntry.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Text.Json.Serialization; - namespace MediaBrowser.Model.Entities; +using global::System.Collections.Generic; +using global::System.Text.Json.Serialization; + /// /// A class representing an parental rating entry. /// diff --git a/MediaBrowser.Model/Entities/ParentalRatingScore.cs b/MediaBrowser.Model/Entities/ParentalRatingScore.cs index 89081f21..62d69a36 100644 --- a/MediaBrowser.Model/Entities/ParentalRatingScore.cs +++ b/MediaBrowser.Model/Entities/ParentalRatingScore.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace MediaBrowser.Model.Entities; +using global::System.Text.Json.Serialization; + /// /// A class representing an parental rating score. /// diff --git a/MediaBrowser.Model/Entities/ParentalRatingSystem.cs b/MediaBrowser.Model/Entities/ParentalRatingSystem.cs index 67a1bf38..6135280a 100644 --- a/MediaBrowser.Model/Entities/ParentalRatingSystem.cs +++ b/MediaBrowser.Model/Entities/ParentalRatingSystem.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Text.Json.Serialization; - namespace MediaBrowser.Model.Entities; +using global::System.Collections.Generic; +using global::System.Text.Json.Serialization; + /// /// A class representing a parental rating system. /// diff --git a/MediaBrowser.Model/Entities/PersonType.cs b/MediaBrowser.Model/Entities/PersonType.cs index 0d47dd57..7765001d 100644 --- a/MediaBrowser.Model/Entities/PersonType.cs +++ b/MediaBrowser.Model/Entities/PersonType.cs @@ -2,71 +2,69 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Entities -{ - /// - /// Types of persons. - /// - public static class PersonType - { - /// - /// A person whose profession is acting on the stage, in films, or on television. - /// - public const string Actor = "Actor"; +namespace MediaBrowser.Model.Entities; + /// + /// Types of persons. + /// + public static class PersonType + { + /// + /// A person whose profession is acting on the stage, in films, or on television. + /// + public const string Actor = "Actor"; - /// - /// A person who supervises the actors and other staff in a film, play, or similar production. - /// - public const string Director = "Director"; + /// + /// A person who supervises the actors and other staff in a film, play, or similar production. + /// + public const string Director = "Director"; - /// - /// A person who writes music, especially as a professional occupation. - /// - public const string Composer = "Composer"; + /// + /// A person who writes music, especially as a professional occupation. + /// + public const string Composer = "Composer"; - /// - /// A writer of a book, article, or document. Can also be used as a generic term for music writer if there is a lack of specificity. - /// - public const string Writer = "Writer"; + /// + /// A writer of a book, article, or document. Can also be used as a generic term for music writer if there is a lack of specificity. + /// + public const string Writer = "Writer"; - /// - /// A well-known actor or other performer who appears in a work in which they do not have a regular role. - /// - public const string GuestStar = "GuestStar"; + /// + /// A well-known actor or other performer who appears in a work in which they do not have a regular role. + /// + public const string GuestStar = "GuestStar"; - /// - /// A person responsible for the financial and managerial aspects of the making of a film or broadcast or for staging a play, opera, etc. - /// - public const string Producer = "Producer"; + /// + /// A person responsible for the financial and managerial aspects of the making of a film or broadcast or for staging a play, opera, etc. + /// + public const string Producer = "Producer"; - /// - /// A person who directs the performance of an orchestra or choir. - /// - public const string Conductor = "Conductor"; + /// + /// A person who directs the performance of an orchestra or choir. + /// + public const string Conductor = "Conductor"; - /// - /// A person who writes the words to a song or musical. - /// - public const string Lyricist = "Lyricist"; + /// + /// A person who writes the words to a song or musical. + /// + public const string Lyricist = "Lyricist"; - /// - /// A person who adapts a musical composition for performance. - /// - public const string Arranger = "Arranger"; + /// + /// A person who adapts a musical composition for performance. + /// + public const string Arranger = "Arranger"; - /// - /// An audio engineer who performed a general engineering role. - /// - public const string Engineer = "Engineer"; + /// + /// An audio engineer who performed a general engineering role. + /// + public const string Engineer = "Engineer"; - /// - /// An engineer responsible for using a mixing console to mix a recorded track into a single piece of music suitable for release. - /// - public const string Mixer = "Mixer"; + /// + /// An engineer responsible for using a mixing console to mix a recorded track into a single piece of music suitable for release. + /// + public const string Mixer = "Mixer"; - /// - /// A person who remixed a recording by taking one or more other tracks, substantially altering them and mixing them together with other material. - /// - public const string Remixer = "Remixer"; - } -} + /// + /// A person who remixed a recording by taking one or more other tracks, substantially altering them and mixing them together with other material. + /// + public const string Remixer = "Remixer"; + } diff --git a/MediaBrowser.Model/Entities/PlaylistUserPermissions.cs b/MediaBrowser.Model/Entities/PlaylistUserPermissions.cs index 464e230a..55ef87b8 100644 --- a/MediaBrowser.Model/Entities/PlaylistUserPermissions.cs +++ b/MediaBrowser.Model/Entities/PlaylistUserPermissions.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace MediaBrowser.Model.Entities; +using global::System; + /// /// Class to hold data on user permissions for playlists. /// diff --git a/MediaBrowser.Model/Entities/ProviderIdsExtensions.cs b/MediaBrowser.Model/Entities/ProviderIdsExtensions.cs index b917a6e2..1d382b91 100644 --- a/MediaBrowser.Model/Entities/ProviderIdsExtensions.cs +++ b/MediaBrowser.Model/Entities/ProviderIdsExtensions.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Linq; - namespace MediaBrowser.Model.Entities; +using global::System; +using global::System.Collections.Generic; +using global::System.Diagnostics.CodeAnalysis; +using global::System.Linq; + /// /// Class ProviderIdsExtensions. /// @@ -60,6 +60,7 @@ public static class ProviderIdsExtensions } var foundProviderId = instance.ProviderIds.TryGetValue(name, out id); + // This occurs when searching with Identify (and possibly in other places) if (string.IsNullOrEmpty(id)) { diff --git a/MediaBrowser.Model/Entities/SeriesStatus.cs b/MediaBrowser.Model/Entities/SeriesStatus.cs index 7945a198..842e6d76 100644 --- a/MediaBrowser.Model/Entities/SeriesStatus.cs +++ b/MediaBrowser.Model/Entities/SeriesStatus.cs @@ -2,26 +2,24 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Entities -{ - /// - /// The status of a series. - /// - public enum SeriesStatus - { - /// - /// The continuing status. This indicates that a series is currently releasing. - /// - Continuing, +namespace MediaBrowser.Model.Entities; + /// + /// The status of a series. + /// + public enum SeriesStatus + { + /// + /// The continuing status. This indicates that a series is currently releasing. + /// + Continuing, - /// - /// The ended status. This indicates that a series has completed and is no longer being released. - /// - Ended, + /// + /// The ended status. This indicates that a series has completed and is no longer being released. + /// + Ended, - /// - /// The unreleased status. This indicates that a series has not been released yet. - /// - Unreleased - } -} + /// + /// The unreleased status. This indicates that a series has not been released yet. + /// + Unreleased + } diff --git a/MediaBrowser.Model/Entities/TonemappingAlgorithm.cs b/MediaBrowser.Model/Entities/TonemappingAlgorithm.cs index 78e46d4c..93ecb43e 100644 --- a/MediaBrowser.Model/Entities/TonemappingAlgorithm.cs +++ b/MediaBrowser.Model/Entities/TonemappingAlgorithm.cs @@ -49,5 +49,5 @@ public enum TonemappingAlgorithm /// /// BT2390. /// - bt2390 = 7 + bt2390 = 7, } diff --git a/MediaBrowser.Model/Entities/TonemappingMode.cs b/MediaBrowser.Model/Entities/TonemappingMode.cs index 13e4361a..6153bf57 100644 --- a/MediaBrowser.Model/Entities/TonemappingMode.cs +++ b/MediaBrowser.Model/Entities/TonemappingMode.cs @@ -34,5 +34,5 @@ public enum TonemappingMode /// /// ITP. /// - itp = 4 + itp = 4, } diff --git a/MediaBrowser.Model/Entities/TonemappingRange.cs b/MediaBrowser.Model/Entities/TonemappingRange.cs index 656b6486..bc4f2218 100644 --- a/MediaBrowser.Model/Entities/TonemappingRange.cs +++ b/MediaBrowser.Model/Entities/TonemappingRange.cs @@ -24,5 +24,5 @@ public enum TonemappingRange /// /// PC. /// - pc = 2 + pc = 2, } diff --git a/MediaBrowser.Model/Entities/TrailerType.cs b/MediaBrowser.Model/Entities/TrailerType.cs index e5ad4771..6da09984 100644 --- a/MediaBrowser.Model/Entities/TrailerType.cs +++ b/MediaBrowser.Model/Entities/TrailerType.cs @@ -4,14 +4,12 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Entities -{ - public enum TrailerType - { - ComingSoonToTheaters = 1, - ComingSoonToDvd = 2, - ComingSoonToStreaming = 3, - Archive = 4, - LocalTrailer = 5 - } -} +namespace MediaBrowser.Model.Entities; + public enum TrailerType + { + ComingSoonToTheaters = 1, + ComingSoonToDvd = 2, + ComingSoonToStreaming = 3, + Archive = 4, + LocalTrailer = 5, + } diff --git a/MediaBrowser.Model/Entities/UserDataSaveReason.cs b/MediaBrowser.Model/Entities/UserDataSaveReason.cs index 8d0de8fd..8d095fea 100644 --- a/MediaBrowser.Model/Entities/UserDataSaveReason.cs +++ b/MediaBrowser.Model/Entities/UserDataSaveReason.cs @@ -2,46 +2,44 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Entities -{ - /// - /// Enum UserDataSaveReason. - /// - public enum UserDataSaveReason - { - /// - /// The playback start. - /// - PlaybackStart = 1, +namespace MediaBrowser.Model.Entities; + /// + /// Enum UserDataSaveReason. + /// + public enum UserDataSaveReason + { + /// + /// The playback start. + /// + PlaybackStart = 1, - /// - /// The playback progress. - /// - PlaybackProgress = 2, + /// + /// The playback progress. + /// + PlaybackProgress = 2, - /// - /// The playback finished. - /// - PlaybackFinished = 3, + /// + /// The playback finished. + /// + PlaybackFinished = 3, - /// - /// The toggle played. - /// - TogglePlayed = 4, + /// + /// The toggle played. + /// + TogglePlayed = 4, - /// - /// The update user rating. - /// - UpdateUserRating = 5, + /// + /// The update user rating. + /// + UpdateUserRating = 5, - /// - /// The import. - /// - Import = 6, + /// + /// The import. + /// + Import = 6, - /// - /// API call updated item user data. - /// - UpdateUserData = 7, - } -} + /// + /// API call updated item user data. + /// + UpdateUserData = 7, + } diff --git a/MediaBrowser.Model/Entities/Video3DFormat.cs b/MediaBrowser.Model/Entities/Video3DFormat.cs index 04ce213e..850c0062 100644 --- a/MediaBrowser.Model/Entities/Video3DFormat.cs +++ b/MediaBrowser.Model/Entities/Video3DFormat.cs @@ -4,14 +4,12 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Entities -{ - public enum Video3DFormat - { - HalfSideBySide, - FullSideBySide, - FullTopAndBottom, - HalfTopAndBottom, - MVC - } -} +namespace MediaBrowser.Model.Entities; + public enum Video3DFormat + { + HalfSideBySide, + FullSideBySide, + FullTopAndBottom, + HalfTopAndBottom, + MVC + } diff --git a/MediaBrowser.Model/Entities/VideoType.cs b/MediaBrowser.Model/Entities/VideoType.cs index 49647cd3..6cbeb34d 100644 --- a/MediaBrowser.Model/Entities/VideoType.cs +++ b/MediaBrowser.Model/Entities/VideoType.cs @@ -2,31 +2,29 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Entities -{ - /// - /// Enum VideoType. - /// - public enum VideoType - { - /// - /// The video file. - /// - VideoFile, +namespace MediaBrowser.Model.Entities; + /// + /// Enum VideoType. + /// + public enum VideoType + { + /// + /// The video file. + /// + VideoFile, - /// - /// The iso. - /// - Iso, + /// + /// The iso. + /// + Iso, - /// - /// The DVD. - /// - Dvd, + /// + /// The DVD. + /// + Dvd, - /// - /// The blu ray. - /// - BluRay - } -} + /// + /// The blu ray. + /// + BluRay + } diff --git a/MediaBrowser.Model/Entities/VirtualFolderInfo.cs b/MediaBrowser.Model/Entities/VirtualFolderInfo.cs index 2367c8bf..04de0693 100644 --- a/MediaBrowser.Model/Entities/VirtualFolderInfo.cs +++ b/MediaBrowser.Model/Entities/VirtualFolderInfo.cs @@ -5,58 +5,56 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; using MediaBrowser.Model.Configuration; -namespace MediaBrowser.Model.Entities -{ - /// - /// Used to hold information about a user's list of configured virtual folders. - /// - public class VirtualFolderInfo - { - /// - /// Initializes a new instance of the class. - /// - public VirtualFolderInfo() - { - Locations = Array.Empty(); - } +namespace MediaBrowser.Model.Entities; + /// + /// Used to hold information about a user's list of configured virtual folders. + /// + public class VirtualFolderInfo + { + /// + /// Initializes a new instance of the class. + /// + public VirtualFolderInfo() + { + Locations = Array.Empty(); + } - /// - /// Gets or sets the name. - /// - /// The name. - public string Name { get; set; } + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } - /// - /// Gets or sets the locations. - /// - /// The locations. - public string[] Locations { get; set; } + /// + /// Gets or sets the locations. + /// + /// The locations. + public string[] Locations { get; set; } - /// - /// Gets or sets the type of the collection. - /// - /// The type of the collection. - public CollectionTypeOptions? CollectionType { get; set; } + /// + /// Gets or sets the type of the collection. + /// + /// The type of the collection. + public CollectionTypeOptions? CollectionType { get; set; } - public LibraryOptions LibraryOptions { get; set; } + public LibraryOptions LibraryOptions { get; set; } - /// - /// Gets or sets the item identifier. - /// - /// The item identifier. - public string ItemId { get; set; } + /// + /// Gets or sets the item identifier. + /// + /// The item identifier. + public string ItemId { get; set; } - /// - /// Gets or sets the primary image item identifier. - /// - /// The primary image item identifier. - public string PrimaryImageItemId { get; set; } + /// + /// Gets or sets the primary image item identifier. + /// + /// The primary image item identifier. + public string PrimaryImageItemId { get; set; } - public double? RefreshProgress { get; set; } + public double? RefreshProgress { get; set; } - public string RefreshStatus { get; set; } - } -} + public string RefreshStatus { get; set; } + } diff --git a/MediaBrowser.Model/Extensions/ContainerHelper.cs b/MediaBrowser.Model/Extensions/ContainerHelper.cs index 80eab0e8..3758cd89 100644 --- a/MediaBrowser.Model/Extensions/ContainerHelper.cs +++ b/MediaBrowser.Model/Extensions/ContainerHelper.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using Jellyfin.Extensions; - namespace MediaBrowser.Model.Extensions; +using global::System; +using global::System.Collections.Generic; +using Jellyfin.Extensions; + /// /// Defines the class. /// diff --git a/MediaBrowser.Model/Extensions/EnumerableExtensions.cs b/MediaBrowser.Model/Extensions/EnumerableExtensions.cs index b4aef932..efb2083d 100644 --- a/MediaBrowser.Model/Extensions/EnumerableExtensions.cs +++ b/MediaBrowser.Model/Extensions/EnumerableExtensions.cs @@ -2,60 +2,58 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Linq; -using MediaBrowser.Model.Providers; +namespace MediaBrowser.Model.Extensions; + using global::System; + using global::System.Collections.Generic; + using global::System.Linq; + using MediaBrowser.Model.Providers; -namespace MediaBrowser.Model.Extensions -{ - /// - /// Extension methods for . - /// - public static class EnumerableExtensions - { - /// - /// Orders by requested language in descending order, prioritizing "en" over other non-matches. - /// - /// The remote image infos. - /// The requested language for the images. - /// The ordered remote image infos. - public static IEnumerable OrderByLanguageDescending(this IEnumerable remoteImageInfos, string requestedLanguage) - { - if (string.IsNullOrWhiteSpace(requestedLanguage)) - { - // Default to English if no requested language is specified. - requestedLanguage = "en"; - } + /// + /// Extension methods for . + /// + public static class EnumerableExtensions + { + /// + /// Orders by requested language in descending order, prioritizing "en" over other non-matches. + /// + /// The remote image infos. + /// The requested language for the images. + /// The ordered remote image infos. + public static IEnumerable OrderByLanguageDescending(this IEnumerable remoteImageInfos, string requestedLanguage) + { + if (string.IsNullOrWhiteSpace(requestedLanguage)) + { + // Default to English if no requested language is specified. + requestedLanguage = "en"; + } - return remoteImageInfos.OrderByDescending(i => - { - // Image priority ordering: - // - Images that match the requested language - // - Images with no language - // - TODO: Images that match the original language - // - Images in English - // - Images that don't match the requested language + return remoteImageInfos.OrderByDescending(i => + { + // Image priority ordering: + // - Images that match the requested language + // - Images with no language + // - TODO: Images that match the original language + // - Images in English + // - Images that don't match the requested language - if (string.Equals(requestedLanguage, i.Language, StringComparison.OrdinalIgnoreCase)) - { - return 4; - } + if (string.Equals(requestedLanguage, i.Language, StringComparison.OrdinalIgnoreCase)) + { + return 4; + } - if (string.IsNullOrEmpty(i.Language)) - { - return 3; - } + if (string.IsNullOrEmpty(i.Language)) + { + return 3; + } - if (string.Equals(i.Language, "en", StringComparison.OrdinalIgnoreCase)) - { - return 2; - } + if (string.Equals(i.Language, "en", StringComparison.OrdinalIgnoreCase)) + { + return 2; + } - return 0; - }) - .ThenByDescending(i => Math.Round(i.CommunityRating ?? 0, 1) ) - .ThenByDescending(i => i.VoteCount ?? 0); - } - } -} + return 0; + }) + .ThenByDescending(i => Math.Round(i.CommunityRating ?? 0, 1) ) + .ThenByDescending(i => i.VoteCount ?? 0); + } + } diff --git a/MediaBrowser.Model/Extensions/LibraryOptionsExtension.cs b/MediaBrowser.Model/Extensions/LibraryOptionsExtension.cs index 65f94bf3..3f2eeee8 100644 --- a/MediaBrowser.Model/Extensions/LibraryOptionsExtension.cs +++ b/MediaBrowser.Model/Extensions/LibraryOptionsExtension.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Linq; -using MediaBrowser.Model.Configuration; - namespace MediaBrowser.Model.Extensions; +using global::System; +using global::System.Linq; +using MediaBrowser.Model.Configuration; + /// /// Extensions for . /// diff --git a/MediaBrowser.Model/Extensions/StringHelper.cs b/MediaBrowser.Model/Extensions/StringHelper.cs index b59d1b9a..8d1bb5c1 100644 --- a/MediaBrowser.Model/Extensions/StringHelper.cs +++ b/MediaBrowser.Model/Extensions/StringHelper.cs @@ -2,41 +2,39 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; +namespace MediaBrowser.Model.Extensions; + using global::System; -namespace MediaBrowser.Model.Extensions -{ - /// - /// Helper methods for manipulating strings. - /// - public static class StringHelper - { - /// - /// Returns the string with the first character as uppercase. - /// - /// The input string. - /// The string with the first character as uppercase. - public static string FirstToUpper(string str) - { - if (str.Length == 0) - { - return str; - } + /// + /// Helper methods for manipulating strings. + /// + public static class StringHelper + { + /// + /// Returns the string with the first character as uppercase. + /// + /// The input string. + /// The string with the first character as uppercase. + public static string FirstToUpper(string str) + { + if (str.Length == 0) + { + return str; + } - // We check IsLower instead of IsUpper because both return false for non-letters - if (!char.IsLower(str[0])) - { - return str; - } + // We check IsLower instead of IsUpper because both return false for non-letters + if (!char.IsLower(str[0])) + { + return str; + } - return string.Create( - str.Length, - str.AsSpan(), - (chars, buf) => - { - chars[0] = char.ToUpperInvariant(buf[0]); - buf.Slice(1).CopyTo(chars.Slice(1)); - }); - } - } -} + return string.Create( + str.Length, + str.AsSpan(), + (chars, buf) => + { + chars[0] = char.ToUpperInvariant(buf[0]); + buf.Slice(1).CopyTo(chars.Slice(1)); + }); + } + } diff --git a/MediaBrowser.Model/GlobalSuppressions.cs b/MediaBrowser.Model/GlobalSuppressions.cs new file mode 100644 index 00000000..a6a11f95 --- /dev/null +++ b/MediaBrowser.Model/GlobalSuppressions.cs @@ -0,0 +1,22 @@ +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +using System.Diagnostics.CodeAnalysis; + +[assembly: SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1101:PrefixLocalCallsWithThis", Justification = "Project style preference", Scope = "module")] +[assembly: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented", Justification = "Documentation provided via CS1591 pragma", Scope = "module")] +[assembly: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1602:EnumerationItemsMustBeDocumented", Justification = "Documentation provided via CS1591 pragma", Scope = "module")] +[assembly: SuppressMessage("StyleCop.CSharp.NamingRules", "SA1309:FieldNamesMustNotBeginWithUnderscore", Justification = "Project style preference for private fields", Scope = "module")] +[assembly: SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1200:UsingDirectivesMustBePlacedCorrectly", Justification = "Using directives placed outside namespace per project style", Scope = "module")] +[assembly: SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Project style preference", Scope = "module")] +[assembly: SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1204:StaticElementsMustAppearBeforeInstanceElements", Justification = "Project style preference", Scope = "module")] +[assembly: SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1208:SystemUsingDirectivesMustBePlacedBeforeOtherUsingDirectives", Justification = "Using directives ordered per project style", Scope = "module")] +[assembly: SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1512:SingleLineCommentsMustNotBeFollowedByBlankLine", Justification = "Project style preference", Scope = "module")] +[assembly: SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1514:ElementDocumentationHeaderMustBePrecededByBlankLine", Justification = "Project style preference", Scope = "module")] +[assembly: SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1516:ElementsMustBeSeparatedByBlankLine", Justification = "Project style preference", Scope = "module")] +[assembly: SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1128:ConstructorInitializerMustBeOnOwnLine", Justification = "Project style preference", Scope = "module")] +[assembly: SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1137:ElementsShouldHaveTheSameIndentation", Justification = "Project style preference", Scope = "module")] +[assembly: SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1108:BlockStatementsMustNotContainEmbeddedComments", Justification = "Project style preference", Scope = "module")] +[assembly: SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1413:UseTrailingCommasInMultiLineInitializers", Justification = "Project style preference", Scope = "module")] +[assembly: SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1009:ClosingParenthesisMustBeSpacedCorrectly", Justification = "Project style preference", Scope = "module")] diff --git a/MediaBrowser.Model/Globalization/CountryInfo.cs b/MediaBrowser.Model/Globalization/CountryInfo.cs index 9ce3c957..13b56652 100644 --- a/MediaBrowser.Model/Globalization/CountryInfo.cs +++ b/MediaBrowser.Model/Globalization/CountryInfo.cs @@ -3,35 +3,33 @@ // #nullable disable -namespace MediaBrowser.Model.Globalization -{ - /// - /// Class CountryInfo. - /// - public class CountryInfo - { - /// - /// Gets or sets the name. - /// - /// The name. - public string Name { get; set; } +namespace MediaBrowser.Model.Globalization; + /// + /// Class CountryInfo. + /// + public class CountryInfo + { + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } - /// - /// Gets or sets the display name. - /// - /// The display name. - public string DisplayName { get; set; } + /// + /// Gets or sets the display name. + /// + /// The display name. + public string DisplayName { get; set; } - /// - /// Gets or sets the name of the two letter ISO region. - /// - /// The name of the two letter ISO region. - public string TwoLetterISORegionName { get; set; } + /// + /// Gets or sets the name of the two letter ISO region. + /// + /// The name of the two letter ISO region. + public string TwoLetterISORegionName { get; set; } - /// - /// Gets or sets the name of the three letter ISO region. - /// - /// The name of the three letter ISO region. - public string ThreeLetterISORegionName { get; set; } - } -} + /// + /// Gets or sets the name of the three letter ISO region. + /// + /// The name of the three letter ISO region. + public string ThreeLetterISORegionName { get; set; } + } diff --git a/MediaBrowser.Model/Globalization/CultureDto.cs b/MediaBrowser.Model/Globalization/CultureDto.cs index 424a1328..520ab291 100644 --- a/MediaBrowser.Model/Globalization/CultureDto.cs +++ b/MediaBrowser.Model/Globalization/CultureDto.cs @@ -4,59 +4,57 @@ #pragma warning disable CS1591 -using System.Collections.Generic; +using global::System.Collections.Generic; -namespace MediaBrowser.Model.Globalization -{ - /// - /// Class CultureDto. - /// - public class CultureDto - { - public CultureDto(string name, string displayName, string twoLetterISOLanguageName, IReadOnlyList threeLetterISOLanguageNames) - { - Name = name; - DisplayName = displayName; - TwoLetterISOLanguageName = twoLetterISOLanguageName; - ThreeLetterISOLanguageNames = threeLetterISOLanguageNames; - } +namespace MediaBrowser.Model.Globalization; + /// + /// Class CultureDto. + /// + public class CultureDto + { + public CultureDto(string name, string displayName, string twoLetterISOLanguageName, IReadOnlyList threeLetterISOLanguageNames) + { + Name = name; + DisplayName = displayName; + TwoLetterISOLanguageName = twoLetterISOLanguageName; + ThreeLetterISOLanguageNames = threeLetterISOLanguageNames; + } - /// - /// Gets the name. - /// - /// The name. - public string Name { get; } + /// + /// Gets the name. + /// + /// The name. + public string Name { get; } - /// - /// Gets the display name. - /// - /// The display name. - public string DisplayName { get; } + /// + /// Gets the display name. + /// + /// The display name. + public string DisplayName { get; } - /// - /// Gets the name of the two letter ISO language. - /// - /// The name of the two letter ISO language. - public string TwoLetterISOLanguageName { get; } + /// + /// Gets the name of the two letter ISO language. + /// + /// The name of the two letter ISO language. + public string TwoLetterISOLanguageName { get; } - /// - /// Gets the name of the three letter ISO language. - /// - /// The name of the three letter ISO language. - public string? ThreeLetterISOLanguageName - { - get - { - var vals = ThreeLetterISOLanguageNames; - if (vals.Count > 0) - { - return vals[0]; - } + /// + /// Gets the name of the three letter ISO language. + /// + /// The name of the three letter ISO language. + public string? ThreeLetterISOLanguageName + { + get + { + var vals = ThreeLetterISOLanguageNames; + if (vals.Count > 0) + { + return vals[0]; + } - return null; - } - } + return null; + } + } - public IReadOnlyList ThreeLetterISOLanguageNames { get; } - } -} + public IReadOnlyList ThreeLetterISOLanguageNames { get; } + } diff --git a/MediaBrowser.Model/Globalization/ILocalizationManager.cs b/MediaBrowser.Model/Globalization/ILocalizationManager.cs index a76b63e1..a6cdf7f4 100644 --- a/MediaBrowser.Model/Globalization/ILocalizationManager.cs +++ b/MediaBrowser.Model/Globalization/ILocalizationManager.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using MediaBrowser.Model.Entities; - namespace MediaBrowser.Model.Globalization; +using global::System.Collections.Generic; +using global::System.Diagnostics.CodeAnalysis; +using MediaBrowser.Model.Entities; + /// /// Interface ILocalizationManager. /// diff --git a/MediaBrowser.Model/Globalization/LocalizationOption.cs b/MediaBrowser.Model/Globalization/LocalizationOption.cs index 369b47eb..902418bd 100644 --- a/MediaBrowser.Model/Globalization/LocalizationOption.cs +++ b/MediaBrowser.Model/Globalization/LocalizationOption.cs @@ -5,18 +5,16 @@ #nullable disable #pragma warning disable CS1591 -namespace MediaBrowser.Model.Globalization -{ - public class LocalizationOption - { - public LocalizationOption(string name, string value) - { - Name = name; - Value = value; - } +namespace MediaBrowser.Model.Globalization; + public class LocalizationOption + { + public LocalizationOption(string name, string value) + { + Name = name; + Value = value; + } - public string Name { get; set; } + public string Name { get; set; } - public string Value { get; set; } - } -} + public string Value { get; set; } + } diff --git a/MediaBrowser.Model/IO/AsyncFile.cs b/MediaBrowser.Model/IO/AsyncFile.cs index 411419dc..388be9c1 100644 --- a/MediaBrowser.Model/IO/AsyncFile.cs +++ b/MediaBrowser.Model/IO/AsyncFile.cs @@ -2,56 +2,54 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; +namespace MediaBrowser.Model.IO; + using global::System.IO; -namespace MediaBrowser.Model.IO -{ - /// - /// Helper class to create async s. - /// - public static class AsyncFile - { - /// - /// Gets the default for reading files async. - /// - public static FileStreamOptions ReadOptions => new FileStreamOptions() - { - Options = FileOptions.Asynchronous - }; + /// + /// Helper class to create async s. + /// + public static class AsyncFile + { + /// + /// Gets the default for reading files async. + /// + public static FileStreamOptions ReadOptions => new FileStreamOptions() + { + Options = FileOptions.Asynchronous, + }; - /// - /// Gets the default for writing files async. - /// - public static FileStreamOptions WriteOptions => new FileStreamOptions() - { - Mode = FileMode.OpenOrCreate, - Access = FileAccess.Write, - Share = FileShare.None, - Options = FileOptions.Asynchronous - }; + /// + /// Gets the default for writing files async. + /// + public static FileStreamOptions WriteOptions => new FileStreamOptions() + { + Mode = FileMode.OpenOrCreate, + Access = FileAccess.Write, + Share = FileShare.None, + Options = FileOptions.Asynchronous, + }; - /// - /// Creates, or truncates and overwrites, a file in the specified path. - /// - /// The path and name of the file to create. - /// A that provides read/write access to the file specified in path. - public static FileStream Create(string path) - => new FileStream(path, FileMode.Create, FileAccess.ReadWrite, FileShare.None, IODefaults.FileStreamBufferSize, FileOptions.Asynchronous); + /// + /// Creates, or truncates and overwrites, a file in the specified path. + /// + /// The path and name of the file to create. + /// A that provides read/write access to the file specified in path. + public static FileStream Create(string path) + => new FileStream(path, FileMode.Create, FileAccess.ReadWrite, FileShare.None, IODefaults.FileStreamBufferSize, FileOptions.Asynchronous); - /// - /// Opens an existing file for reading. - /// - /// The file to be opened for reading. - /// A read-only on the specified path. - public static FileStream OpenRead(string path) - => new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, IODefaults.FileStreamBufferSize, FileOptions.Asynchronous); + /// + /// Opens an existing file for reading. + /// + /// The file to be opened for reading. + /// A read-only on the specified path. + public static FileStream OpenRead(string path) + => new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, IODefaults.FileStreamBufferSize, FileOptions.Asynchronous); - /// - /// Opens an existing file for writing. - /// - /// The file to be opened for writing. - /// An unshared object on the specified path with Write access. - public static FileStream OpenWrite(string path) - => new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None, IODefaults.FileStreamBufferSize, FileOptions.Asynchronous); - } -} + /// + /// Opens an existing file for writing. + /// + /// The file to be opened for writing. + /// An unshared object on the specified path with Write access. + public static FileStream OpenWrite(string path) + => new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None, IODefaults.FileStreamBufferSize, FileOptions.Asynchronous); + } diff --git a/MediaBrowser.Model/IO/FileSystemEntryInfo.cs b/MediaBrowser.Model/IO/FileSystemEntryInfo.cs index ddfbdcc6..5f676bf9 100644 --- a/MediaBrowser.Model/IO/FileSystemEntryInfo.cs +++ b/MediaBrowser.Model/IO/FileSystemEntryInfo.cs @@ -2,42 +2,40 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.IO -{ - /// - /// Class FileSystemEntryInfo. - /// - public class FileSystemEntryInfo - { - /// - /// Initializes a new instance of the class. - /// - /// The filename. - /// The file path. - /// The file type. - public FileSystemEntryInfo(string name, string path, FileSystemEntryType type) - { - Name = name; - Path = path; - Type = type; - } +namespace MediaBrowser.Model.IO; + /// + /// Class FileSystemEntryInfo. + /// + public class FileSystemEntryInfo + { + /// + /// Initializes a new instance of the class. + /// + /// The filename. + /// The file path. + /// The file type. + public FileSystemEntryInfo(string name, string path, FileSystemEntryType type) + { + Name = name; + Path = path; + Type = type; + } - /// - /// Gets the name. - /// - /// The name. - public string Name { get; } + /// + /// Gets the name. + /// + /// The name. + public string Name { get; } - /// - /// Gets the path. - /// - /// The path. - public string Path { get; } + /// + /// Gets the path. + /// + /// The path. + public string Path { get; } - /// - /// Gets the type. - /// - /// The type. - public FileSystemEntryType Type { get; } - } -} + /// + /// Gets the type. + /// + /// The type. + public FileSystemEntryType Type { get; } + } diff --git a/MediaBrowser.Model/IO/FileSystemEntryType.cs b/MediaBrowser.Model/IO/FileSystemEntryType.cs index 8b40758b..9947518d 100644 --- a/MediaBrowser.Model/IO/FileSystemEntryType.cs +++ b/MediaBrowser.Model/IO/FileSystemEntryType.cs @@ -2,31 +2,29 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.IO -{ - /// - /// Enum FileSystemEntryType. - /// - public enum FileSystemEntryType - { - /// - /// The file. - /// - File, +namespace MediaBrowser.Model.IO; + /// + /// Enum FileSystemEntryType. + /// + public enum FileSystemEntryType + { + /// + /// The file. + /// + File, - /// - /// The directory. - /// - Directory, + /// + /// The directory. + /// + Directory, - /// - /// The network computer. - /// - NetworkComputer, + /// + /// The network computer. + /// + NetworkComputer, - /// - /// The network share. - /// - NetworkShare - } -} + /// + /// The network share. + /// + NetworkShare + } diff --git a/MediaBrowser.Model/IO/FileSystemMetadata.cs b/MediaBrowser.Model/IO/FileSystemMetadata.cs index d9359f71..c6f6648f 100644 --- a/MediaBrowser.Model/IO/FileSystemMetadata.cs +++ b/MediaBrowser.Model/IO/FileSystemMetadata.cs @@ -5,58 +5,56 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.IO -{ - public class FileSystemMetadata - { - /// - /// Gets or sets a value indicating whether this is exists. - /// - /// true if exists; otherwise, false. - public bool Exists { get; set; } +namespace MediaBrowser.Model.IO; + public class FileSystemMetadata + { + /// + /// Gets or sets a value indicating whether this is exists. + /// + /// true if exists; otherwise, false. + public bool Exists { get; set; } - /// - /// Gets or sets the full name. - /// - /// The full name. - public string FullName { get; set; } + /// + /// Gets or sets the full name. + /// + /// The full name. + public string FullName { get; set; } - /// - /// Gets or sets the name. - /// - /// The name. - public string Name { get; set; } + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } - /// - /// Gets or sets the extension. - /// - /// The extension. - public string Extension { get; set; } + /// + /// Gets or sets the extension. + /// + /// The extension. + public string Extension { get; set; } - /// - /// Gets or sets the length. - /// - /// The length. - public long Length { get; set; } + /// + /// Gets or sets the length. + /// + /// The length. + public long Length { get; set; } - /// - /// Gets or sets the last write time UTC. - /// - /// The last write time UTC. - public DateTime LastWriteTimeUtc { get; set; } + /// + /// Gets or sets the last write time UTC. + /// + /// The last write time UTC. + public DateTime LastWriteTimeUtc { get; set; } - /// - /// Gets or sets the creation time UTC. - /// - /// The creation time UTC. - public DateTime CreationTimeUtc { get; set; } + /// + /// Gets or sets the creation time UTC. + /// + /// The creation time UTC. + public DateTime CreationTimeUtc { get; set; } - /// - /// Gets or sets a value indicating whether this instance is directory. - /// - /// true if this instance is directory; otherwise, false. - public bool IsDirectory { get; set; } - } -} + /// + /// Gets or sets a value indicating whether this instance is directory. + /// + /// true if this instance is directory; otherwise, false. + public bool IsDirectory { get; set; } + } diff --git a/MediaBrowser.Model/IO/IFileSystem.cs b/MediaBrowser.Model/IO/IFileSystem.cs index 8feec234..e7faa8a3 100644 --- a/MediaBrowser.Model/IO/IFileSystem.cs +++ b/MediaBrowser.Model/IO/IFileSystem.cs @@ -4,245 +4,243 @@ #pragma warning disable CS1591 -using System; -using System.Collections.Generic; +using global::System; +using global::System.Collections.Generic; -namespace MediaBrowser.Model.IO -{ - /// - /// Interface IFileSystem. - /// - public interface IFileSystem - { - /// - /// Determines whether the specified filename is shortcut. - /// - /// The filename. - /// true if the specified filename is shortcut; otherwise, false. - bool IsShortcut(string filename); +namespace MediaBrowser.Model.IO; + /// + /// Interface IFileSystem. + /// + public interface IFileSystem + { + /// + /// Determines whether the specified filename is shortcut. + /// + /// The filename. + /// true if the specified filename is shortcut; otherwise, false. + bool IsShortcut(string filename); - /// - /// Resolves the shortcut. - /// - /// The filename. - /// System.String. - string? ResolveShortcut(string filename); + /// + /// Resolves the shortcut. + /// + /// The filename. + /// System.String. + string? ResolveShortcut(string filename); - /// - /// Creates the shortcut. - /// - /// The shortcut path. - /// The target. - void CreateShortcut(string shortcutPath, string target); + /// + /// Creates the shortcut. + /// + /// The shortcut path. + /// The target. + void CreateShortcut(string shortcutPath, string target); - string MakeAbsolutePath(string folderPath, string filePath); + string MakeAbsolutePath(string folderPath, string filePath); - /// - /// Moves a directory to a new location. - /// - /// Source directory. - /// Destination directory. - void MoveDirectory(string source, string destination); + /// + /// Moves a directory to a new location. + /// + /// Source directory. + /// Destination directory. + void MoveDirectory(string source, string destination); - /// - /// Returns a object for the specified file or directory path. - /// - /// A path to a file or directory. - /// A object. - /// If the specified path points to a directory, the returned object's - /// property will be set to true and all other properties will reflect the properties of the directory. - FileSystemMetadata GetFileSystemInfo(string path); + /// + /// Returns a object for the specified file or directory path. + /// + /// A path to a file or directory. + /// A object. + /// If the specified path points to a directory, the returned object's + /// property will be set to true and all other properties will reflect the properties of the directory. + FileSystemMetadata GetFileSystemInfo(string path); - /// - /// Returns a object for the specified file path. - /// - /// A path to a file. - /// A object. - /// If the specified path points to a directory, the returned object's - /// property and the property will both be set to false. - /// For automatic handling of files and directories, use . - FileSystemMetadata GetFileInfo(string path); + /// + /// Returns a object for the specified file path. + /// + /// A path to a file. + /// A object. + /// If the specified path points to a directory, the returned object's + /// property and the property will both be set to false. + /// For automatic handling of files and directories, use . + FileSystemMetadata GetFileInfo(string path); - /// - /// Returns a object for the specified directory path. - /// - /// A path to a directory. - /// A object. - /// If the specified path points to a file, the returned object's - /// property will be set to true and the property will be set to false. - /// For automatic handling of files and directories, use . - FileSystemMetadata GetDirectoryInfo(string path); + /// + /// Returns a object for the specified directory path. + /// + /// A path to a directory. + /// A object. + /// If the specified path points to a file, the returned object's + /// property will be set to true and the property will be set to false. + /// For automatic handling of files and directories, use . + FileSystemMetadata GetDirectoryInfo(string path); - /// - /// Gets the valid filename. - /// - /// The filename. - /// System.String. - string GetValidFilename(string filename); + /// + /// Gets the valid filename. + /// + /// The filename. + /// System.String. + string GetValidFilename(string filename); - /// - /// Gets the creation time UTC. - /// - /// The information. - /// DateTime. - DateTime GetCreationTimeUtc(FileSystemMetadata info); + /// + /// Gets the creation time UTC. + /// + /// The information. + /// DateTime. + DateTime GetCreationTimeUtc(FileSystemMetadata info); - /// - /// Gets the creation time UTC. - /// - /// The path. - /// DateTime. - DateTime GetCreationTimeUtc(string path); + /// + /// Gets the creation time UTC. + /// + /// The path. + /// DateTime. + DateTime GetCreationTimeUtc(string path); - /// - /// Gets the last write time UTC. - /// - /// The information. - /// DateTime. - DateTime GetLastWriteTimeUtc(FileSystemMetadata info); + /// + /// Gets the last write time UTC. + /// + /// The information. + /// DateTime. + DateTime GetLastWriteTimeUtc(FileSystemMetadata info); - /// - /// Gets the last write time UTC. - /// - /// The path. - /// DateTime. - DateTime GetLastWriteTimeUtc(string path); + /// + /// Gets the last write time UTC. + /// + /// The path. + /// DateTime. + DateTime GetLastWriteTimeUtc(string path); - /// - /// Swaps the files. - /// - /// The file1. - /// The file2. - void SwapFiles(string file1, string file2); + /// + /// Swaps the files. + /// + /// The file1. + /// The file2. + void SwapFiles(string file1, string file2); - bool AreEqual(string path1, string path2); + bool AreEqual(string path1, string path2); - /// - /// Determines whether [contains sub path] [the specified parent path]. - /// - /// The parent path. - /// The path. - /// true if [contains sub path] [the specified parent path]; otherwise, false. - bool ContainsSubPath(string parentPath, string path); + /// + /// Determines whether [contains sub path] [the specified parent path]. + /// + /// The parent path. + /// The path. + /// true if [contains sub path] [the specified parent path]; otherwise, false. + bool ContainsSubPath(string parentPath, string path); - /// - /// Gets the file name without extension. - /// - /// The information. - /// System.String. - string GetFileNameWithoutExtension(FileSystemMetadata info); + /// + /// Gets the file name without extension. + /// + /// The information. + /// System.String. + string GetFileNameWithoutExtension(FileSystemMetadata info); - /// - /// Determines whether [is path file] [the specified path]. - /// - /// The path. - /// true if [is path file] [the specified path]; otherwise, false. - bool IsPathFile(string path); + /// + /// Determines whether [is path file] [the specified path]. + /// + /// The path. + /// true if [is path file] [the specified path]; otherwise, false. + bool IsPathFile(string path); - /// - /// Deletes the file. - /// - /// The path. - void DeleteFile(string path); + /// + /// Deletes the file. + /// + /// The path. + void DeleteFile(string path); - /// - /// Gets the directories. - /// - /// The path. - /// If set to true also searches in subdirectories. - /// All found directories. - IEnumerable GetDirectories(string path, bool recursive = false); + /// + /// Gets the directories. + /// + /// The path. + /// If set to true also searches in subdirectories. + /// All found directories. + IEnumerable GetDirectories(string path, bool recursive = false); - /// - /// Gets the files. - /// - /// The path in which to search. - /// If set to true also searches in subdirectories. - /// All found files. - IEnumerable GetFiles(string path, bool recursive = false); + /// + /// Gets the files. + /// + /// The path in which to search. + /// If set to true also searches in subdirectories. + /// All found files. + IEnumerable GetFiles(string path, bool recursive = false); - /// - /// Gets the files. - /// - /// The path in which to search. - /// The search string to match against the names of files. This parameter can contain a combination of valid literal path and wildcard (* and ?) characters, but it doesn't support regular expressions. - /// If set to true also searches in subdirectories. - /// All found files. - IEnumerable GetFiles(string path, string searchPattern, bool recursive = false); + /// + /// Gets the files. + /// + /// The path in which to search. + /// The search string to match against the names of files. This parameter can contain a combination of valid literal path and wildcard (* and ?) characters, but it doesn't support regular expressions. + /// If set to true also searches in subdirectories. + /// All found files. + IEnumerable GetFiles(string path, string searchPattern, bool recursive = false); - /// - /// Gets the files. - /// - /// The path in which to search. - /// The file extensions to search for. - /// Enable case-sensitive check for extensions. - /// If set to true also searches in subdirectories. - /// All found files. - IEnumerable GetFiles(string path, IReadOnlyList? extensions, bool enableCaseSensitiveExtensions, bool recursive); + /// + /// Gets the files. + /// + /// The path in which to search. + /// The file extensions to search for. + /// Enable case-sensitive check for extensions. + /// If set to true also searches in subdirectories. + /// All found files. + IEnumerable GetFiles(string path, IReadOnlyList? extensions, bool enableCaseSensitiveExtensions, bool recursive); - /// - /// Gets the files. - /// - /// The path in which to search. - /// The search string to match against the names of files. This parameter can contain a combination of valid literal path and wildcard (* and ?) characters, but it doesn't support regular expressions. - /// The file extensions to search for. - /// Enable case-sensitive check for extensions. - /// If set to true also searches in subdirectories. - /// All found files. - IEnumerable GetFiles(string path, string searchPattern, IReadOnlyList? extensions, bool enableCaseSensitiveExtensions, bool recursive); + /// + /// Gets the files. + /// + /// The path in which to search. + /// The search string to match against the names of files. This parameter can contain a combination of valid literal path and wildcard (* and ?) characters, but it doesn't support regular expressions. + /// The file extensions to search for. + /// Enable case-sensitive check for extensions. + /// If set to true also searches in subdirectories. + /// All found files. + IEnumerable GetFiles(string path, string searchPattern, IReadOnlyList? extensions, bool enableCaseSensitiveExtensions, bool recursive); - /// - /// Gets the file system entries. - /// - /// The path. - /// if set to true [recursive]. - /// IEnumerable<FileSystemMetadata>. - IEnumerable GetFileSystemEntries(string path, bool recursive = false); + /// + /// Gets the file system entries. + /// + /// The path. + /// if set to true [recursive]. + /// IEnumerable<FileSystemMetadata>. + IEnumerable GetFileSystemEntries(string path, bool recursive = false); - /// - /// Gets the directory paths. - /// - /// The path. - /// if set to true [recursive]. - /// IEnumerable<System.String>. - IEnumerable GetDirectoryPaths(string path, bool recursive = false); + /// + /// Gets the directory paths. + /// + /// The path. + /// if set to true [recursive]. + /// IEnumerable<System.String>. + IEnumerable GetDirectoryPaths(string path, bool recursive = false); - /// - /// Gets the file paths. - /// - /// The path. - /// if set to true [recursive]. - /// IEnumerable<System.String>. - IEnumerable GetFilePaths(string path, bool recursive = false); + /// + /// Gets the file paths. + /// + /// The path. + /// if set to true [recursive]. + /// IEnumerable<System.String>. + IEnumerable GetFilePaths(string path, bool recursive = false); - IEnumerable GetFilePaths(string path, string[]? extensions, bool enableCaseSensitiveExtensions, bool recursive); + IEnumerable GetFilePaths(string path, string[]? extensions, bool enableCaseSensitiveExtensions, bool recursive); - /// - /// Gets the file system entry paths. - /// - /// The path. - /// if set to true [recursive]. - /// IEnumerable<System.String>. - IEnumerable GetFileSystemEntryPaths(string path, bool recursive = false); + /// + /// Gets the file system entry paths. + /// + /// The path. + /// if set to true [recursive]. + /// IEnumerable<System.String>. + IEnumerable GetFileSystemEntryPaths(string path, bool recursive = false); - void SetHidden(string path, bool isHidden); + void SetHidden(string path, bool isHidden); - void SetAttributes(string path, bool isHidden, bool readOnly); + void SetAttributes(string path, bool isHidden, bool readOnly); - IEnumerable GetDrives(); + IEnumerable GetDrives(); - /// - /// Determines whether the directory exists. - /// - /// The path. - /// Whether the path exists. - bool DirectoryExists(string path); + /// + /// Determines whether the directory exists. + /// + /// The path. + /// Whether the path exists. + bool DirectoryExists(string path); - /// - /// Determines whether the file exists. - /// - /// The path. - /// Whether the path exists. - bool FileExists(string path); - } -} + /// + /// Determines whether the file exists. + /// + /// The path. + /// Whether the path exists. + bool FileExists(string path); + } diff --git a/MediaBrowser.Model/IO/IODefaults.cs b/MediaBrowser.Model/IO/IODefaults.cs index 617cf03e..9007b0a4 100644 --- a/MediaBrowser.Model/IO/IODefaults.cs +++ b/MediaBrowser.Model/IO/IODefaults.cs @@ -2,28 +2,26 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; +namespace MediaBrowser.Model.IO; + using global::System.IO; -namespace MediaBrowser.Model.IO -{ - /// - /// Class IODefaults. - /// - public static class IODefaults - { - /// - /// The default copy to buffer size. - /// - public const int CopyToBufferSize = 81920; + /// + /// Class IODefaults. + /// + public static class IODefaults + { + /// + /// The default copy to buffer size. + /// + public const int CopyToBufferSize = 81920; - /// - /// The default file stream buffer size. - /// - public const int FileStreamBufferSize = 4096; + /// + /// The default file stream buffer size. + /// + public const int FileStreamBufferSize = 4096; - /// - /// The default buffer size. - /// - public const int StreamWriterBufferSize = 1024; - } -} + /// + /// The default buffer size. + /// + public const int StreamWriterBufferSize = 1024; + } diff --git a/MediaBrowser.Model/IO/IShortcutHandler.cs b/MediaBrowser.Model/IO/IShortcutHandler.cs index 3e03dc84..17dbec26 100644 --- a/MediaBrowser.Model/IO/IShortcutHandler.cs +++ b/MediaBrowser.Model/IO/IShortcutHandler.cs @@ -4,28 +4,26 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.IO -{ - public interface IShortcutHandler - { - /// - /// Gets the extension. - /// - /// The extension. - string Extension { get; } +namespace MediaBrowser.Model.IO; + public interface IShortcutHandler + { + /// + /// Gets the extension. + /// + /// The extension. + string Extension { get; } - /// - /// Resolves the specified shortcut path. - /// - /// The shortcut path. - /// System.String. - string? Resolve(string shortcutPath); + /// + /// Resolves the specified shortcut path. + /// + /// The shortcut path. + /// System.String. + string? Resolve(string shortcutPath); - /// - /// Creates the specified shortcut path. - /// - /// The shortcut path. - /// The target path. - void Create(string shortcutPath, string targetPath); - } -} + /// + /// Creates the specified shortcut path. + /// + /// The shortcut path. + /// The target path. + void Create(string shortcutPath, string targetPath); + } diff --git a/MediaBrowser.Model/IO/IStreamHelper.cs b/MediaBrowser.Model/IO/IStreamHelper.cs index be313138..9983a3ad 100644 --- a/MediaBrowser.Model/IO/IStreamHelper.cs +++ b/MediaBrowser.Model/IO/IStreamHelper.cs @@ -4,19 +4,17 @@ #pragma warning disable CS1591 -using System; -using System.IO; -using System.Threading; -using System.Threading.Tasks; +using global::System; +using global::System.IO; +using global::System.Threading; +using global::System.Threading.Tasks; -namespace MediaBrowser.Model.IO -{ - public interface IStreamHelper - { - Task CopyToAsync(Stream source, Stream destination, int bufferSize, Action? onStarted, CancellationToken cancellationToken); +namespace MediaBrowser.Model.IO; + public interface IStreamHelper + { + Task CopyToAsync(Stream source, Stream destination, int bufferSize, Action? onStarted, CancellationToken cancellationToken); - Task CopyToAsync(Stream source, Stream destination, int bufferSize, int emptyReadLimit, CancellationToken cancellationToken); + Task CopyToAsync(Stream source, Stream destination, int bufferSize, int emptyReadLimit, CancellationToken cancellationToken); - Task CopyUntilCancelled(Stream source, Stream target, int bufferSize, CancellationToken cancellationToken); - } -} + Task CopyUntilCancelled(Stream source, Stream target, int bufferSize, CancellationToken cancellationToken); + } diff --git a/MediaBrowser.Model/Library/PlayAccess.cs b/MediaBrowser.Model/Library/PlayAccess.cs index 2d997e29..c497cef6 100644 --- a/MediaBrowser.Model/Library/PlayAccess.cs +++ b/MediaBrowser.Model/Library/PlayAccess.cs @@ -4,11 +4,9 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Library -{ - public enum PlayAccess - { - Full = 0, - None = 1 - } -} +namespace MediaBrowser.Model.Library; + public enum PlayAccess + { + Full = 0, + None = 1, + } diff --git a/MediaBrowser.Model/Library/UserViewQuery.cs b/MediaBrowser.Model/Library/UserViewQuery.cs index d2803798..da1fc74d 100644 --- a/MediaBrowser.Model/Library/UserViewQuery.cs +++ b/MediaBrowser.Model/Library/UserViewQuery.cs @@ -4,38 +4,36 @@ #pragma warning disable CS1591 -using System; +using global::System; using Jellyfin.Data.Enums; using Jellyfin.Database.Implementations.Entities; -namespace MediaBrowser.Model.Library -{ - public class UserViewQuery - { - public UserViewQuery() - { - IncludeExternalContent = true; - PresetViews = Array.Empty(); - } +namespace MediaBrowser.Model.Library; + public class UserViewQuery + { + public UserViewQuery() + { + IncludeExternalContent = true; + PresetViews = Array.Empty(); + } - /// - /// Gets or sets the user. - /// - /// The user. - public required User User { get; set; } + /// + /// Gets or sets the user. + /// + /// The user. + public required User User { get; set; } - /// - /// Gets or sets a value indicating whether [include external content]. - /// - /// true if [include external content]; otherwise, false. - public bool IncludeExternalContent { get; set; } + /// + /// Gets or sets a value indicating whether [include external content]. + /// + /// true if [include external content]; otherwise, false. + public bool IncludeExternalContent { get; set; } - /// - /// Gets or sets a value indicating whether [include hidden]. - /// - /// true if [include hidden]; otherwise, false. - public bool IncludeHidden { get; set; } + /// + /// Gets or sets a value indicating whether [include hidden]. + /// + /// true if [include hidden]; otherwise, false. + public bool IncludeHidden { get; set; } - public CollectionType?[] PresetViews { get; set; } - } -} + public CollectionType?[] PresetViews { get; set; } + } diff --git a/MediaBrowser.Model/LiveTv/BaseTimerInfoDto.cs b/MediaBrowser.Model/LiveTv/BaseTimerInfoDto.cs index 70d5947b..4be9e219 100644 --- a/MediaBrowser.Model/LiveTv/BaseTimerInfoDto.cs +++ b/MediaBrowser.Model/LiveTv/BaseTimerInfoDto.cs @@ -5,130 +5,128 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; using MediaBrowser.Model.Dto; -namespace MediaBrowser.Model.LiveTv -{ - public class BaseTimerInfoDto : IHasServerId - { - /// - /// Gets or sets the Id of the recording. - /// - public string Id { get; set; } +namespace MediaBrowser.Model.LiveTv; + public class BaseTimerInfoDto : IHasServerId + { + /// + /// Gets or sets the Id of the recording. + /// + public string Id { get; set; } - public string Type { get; set; } + public string Type { get; set; } - /// - /// Gets or sets the server identifier. - /// - /// The server identifier. - public string ServerId { get; set; } + /// + /// Gets or sets the server identifier. + /// + /// The server identifier. + public string ServerId { get; set; } - /// - /// Gets or sets the external identifier. - /// - /// The external identifier. - public string ExternalId { get; set; } + /// + /// Gets or sets the external identifier. + /// + /// The external identifier. + public string ExternalId { get; set; } - /// - /// Gets or sets the channel id of the recording. - /// - public Guid ChannelId { get; set; } + /// + /// Gets or sets the channel id of the recording. + /// + public Guid ChannelId { get; set; } - /// - /// Gets or sets the external channel identifier. - /// - /// The external channel identifier. - public string ExternalChannelId { get; set; } + /// + /// Gets or sets the external channel identifier. + /// + /// The external channel identifier. + public string ExternalChannelId { get; set; } - /// - /// Gets or sets the channel name of the recording. - /// - public string ChannelName { get; set; } + /// + /// Gets or sets the channel name of the recording. + /// + public string ChannelName { get; set; } - public string ChannelPrimaryImageTag { get; set; } + public string ChannelPrimaryImageTag { get; set; } - /// - /// Gets or sets the program identifier. - /// - /// The program identifier. - public string ProgramId { get; set; } + /// + /// Gets or sets the program identifier. + /// + /// The program identifier. + public string ProgramId { get; set; } - /// - /// Gets or sets the external program identifier. - /// - /// The external program identifier. - public string ExternalProgramId { get; set; } + /// + /// Gets or sets the external program identifier. + /// + /// The external program identifier. + public string ExternalProgramId { get; set; } - /// - /// Gets or sets the name of the recording. - /// - public string Name { get; set; } + /// + /// Gets or sets the name of the recording. + /// + public string Name { get; set; } - /// - /// Gets or sets the description of the recording. - /// - public string Overview { get; set; } + /// + /// Gets or sets the description of the recording. + /// + public string Overview { get; set; } - /// - /// Gets or sets the start date of the recording, in UTC. - /// - public DateTime StartDate { get; set; } + /// + /// Gets or sets the start date of the recording, in UTC. + /// + public DateTime StartDate { get; set; } - /// - /// Gets or sets the end date of the recording, in UTC. - /// - public DateTime EndDate { get; set; } + /// + /// Gets or sets the end date of the recording, in UTC. + /// + public DateTime EndDate { get; set; } - /// - /// Gets or sets the name of the service. - /// - /// The name of the service. - public string ServiceName { get; set; } + /// + /// Gets or sets the name of the service. + /// + /// The name of the service. + public string ServiceName { get; set; } - /// - /// Gets or sets the priority. - /// - /// The priority. - public int Priority { get; set; } + /// + /// Gets or sets the priority. + /// + /// The priority. + public int Priority { get; set; } - /// - /// Gets or sets the pre padding seconds. - /// - /// The pre padding seconds. - public int PrePaddingSeconds { get; set; } + /// + /// Gets or sets the pre padding seconds. + /// + /// The pre padding seconds. + public int PrePaddingSeconds { get; set; } - /// - /// Gets or sets the post padding seconds. - /// - /// The post padding seconds. - public int PostPaddingSeconds { get; set; } + /// + /// Gets or sets the post padding seconds. + /// + /// The post padding seconds. + public int PostPaddingSeconds { get; set; } - /// - /// Gets or sets a value indicating whether this instance is pre padding required. - /// - /// true if this instance is pre padding required; otherwise, false. - public bool IsPrePaddingRequired { get; set; } + /// + /// Gets or sets a value indicating whether this instance is pre padding required. + /// + /// true if this instance is pre padding required; otherwise, false. + public bool IsPrePaddingRequired { get; set; } - /// - /// Gets or sets the Id of the Parent that has a backdrop if the item does not have one. - /// - /// The parent backdrop item id. - public string ParentBackdropItemId { get; set; } + /// + /// Gets or sets the Id of the Parent that has a backdrop if the item does not have one. + /// + /// The parent backdrop item id. + public string ParentBackdropItemId { get; set; } - /// - /// Gets or sets the parent backdrop image tags. - /// - /// The parent backdrop image tags. - public string[] ParentBackdropImageTags { get; set; } + /// + /// Gets or sets the parent backdrop image tags. + /// + /// The parent backdrop image tags. + public string[] ParentBackdropImageTags { get; set; } - /// - /// Gets or sets a value indicating whether this instance is post padding required. - /// - /// true if this instance is post padding required; otherwise, false. - public bool IsPostPaddingRequired { get; set; } + /// + /// Gets or sets a value indicating whether this instance is post padding required. + /// + /// true if this instance is post padding required; otherwise, false. + public bool IsPostPaddingRequired { get; set; } - public KeepUntil KeepUntil { get; set; } - } -} + public KeepUntil KeepUntil { get; set; } + } diff --git a/MediaBrowser.Model/LiveTv/ChannelMappingOptionsDto.cs b/MediaBrowser.Model/LiveTv/ChannelMappingOptionsDto.cs index 98f5efea..cba05841 100644 --- a/MediaBrowser.Model/LiveTv/ChannelMappingOptionsDto.cs +++ b/MediaBrowser.Model/LiveTv/ChannelMappingOptionsDto.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using MediaBrowser.Model.Dto; - namespace MediaBrowser.Model.LiveTv; +using global::System; +using global::System.Collections.Generic; +using MediaBrowser.Model.Dto; + /// /// Channel mapping options dto. /// diff --git a/MediaBrowser.Model/LiveTv/ChannelType.cs b/MediaBrowser.Model/LiveTv/ChannelType.cs index 8754b78a..9ff24bb8 100644 --- a/MediaBrowser.Model/LiveTv/ChannelType.cs +++ b/MediaBrowser.Model/LiveTv/ChannelType.cs @@ -2,21 +2,19 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.LiveTv -{ - /// - /// Enum ChannelType. - /// - public enum ChannelType - { - /// - /// The TV. - /// - TV, +namespace MediaBrowser.Model.LiveTv; + /// + /// Enum ChannelType. + /// + public enum ChannelType + { + /// + /// The TV. + /// + TV, - /// - /// The radio. - /// - Radio - } -} + /// + /// The radio. + /// + Radio + } diff --git a/MediaBrowser.Model/LiveTv/DayPattern.cs b/MediaBrowser.Model/LiveTv/DayPattern.cs index 2def203d..4f94d749 100644 --- a/MediaBrowser.Model/LiveTv/DayPattern.cs +++ b/MediaBrowser.Model/LiveTv/DayPattern.cs @@ -4,12 +4,10 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.LiveTv -{ - public enum DayPattern - { - Daily, - Weekdays, - Weekends - } -} +namespace MediaBrowser.Model.LiveTv; + public enum DayPattern + { + Daily, + Weekdays, + Weekends + } diff --git a/MediaBrowser.Model/LiveTv/GuideInfo.cs b/MediaBrowser.Model/LiveTv/GuideInfo.cs index 60807381..036b26d8 100644 --- a/MediaBrowser.Model/LiveTv/GuideInfo.cs +++ b/MediaBrowser.Model/LiveTv/GuideInfo.cs @@ -5,22 +5,20 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.LiveTv -{ - public class GuideInfo - { - /// - /// Gets or sets the start date. - /// - /// The start date. - public DateTime StartDate { get; set; } +namespace MediaBrowser.Model.LiveTv; + public class GuideInfo + { + /// + /// Gets or sets the start date. + /// + /// The start date. + public DateTime StartDate { get; set; } - /// - /// Gets or sets the end date. - /// - /// The end date. - public DateTime EndDate { get; set; } - } -} + /// + /// Gets or sets the end date. + /// + /// The end date. + public DateTime EndDate { get; set; } + } diff --git a/MediaBrowser.Model/LiveTv/ListingsProviderInfo.cs b/MediaBrowser.Model/LiveTv/ListingsProviderInfo.cs index 25bf0056..c0fd289e 100644 --- a/MediaBrowser.Model/LiveTv/ListingsProviderInfo.cs +++ b/MediaBrowser.Model/LiveTv/ListingsProviderInfo.cs @@ -5,58 +5,56 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; using MediaBrowser.Model.Dto; -namespace MediaBrowser.Model.LiveTv -{ - public class ListingsProviderInfo - { - public ListingsProviderInfo() - { - NewsCategories = new[] { "news", "journalism", "documentary", "current affairs" }; - SportsCategories = new[] { "sports", "basketball", "baseball", "football" }; - KidsCategories = new[] { "kids", "family", "children", "childrens", "disney" }; - MovieCategories = new[] { "movie" }; - EnabledTuners = Array.Empty(); - EnableAllTuners = true; - ChannelMappings = Array.Empty(); - } +namespace MediaBrowser.Model.LiveTv; + public class ListingsProviderInfo + { + public ListingsProviderInfo() + { + NewsCategories = new[] { "news", "journalism", "documentary", "current affairs" }; + SportsCategories = new[] { "sports", "basketball", "baseball", "football" }; + KidsCategories = new[] { "kids", "family", "children", "childrens", "disney" }; + MovieCategories = new[] { "movie" }; + EnabledTuners = Array.Empty(); + EnableAllTuners = true; + ChannelMappings = Array.Empty(); + } - public string Id { get; set; } + public string Id { get; set; } - public string Type { get; set; } + public string Type { get; set; } - public string Username { get; set; } + public string Username { get; set; } - public string Password { get; set; } + public string Password { get; set; } - public string ListingsId { get; set; } + public string ListingsId { get; set; } - public string ZipCode { get; set; } + public string ZipCode { get; set; } - public string Country { get; set; } + public string Country { get; set; } - public string Path { get; set; } + public string Path { get; set; } - public string[] EnabledTuners { get; set; } + public string[] EnabledTuners { get; set; } - public bool EnableAllTuners { get; set; } + public bool EnableAllTuners { get; set; } - public string[] NewsCategories { get; set; } + public string[] NewsCategories { get; set; } - public string[] SportsCategories { get; set; } + public string[] SportsCategories { get; set; } - public string[] KidsCategories { get; set; } + public string[] KidsCategories { get; set; } - public string[] MovieCategories { get; set; } + public string[] MovieCategories { get; set; } - public NameValuePair[] ChannelMappings { get; set; } + public NameValuePair[] ChannelMappings { get; set; } - public string MoviePrefix { get; set; } + public string MoviePrefix { get; set; } - public string PreferredLanguage { get; set; } + public string PreferredLanguage { get; set; } - public string UserAgent { get; set; } - } -} + public string UserAgent { get; set; } + } diff --git a/MediaBrowser.Model/LiveTv/LiveTvChannelQuery.cs b/MediaBrowser.Model/LiveTv/LiveTvChannelQuery.cs index 0ef3fb8e..44e9c5b5 100644 --- a/MediaBrowser.Model/LiveTv/LiveTvChannelQuery.cs +++ b/MediaBrowser.Model/LiveTv/LiveTvChannelQuery.cs @@ -5,111 +5,109 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; using Jellyfin.Data.Enums; using Jellyfin.Database.Implementations.Enums; -namespace MediaBrowser.Model.LiveTv -{ - /// - /// Class ChannelQuery. - /// - public class LiveTvChannelQuery - { - public LiveTvChannelQuery() - { - EnableUserData = true; - SortBy = Array.Empty(); - } +namespace MediaBrowser.Model.LiveTv; + /// + /// Class ChannelQuery. + /// + public class LiveTvChannelQuery + { + public LiveTvChannelQuery() + { + EnableUserData = true; + SortBy = Array.Empty(); + } - /// - /// Gets or sets the type of the channel. - /// - /// The type of the channel. - public ChannelType? ChannelType { get; set; } + /// + /// Gets or sets the type of the channel. + /// + /// The type of the channel. + public ChannelType? ChannelType { get; set; } - /// - /// Gets or sets a value indicating whether this instance is favorite. - /// - /// null if [is favorite] contains no value, true if [is favorite]; otherwise, false. - public bool? IsFavorite { get; set; } + /// + /// Gets or sets a value indicating whether this instance is favorite. + /// + /// null if [is favorite] contains no value, true if [is favorite]; otherwise, false. + public bool? IsFavorite { get; set; } - /// - /// Gets or sets a value indicating whether this instance is liked. - /// - /// null if [is liked] contains no value, true if [is liked]; otherwise, false. - public bool? IsLiked { get; set; } + /// + /// Gets or sets a value indicating whether this instance is liked. + /// + /// null if [is liked] contains no value, true if [is liked]; otherwise, false. + public bool? IsLiked { get; set; } - /// - /// Gets or sets a value indicating whether this instance is disliked. - /// - /// null if [is disliked] contains no value, true if [is disliked]; otherwise, false. - public bool? IsDisliked { get; set; } + /// + /// Gets or sets a value indicating whether this instance is disliked. + /// + /// null if [is disliked] contains no value, true if [is disliked]; otherwise, false. + public bool? IsDisliked { get; set; } - /// - /// Gets or sets a value indicating whether [enable favorite sorting]. - /// - /// true if [enable favorite sorting]; otherwise, false. - public bool EnableFavoriteSorting { get; set; } + /// + /// Gets or sets a value indicating whether [enable favorite sorting]. + /// + /// true if [enable favorite sorting]; otherwise, false. + public bool EnableFavoriteSorting { get; set; } - /// - /// Gets or sets the user identifier. - /// - /// The user identifier. - public Guid UserId { get; set; } + /// + /// Gets or sets the user identifier. + /// + /// The user identifier. + public Guid UserId { get; set; } - /// - /// Gets or sets the start index. Used for paging. - /// - /// The start index. - public int? StartIndex { get; set; } + /// + /// Gets or sets the start index. Used for paging. + /// + /// The start index. + public int? StartIndex { get; set; } - /// - /// Gets or sets the maximum number of items to return. - /// - /// The limit. - public int? Limit { get; set; } + /// + /// Gets or sets the maximum number of items to return. + /// + /// The limit. + public int? Limit { get; set; } - /// - /// Gets or sets a value indicating whether [add current program]. - /// - /// true if [add current program]; otherwise, false. - public bool AddCurrentProgram { get; set; } + /// + /// Gets or sets a value indicating whether [add current program]. + /// + /// true if [add current program]; otherwise, false. + public bool AddCurrentProgram { get; set; } - public bool EnableUserData { get; set; } + public bool EnableUserData { get; set; } - /// - /// Gets or sets a value whether to return news or not. - /// - /// If set to null, all programs will be returned. - public bool? IsNews { get; set; } + /// + /// Gets or sets a value whether to return news or not. + /// + /// If set to null, all programs will be returned. + public bool? IsNews { get; set; } - /// - /// Gets or sets a value whether to return movies or not. - /// - /// If set to null, all programs will be returned. - public bool? IsMovie { get; set; } + /// + /// Gets or sets a value whether to return movies or not. + /// + /// If set to null, all programs will be returned. + public bool? IsMovie { get; set; } - /// - /// Gets or sets a value indicating whether this instance is kids. - /// - /// null if [is kids] contains no value, true if [is kids]; otherwise, false. - public bool? IsKids { get; set; } + /// + /// Gets or sets a value indicating whether this instance is kids. + /// + /// null if [is kids] contains no value, true if [is kids]; otherwise, false. + public bool? IsKids { get; set; } - /// - /// Gets or sets a value indicating whether this instance is sports. - /// - /// null if [is sports] contains no value, true if [is sports]; otherwise, false. - public bool? IsSports { get; set; } + /// + /// Gets or sets a value indicating whether this instance is sports. + /// + /// null if [is sports] contains no value, true if [is sports]; otherwise, false. + public bool? IsSports { get; set; } - public bool? IsSeries { get; set; } + public bool? IsSeries { get; set; } - public ItemSortBy[] SortBy { get; set; } + public ItemSortBy[] SortBy { get; set; } - /// - /// Gets or sets the sort order to return results with. - /// - /// The sort order. - public SortOrder? SortOrder { get; set; } - } -} + /// + /// Gets or sets the sort order to return results with. + /// + /// The sort order. + public SortOrder? SortOrder { get; set; } + } diff --git a/MediaBrowser.Model/LiveTv/LiveTvInfo.cs b/MediaBrowser.Model/LiveTv/LiveTvInfo.cs index 7accff24..f7b292a2 100644 --- a/MediaBrowser.Model/LiveTv/LiveTvInfo.cs +++ b/MediaBrowser.Model/LiveTv/LiveTvInfo.cs @@ -4,34 +4,32 @@ #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.LiveTv -{ - public class LiveTvInfo - { - public LiveTvInfo() - { - Services = Array.Empty(); - EnabledUsers = Array.Empty(); - } +namespace MediaBrowser.Model.LiveTv; + public class LiveTvInfo + { + public LiveTvInfo() + { + Services = Array.Empty(); + EnabledUsers = Array.Empty(); + } - /// - /// Gets or sets the services. - /// - /// The services. - public LiveTvServiceInfo[] Services { get; set; } + /// + /// Gets or sets the services. + /// + /// The services. + public LiveTvServiceInfo[] Services { get; set; } - /// - /// Gets or sets a value indicating whether this instance is enabled. - /// - /// true if this instance is enabled; otherwise, false. - public bool IsEnabled { get; set; } + /// + /// Gets or sets a value indicating whether this instance is enabled. + /// + /// true if this instance is enabled; otherwise, false. + public bool IsEnabled { get; set; } - /// - /// Gets or sets the enabled users. - /// - /// The enabled users. - public string[] EnabledUsers { get; set; } - } -} + /// + /// Gets or sets the enabled users. + /// + /// The enabled users. + public string[] EnabledUsers { get; set; } + } diff --git a/MediaBrowser.Model/LiveTv/LiveTvOptions.cs b/MediaBrowser.Model/LiveTv/LiveTvOptions.cs index 3f0c1729..40ce62f4 100644 --- a/MediaBrowser.Model/LiveTv/LiveTvOptions.cs +++ b/MediaBrowser.Model/LiveTv/LiveTvOptions.cs @@ -5,48 +5,46 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.LiveTv -{ - public class LiveTvOptions - { - public LiveTvOptions() - { - TunerHosts = Array.Empty(); - ListingProviders = Array.Empty(); - MediaLocationsCreated = Array.Empty(); - RecordingPostProcessorArguments = "\"{path}\""; - } +namespace MediaBrowser.Model.LiveTv; + public class LiveTvOptions + { + public LiveTvOptions() + { + TunerHosts = Array.Empty(); + ListingProviders = Array.Empty(); + MediaLocationsCreated = Array.Empty(); + RecordingPostProcessorArguments = "\"{path}\""; + } - public int? GuideDays { get; set; } + public int? GuideDays { get; set; } - public string RecordingPath { get; set; } + public string RecordingPath { get; set; } - public string MovieRecordingPath { get; set; } + public string MovieRecordingPath { get; set; } - public string SeriesRecordingPath { get; set; } + public string SeriesRecordingPath { get; set; } - public bool EnableRecordingSubfolders { get; set; } + public bool EnableRecordingSubfolders { get; set; } - public bool EnableOriginalAudioWithEncodedRecordings { get; set; } + public bool EnableOriginalAudioWithEncodedRecordings { get; set; } - public TunerHostInfo[] TunerHosts { get; set; } + public TunerHostInfo[] TunerHosts { get; set; } - public ListingsProviderInfo[] ListingProviders { get; set; } + public ListingsProviderInfo[] ListingProviders { get; set; } - public int PrePaddingSeconds { get; set; } + public int PrePaddingSeconds { get; set; } - public int PostPaddingSeconds { get; set; } + public int PostPaddingSeconds { get; set; } - public string[] MediaLocationsCreated { get; set; } + public string[] MediaLocationsCreated { get; set; } - public string RecordingPostProcessor { get; set; } + public string RecordingPostProcessor { get; set; } - public string RecordingPostProcessorArguments { get; set; } + public string RecordingPostProcessorArguments { get; set; } - public bool SaveRecordingNFO { get; set; } = true; + public bool SaveRecordingNFO { get; set; } = true; - public bool SaveRecordingImages { get; set; } = true; - } -} + public bool SaveRecordingImages { get; set; } = true; + } diff --git a/MediaBrowser.Model/LiveTv/LiveTvServiceInfo.cs b/MediaBrowser.Model/LiveTv/LiveTvServiceInfo.cs index 5bad4797..4b09cf76 100644 --- a/MediaBrowser.Model/LiveTv/LiveTvServiceInfo.cs +++ b/MediaBrowser.Model/LiveTv/LiveTvServiceInfo.cs @@ -5,62 +5,60 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.LiveTv -{ - /// - /// Class ServiceInfo. - /// - public class LiveTvServiceInfo - { - public LiveTvServiceInfo() - { - Tuners = Array.Empty(); - } +namespace MediaBrowser.Model.LiveTv; + /// + /// Class ServiceInfo. + /// + public class LiveTvServiceInfo + { + public LiveTvServiceInfo() + { + Tuners = Array.Empty(); + } - /// - /// Gets or sets the name. - /// - /// The name. - public string Name { get; set; } + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } - /// - /// Gets or sets the home page URL. - /// - /// The home page URL. - public string HomePageUrl { get; set; } + /// + /// Gets or sets the home page URL. + /// + /// The home page URL. + public string HomePageUrl { get; set; } - /// - /// Gets or sets the status. - /// - /// The status. - public LiveTvServiceStatus Status { get; set; } + /// + /// Gets or sets the status. + /// + /// The status. + public LiveTvServiceStatus Status { get; set; } - /// - /// Gets or sets the status message. - /// - /// The status message. - public string StatusMessage { get; set; } + /// + /// Gets or sets the status message. + /// + /// The status message. + public string StatusMessage { get; set; } - /// - /// Gets or sets the version. - /// - /// The version. - public string Version { get; set; } + /// + /// Gets or sets the version. + /// + /// The version. + public string Version { get; set; } - /// - /// Gets or sets a value indicating whether this instance has update available. - /// - /// true if this instance has update available; otherwise, false. - public bool HasUpdateAvailable { get; set; } + /// + /// Gets or sets a value indicating whether this instance has update available. + /// + /// true if this instance has update available; otherwise, false. + public bool HasUpdateAvailable { get; set; } - /// - /// Gets or sets a value indicating whether this instance is visible. - /// - /// true if this instance is visible; otherwise, false. - public bool IsVisible { get; set; } + /// + /// Gets or sets a value indicating whether this instance is visible. + /// + /// true if this instance is visible; otherwise, false. + public bool IsVisible { get; set; } - public string[] Tuners { get; set; } - } -} + public string[] Tuners { get; set; } + } diff --git a/MediaBrowser.Model/LiveTv/LiveTvServiceStatus.cs b/MediaBrowser.Model/LiveTv/LiveTvServiceStatus.cs index 759ff888..fbe7a7b1 100644 --- a/MediaBrowser.Model/LiveTv/LiveTvServiceStatus.cs +++ b/MediaBrowser.Model/LiveTv/LiveTvServiceStatus.cs @@ -4,11 +4,9 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.LiveTv -{ - public enum LiveTvServiceStatus - { - Ok = 0, - Unavailable = 1 - } -} +namespace MediaBrowser.Model.LiveTv; + public enum LiveTvServiceStatus + { + Ok = 0, + Unavailable = 1, + } diff --git a/MediaBrowser.Model/LiveTv/ProgramAudio.cs b/MediaBrowser.Model/LiveTv/ProgramAudio.cs index 9d212ffe..4ed8136a 100644 --- a/MediaBrowser.Model/LiveTv/ProgramAudio.cs +++ b/MediaBrowser.Model/LiveTv/ProgramAudio.cs @@ -4,15 +4,13 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.LiveTv -{ - public enum ProgramAudio - { - Mono, - Stereo, - Dolby, - DolbyDigital, - Thx, - Atmos - } -} +namespace MediaBrowser.Model.LiveTv; + public enum ProgramAudio + { + Mono, + Stereo, + Dolby, + DolbyDigital, + Thx, + Atmos + } diff --git a/MediaBrowser.Model/LiveTv/RecordingQuery.cs b/MediaBrowser.Model/LiveTv/RecordingQuery.cs index a9679e17..93484228 100644 --- a/MediaBrowser.Model/LiveTv/RecordingQuery.cs +++ b/MediaBrowser.Model/LiveTv/RecordingQuery.cs @@ -5,94 +5,92 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Querying; -namespace MediaBrowser.Model.LiveTv -{ - /// - /// Class RecordingQuery. - /// - public class RecordingQuery - { - public RecordingQuery() - { - EnableTotalRecordCount = true; - } +namespace MediaBrowser.Model.LiveTv; + /// + /// Class RecordingQuery. + /// + public class RecordingQuery + { + public RecordingQuery() + { + EnableTotalRecordCount = true; + } - /// - /// Gets or sets the channel identifier. - /// - /// The channel identifier. - public string ChannelId { get; set; } + /// + /// Gets or sets the channel identifier. + /// + /// The channel identifier. + public string ChannelId { get; set; } - /// - /// Gets or sets the user identifier. - /// - /// The user identifier. - public Guid UserId { get; set; } + /// + /// Gets or sets the user identifier. + /// + /// The user identifier. + public Guid UserId { get; set; } - /// - /// Gets or sets the identifier. - /// - /// The identifier. - public string Id { get; set; } + /// + /// Gets or sets the identifier. + /// + /// The identifier. + public string Id { get; set; } - /// - /// Gets or sets the start index. Use for paging. - /// - /// The start index. - public int? StartIndex { get; set; } + /// + /// Gets or sets the start index. Use for paging. + /// + /// The start index. + public int? StartIndex { get; set; } - /// - /// Gets or sets the maximum number of items to return. - /// - /// The limit. - public int? Limit { get; set; } + /// + /// Gets or sets the maximum number of items to return. + /// + /// The limit. + public int? Limit { get; set; } - /// - /// Gets or sets the status. - /// - /// The status. - public RecordingStatus? Status { get; set; } + /// + /// Gets or sets the status. + /// + /// The status. + public RecordingStatus? Status { get; set; } - /// - /// Gets or sets a value indicating whether this instance is in progress. - /// - /// null if [is in progress] contains no value, true if [is in progress]; otherwise, false. - public bool? IsInProgress { get; set; } + /// + /// Gets or sets a value indicating whether this instance is in progress. + /// + /// null if [is in progress] contains no value, true if [is in progress]; otherwise, false. + public bool? IsInProgress { get; set; } - /// - /// Gets or sets the series timer identifier. - /// - /// The series timer identifier. - public string SeriesTimerId { get; set; } + /// + /// Gets or sets the series timer identifier. + /// + /// The series timer identifier. + public string SeriesTimerId { get; set; } - /// - /// Gets or sets the fields to return within the items, in addition to basic information. - /// - /// The fields. - public ItemFields[] Fields { get; set; } + /// + /// Gets or sets the fields to return within the items, in addition to basic information. + /// + /// The fields. + public ItemFields[] Fields { get; set; } - public bool? EnableImages { get; set; } + public bool? EnableImages { get; set; } - public bool? IsLibraryItem { get; set; } + public bool? IsLibraryItem { get; set; } - public bool? IsNews { get; set; } + public bool? IsNews { get; set; } - public bool? IsMovie { get; set; } + public bool? IsMovie { get; set; } - public bool? IsSeries { get; set; } + public bool? IsSeries { get; set; } - public bool? IsKids { get; set; } + public bool? IsKids { get; set; } - public bool? IsSports { get; set; } + public bool? IsSports { get; set; } - public int? ImageTypeLimit { get; set; } + public int? ImageTypeLimit { get; set; } - public ImageType[] EnableImageTypes { get; set; } + public ImageType[] EnableImageTypes { get; set; } - public bool EnableTotalRecordCount { get; set; } - } -} + public bool EnableTotalRecordCount { get; set; } + } diff --git a/MediaBrowser.Model/LiveTv/RecordingStatus.cs b/MediaBrowser.Model/LiveTv/RecordingStatus.cs index 23b99c08..6c3ece1c 100644 --- a/MediaBrowser.Model/LiveTv/RecordingStatus.cs +++ b/MediaBrowser.Model/LiveTv/RecordingStatus.cs @@ -4,16 +4,14 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.LiveTv -{ - public enum RecordingStatus - { - New, - InProgress, - Completed, - Cancelled, - ConflictedOk, - ConflictedNotOk, - Error - } -} +namespace MediaBrowser.Model.LiveTv; + public enum RecordingStatus + { + New, + InProgress, + Completed, + Cancelled, + ConflictedOk, + ConflictedNotOk, + Error + } diff --git a/MediaBrowser.Model/LiveTv/SeriesTimerInfoDto.cs b/MediaBrowser.Model/LiveTv/SeriesTimerInfoDto.cs index 3cca0a66..e87c2d34 100644 --- a/MediaBrowser.Model/LiveTv/SeriesTimerInfoDto.cs +++ b/MediaBrowser.Model/LiveTv/SeriesTimerInfoDto.cs @@ -5,94 +5,92 @@ #nullable disable #pragma warning disable CS1591 -using System; -using System.Collections.Generic; +using global::System; +using global::System.Collections.Generic; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Model.LiveTv -{ - public enum KeepUntil - { - UntilDeleted, - UntilSpaceNeeded, - UntilWatched, - UntilDate - } +namespace MediaBrowser.Model.LiveTv; + public enum KeepUntil + { + UntilDeleted, + UntilSpaceNeeded, + UntilWatched, + UntilDate + } - /// - /// Class SeriesTimerInfoDto. - /// - public class SeriesTimerInfoDto : BaseTimerInfoDto - { - public SeriesTimerInfoDto() - { - ImageTags = new Dictionary(); - Days = Array.Empty(); - Type = "SeriesTimer"; - } + /// + /// Class SeriesTimerInfoDto. + /// + public class SeriesTimerInfoDto : BaseTimerInfoDto + { + public SeriesTimerInfoDto() + { + ImageTags = new Dictionary(); + Days = Array.Empty(); + Type = "SeriesTimer"; + } - /// - /// Gets or sets a value indicating whether [record any time]. - /// - /// true if [record any time]; otherwise, false. - public bool RecordAnyTime { get; set; } + /// + /// Gets or sets a value indicating whether [record any time]. + /// + /// true if [record any time]; otherwise, false. + public bool RecordAnyTime { get; set; } - public bool SkipEpisodesInLibrary { get; set; } + public bool SkipEpisodesInLibrary { get; set; } - /// - /// Gets or sets a value indicating whether [record any channel]. - /// - /// true if [record any channel]; otherwise, false. - public bool RecordAnyChannel { get; set; } + /// + /// Gets or sets a value indicating whether [record any channel]. + /// + /// true if [record any channel]; otherwise, false. + public bool RecordAnyChannel { get; set; } - public int KeepUpTo { get; set; } + public int KeepUpTo { get; set; } - /// - /// Gets or sets a value indicating whether [record new only]. - /// - /// true if [record new only]; otherwise, false. - public bool RecordNewOnly { get; set; } + /// + /// Gets or sets a value indicating whether [record new only]. + /// + /// true if [record new only]; otherwise, false. + public bool RecordNewOnly { get; set; } - /// - /// Gets or sets the days. - /// - /// The days. - public DayOfWeek[] Days { get; set; } + /// + /// Gets or sets the days. + /// + /// The days. + public DayOfWeek[] Days { get; set; } - /// - /// Gets or sets the day pattern. - /// - /// The day pattern. - public DayPattern? DayPattern { get; set; } + /// + /// Gets or sets the day pattern. + /// + /// The day pattern. + public DayPattern? DayPattern { get; set; } - /// - /// Gets or sets the image tags. - /// - /// The image tags. - public Dictionary ImageTags { get; set; } + /// + /// Gets or sets the image tags. + /// + /// The image tags. + public Dictionary ImageTags { get; set; } - /// - /// Gets or sets the parent thumb item id. - /// - /// The parent thumb item id. - public string ParentThumbItemId { get; set; } + /// + /// Gets or sets the parent thumb item id. + /// + /// The parent thumb item id. + public string ParentThumbItemId { get; set; } - /// - /// Gets or sets the parent thumb image tag. - /// - /// The parent thumb image tag. - public string ParentThumbImageTag { get; set; } + /// + /// Gets or sets the parent thumb image tag. + /// + /// The parent thumb image tag. + public string ParentThumbImageTag { get; set; } - /// - /// Gets or sets the parent primary image item identifier. - /// - /// The parent primary image item identifier. - public Guid? ParentPrimaryImageItemId { get; set; } + /// + /// Gets or sets the parent primary image item identifier. + /// + /// The parent primary image item identifier. + public Guid? ParentPrimaryImageItemId { get; set; } - /// - /// Gets or sets the parent primary image tag. - /// - /// The parent primary image tag. - public string ParentPrimaryImageTag { get; set; } - } -} + /// + /// Gets or sets the parent primary image tag. + /// + /// The parent primary image tag. + public string ParentPrimaryImageTag { get; set; } + } diff --git a/MediaBrowser.Model/LiveTv/SeriesTimerQuery.cs b/MediaBrowser.Model/LiveTv/SeriesTimerQuery.cs index 45d5bc0c..fd7c8ad7 100644 --- a/MediaBrowser.Model/LiveTv/SeriesTimerQuery.cs +++ b/MediaBrowser.Model/LiveTv/SeriesTimerQuery.cs @@ -6,20 +6,18 @@ using Jellyfin.Database.Implementations.Enums; -namespace MediaBrowser.Model.LiveTv -{ - public class SeriesTimerQuery - { - /// - /// Gets or sets the sort by - SortName, Priority. - /// - /// The sort by. - public string? SortBy { get; set; } +namespace MediaBrowser.Model.LiveTv; + public class SeriesTimerQuery + { + /// + /// Gets or sets the sort by - SortName, Priority. + /// + /// The sort by. + public string? SortBy { get; set; } - /// - /// Gets or sets the sort order. - /// - /// The sort order. - public SortOrder SortOrder { get; set; } - } -} + /// + /// Gets or sets the sort order. + /// + /// The sort order. + public SortOrder SortOrder { get; set; } + } diff --git a/MediaBrowser.Model/LiveTv/TimerInfoDto.cs b/MediaBrowser.Model/LiveTv/TimerInfoDto.cs index 57ed5f34..f4e52e6c 100644 --- a/MediaBrowser.Model/LiveTv/TimerInfoDto.cs +++ b/MediaBrowser.Model/LiveTv/TimerInfoDto.cs @@ -7,43 +7,41 @@ using MediaBrowser.Model.Dto; -namespace MediaBrowser.Model.LiveTv -{ - public class TimerInfoDto : BaseTimerInfoDto - { - public TimerInfoDto() - { - Type = "Timer"; - } +namespace MediaBrowser.Model.LiveTv; + public class TimerInfoDto : BaseTimerInfoDto + { + public TimerInfoDto() + { + Type = "Timer"; + } - /// - /// Gets or sets the status. - /// - /// The status. - public RecordingStatus Status { get; set; } + /// + /// Gets or sets the status. + /// + /// The status. + public RecordingStatus Status { get; set; } - /// - /// Gets or sets the series timer identifier. - /// - /// The series timer identifier. - public string SeriesTimerId { get; set; } + /// + /// Gets or sets the series timer identifier. + /// + /// The series timer identifier. + public string SeriesTimerId { get; set; } - /// - /// Gets or sets the external series timer identifier. - /// - /// The external series timer identifier. - public string ExternalSeriesTimerId { get; set; } + /// + /// Gets or sets the external series timer identifier. + /// + /// The external series timer identifier. + public string ExternalSeriesTimerId { get; set; } - /// - /// Gets or sets the run time ticks. - /// - /// The run time ticks. - public long? RunTimeTicks { get; set; } + /// + /// Gets or sets the run time ticks. + /// + /// The run time ticks. + public long? RunTimeTicks { get; set; } - /// - /// Gets or sets the program information. - /// - /// The program information. - public BaseItemDto ProgramInfo { get; set; } - } -} + /// + /// Gets or sets the program information. + /// + /// The program information. + public BaseItemDto ProgramInfo { get; set; } + } diff --git a/MediaBrowser.Model/LiveTv/TimerQuery.cs b/MediaBrowser.Model/LiveTv/TimerQuery.cs index d047e953..d1586000 100644 --- a/MediaBrowser.Model/LiveTv/TimerQuery.cs +++ b/MediaBrowser.Model/LiveTv/TimerQuery.cs @@ -5,26 +5,24 @@ #nullable disable #pragma warning disable CS1591 -namespace MediaBrowser.Model.LiveTv -{ - public class TimerQuery - { - /// - /// Gets or sets the channel identifier. - /// - /// The channel identifier. - public string ChannelId { get; set; } +namespace MediaBrowser.Model.LiveTv; + public class TimerQuery + { + /// + /// Gets or sets the channel identifier. + /// + /// The channel identifier. + public string ChannelId { get; set; } - public string Id { get; set; } + public string Id { get; set; } - /// - /// Gets or sets the series timer identifier. - /// - /// The series timer identifier. - public string SeriesTimerId { get; set; } + /// + /// Gets or sets the series timer identifier. + /// + /// The series timer identifier. + public string SeriesTimerId { get; set; } - public bool? IsActive { get; set; } + public bool? IsActive { get; set; } - public bool? IsScheduled { get; set; } - } -} + public bool? IsScheduled { get; set; } + } diff --git a/MediaBrowser.Model/LiveTv/TunerHostInfo.cs b/MediaBrowser.Model/LiveTv/TunerHostInfo.cs index 4c06acbd..22219362 100644 --- a/MediaBrowser.Model/LiveTv/TunerHostInfo.cs +++ b/MediaBrowser.Model/LiveTv/TunerHostInfo.cs @@ -5,50 +5,48 @@ #nullable disable #pragma warning disable CS1591 -namespace MediaBrowser.Model.LiveTv -{ - public class TunerHostInfo - { - public TunerHostInfo() - { - AllowHWTranscoding = true; - IgnoreDts = true; - ReadAtNativeFramerate = false; - AllowStreamSharing = true; - AllowFmp4TranscodingContainer = false; - FallbackMaxStreamingBitrate = 30000000; - } +namespace MediaBrowser.Model.LiveTv; + public class TunerHostInfo + { + public TunerHostInfo() + { + AllowHWTranscoding = true; + IgnoreDts = true; + ReadAtNativeFramerate = false; + AllowStreamSharing = true; + AllowFmp4TranscodingContainer = false; + FallbackMaxStreamingBitrate = 30000000; + } - public string Id { get; set; } + public string Id { get; set; } - public string Url { get; set; } + public string Url { get; set; } - public string Type { get; set; } + public string Type { get; set; } - public string DeviceId { get; set; } + public string DeviceId { get; set; } - public string FriendlyName { get; set; } + public string FriendlyName { get; set; } - public bool ImportFavoritesOnly { get; set; } + public bool ImportFavoritesOnly { get; set; } - public bool AllowHWTranscoding { get; set; } + public bool AllowHWTranscoding { get; set; } - public bool AllowFmp4TranscodingContainer { get; set; } + public bool AllowFmp4TranscodingContainer { get; set; } - public bool AllowStreamSharing { get; set; } + public bool AllowStreamSharing { get; set; } - public int FallbackMaxStreamingBitrate { get; set; } + public int FallbackMaxStreamingBitrate { get; set; } - public bool EnableStreamLooping { get; set; } + public bool EnableStreamLooping { get; set; } - public string Source { get; set; } + public string Source { get; set; } - public int TunerCount { get; set; } + public int TunerCount { get; set; } - public string UserAgent { get; set; } + public string UserAgent { get; set; } - public bool IgnoreDts { get; set; } + public bool IgnoreDts { get; set; } - public bool ReadAtNativeFramerate { get; set; } - } -} + public bool ReadAtNativeFramerate { get; set; } + } diff --git a/MediaBrowser.Model/Lyrics/LyricDto.cs b/MediaBrowser.Model/Lyrics/LyricDto.cs index 3ee5e137..989ffc7c 100644 --- a/MediaBrowser.Model/Lyrics/LyricDto.cs +++ b/MediaBrowser.Model/Lyrics/LyricDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; - namespace MediaBrowser.Model.Lyrics; +using global::System.Collections.Generic; + /// /// LyricResponse model. /// diff --git a/MediaBrowser.Model/Lyrics/LyricLine.cs b/MediaBrowser.Model/Lyrics/LyricLine.cs index b06ad38d..b160ef1d 100644 --- a/MediaBrowser.Model/Lyrics/LyricLine.cs +++ b/MediaBrowser.Model/Lyrics/LyricLine.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; - namespace MediaBrowser.Model.Lyrics; +using global::System.Collections.Generic; + /// /// Lyric model. /// diff --git a/MediaBrowser.Model/Lyrics/LyricResponse.cs b/MediaBrowser.Model/Lyrics/LyricResponse.cs index a856488a..d04c36e4 100644 --- a/MediaBrowser.Model/Lyrics/LyricResponse.cs +++ b/MediaBrowser.Model/Lyrics/LyricResponse.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; - namespace MediaBrowser.Model.Lyrics; +using global::System.IO; + /// /// LyricResponse model. /// diff --git a/MediaBrowser.Model/Lyrics/LyricSearchRequest.cs b/MediaBrowser.Model/Lyrics/LyricSearchRequest.cs index e01795e1..81079643 100644 --- a/MediaBrowser.Model/Lyrics/LyricSearchRequest.cs +++ b/MediaBrowser.Model/Lyrics/LyricSearchRequest.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using MediaBrowser.Model.Entities; - namespace MediaBrowser.Model.Lyrics; +using global::System; +using global::System.Collections.Generic; +using MediaBrowser.Model.Entities; + /// /// Lyric search request. /// diff --git a/MediaBrowser.Model/Lyrics/UploadLyricDto.cs b/MediaBrowser.Model/Lyrics/UploadLyricDto.cs index b7365e5d..4aff5fa2 100644 --- a/MediaBrowser.Model/Lyrics/UploadLyricDto.cs +++ b/MediaBrowser.Model/Lyrics/UploadLyricDto.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.ComponentModel.DataAnnotations; -using Microsoft.AspNetCore.Http; - namespace MediaBrowser.Model.Lyrics; +using global::System.ComponentModel.DataAnnotations; +using Microsoft.AspNetCore.Http; + /// /// Upload lyric dto. /// diff --git a/MediaBrowser.Model/MediaInfo/AudioCodec.cs b/MediaBrowser.Model/MediaInfo/AudioCodec.cs index 87bccac0..2be4b35c 100644 --- a/MediaBrowser.Model/MediaInfo/AudioCodec.cs +++ b/MediaBrowser.Model/MediaInfo/AudioCodec.cs @@ -4,35 +4,33 @@ #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.MediaInfo -{ - public static class AudioCodec - { - public static string GetFriendlyName(string codec) - { - if (codec.Length == 0) - { - return codec; - } +namespace MediaBrowser.Model.MediaInfo; + public static class AudioCodec + { + public static string GetFriendlyName(string codec) + { + if (codec.Length == 0) + { + return codec; + } - if (string.Equals(codec, "ac3", StringComparison.OrdinalIgnoreCase)) - { - return "Dolby Digital"; - } + if (string.Equals(codec, "ac3", StringComparison.OrdinalIgnoreCase)) + { + return "Dolby Digital"; + } - if (string.Equals(codec, "eac3", StringComparison.OrdinalIgnoreCase)) - { - return "Dolby Digital+"; - } + if (string.Equals(codec, "eac3", StringComparison.OrdinalIgnoreCase)) + { + return "Dolby Digital+"; + } - if (string.Equals(codec, "dca", StringComparison.OrdinalIgnoreCase)) - { - return "DTS"; - } + if (string.Equals(codec, "dca", StringComparison.OrdinalIgnoreCase)) + { + return "DTS"; + } - return codec.ToUpperInvariant(); - } - } -} + return codec.ToUpperInvariant(); + } + } diff --git a/MediaBrowser.Model/MediaInfo/AudioIndexSource.cs b/MediaBrowser.Model/MediaInfo/AudioIndexSource.cs index dfad7e1e..c003824b 100644 --- a/MediaBrowser.Model/MediaInfo/AudioIndexSource.cs +++ b/MediaBrowser.Model/MediaInfo/AudioIndexSource.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace MediaBrowser.Model.MediaInfo; +using global::System; + /// /// How is the audio index determined. /// @@ -30,5 +30,5 @@ public enum AudioIndexSource /// /// The index is specified by the user. /// - User = 1 << 2 + User = 1 << 2, } diff --git a/MediaBrowser.Model/MediaInfo/BlurayDiscInfo.cs b/MediaBrowser.Model/MediaInfo/BlurayDiscInfo.cs index 8df7aef1..672aba52 100644 --- a/MediaBrowser.Model/MediaInfo/BlurayDiscInfo.cs +++ b/MediaBrowser.Model/MediaInfo/BlurayDiscInfo.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Model.MediaInfo; + #nullable disable using MediaBrowser.Model.Entities; -namespace MediaBrowser.Model.MediaInfo; - /// /// Represents the result of BDInfo output. /// diff --git a/MediaBrowser.Model/MediaInfo/LiveStreamRequest.cs b/MediaBrowser.Model/MediaInfo/LiveStreamRequest.cs index 545f111b..e73bc764 100644 --- a/MediaBrowser.Model/MediaInfo/LiveStreamRequest.cs +++ b/MediaBrowser.Model/MediaInfo/LiveStreamRequest.cs @@ -5,48 +5,46 @@ #nullable disable #pragma warning disable CS1591 -using System; -using System.Collections.Generic; +using global::System; +using global::System.Collections.Generic; using MediaBrowser.Model.Dlna; -namespace MediaBrowser.Model.MediaInfo -{ - public class LiveStreamRequest - { - public LiveStreamRequest() - { - EnableDirectPlay = true; - EnableDirectStream = true; - AlwaysBurnInSubtitleWhenTranscoding = false; - DirectPlayProtocols = new MediaProtocol[] { MediaProtocol.Http }; - } +namespace MediaBrowser.Model.MediaInfo; + public class LiveStreamRequest + { + public LiveStreamRequest() + { + EnableDirectPlay = true; + EnableDirectStream = true; + AlwaysBurnInSubtitleWhenTranscoding = false; + DirectPlayProtocols = new MediaProtocol[] { MediaProtocol.Http }; + } - public string OpenToken { get; set; } + public string OpenToken { get; set; } - public Guid UserId { get; set; } + public Guid UserId { get; set; } - public string PlaySessionId { get; set; } + public string PlaySessionId { get; set; } - public int? MaxStreamingBitrate { get; set; } + public int? MaxStreamingBitrate { get; set; } - public long? StartTimeTicks { get; set; } + public long? StartTimeTicks { get; set; } - public int? AudioStreamIndex { get; set; } + public int? AudioStreamIndex { get; set; } - public int? SubtitleStreamIndex { get; set; } + public int? SubtitleStreamIndex { get; set; } - public int? MaxAudioChannels { get; set; } + public int? MaxAudioChannels { get; set; } - public Guid ItemId { get; set; } + public Guid ItemId { get; set; } - public DeviceProfile DeviceProfile { get; set; } + public DeviceProfile DeviceProfile { get; set; } - public bool EnableDirectPlay { get; set; } + public bool EnableDirectPlay { get; set; } - public bool EnableDirectStream { get; set; } + public bool EnableDirectStream { get; set; } - public bool AlwaysBurnInSubtitleWhenTranscoding { get; set; } + public bool AlwaysBurnInSubtitleWhenTranscoding { get; set; } - public IReadOnlyList DirectPlayProtocols { get; set; } - } -} + public IReadOnlyList DirectPlayProtocols { get; set; } + } diff --git a/MediaBrowser.Model/MediaInfo/LiveStreamResponse.cs b/MediaBrowser.Model/MediaInfo/LiveStreamResponse.cs index 23da3b65..0672d5ce 100644 --- a/MediaBrowser.Model/MediaInfo/LiveStreamResponse.cs +++ b/MediaBrowser.Model/MediaInfo/LiveStreamResponse.cs @@ -6,15 +6,13 @@ using MediaBrowser.Model.Dto; -namespace MediaBrowser.Model.MediaInfo -{ - public class LiveStreamResponse - { - public LiveStreamResponse(MediaSourceInfo mediaSource) - { - MediaSource = mediaSource; - } +namespace MediaBrowser.Model.MediaInfo; + public class LiveStreamResponse + { + public LiveStreamResponse(MediaSourceInfo mediaSource) + { + MediaSource = mediaSource; + } - public MediaSourceInfo MediaSource { get; } - } -} + public MediaSourceInfo MediaSource { get; } + } diff --git a/MediaBrowser.Model/MediaInfo/MediaInfo.cs b/MediaBrowser.Model/MediaInfo/MediaInfo.cs index a194b477..29a0ca8d 100644 --- a/MediaBrowser.Model/MediaInfo/MediaInfo.cs +++ b/MediaBrowser.Model/MediaInfo/MediaInfo.cs @@ -5,86 +5,84 @@ #nullable disable #pragma warning disable CS1591 -using System; -using System.Collections.Generic; +using global::System; +using global::System.Collections.Generic; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Model.MediaInfo -{ - public class MediaInfo : MediaSourceInfo, IHasProviderIds - { - public MediaInfo() - { - Chapters = Array.Empty(); - Artists = Array.Empty(); - AlbumArtists = Array.Empty(); - Studios = Array.Empty(); - Genres = Array.Empty(); - People = Array.Empty(); - ProviderIds = new Dictionary(StringComparer.OrdinalIgnoreCase); - } +namespace MediaBrowser.Model.MediaInfo; + public class MediaInfo : MediaSourceInfo, IHasProviderIds + { + public MediaInfo() + { + Chapters = Array.Empty(); + Artists = Array.Empty(); + AlbumArtists = Array.Empty(); + Studios = Array.Empty(); + Genres = Array.Empty(); + People = Array.Empty(); + ProviderIds = new Dictionary(StringComparer.OrdinalIgnoreCase); + } - public ChapterInfo[] Chapters { get; set; } + public ChapterInfo[] Chapters { get; set; } - /// - /// Gets or sets the album. - /// - /// The album. - public string Album { get; set; } + /// + /// Gets or sets the album. + /// + /// The album. + public string Album { get; set; } - /// - /// Gets or sets the artists. - /// - /// The artists. - public string[] Artists { get; set; } + /// + /// Gets or sets the artists. + /// + /// The artists. + public string[] Artists { get; set; } - /// - /// Gets or sets the album artists. - /// - /// The album artists. - public string[] AlbumArtists { get; set; } + /// + /// Gets or sets the album artists. + /// + /// The album artists. + public string[] AlbumArtists { get; set; } - /// - /// Gets or sets the studios. - /// - /// The studios. - public string[] Studios { get; set; } + /// + /// Gets or sets the studios. + /// + /// The studios. + public string[] Studios { get; set; } - public string[] Genres { get; set; } + public string[] Genres { get; set; } - public string ShowName { get; set; } + public string ShowName { get; set; } - public string ForcedSortName { get; set; } + public string ForcedSortName { get; set; } - public int? IndexNumber { get; set; } + public int? IndexNumber { get; set; } - public int? ParentIndexNumber { get; set; } + public int? ParentIndexNumber { get; set; } - public int? ProductionYear { get; set; } + public int? ProductionYear { get; set; } - public DateTime? PremiereDate { get; set; } + public DateTime? PremiereDate { get; set; } - public BaseItemPerson[] People { get; set; } + public BaseItemPerson[] People { get; set; } - public Dictionary ProviderIds { get; set; } + public Dictionary ProviderIds { get; set; } - /// - /// Gets or sets the official rating. - /// - /// The official rating. - public string OfficialRating { get; set; } + /// + /// Gets or sets the official rating. + /// + /// The official rating. + public string OfficialRating { get; set; } - /// - /// Gets or sets the official rating description. - /// - /// The official rating description. - public string OfficialRatingDescription { get; set; } + /// + /// Gets or sets the official rating description. + /// + /// The official rating description. + public string OfficialRatingDescription { get; set; } - /// - /// Gets or sets the overview. - /// - /// The overview. - public string Overview { get; set; } - } -} + /// + /// Gets or sets the overview. + /// + /// The overview. + public string Overview { get; set; } + } diff --git a/MediaBrowser.Model/MediaInfo/MediaProtocol.cs b/MediaBrowser.Model/MediaInfo/MediaProtocol.cs index d09f083e..f8c08938 100644 --- a/MediaBrowser.Model/MediaInfo/MediaProtocol.cs +++ b/MediaBrowser.Model/MediaInfo/MediaProtocol.cs @@ -4,16 +4,14 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.MediaInfo -{ - public enum MediaProtocol - { - File = 0, - Http = 1, - Rtmp = 2, - Rtsp = 3, - Udp = 4, - Rtp = 5, - Ftp = 6 - } -} +namespace MediaBrowser.Model.MediaInfo; + public enum MediaProtocol + { + File = 0, + Http = 1, + Rtmp = 2, + Rtsp = 3, + Udp = 4, + Rtp = 5, + Ftp = 6, + } diff --git a/MediaBrowser.Model/MediaInfo/PlaybackInfoResponse.cs b/MediaBrowser.Model/MediaInfo/PlaybackInfoResponse.cs index 15934b80..e895fc73 100644 --- a/MediaBrowser.Model/MediaInfo/PlaybackInfoResponse.cs +++ b/MediaBrowser.Model/MediaInfo/PlaybackInfoResponse.cs @@ -2,42 +2,40 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using MediaBrowser.Model.Dlna; -using MediaBrowser.Model.Dto; +namespace MediaBrowser.Model.MediaInfo; + using global::System; + using global::System.Collections.Generic; + using MediaBrowser.Model.Dlna; + using MediaBrowser.Model.Dto; -namespace MediaBrowser.Model.MediaInfo -{ - /// - /// Class PlaybackInfoResponse. - /// - public class PlaybackInfoResponse - { - /// - /// Initializes a new instance of the class. - /// - public PlaybackInfoResponse() - { - MediaSources = Array.Empty(); - } + /// + /// Class PlaybackInfoResponse. + /// + public class PlaybackInfoResponse + { + /// + /// Initializes a new instance of the class. + /// + public PlaybackInfoResponse() + { + MediaSources = Array.Empty(); + } - /// - /// Gets or sets the media sources. - /// - /// The media sources. - public IReadOnlyList MediaSources { get; set; } + /// + /// Gets or sets the media sources. + /// + /// The media sources. + public IReadOnlyList MediaSources { get; set; } - /// - /// Gets or sets the play session identifier. - /// - /// The play session identifier. - public string? PlaySessionId { get; set; } + /// + /// Gets or sets the play session identifier. + /// + /// The play session identifier. + public string? PlaySessionId { get; set; } - /// - /// Gets or sets the error code. - /// - /// The error code. - public PlaybackErrorCode? ErrorCode { get; set; } - } -} + /// + /// Gets or sets the error code. + /// + /// The error code. + public PlaybackErrorCode? ErrorCode { get; set; } + } diff --git a/MediaBrowser.Model/MediaInfo/SubtitleFormat.cs b/MediaBrowser.Model/MediaInfo/SubtitleFormat.cs index dd7085bc..52a991f7 100644 --- a/MediaBrowser.Model/MediaInfo/SubtitleFormat.cs +++ b/MediaBrowser.Model/MediaInfo/SubtitleFormat.cs @@ -4,16 +4,14 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.MediaInfo -{ - public static class SubtitleFormat - { - public const string SRT = "srt"; - public const string SUBRIP = "subrip"; - public const string SSA = "ssa"; - public const string ASS = "ass"; - public const string VTT = "vtt"; - public const string WEBVTT = "webvtt"; - public const string TTML = "ttml"; - } -} +namespace MediaBrowser.Model.MediaInfo; + public static class SubtitleFormat + { + public const string SRT = "srt"; + public const string SUBRIP = "subrip"; + public const string SSA = "ssa"; + public const string ASS = "ass"; + public const string VTT = "vtt"; + public const string WEBVTT = "webvtt"; + public const string TTML = "ttml"; + } diff --git a/MediaBrowser.Model/MediaInfo/SubtitleTrackEvent.cs b/MediaBrowser.Model/MediaInfo/SubtitleTrackEvent.cs index 2d955693..77d91b34 100644 --- a/MediaBrowser.Model/MediaInfo/SubtitleTrackEvent.cs +++ b/MediaBrowser.Model/MediaInfo/SubtitleTrackEvent.cs @@ -4,22 +4,20 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.MediaInfo -{ - public class SubtitleTrackEvent - { - public SubtitleTrackEvent(string id, string text) - { - Id = id; - Text = text; - } +namespace MediaBrowser.Model.MediaInfo; + public class SubtitleTrackEvent + { + public SubtitleTrackEvent(string id, string text) + { + Id = id; + Text = text; + } - public string Id { get; set; } + public string Id { get; set; } - public string Text { get; set; } + public string Text { get; set; } - public long StartPositionTicks { get; set; } + public long StartPositionTicks { get; set; } - public long EndPositionTicks { get; set; } - } -} + public long EndPositionTicks { get; set; } + } diff --git a/MediaBrowser.Model/MediaInfo/SubtitleTrackInfo.cs b/MediaBrowser.Model/MediaInfo/SubtitleTrackInfo.cs index 83a7aa9e..83d86fbd 100644 --- a/MediaBrowser.Model/MediaInfo/SubtitleTrackInfo.cs +++ b/MediaBrowser.Model/MediaInfo/SubtitleTrackInfo.cs @@ -4,18 +4,16 @@ #pragma warning disable CS1591 -using System; -using System.Collections.Generic; +using global::System; +using global::System.Collections.Generic; -namespace MediaBrowser.Model.MediaInfo -{ - public class SubtitleTrackInfo - { - public SubtitleTrackInfo() - { - TrackEvents = Array.Empty(); - } +namespace MediaBrowser.Model.MediaInfo; + public class SubtitleTrackInfo + { + public SubtitleTrackInfo() + { + TrackEvents = Array.Empty(); + } - public IReadOnlyList TrackEvents { get; set; } - } -} + public IReadOnlyList TrackEvents { get; set; } + } diff --git a/MediaBrowser.Model/MediaInfo/TransportStreamTimestamp.cs b/MediaBrowser.Model/MediaInfo/TransportStreamTimestamp.cs index f6b63613..0c8d87d6 100644 --- a/MediaBrowser.Model/MediaInfo/TransportStreamTimestamp.cs +++ b/MediaBrowser.Model/MediaInfo/TransportStreamTimestamp.cs @@ -4,12 +4,10 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.MediaInfo -{ - public enum TransportStreamTimestamp - { - None, - Zero, - Valid - } -} +namespace MediaBrowser.Model.MediaInfo; + public enum TransportStreamTimestamp + { + None, + Zero, + Valid + } diff --git a/MediaBrowser.Model/MediaSegments/MediaSegmentDto.cs b/MediaBrowser.Model/MediaSegments/MediaSegmentDto.cs index a6d6ab89..668d52eb 100644 --- a/MediaBrowser.Model/MediaSegments/MediaSegmentDto.cs +++ b/MediaBrowser.Model/MediaSegments/MediaSegmentDto.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.ComponentModel; -using Jellyfin.Database.Implementations.Enums; - namespace MediaBrowser.Model.MediaSegments; +using global::System; +using global::System.ComponentModel; +using Jellyfin.Database.Implementations.Enums; + /// /// Api model for MediaSegment's. /// diff --git a/MediaBrowser.Model/MediaSegments/MediaSegmentGenerationRequest.cs b/MediaBrowser.Model/MediaSegments/MediaSegmentGenerationRequest.cs index 346f4388..c66cf301 100644 --- a/MediaBrowser.Model/MediaSegments/MediaSegmentGenerationRequest.cs +++ b/MediaBrowser.Model/MediaSegments/MediaSegmentGenerationRequest.cs @@ -1,14 +1,14 @@ -// +// // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; +namespace MediaBrowser.Model; + +using global::System; +using global::System.Collections.Generic; using Jellyfin.Database.Implementations.Entities; using MediaBrowser.Model.MediaSegments; -namespace MediaBrowser.Model; - /// /// Model containing the arguments for enumerating the requested media item. /// diff --git a/MediaBrowser.Model/Net/EndPointInfo.cs b/MediaBrowser.Model/Net/EndPointInfo.cs index 607cb51e..ae5fa9ff 100644 --- a/MediaBrowser.Model/Net/EndPointInfo.cs +++ b/MediaBrowser.Model/Net/EndPointInfo.cs @@ -4,12 +4,10 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Net -{ - public class EndPointInfo - { - public bool IsLocal { get; set; } +namespace MediaBrowser.Model.Net; + public class EndPointInfo + { + public bool IsLocal { get; set; } - public bool IsInNetwork { get; set; } - } -} + public bool IsInNetwork { get; set; } + } diff --git a/MediaBrowser.Model/Net/IPData.cs b/MediaBrowser.Model/Net/IPData.cs index b7ade320..3d1a2699 100644 --- a/MediaBrowser.Model/Net/IPData.cs +++ b/MediaBrowser.Model/Net/IPData.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Net; -using System.Net.Sockets; - namespace MediaBrowser.Model.Net; +using global::System.Net; +using global::System.Net.Sockets; + /// /// Base network object class. /// diff --git a/MediaBrowser.Model/Net/ISocketFactory.cs b/MediaBrowser.Model/Net/ISocketFactory.cs index 72dd6a01..20fed09a 100644 --- a/MediaBrowser.Model/Net/ISocketFactory.cs +++ b/MediaBrowser.Model/Net/ISocketFactory.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Net; -using System.Net.Sockets; - namespace MediaBrowser.Model.Net; +using global::System.Net; +using global::System.Net.Sockets; + /// /// Implemented by components that can create specific socket configurations. /// diff --git a/MediaBrowser.Model/Net/MimeTypes.cs b/MediaBrowser.Model/Net/MimeTypes.cs index 72aa89fb..78453784 100644 --- a/MediaBrowser.Model/Net/MimeTypes.cs +++ b/MediaBrowser.Model/Net/MimeTypes.cs @@ -4,203 +4,201 @@ #pragma warning disable CS1591 -using System; +using global::System; using System.Collections.Frozen; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Linq; -using System.Net.Mime; +using global::System.Collections.Generic; +using global::System.Diagnostics.CodeAnalysis; +using global::System.IO; +using global::System.Linq; +using global::System.Net.Mime; using Jellyfin.Extensions; -namespace MediaBrowser.Model.Net -{ - /// - /// Class MimeTypes. - /// - /// - /// - /// For more information on MIME types: - /// - /// http://en.wikipedia.org/wiki/Internet_media_type - /// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types - /// http://www.iana.org/assignments/media-types/media-types.xhtml - /// - /// - public static class MimeTypes - { - /// - /// Any extension in this list is considered a video file. - /// - private static readonly FrozenSet _videoFileExtensions = new[] - { - ".3gp", - ".asf", - ".avi", - ".divx", - ".dvr-ms", - ".f4v", - ".flv", - ".img", - ".iso", - ".m2t", - ".m2ts", - ".m2v", - ".m4v", - ".mk3d", - ".mkv", - ".mov", - ".mp4", - ".mpg", - ".mpeg", - ".mts", - ".ogg", - ".ogm", - ".ogv", - ".rec", - ".ts", - ".rmvb", - ".vob", - ".webm", - ".wmv", - ".wtv", - }.ToFrozenSet(StringComparer.OrdinalIgnoreCase); +namespace MediaBrowser.Model.Net; + /// + /// Class MimeTypes. + /// + /// + /// + /// For more information on MIME types: + /// + /// http://en.wikipedia.org/wiki/Internet_media_type + /// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types + /// http://www.iana.org/assignments/media-types/media-types.xhtml + /// + /// + public static class MimeTypes + { + /// + /// Any extension in this list is considered a video file. + /// + private static readonly FrozenSet _videoFileExtensions = new[] + { + ".3gp", + ".asf", + ".avi", + ".divx", + ".dvr-ms", + ".f4v", + ".flv", + ".img", + ".iso", + ".m2t", + ".m2ts", + ".m2v", + ".m4v", + ".mk3d", + ".mkv", + ".mov", + ".mp4", + ".mpg", + ".mpeg", + ".mts", + ".ogg", + ".ogm", + ".ogv", + ".rec", + ".ts", + ".rmvb", + ".vob", + ".webm", + ".wmv", + ".wtv", + }.ToFrozenSet(StringComparer.OrdinalIgnoreCase); - /// - /// Used for extensions not in or to override them. - /// - private static readonly FrozenDictionary _mimeTypeLookup = new KeyValuePair[] - { - // Type application - new(".azw3", "application/vnd.amazon.ebook"), - new(".cb7", "application/x-cb7"), - new(".cba", "application/x-cba"), - new(".cbr", "application/vnd.comicbook-rar"), - new(".cbt", "application/x-cbt"), - new(".cbz", "application/vnd.comicbook+zip"), + /// + /// Used for extensions not in or to override them. + /// + private static readonly FrozenDictionary _mimeTypeLookup = new KeyValuePair[] + { + // Type application + new(".azw3", "application/vnd.amazon.ebook"), + new(".cb7", "application/x-cb7"), + new(".cba", "application/x-cba"), + new(".cbr", "application/vnd.comicbook-rar"), + new(".cbt", "application/x-cbt"), + new(".cbz", "application/vnd.comicbook+zip"), - // Type image - new(".tbn", "image/jpeg"), + // Type image + new(".tbn", "image/jpeg"), - // Type text - new(".ass", "text/x-ssa"), - new(".ssa", "text/x-ssa"), - new(".edl", "text/plain"), - new(".html", "text/html; charset=UTF-8"), - new(".htm", "text/html; charset=UTF-8"), + // Type text + new(".ass", "text/x-ssa"), + new(".ssa", "text/x-ssa"), + new(".edl", "text/plain"), + new(".html", "text/html; charset=UTF-8"), + new(".htm", "text/html; charset=UTF-8"), - // Type video - new(".mpegts", "video/mp2t"), + // Type video + new(".mpegts", "video/mp2t"), - // Type audio - new(".aac", "audio/aac"), - new(".ac3", "audio/ac3"), - new(".ape", "audio/x-ape"), - new(".dsf", "audio/dsf"), - new(".dsp", "audio/dsp"), - new(".flac", "audio/flac"), - new(".m4b", "audio/mp4"), - new(".mp3", "audio/mpeg"), - new(".vorbis", "audio/vorbis"), - new(".webma", "audio/webm"), - new(".wv", "audio/x-wavpack"), - new(".xsp", "audio/xsp"), - }.ToFrozenDictionary(pair => pair.Key, pair => pair.Value, StringComparer.OrdinalIgnoreCase); + // Type audio + new(".aac", "audio/aac"), + new(".ac3", "audio/ac3"), + new(".ape", "audio/x-ape"), + new(".dsf", "audio/dsf"), + new(".dsp", "audio/dsp"), + new(".flac", "audio/flac"), + new(".m4b", "audio/mp4"), + new(".mp3", "audio/mpeg"), + new(".vorbis", "audio/vorbis"), + new(".webma", "audio/webm"), + new(".wv", "audio/x-wavpack"), + new(".xsp", "audio/xsp"), + }.ToFrozenDictionary(pair => pair.Key, pair => pair.Value, StringComparer.OrdinalIgnoreCase); - private static readonly FrozenDictionary _extensionLookup = new KeyValuePair[] - { - // Type application - new("application/vnd.comicbook-rar", ".cbr"), - new("application/vnd.comicbook+zip", ".cbz"), - new("application/x-cb7", ".cb7"), - new("application/x-cba", ".cba"), - new("application/x-cbr", ".cbr"), - new("application/x-cbt", ".cbt"), - new("application/x-cbz", ".cbz"), - new("application/x-javascript", ".js"), - new("application/xml", ".xml"), - new("application/x-mpegURL", ".m3u8"), + private static readonly FrozenDictionary _extensionLookup = new KeyValuePair[] + { + // Type application + new("application/vnd.comicbook-rar", ".cbr"), + new("application/vnd.comicbook+zip", ".cbz"), + new("application/x-cb7", ".cb7"), + new("application/x-cba", ".cba"), + new("application/x-cbr", ".cbr"), + new("application/x-cbt", ".cbt"), + new("application/x-cbz", ".cbz"), + new("application/x-javascript", ".js"), + new("application/xml", ".xml"), + new("application/x-mpegURL", ".m3u8"), - // Type audio - new("audio/aac", ".aac"), - new("audio/ac3", ".ac3"), - new("audio/dsf", ".dsf"), - new("audio/dsp", ".dsp"), - new("audio/flac", ".flac"), - new("audio/m4b", ".m4b"), - new("audio/vorbis", ".vorbis"), - new("audio/x-ape", ".ape"), - new("audio/xsp", ".xsp"), - new("audio/x-aac", ".aac"), - new("audio/x-wavpack", ".wv"), + // Type audio + new("audio/aac", ".aac"), + new("audio/ac3", ".ac3"), + new("audio/dsf", ".dsf"), + new("audio/dsp", ".dsp"), + new("audio/flac", ".flac"), + new("audio/m4b", ".m4b"), + new("audio/vorbis", ".vorbis"), + new("audio/x-ape", ".ape"), + new("audio/xsp", ".xsp"), + new("audio/x-aac", ".aac"), + new("audio/x-wavpack", ".wv"), - // Type image - new("image/jpeg", ".jpg"), - new("image/tiff", ".tiff"), - new("image/x-png", ".png"), - new("image/x-icon", ".ico"), + // Type image + new("image/jpeg", ".jpg"), + new("image/tiff", ".tiff"), + new("image/x-png", ".png"), + new("image/x-icon", ".ico"), - // Type text - new("text/plain", ".txt"), - new("text/rtf", ".rtf"), - new("text/x-ssa", ".ssa"), + // Type text + new("text/plain", ".txt"), + new("text/rtf", ".rtf"), + new("text/x-ssa", ".ssa"), - // Type video - new("video/vnd.mpeg.dash.mpd", ".mpd"), - new("video/x-matroska", ".mkv"), - }.ToFrozenDictionary(pair => pair.Key, pair => pair.Value, StringComparer.OrdinalIgnoreCase); + // Type video + new("video/vnd.mpeg.dash.mpd", ".mpd"), + new("video/x-matroska", ".mkv"), + }.ToFrozenDictionary(pair => pair.Key, pair => pair.Value, StringComparer.OrdinalIgnoreCase); - public static string GetMimeType(string path) => GetMimeType(path, MediaTypeNames.Application.Octet); + public static string GetMimeType(string path) => GetMimeType(path, MediaTypeNames.Application.Octet); - /// - /// Gets the type of the MIME. - /// - /// The filename to find the MIME type of. - /// The default value to return if no fitting MIME type is found. - /// The correct MIME type for the given filename, or if it wasn't found. - [return: NotNullIfNotNull("defaultValue")] - public static string? GetMimeType(string filename, string? defaultValue = null) - { - ArgumentException.ThrowIfNullOrEmpty(filename); + /// + /// Gets the type of the MIME. + /// + /// The filename to find the MIME type of. + /// The default value to return if no fitting MIME type is found. + /// The correct MIME type for the given filename, or if it wasn't found. + [return: NotNullIfNotNull("defaultValue")] + public static string? GetMimeType(string filename, string? defaultValue = null) + { + ArgumentException.ThrowIfNullOrEmpty(filename); - var ext = Path.GetExtension(filename); + var ext = Path.GetExtension(filename); - if (_mimeTypeLookup.TryGetValue(ext, out string? result)) - { - return result; - } + if (_mimeTypeLookup.TryGetValue(ext, out string? result)) + { + return result; + } - if (Model.MimeTypes.TryGetMimeType(filename, out var mimeType)) - { - return mimeType; - } + if (Model.MimeTypes.TryGetMimeType(filename, out var mimeType)) + { + return mimeType; + } - // Catch-all for all video types that don't require specific mime types - if (_videoFileExtensions.Contains(ext)) - { - return string.Concat("video/", ext.AsSpan(1)); - } + // Catch-all for all video types that don't require specific mime types + if (_videoFileExtensions.Contains(ext)) + { + return string.Concat("video/", ext.AsSpan(1)); + } - return defaultValue; - } + return defaultValue; + } - public static string? ToExtension(string mimeType) - { - ArgumentException.ThrowIfNullOrEmpty(mimeType); + public static string? ToExtension(string mimeType) + { + ArgumentException.ThrowIfNullOrEmpty(mimeType); - // handle text/html; charset=UTF-8 - mimeType = mimeType.AsSpan().LeftPart(';').ToString(); + // handle text/html; charset=UTF-8 + mimeType = mimeType.AsSpan().LeftPart(';').ToString(); - if (_extensionLookup.TryGetValue(mimeType, out string? result)) - { - return result; - } + if (_extensionLookup.TryGetValue(mimeType, out string? result)) + { + return result; + } - var extension = Model.MimeTypes.GetMimeTypeExtensions(mimeType).FirstOrDefault(); - return string.IsNullOrEmpty(extension) ? null : "." + extension; - } + var extension = Model.MimeTypes.GetMimeTypeExtensions(mimeType).FirstOrDefault(); + return string.IsNullOrEmpty(extension) ? null : "." + extension; + } - public static bool IsImage(ReadOnlySpan mimeType) - => mimeType.StartsWith("image/", StringComparison.OrdinalIgnoreCase); - } -} + public static bool IsImage(ReadOnlySpan mimeType) + => mimeType.StartsWith("image/", StringComparison.OrdinalIgnoreCase); + } diff --git a/MediaBrowser.Model/Notifications/NotificationType.cs b/MediaBrowser.Model/Notifications/NotificationType.cs index 909f5c95..d79b9b66 100644 --- a/MediaBrowser.Model/Notifications/NotificationType.cs +++ b/MediaBrowser.Model/Notifications/NotificationType.cs @@ -4,24 +4,22 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Notifications -{ - public enum NotificationType - { - ApplicationUpdateAvailable, - ApplicationUpdateInstalled, - AudioPlayback, - VideoPlayback, - AudioPlaybackStopped, - VideoPlaybackStopped, - InstallationFailed, - PluginError, - PluginInstalled, - PluginUpdateInstalled, - PluginUninstalled, - NewLibraryContent, - ServerRestartRequired, - TaskFailed, - UserLockedOut - } -} +namespace MediaBrowser.Model.Notifications; + public enum NotificationType + { + ApplicationUpdateAvailable, + ApplicationUpdateInstalled, + AudioPlayback, + VideoPlayback, + AudioPlaybackStopped, + VideoPlaybackStopped, + InstallationFailed, + PluginError, + PluginInstalled, + PluginUpdateInstalled, + PluginUninstalled, + NewLibraryContent, + ServerRestartRequired, + TaskFailed, + UserLockedOut + } diff --git a/MediaBrowser.Model/Playlists/PlaylistCreationRequest.cs b/MediaBrowser.Model/Playlists/PlaylistCreationRequest.cs index f407bd25..47bb3511 100644 --- a/MediaBrowser.Model/Playlists/PlaylistCreationRequest.cs +++ b/MediaBrowser.Model/Playlists/PlaylistCreationRequest.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; +namespace MediaBrowser.Model.Playlists; + +using global::System; +using global::System.Collections.Generic; using Jellyfin.Data.Enums; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Model.Playlists; - /// /// A playlist creation request. /// diff --git a/MediaBrowser.Model/Playlists/PlaylistCreationResult.cs b/MediaBrowser.Model/Playlists/PlaylistCreationResult.cs index d6ecc405..6b755fa9 100644 --- a/MediaBrowser.Model/Playlists/PlaylistCreationResult.cs +++ b/MediaBrowser.Model/Playlists/PlaylistCreationResult.cs @@ -4,15 +4,17 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Playlists -{ - public class PlaylistCreationResult - { - public PlaylistCreationResult(string id) - { - Id = id; - } +namespace MediaBrowser.Model.Playlists; + public class PlaylistCreationResult + { + /// + /// Initializes a new instance of the class. + /// + /// The playlist identifier. + public PlaylistCreationResult(string id) + { + Id = id; + } - public string Id { get; } - } -} + public string Id { get; } + } diff --git a/MediaBrowser.Model/Playlists/PlaylistUpdateRequest.cs b/MediaBrowser.Model/Playlists/PlaylistUpdateRequest.cs index 3dad5436..f16ac1bc 100644 --- a/MediaBrowser.Model/Playlists/PlaylistUpdateRequest.cs +++ b/MediaBrowser.Model/Playlists/PlaylistUpdateRequest.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using MediaBrowser.Model.Entities; - namespace MediaBrowser.Model.Playlists; +using global::System; +using global::System.Collections.Generic; +using MediaBrowser.Model.Entities; + /// /// A playlist update request. /// diff --git a/MediaBrowser.Model/Playlists/PlaylistUserUpdateRequest.cs b/MediaBrowser.Model/Playlists/PlaylistUserUpdateRequest.cs index 0f13ec2d..752ee481 100644 --- a/MediaBrowser.Model/Playlists/PlaylistUserUpdateRequest.cs +++ b/MediaBrowser.Model/Playlists/PlaylistUserUpdateRequest.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace MediaBrowser.Model.Playlists; +using global::System; + /// /// A playlist user update request. /// diff --git a/MediaBrowser.Model/Plugins/BasePluginConfiguration.cs b/MediaBrowser.Model/Plugins/BasePluginConfiguration.cs index 31a6a533..6302ee53 100644 --- a/MediaBrowser.Model/Plugins/BasePluginConfiguration.cs +++ b/MediaBrowser.Model/Plugins/BasePluginConfiguration.cs @@ -2,12 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Plugins -{ - /// - /// Class BasePluginConfiguration. - /// - public class BasePluginConfiguration - { - } -} +namespace MediaBrowser.Model.Plugins; + /// + /// Class BasePluginConfiguration. + /// + public class BasePluginConfiguration + { + } diff --git a/MediaBrowser.Model/Plugins/IHasWebPages.cs b/MediaBrowser.Model/Plugins/IHasWebPages.cs index 23aeea01..035c55fa 100644 --- a/MediaBrowser.Model/Plugins/IHasWebPages.cs +++ b/MediaBrowser.Model/Plugins/IHasWebPages.cs @@ -4,12 +4,14 @@ #pragma warning disable CS1591 -using System.Collections.Generic; +using global::System.Collections.Generic; -namespace MediaBrowser.Model.Plugins -{ - public interface IHasWebPages - { - IEnumerable GetPages(); - } -} +namespace MediaBrowser.Model.Plugins; + public interface IHasWebPages + { + /// + /// Gets the plugin pages. + /// + /// The plugin pages. + IEnumerable GetPages(); + } diff --git a/MediaBrowser.Model/Plugins/PluginInfo.cs b/MediaBrowser.Model/Plugins/PluginInfo.cs index dfb4994d..2fa68e48 100644 --- a/MediaBrowser.Model/Plugins/PluginInfo.cs +++ b/MediaBrowser.Model/Plugins/PluginInfo.cs @@ -2,70 +2,68 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; +namespace MediaBrowser.Model.Plugins; + using global::System; -namespace MediaBrowser.Model.Plugins -{ - /// - /// This is a serializable stub class that is used by the api to provide information about installed plugins. - /// - public class PluginInfo - { - /// - /// Initializes a new instance of the class. - /// - /// The plugin name. - /// The plugin . - /// The plugin description. - /// The . - /// True if this plugin can be uninstalled. - public PluginInfo(string name, Version version, string description, Guid id, bool canUninstall) - { - Name = name; - Version = version; - Description = description; - Id = id; - CanUninstall = canUninstall; - } + /// + /// This is a serializable stub class that is used by the api to provide information about installed plugins. + /// + public class PluginInfo + { + /// + /// Initializes a new instance of the class. + /// + /// The plugin name. + /// The plugin . + /// The plugin description. + /// The . + /// True if this plugin can be uninstalled. + public PluginInfo(string name, Version version, string description, Guid id, bool canUninstall) + { + Name = name; + Version = version; + Description = description; + Id = id; + CanUninstall = canUninstall; + } - /// - /// Gets or sets the name. - /// - public string Name { get; set; } + /// + /// Gets or sets the name. + /// + public string Name { get; set; } - /// - /// Gets or sets the version. - /// - public Version Version { get; set; } + /// + /// Gets or sets the version. + /// + public Version Version { get; set; } - /// - /// Gets or sets the name of the configuration file. - /// - public string? ConfigurationFileName { get; set; } + /// + /// Gets or sets the name of the configuration file. + /// + public string? ConfigurationFileName { get; set; } - /// - /// Gets or sets the description. - /// - public string Description { get; set; } + /// + /// Gets or sets the description. + /// + public string Description { get; set; } - /// - /// Gets or sets the unique id. - /// - public Guid Id { get; set; } + /// + /// Gets or sets the unique id. + /// + public Guid Id { get; set; } - /// - /// Gets or sets a value indicating whether the plugin can be uninstalled. - /// - public bool CanUninstall { get; set; } + /// + /// Gets or sets a value indicating whether the plugin can be uninstalled. + /// + public bool CanUninstall { get; set; } - /// - /// Gets or sets a value indicating whether this plugin has a valid image. - /// - public bool HasImage { get; set; } + /// + /// Gets or sets a value indicating whether this plugin has a valid image. + /// + public bool HasImage { get; set; } - /// - /// Gets or sets a value indicating the status of the plugin. - /// - public PluginStatus Status { get; set; } - } -} + /// + /// Gets or sets a value indicating the status of the plugin. + /// + public PluginStatus Status { get; set; } + } diff --git a/MediaBrowser.Model/Plugins/PluginPageInfo.cs b/MediaBrowser.Model/Plugins/PluginPageInfo.cs index 810667ec..9d664204 100644 --- a/MediaBrowser.Model/Plugins/PluginPageInfo.cs +++ b/MediaBrowser.Model/Plugins/PluginPageInfo.cs @@ -2,41 +2,39 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Plugins -{ - /// - /// Defines the . - /// - public class PluginPageInfo - { - /// - /// Gets or sets the name of the plugin. - /// - public string Name { get; set; } = string.Empty; +namespace MediaBrowser.Model.Plugins; + /// + /// Defines the . + /// + public class PluginPageInfo + { + /// + /// Gets or sets the name of the plugin. + /// + public string Name { get; set; } = string.Empty; - /// - /// Gets or sets the display name of the plugin. - /// - public string? DisplayName { get; set; } + /// + /// Gets or sets the display name of the plugin. + /// + public string? DisplayName { get; set; } - /// - /// Gets or sets the resource path. - /// - public string EmbeddedResourcePath { get; set; } = string.Empty; + /// + /// Gets or sets the resource path. + /// + public string EmbeddedResourcePath { get; set; } = string.Empty; - /// - /// Gets or sets a value indicating whether this plugin should appear in the main menu. - /// - public bool EnableInMainMenu { get; set; } + /// + /// Gets or sets a value indicating whether this plugin should appear in the main menu. + /// + public bool EnableInMainMenu { get; set; } - /// - /// Gets or sets the menu section. - /// - public string? MenuSection { get; set; } + /// + /// Gets or sets the menu section. + /// + public string? MenuSection { get; set; } - /// - /// Gets or sets the menu icon. - /// - public string? MenuIcon { get; set; } - } -} + /// + /// Gets or sets the menu icon. + /// + public string? MenuIcon { get; set; } + } diff --git a/MediaBrowser.Model/Plugins/PluginStatus.cs b/MediaBrowser.Model/Plugins/PluginStatus.cs index 78fb8693..b3e92fe4 100644 --- a/MediaBrowser.Model/Plugins/PluginStatus.cs +++ b/MediaBrowser.Model/Plugins/PluginStatus.cs @@ -2,55 +2,53 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Plugins -{ - /// - /// Plugin load status. - /// - public enum PluginStatus - { - /// - /// This plugin requires a restart in order for it to load. This is a memory only status. - /// The actual status of the plugin after reload is present in the manifest. - /// eg. A disabled plugin will still be active until the next restart, and so will have a memory status of Restart, - /// but a disk manifest status of Disabled. - /// - Restart = 1, +namespace MediaBrowser.Model.Plugins; + /// + /// Plugin load status. + /// + public enum PluginStatus + { + /// + /// This plugin requires a restart in order for it to load. This is a memory only status. + /// The actual status of the plugin after reload is present in the manifest. + /// eg. A disabled plugin will still be active until the next restart, and so will have a memory status of Restart, + /// but a disk manifest status of Disabled. + /// + Restart = 1, - /// - /// This plugin is currently running. - /// - Active = 0, + /// + /// This plugin is currently running. + /// + Active = 0, - /// - /// This plugin has been marked as disabled. - /// - Disabled = -1, + /// + /// This plugin has been marked as disabled. + /// + Disabled = -1, - /// - /// This plugin does not meet the TargetAbi requirements. - /// - NotSupported = -2, + /// + /// This plugin does not meet the TargetAbi requirements. + /// + NotSupported = -2, - /// - /// This plugin caused an error when instantiated (either DI loop, or exception). - /// - Malfunctioned = -3, + /// + /// This plugin caused an error when instantiated (either DI loop, or exception). + /// + Malfunctioned = -3, - /// - /// This plugin has been superseded by another version. - /// - Superseded = -4, + /// + /// This plugin has been superseded by another version. + /// + Superseded = -4, - /// - /// [DEPRECATED] See Superseded. - /// - Superceded = -4, + /// + /// [DEPRECATED] See Superseded. + /// + Superceded = -4, - /// - /// An attempt to remove this plugin from disk will happen at every restart. - /// It will not be loaded, if unable to do so. - /// - Deleted = -5 - } -} + /// + /// An attempt to remove this plugin from disk will happen at every restart. + /// It will not be loaded, if unable to do so. + /// + Deleted = -5, + } diff --git a/MediaBrowser.Model/Providers/ExternalIdInfo.cs b/MediaBrowser.Model/Providers/ExternalIdInfo.cs index 0277f810..e3cb2954 100644 --- a/MediaBrowser.Model/Providers/ExternalIdInfo.cs +++ b/MediaBrowser.Model/Providers/ExternalIdInfo.cs @@ -2,47 +2,45 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Providers -{ - /// - /// Represents the external id information for serialization to the client. - /// - public class ExternalIdInfo - { - /// - /// Initializes a new instance of the class. - /// - /// Name of the external id provider (IE: IMDB, MusicBrainz, etc). - /// Key for this id. This key should be unique across all providers. - /// Specific media type for this id. - public ExternalIdInfo(string name, string key, ExternalIdMediaType? type) - { - Name = name; - Key = key; - Type = type; - } +namespace MediaBrowser.Model.Providers; + /// + /// Represents the external id information for serialization to the client. + /// + public class ExternalIdInfo + { + /// + /// Initializes a new instance of the class. + /// + /// Name of the external id provider (IE: IMDB, MusicBrainz, etc). + /// Key for this id. This key should be unique across all providers. + /// Specific media type for this id. + public ExternalIdInfo(string name, string key, ExternalIdMediaType? type) + { + Name = name; + Key = key; + Type = type; + } - /// - /// Gets or sets the display name of the external id provider (IE: IMDB, MusicBrainz, etc). - /// - // TODO: This should be renamed to ProviderName - public string Name { get; set; } + /// + /// Gets or sets the display name of the external id provider (IE: IMDB, MusicBrainz, etc). + /// + // TODO: This should be renamed to ProviderName + public string Name { get; set; } - /// - /// Gets or sets the unique key for this id. This key should be unique across all providers. - /// - // TODO: This property is not actually unique across the concrete types at the moment. It should be updated to be unique. - public string Key { get; set; } + /// + /// Gets or sets the unique key for this id. This key should be unique across all providers. + /// + // TODO: This property is not actually unique across the concrete types at the moment. It should be updated to be unique. + public string Key { get; set; } - /// - /// Gets or sets the specific media type for this id. This is used to distinguish between the different - /// external id types for providers with multiple ids. - /// A null value indicates there is no specific media type associated with the external id, or this is the - /// default id for the external provider so there is no need to specify a type. - /// - /// - /// This can be used along with the to localize the external id on the client. - /// - public ExternalIdMediaType? Type { get; set; } - } -} + /// + /// Gets or sets the specific media type for this id. This is used to distinguish between the different + /// external id types for providers with multiple ids. + /// A null value indicates there is no specific media type associated with the external id, or this is the + /// default id for the external provider so there is no need to specify a type. + /// + /// + /// This can be used along with the to localize the external id on the client. + /// + public ExternalIdMediaType? Type { get; set; } + } diff --git a/MediaBrowser.Model/Providers/ExternalIdMediaType.cs b/MediaBrowser.Model/Providers/ExternalIdMediaType.cs index f68af6cb..c82bc986 100644 --- a/MediaBrowser.Model/Providers/ExternalIdMediaType.cs +++ b/MediaBrowser.Model/Providers/ExternalIdMediaType.cs @@ -2,84 +2,82 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Providers -{ - /// - /// The specific media type of an . - /// - /// - /// Client applications may use this as a translation key. - /// - public enum ExternalIdMediaType - { - /// - /// A music album. - /// - Album = 1, +namespace MediaBrowser.Model.Providers; + /// + /// The specific media type of an . + /// + /// + /// Client applications may use this as a translation key. + /// + public enum ExternalIdMediaType + { + /// + /// A music album. + /// + Album = 1, - /// - /// The artist of a music album. - /// - AlbumArtist = 2, + /// + /// The artist of a music album. + /// + AlbumArtist = 2, - /// - /// The artist of a media item. - /// - Artist = 3, + /// + /// The artist of a media item. + /// + Artist = 3, - /// - /// A boxed set of media. - /// - BoxSet = 4, + /// + /// A boxed set of media. + /// + BoxSet = 4, - /// - /// A series episode. - /// - Episode = 5, + /// + /// A series episode. + /// + Episode = 5, - /// - /// A movie. - /// - Movie = 6, + /// + /// A movie. + /// + Movie = 6, - /// - /// An alternative artist apart from the main artist. - /// - OtherArtist = 7, + /// + /// An alternative artist apart from the main artist. + /// + OtherArtist = 7, - /// - /// A person. - /// - Person = 8, + /// + /// A person. + /// + Person = 8, - /// - /// A release group. - /// - ReleaseGroup = 9, + /// + /// A release group. + /// + ReleaseGroup = 9, - /// - /// A single season of a series. - /// - Season = 10, + /// + /// A single season of a series. + /// + Season = 10, - /// - /// A series. - /// - Series = 11, + /// + /// A series. + /// + Series = 11, - /// - /// A music track. - /// - Track = 12, + /// + /// A music track. + /// + Track = 12, - /// - /// A book. - /// - Book = 13, + /// + /// A book. + /// + Book = 13, - /// - /// A music recording. - /// - Recording = 14 - } -} + /// + /// A music recording. + /// + Recording = 14, + } diff --git a/MediaBrowser.Model/Providers/ExternalUrl.cs b/MediaBrowser.Model/Providers/ExternalUrl.cs index cfc492bb..b3630eb3 100644 --- a/MediaBrowser.Model/Providers/ExternalUrl.cs +++ b/MediaBrowser.Model/Providers/ExternalUrl.cs @@ -5,20 +5,18 @@ #nullable disable #pragma warning disable CS1591 -namespace MediaBrowser.Model.Providers -{ - public class ExternalUrl - { - /// - /// Gets or sets the name. - /// - /// The name. - public string Name { get; set; } +namespace MediaBrowser.Model.Providers; + public class ExternalUrl + { + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } - /// - /// Gets or sets the type of the item. - /// - /// The type of the item. - public string Url { get; set; } - } -} + /// + /// Gets or sets the type of the item. + /// + /// The type of the item. + public string Url { get; set; } + } diff --git a/MediaBrowser.Model/Providers/ImageProviderInfo.cs b/MediaBrowser.Model/Providers/ImageProviderInfo.cs index 418d531b..dc8f749c 100644 --- a/MediaBrowser.Model/Providers/ImageProviderInfo.cs +++ b/MediaBrowser.Model/Providers/ImageProviderInfo.cs @@ -2,35 +2,33 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Model.Entities; +namespace MediaBrowser.Model.Providers; + using MediaBrowser.Model.Entities; -namespace MediaBrowser.Model.Providers -{ - /// - /// Class ImageProviderInfo. - /// - public class ImageProviderInfo - { - /// - /// Initializes a new instance of the class. - /// - /// The name of the image provider. - /// The image types supported by the image provider. - public ImageProviderInfo(string name, ImageType[] supportedImages) - { - Name = name; - SupportedImages = supportedImages; - } + /// + /// Class ImageProviderInfo. + /// + public class ImageProviderInfo + { + /// + /// Initializes a new instance of the class. + /// + /// The name of the image provider. + /// The image types supported by the image provider. + public ImageProviderInfo(string name, ImageType[] supportedImages) + { + Name = name; + SupportedImages = supportedImages; + } - /// - /// Gets the name. - /// - /// The name. - public string Name { get; } + /// + /// Gets the name. + /// + /// The name. + public string Name { get; } - /// - /// Gets the supported image types. - /// - public ImageType[] SupportedImages { get; } - } -} + /// + /// Gets the supported image types. + /// + public ImageType[] SupportedImages { get; } + } diff --git a/MediaBrowser.Model/Providers/RemoteImageInfo.cs b/MediaBrowser.Model/Providers/RemoteImageInfo.cs index 50855756..c5e22b9c 100644 --- a/MediaBrowser.Model/Providers/RemoteImageInfo.cs +++ b/MediaBrowser.Model/Providers/RemoteImageInfo.cs @@ -2,74 +2,72 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Model.Providers; #nullable disable -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Dto; + using MediaBrowser.Model.Entities; -namespace MediaBrowser.Model.Providers -{ - /// - /// Class RemoteImageInfo. - /// - public class RemoteImageInfo - { - /// - /// Gets or sets the name of the provider. - /// - /// The name of the provider. - public string ProviderName { get; set; } + /// + /// Class RemoteImageInfo. + /// + public class RemoteImageInfo + { + /// + /// Gets or sets the name of the provider. + /// + /// The name of the provider. + public string ProviderName { get; set; } - /// - /// Gets or sets the URL. - /// - /// The URL. - public string Url { get; set; } + /// + /// Gets or sets the URL. + /// + /// The URL. + public string Url { get; set; } - /// - /// Gets or sets a url used for previewing a smaller version. - /// - public string ThumbnailUrl { get; set; } + /// + /// Gets or sets a url used for previewing a smaller version. + /// + public string ThumbnailUrl { get; set; } - /// - /// Gets or sets the height. - /// - /// The height. - public int? Height { get; set; } + /// + /// Gets or sets the height. + /// + /// The height. + public int? Height { get; set; } - /// - /// Gets or sets the width. - /// - /// The width. - public int? Width { get; set; } + /// + /// Gets or sets the width. + /// + /// The width. + public int? Width { get; set; } - /// - /// Gets or sets the community rating. - /// - /// The community rating. - public double? CommunityRating { get; set; } + /// + /// Gets or sets the community rating. + /// + /// The community rating. + public double? CommunityRating { get; set; } - /// - /// Gets or sets the vote count. - /// - /// The vote count. - public int? VoteCount { get; set; } + /// + /// Gets or sets the vote count. + /// + /// The vote count. + public int? VoteCount { get; set; } - /// - /// Gets or sets the language. - /// - /// The language. - public string Language { get; set; } + /// + /// Gets or sets the language. + /// + /// The language. + public string Language { get; set; } - /// - /// Gets or sets the type. - /// - /// The type. - public ImageType Type { get; set; } + /// + /// Gets or sets the type. + /// + /// The type. + public ImageType Type { get; set; } - /// - /// Gets or sets the type of the rating. - /// - /// The type of the rating. - public RatingType RatingType { get; set; } - } -} + /// + /// Gets or sets the type of the rating. + /// + /// The type of the rating. + public RatingType RatingType { get; set; } + } diff --git a/MediaBrowser.Model/Providers/RemoteImageQuery.cs b/MediaBrowser.Model/Providers/RemoteImageQuery.cs index 6639110d..bcfcd6eb 100644 --- a/MediaBrowser.Model/Providers/RemoteImageQuery.cs +++ b/MediaBrowser.Model/Providers/RemoteImageQuery.cs @@ -6,21 +6,23 @@ using MediaBrowser.Model.Entities; -namespace MediaBrowser.Model.Providers -{ - public class RemoteImageQuery - { - public RemoteImageQuery(string providerName) - { - ProviderName = providerName; - } +namespace MediaBrowser.Model.Providers; + public class RemoteImageQuery + { + /// + /// Initializes a new instance of the class. + /// + /// The name of the image provider. + public RemoteImageQuery(string providerName) + { + ProviderName = providerName; + } - public string ProviderName { get; } + public string ProviderName { get; } - public ImageType? ImageType { get; set; } + public ImageType? ImageType { get; set; } - public bool IncludeDisabledProviders { get; set; } + public bool IncludeDisabledProviders { get; set; } - public bool IncludeAllLanguages { get; set; } - } -} + public bool IncludeAllLanguages { get; set; } + } diff --git a/MediaBrowser.Model/Providers/RemoteImageResult.cs b/MediaBrowser.Model/Providers/RemoteImageResult.cs index 412fc18d..da914b30 100644 --- a/MediaBrowser.Model/Providers/RemoteImageResult.cs +++ b/MediaBrowser.Model/Providers/RemoteImageResult.cs @@ -3,29 +3,27 @@ // #nullable disable -namespace MediaBrowser.Model.Providers -{ - /// - /// Class RemoteImageResult. - /// - public class RemoteImageResult - { - /// - /// Gets or sets the images. - /// - /// The images. - public RemoteImageInfo[] Images { get; set; } +namespace MediaBrowser.Model.Providers; + /// + /// Class RemoteImageResult. + /// + public class RemoteImageResult + { + /// + /// Gets or sets the images. + /// + /// The images. + public RemoteImageInfo[] Images { get; set; } - /// - /// Gets or sets the total record count. - /// - /// The total record count. - public int TotalRecordCount { get; set; } + /// + /// Gets or sets the total record count. + /// + /// The total record count. + public int TotalRecordCount { get; set; } - /// - /// Gets or sets the providers. - /// - /// The providers. - public string[] Providers { get; set; } - } -} + /// + /// Gets or sets the providers. + /// + /// The providers. + public string[] Providers { get; set; } + } diff --git a/MediaBrowser.Model/Providers/RemoteLyricInfo.cs b/MediaBrowser.Model/Providers/RemoteLyricInfo.cs index 0df4debf..b2b811ae 100644 --- a/MediaBrowser.Model/Providers/RemoteLyricInfo.cs +++ b/MediaBrowser.Model/Providers/RemoteLyricInfo.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Model.Lyrics; - namespace MediaBrowser.Model.Providers; +using MediaBrowser.Model.Lyrics; + /// /// The remote lyric info. /// diff --git a/MediaBrowser.Model/Providers/RemoteSearchResult.cs b/MediaBrowser.Model/Providers/RemoteSearchResult.cs index 33584759..658409e8 100644 --- a/MediaBrowser.Model/Providers/RemoteSearchResult.cs +++ b/MediaBrowser.Model/Providers/RemoteSearchResult.cs @@ -5,54 +5,55 @@ #nullable disable #pragma warning disable CS1591 -using System; -using System.Collections.Generic; +using global::System; +using global::System.Collections.Generic; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Model.Providers -{ - public class RemoteSearchResult : IHasProviderIds - { - public RemoteSearchResult() - { - ProviderIds = new Dictionary(StringComparer.OrdinalIgnoreCase); - Artists = Array.Empty(); - } +namespace MediaBrowser.Model.Providers; + public class RemoteSearchResult : IHasProviderIds + { + /// + /// Initializes a new instance of the class. + /// + public RemoteSearchResult() + { + ProviderIds = new Dictionary(StringComparer.OrdinalIgnoreCase); + Artists = Array.Empty(); + } - /// - /// Gets or sets the name. - /// - /// The name. - public string Name { get; set; } + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } - /// - /// Gets or sets the provider ids. - /// - /// The provider ids. - public Dictionary ProviderIds { get; set; } + /// + /// Gets or sets the provider ids. + /// + /// The provider ids. + public Dictionary ProviderIds { get; set; } - /// - /// Gets or sets the year. - /// - /// The year. - public int? ProductionYear { get; set; } + /// + /// Gets or sets the year. + /// + /// The year. + public int? ProductionYear { get; set; } - public int? IndexNumber { get; set; } + public int? IndexNumber { get; set; } - public int? IndexNumberEnd { get; set; } + public int? IndexNumberEnd { get; set; } - public int? ParentIndexNumber { get; set; } + public int? ParentIndexNumber { get; set; } - public DateTime? PremiereDate { get; set; } + public DateTime? PremiereDate { get; set; } - public string ImageUrl { get; set; } + public string ImageUrl { get; set; } - public string SearchProviderName { get; set; } + public string SearchProviderName { get; set; } - public string Overview { get; set; } + public string Overview { get; set; } - public RemoteSearchResult AlbumArtist { get; set; } + public RemoteSearchResult AlbumArtist { get; set; } - public RemoteSearchResult[] Artists { get; set; } - } -} + public RemoteSearchResult[] Artists { get; set; } + } diff --git a/MediaBrowser.Model/Providers/RemoteSubtitleInfo.cs b/MediaBrowser.Model/Providers/RemoteSubtitleInfo.cs index 7c6fdd8e..35c8b743 100644 --- a/MediaBrowser.Model/Providers/RemoteSubtitleInfo.cs +++ b/MediaBrowser.Model/Providers/RemoteSubtitleInfo.cs @@ -5,42 +5,40 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.Providers -{ - public class RemoteSubtitleInfo - { - public string ThreeLetterISOLanguageName { get; set; } +namespace MediaBrowser.Model.Providers; + public class RemoteSubtitleInfo + { + public string ThreeLetterISOLanguageName { get; set; } - public string Id { get; set; } + public string Id { get; set; } - public string ProviderName { get; set; } + public string ProviderName { get; set; } - public string Name { get; set; } + public string Name { get; set; } - public string Format { get; set; } + public string Format { get; set; } - public string Author { get; set; } + public string Author { get; set; } - public string Comment { get; set; } + public string Comment { get; set; } - public DateTime? DateCreated { get; set; } + public DateTime? DateCreated { get; set; } - public float? CommunityRating { get; set; } + public float? CommunityRating { get; set; } - public float? FrameRate { get; set; } + public float? FrameRate { get; set; } - public int? DownloadCount { get; set; } + public int? DownloadCount { get; set; } - public bool? IsHashMatch { get; set; } + public bool? IsHashMatch { get; set; } - public bool? AiTranslated { get; set; } + public bool? AiTranslated { get; set; } - public bool? MachineTranslated { get; set; } + public bool? MachineTranslated { get; set; } - public bool? Forced { get; set; } + public bool? Forced { get; set; } - public bool? HearingImpaired { get; set; } - } -} + public bool? HearingImpaired { get; set; } + } diff --git a/MediaBrowser.Model/Providers/SubtitleOptions.cs b/MediaBrowser.Model/Providers/SubtitleOptions.cs index 49524dfa..439ad525 100644 --- a/MediaBrowser.Model/Providers/SubtitleOptions.cs +++ b/MediaBrowser.Model/Providers/SubtitleOptions.cs @@ -5,36 +5,37 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.Providers -{ - public class SubtitleOptions - { - public SubtitleOptions() - { - DownloadLanguages = Array.Empty(); +namespace MediaBrowser.Model.Providers; + public class SubtitleOptions + { + /// + /// Initializes a new instance of the class. + /// + public SubtitleOptions() + { + DownloadLanguages = Array.Empty(); - SkipIfAudioTrackMatches = true; - RequirePerfectMatch = true; - } + SkipIfAudioTrackMatches = true; + RequirePerfectMatch = true; + } - public bool SkipIfEmbeddedSubtitlesPresent { get; set; } + public bool SkipIfEmbeddedSubtitlesPresent { get; set; } - public bool SkipIfAudioTrackMatches { get; set; } + public bool SkipIfAudioTrackMatches { get; set; } - public string[] DownloadLanguages { get; set; } + public string[] DownloadLanguages { get; set; } - public bool DownloadMovieSubtitles { get; set; } + public bool DownloadMovieSubtitles { get; set; } - public bool DownloadEpisodeSubtitles { get; set; } + public bool DownloadEpisodeSubtitles { get; set; } - public string OpenSubtitlesUsername { get; set; } + public string OpenSubtitlesUsername { get; set; } - public string OpenSubtitlesPasswordHash { get; set; } + public string OpenSubtitlesPasswordHash { get; set; } - public bool IsOpenSubtitleVipAccount { get; set; } + public bool IsOpenSubtitleVipAccount { get; set; } - public bool RequirePerfectMatch { get; set; } - } -} + public bool RequirePerfectMatch { get; set; } + } diff --git a/MediaBrowser.Model/Providers/SubtitleProviderInfo.cs b/MediaBrowser.Model/Providers/SubtitleProviderInfo.cs index 557fe815..ff12142e 100644 --- a/MediaBrowser.Model/Providers/SubtitleProviderInfo.cs +++ b/MediaBrowser.Model/Providers/SubtitleProviderInfo.cs @@ -5,12 +5,10 @@ #nullable disable #pragma warning disable CS1591 -namespace MediaBrowser.Model.Providers -{ - public class SubtitleProviderInfo - { - public string Name { get; set; } +namespace MediaBrowser.Model.Providers; + public class SubtitleProviderInfo + { + public string Name { get; set; } - public string Id { get; set; } - } -} + public string Id { get; set; } + } diff --git a/MediaBrowser.Model/Querying/AllThemeMediaResult.cs b/MediaBrowser.Model/Querying/AllThemeMediaResult.cs index 8c25355b..f6ebcbc9 100644 --- a/MediaBrowser.Model/Querying/AllThemeMediaResult.cs +++ b/MediaBrowser.Model/Querying/AllThemeMediaResult.cs @@ -5,23 +5,24 @@ #nullable disable #pragma warning disable CS1591 -namespace MediaBrowser.Model.Querying -{ - public class AllThemeMediaResult - { - public AllThemeMediaResult() - { - ThemeVideosResult = new ThemeMediaResult(); +namespace MediaBrowser.Model.Querying; + public class AllThemeMediaResult + { + /// + /// Initializes a new instance of the class. + /// + public AllThemeMediaResult() + { + ThemeVideosResult = new ThemeMediaResult(); - ThemeSongsResult = new ThemeMediaResult(); + ThemeSongsResult = new ThemeMediaResult(); - SoundtrackSongsResult = new ThemeMediaResult(); - } + SoundtrackSongsResult = new ThemeMediaResult(); + } - public ThemeMediaResult ThemeVideosResult { get; set; } + public ThemeMediaResult ThemeVideosResult { get; set; } - public ThemeMediaResult ThemeSongsResult { get; set; } + public ThemeMediaResult ThemeSongsResult { get; set; } - public ThemeMediaResult SoundtrackSongsResult { get; set; } - } -} + public ThemeMediaResult SoundtrackSongsResult { get; set; } + } diff --git a/MediaBrowser.Model/Querying/ItemFields.cs b/MediaBrowser.Model/Querying/ItemFields.cs index 25c04283..4752ba41 100644 --- a/MediaBrowser.Model/Querying/ItemFields.cs +++ b/MediaBrowser.Model/Querying/ItemFields.cs @@ -2,256 +2,254 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Querying -{ - /// - /// Used to control the data that gets attached to DtoBaseItems. - /// - public enum ItemFields - { - /// - /// The air time. - /// - AirTime, +namespace MediaBrowser.Model.Querying; + /// + /// Used to control the data that gets attached to DtoBaseItems. + /// + public enum ItemFields + { + /// + /// The air time. + /// + AirTime, - /// - /// The can delete. - /// - CanDelete, + /// + /// The can delete. + /// + CanDelete, - /// - /// The can download. - /// - CanDownload, + /// + /// The can download. + /// + CanDownload, - /// - /// The channel information. - /// - ChannelInfo, + /// + /// The channel information. + /// + ChannelInfo, - /// - /// The chapters. - /// - Chapters, + /// + /// The chapters. + /// + Chapters, - /// - /// The trickplay manifest. - /// - Trickplay, + /// + /// The trickplay manifest. + /// + Trickplay, - /// - /// The child count. - /// - ChildCount, + /// + /// The child count. + /// + ChildCount, - /// - /// The cumulative run time ticks. - /// - CumulativeRunTimeTicks, + /// + /// The cumulative run time ticks. + /// + CumulativeRunTimeTicks, - /// - /// The custom rating. - /// - CustomRating, + /// + /// The custom rating. + /// + CustomRating, - /// - /// The date created of the item. - /// - DateCreated, + /// + /// The date created of the item. + /// + DateCreated, - /// - /// The date last media added. - /// - DateLastMediaAdded, + /// + /// The date last media added. + /// + DateLastMediaAdded, - /// - /// Item display preferences. - /// - DisplayPreferencesId, + /// + /// Item display preferences. + /// + DisplayPreferencesId, - /// - /// The etag. - /// - Etag, + /// + /// The etag. + /// + Etag, - /// - /// The external urls. - /// - ExternalUrls, + /// + /// The external urls. + /// + ExternalUrls, - /// - /// Genres. - /// - Genres, + /// + /// Genres. + /// + Genres, - /// - /// The item counts. - /// - ItemCounts, + /// + /// The item counts. + /// + ItemCounts, - /// - /// The media source count. - /// - MediaSourceCount, + /// + /// The media source count. + /// + MediaSourceCount, - /// - /// The media versions. - /// - MediaSources, + /// + /// The media versions. + /// + MediaSources, - /// - /// The original title. - /// - OriginalTitle, + /// + /// The original title. + /// + OriginalTitle, - /// - /// The item overview. - /// - Overview, + /// + /// The item overview. + /// + Overview, - /// - /// The id of the item's parent. - /// - ParentId, + /// + /// The id of the item's parent. + /// + ParentId, - /// - /// The physical path of the item. - /// - Path, + /// + /// The physical path of the item. + /// + Path, - /// - /// The list of people for the item. - /// - People, + /// + /// The list of people for the item. + /// + People, - /// - /// Value indicating whether playback access is granted. - /// - PlayAccess, + /// + /// Value indicating whether playback access is granted. + /// + PlayAccess, - /// - /// The production locations. - /// - ProductionLocations, + /// + /// The production locations. + /// + ProductionLocations, - /// - /// The ids from IMDb, TMDb, etc. - /// - ProviderIds, + /// + /// The ids from IMDb, TMDb, etc. + /// + ProviderIds, - /// - /// The aspect ratio of the primary image. - /// - PrimaryImageAspectRatio, + /// + /// The aspect ratio of the primary image. + /// + PrimaryImageAspectRatio, - /// - /// The recursive item count. - /// - RecursiveItemCount, + /// + /// The recursive item count. + /// + RecursiveItemCount, - /// - /// The settings. - /// - Settings, + /// + /// The settings. + /// + Settings, - /// - /// The series studio. - /// - SeriesStudio, + /// + /// The series studio. + /// + SeriesStudio, - /// - /// The sort name of the item. - /// - SortName, + /// + /// The sort name of the item. + /// + SortName, - /// - /// The special episode numbers. - /// - SpecialEpisodeNumbers, + /// + /// The special episode numbers. + /// + SpecialEpisodeNumbers, - /// - /// The studios of the item. - /// - Studios, + /// + /// The studios of the item. + /// + Studios, - /// - /// The taglines of the item. - /// - Taglines, + /// + /// The taglines of the item. + /// + Taglines, - /// - /// The tags. - /// - Tags, + /// + /// The tags. + /// + Tags, - /// - /// The trailer url of the item. - /// - RemoteTrailers, + /// + /// The trailer url of the item. + /// + RemoteTrailers, - /// - /// The media streams. - /// - MediaStreams, + /// + /// The media streams. + /// + MediaStreams, - /// - /// The season user data. - /// - SeasonUserData, + /// + /// The season user data. + /// + SeasonUserData, - /// - /// The last time metadata was refreshed. - /// - DateLastRefreshed, + /// + /// The last time metadata was refreshed. + /// + DateLastRefreshed, - /// - /// The last time metadata was saved. - /// - DateLastSaved, + /// + /// The last time metadata was saved. + /// + DateLastSaved, - /// - /// The refresh state. - /// - RefreshState, + /// + /// The refresh state. + /// + RefreshState, - /// - /// The channel image. - /// - ChannelImage, + /// + /// The channel image. + /// + ChannelImage, - /// - /// Value indicating whether media source display is enabled. - /// - EnableMediaSourceDisplay, + /// + /// Value indicating whether media source display is enabled. + /// + EnableMediaSourceDisplay, - /// - /// The width. - /// - Width, + /// + /// The width. + /// + Width, - /// - /// The height. - /// - Height, + /// + /// The height. + /// + Height, - /// - /// The external Ids. - /// - ExtraIds, + /// + /// The external Ids. + /// + ExtraIds, - /// - /// The local trailer count. - /// - LocalTrailerCount, + /// + /// The local trailer count. + /// + LocalTrailerCount, - /// - /// Value indicating whether the item is HD. - /// - IsHD, + /// + /// Value indicating whether the item is HD. + /// + IsHD, - /// - /// The special feature count. - /// - SpecialFeatureCount - } -} + /// + /// The special feature count. + /// + SpecialFeatureCount + } diff --git a/MediaBrowser.Model/Querying/ItemFilter.cs b/MediaBrowser.Model/Querying/ItemFilter.cs index 942ce44c..aa4b53b1 100644 --- a/MediaBrowser.Model/Querying/ItemFilter.cs +++ b/MediaBrowser.Model/Querying/ItemFilter.cs @@ -2,56 +2,54 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Querying -{ - /// - /// Enum ItemFilter. - /// - public enum ItemFilter - { - /// - /// The item is a folder. - /// - IsFolder = 1, +namespace MediaBrowser.Model.Querying; + /// + /// Enum ItemFilter. + /// + public enum ItemFilter + { + /// + /// The item is a folder. + /// + IsFolder = 1, - /// - /// The item is not folder. - /// - IsNotFolder = 2, + /// + /// The item is not folder. + /// + IsNotFolder = 2, - /// - /// The item is unplayed. - /// - IsUnplayed = 3, + /// + /// The item is unplayed. + /// + IsUnplayed = 3, - /// - /// The item is played. - /// - IsPlayed = 4, + /// + /// The item is played. + /// + IsPlayed = 4, - /// - /// The item is a favorite. - /// - IsFavorite = 5, + /// + /// The item is a favorite. + /// + IsFavorite = 5, - /// - /// The item is resumable. - /// - IsResumable = 7, + /// + /// The item is resumable. + /// + IsResumable = 7, - /// - /// The likes. - /// - Likes = 8, + /// + /// The likes. + /// + Likes = 8, - /// - /// The dislikes. - /// - Dislikes = 9, + /// + /// The dislikes. + /// + Dislikes = 9, - /// - /// The is favorite or likes. - /// - IsFavoriteOrLikes = 10 - } -} + /// + /// The is favorite or likes. + /// + IsFavoriteOrLikes = 10, + } diff --git a/MediaBrowser.Model/Querying/LatestItemsQuery.cs b/MediaBrowser.Model/Querying/LatestItemsQuery.cs index 89d5a936..7a424860 100644 --- a/MediaBrowser.Model/Querying/LatestItemsQuery.cs +++ b/MediaBrowser.Model/Querying/LatestItemsQuery.cs @@ -5,85 +5,86 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; using Jellyfin.Data.Enums; using Jellyfin.Database.Implementations.Entities; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Model.Querying -{ - public class LatestItemsQuery - { - public LatestItemsQuery() - { - EnableImageTypes = Array.Empty(); - } +namespace MediaBrowser.Model.Querying; + public class LatestItemsQuery + { + /// + /// Initializes a new instance of the class. + /// + public LatestItemsQuery() + { + EnableImageTypes = Array.Empty(); + } - /// - /// Gets or sets the user to localize search results for. - /// - /// The user id. - public User User { get; set; } + /// + /// Gets or sets the user to localize search results for. + /// + /// The user id. + public User User { get; set; } - /// - /// Gets or sets the parent id. - /// Specify this to localize the search to a specific item or folder. Omit to use the root. - /// - /// The parent id. - public Guid ParentId { get; set; } + /// + /// Gets or sets the parent id. + /// Specify this to localize the search to a specific item or folder. Omit to use the root. + /// + /// The parent id. + public Guid ParentId { get; set; } - /// - /// Gets or sets the start index. Used for paging. - /// - /// The start index. - public int? StartIndex { get; set; } + /// + /// Gets or sets the start index. Used for paging. + /// + /// The start index. + public int? StartIndex { get; set; } - /// - /// Gets or sets the maximum number of items to return. - /// - /// The limit. - public int? Limit { get; set; } + /// + /// Gets or sets the maximum number of items to return. + /// + /// The limit. + public int? Limit { get; set; } - /// - /// Gets or sets the fields to return within the items, in addition to basic information. - /// - /// The fields. - public ItemFields[] Fields { get; set; } + /// + /// Gets or sets the fields to return within the items, in addition to basic information. + /// + /// The fields. + public ItemFields[] Fields { get; set; } - /// - /// Gets or sets the include item types. - /// - /// The include item types. - public BaseItemKind[] IncludeItemTypes { get; set; } + /// + /// Gets or sets the include item types. + /// + /// The include item types. + public BaseItemKind[] IncludeItemTypes { get; set; } - /// - /// Gets or sets a value indicating whether this instance is played. - /// - /// null if [is played] contains no value, true if [is played]; otherwise, false. - public bool? IsPlayed { get; set; } + /// + /// Gets or sets a value indicating whether this instance is played. + /// + /// null if [is played] contains no value, true if [is played]; otherwise, false. + public bool? IsPlayed { get; set; } - /// - /// Gets or sets a value indicating whether [group items]. - /// - /// true if [group items]; otherwise, false. - public bool GroupItems { get; set; } + /// + /// Gets or sets a value indicating whether [group items]. + /// + /// true if [group items]; otherwise, false. + public bool GroupItems { get; set; } - /// - /// Gets or sets a value indicating whether [enable images]. - /// - /// null if [enable images] contains no value, true if [enable images]; otherwise, false. - public bool? EnableImages { get; set; } + /// + /// Gets or sets a value indicating whether [enable images]. + /// + /// null if [enable images] contains no value, true if [enable images]; otherwise, false. + public bool? EnableImages { get; set; } - /// - /// Gets or sets the image type limit. - /// - /// The image type limit. - public int? ImageTypeLimit { get; set; } + /// + /// Gets or sets the image type limit. + /// + /// The image type limit. + public int? ImageTypeLimit { get; set; } - /// - /// Gets or sets the enable image types. - /// - /// The enable image types. - public ImageType[] EnableImageTypes { get; set; } - } -} + /// + /// Gets or sets the enable image types. + /// + /// The enable image types. + public ImageType[] EnableImageTypes { get; set; } + } diff --git a/MediaBrowser.Model/Querying/NextUpQuery.cs b/MediaBrowser.Model/Querying/NextUpQuery.cs index c253db10..0d8737a7 100644 --- a/MediaBrowser.Model/Querying/NextUpQuery.cs +++ b/MediaBrowser.Model/Querying/NextUpQuery.cs @@ -4,7 +4,7 @@ #pragma warning disable CS1591 -using System; +using global::System; using Jellyfin.Database.Implementations.Entities; using MediaBrowser.Model.Entities; @@ -12,6 +12,9 @@ namespace MediaBrowser.Model.Querying; public class NextUpQuery { + /// + /// Initializes a new instance of the class. + /// public NextUpQuery() { EnableImageTypes = Array.Empty(); diff --git a/MediaBrowser.Model/Querying/QueryFilters.cs b/MediaBrowser.Model/Querying/QueryFilters.cs index f514fa39..7d2c5ac8 100644 --- a/MediaBrowser.Model/Querying/QueryFilters.cs +++ b/MediaBrowser.Model/Querying/QueryFilters.cs @@ -5,21 +5,22 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; using MediaBrowser.Model.Dto; -namespace MediaBrowser.Model.Querying -{ - public class QueryFilters - { - public QueryFilters() - { - Tags = Array.Empty(); - Genres = Array.Empty(); - } +namespace MediaBrowser.Model.Querying; + public class QueryFilters + { + /// + /// Initializes a new instance of the class. + /// + public QueryFilters() + { + Tags = Array.Empty(); + Genres = Array.Empty(); + } - public NameGuidPair[] Genres { get; set; } + public NameGuidPair[] Genres { get; set; } - public string[] Tags { get; set; } - } -} + public string[] Tags { get; set; } + } diff --git a/MediaBrowser.Model/Querying/QueryFiltersLegacy.cs b/MediaBrowser.Model/Querying/QueryFiltersLegacy.cs index aab24fb6..5c80579c 100644 --- a/MediaBrowser.Model/Querying/QueryFiltersLegacy.cs +++ b/MediaBrowser.Model/Querying/QueryFiltersLegacy.cs @@ -5,26 +5,27 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.Querying -{ - public class QueryFiltersLegacy - { - public QueryFiltersLegacy() - { - Genres = Array.Empty(); - Tags = Array.Empty(); - OfficialRatings = Array.Empty(); - Years = Array.Empty(); - } +namespace MediaBrowser.Model.Querying; + public class QueryFiltersLegacy + { + /// + /// Initializes a new instance of the class. + /// + public QueryFiltersLegacy() + { + Genres = Array.Empty(); + Tags = Array.Empty(); + OfficialRatings = Array.Empty(); + Years = Array.Empty(); + } - public string[] Genres { get; set; } + public string[] Genres { get; set; } - public string[] Tags { get; set; } + public string[] Tags { get; set; } - public string[] OfficialRatings { get; set; } + public string[] OfficialRatings { get; set; } - public int[] Years { get; set; } - } -} + public int[] Years { get; set; } + } diff --git a/MediaBrowser.Model/Querying/QueryResult.cs b/MediaBrowser.Model/Querying/QueryResult.cs index 22ebcacd..87feff19 100644 --- a/MediaBrowser.Model/Querying/QueryResult.cs +++ b/MediaBrowser.Model/Querying/QueryResult.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; - namespace MediaBrowser.Model.Querying; +using global::System; +using global::System.Collections.Generic; + /// /// Query result container. /// diff --git a/MediaBrowser.Model/Querying/ThemeMediaResult.cs b/MediaBrowser.Model/Querying/ThemeMediaResult.cs index 6b24b2f8..0de9def2 100644 --- a/MediaBrowser.Model/Querying/ThemeMediaResult.cs +++ b/MediaBrowser.Model/Querying/ThemeMediaResult.cs @@ -2,20 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using MediaBrowser.Model.Dto; +namespace MediaBrowser.Model.Querying; + using global::System; + using MediaBrowser.Model.Dto; -namespace MediaBrowser.Model.Querying -{ - /// - /// Class ThemeMediaResult. - /// - public class ThemeMediaResult : QueryResult - { - /// - /// Gets or sets the owner id. - /// - /// The owner id. - public Guid OwnerId { get; set; } - } -} + /// + /// Class ThemeMediaResult. + /// + public class ThemeMediaResult : QueryResult + { + /// + /// Gets or sets the owner id. + /// + /// The owner id. + public Guid OwnerId { get; set; } + } diff --git a/MediaBrowser.Model/QuickConnect/QuickConnectResult.cs b/MediaBrowser.Model/QuickConnect/QuickConnectResult.cs index c2efad82..24782d1f 100644 --- a/MediaBrowser.Model/QuickConnect/QuickConnectResult.cs +++ b/MediaBrowser.Model/QuickConnect/QuickConnectResult.cs @@ -2,81 +2,79 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; +namespace MediaBrowser.Model.QuickConnect; + using global::System; -namespace MediaBrowser.Model.QuickConnect -{ - /// - /// Stores the state of an quick connect request. - /// - public class QuickConnectResult - { - /// - /// Initializes a new instance of the class. - /// - /// The secret used to query the request state. - /// The code used to allow the request. - /// The time when the request was created. - /// The requesting device id. - /// The requesting device name. - /// The requesting app name. - /// The requesting app version. - public QuickConnectResult( - string secret, - string code, - DateTime dateAdded, - string deviceId, - string deviceName, - string appName, - string appVersion) - { - Secret = secret; - Code = code; - DateAdded = dateAdded; - DeviceId = deviceId; - DeviceName = deviceName; - AppName = appName; - AppVersion = appVersion; - } + /// + /// Stores the state of an quick connect request. + /// + public class QuickConnectResult + { + /// + /// Initializes a new instance of the class. + /// + /// The secret used to query the request state. + /// The code used to allow the request. + /// The time when the request was created. + /// The requesting device id. + /// The requesting device name. + /// The requesting app name. + /// The requesting app version. + public QuickConnectResult( + string secret, + string code, + DateTime dateAdded, + string deviceId, + string deviceName, + string appName, + string appVersion) + { + Secret = secret; + Code = code; + DateAdded = dateAdded; + DeviceId = deviceId; + DeviceName = deviceName; + AppName = appName; + AppVersion = appVersion; + } - /// - /// Gets or sets a value indicating whether this request is authorized. - /// - public bool Authenticated { get; set; } + /// + /// Gets or sets a value indicating whether this request is authorized. + /// + public bool Authenticated { get; set; } - /// - /// Gets the secret value used to uniquely identify this request. Can be used to retrieve authentication information. - /// - public string Secret { get; } + /// + /// Gets the secret value used to uniquely identify this request. Can be used to retrieve authentication information. + /// + public string Secret { get; } - /// - /// Gets the user facing code used so the user can quickly differentiate this request from others. - /// - public string Code { get; } + /// + /// Gets the user facing code used so the user can quickly differentiate this request from others. + /// + public string Code { get; } - /// - /// Gets the requesting device id. - /// - public string DeviceId { get; } + /// + /// Gets the requesting device id. + /// + public string DeviceId { get; } - /// - /// Gets the requesting device name. - /// - public string DeviceName { get; } + /// + /// Gets the requesting device name. + /// + public string DeviceName { get; } - /// - /// Gets the requesting app name. - /// - public string AppName { get; } + /// + /// Gets the requesting app name. + /// + public string AppName { get; } - /// - /// Gets the requesting app version. - /// - public string AppVersion { get; } + /// + /// Gets the requesting app version. + /// + public string AppVersion { get; } - /// - /// Gets or sets the DateTime that this request was created. - /// - public DateTime DateAdded { get; set; } - } -} + /// + /// Gets or sets the DateTime that this request was created. + /// + public DateTime DateAdded { get; set; } + } diff --git a/MediaBrowser.Model/Search/SearchHint.cs b/MediaBrowser.Model/Search/SearchHint.cs index 1f270ef0..3fad4814 100644 --- a/MediaBrowser.Model/Search/SearchHint.cs +++ b/MediaBrowser.Model/Search/SearchHint.cs @@ -2,203 +2,201 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.ComponentModel; -using Jellyfin.Data.Enums; +namespace MediaBrowser.Model.Search; + using global::System; + using global::System.Collections.Generic; + using global::System.ComponentModel; + using Jellyfin.Data.Enums; -namespace MediaBrowser.Model.Search -{ - /// - /// Class SearchHintResult. - /// - public class SearchHint - { - /// - /// Initializes a new instance of the class. - /// - public SearchHint() - { - Name = string.Empty; - MatchedTerm = string.Empty; - MediaType = Jellyfin.Data.Enums.MediaType.Unknown; - Artists = Array.Empty(); - } + /// + /// Class SearchHintResult. + /// + public class SearchHint + { + /// + /// Initializes a new instance of the class. + /// + public SearchHint() + { + Name = string.Empty; + MatchedTerm = string.Empty; + MediaType = Jellyfin.Data.Enums.MediaType.Unknown; + Artists = Array.Empty(); + } - /// - /// Gets or sets the item id. - /// - /// The item id. - [Obsolete("Use Id instead")] - public Guid ItemId { get; set; } + /// + /// Gets or sets the item id. + /// + /// The item id. + [Obsolete("Use Id instead")] + public Guid ItemId { get; set; } - /// - /// Gets or sets the item id. - /// - /// The item id. - public Guid Id { get; set; } + /// + /// Gets or sets the item id. + /// + /// The item id. + public Guid Id { get; set; } - /// - /// Gets or sets the name. - /// - /// The name. - public string Name { get; set; } + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } - /// - /// Gets or sets the matched term. - /// - /// The matched term. - public string? MatchedTerm { get; set; } + /// + /// Gets or sets the matched term. + /// + /// The matched term. + public string? MatchedTerm { get; set; } - /// - /// Gets or sets the index number. - /// - /// The index number. - public int? IndexNumber { get; set; } + /// + /// Gets or sets the index number. + /// + /// The index number. + public int? IndexNumber { get; set; } - /// - /// Gets or sets the production year. - /// - /// The production year. - public int? ProductionYear { get; set; } + /// + /// Gets or sets the production year. + /// + /// The production year. + public int? ProductionYear { get; set; } - /// - /// Gets or sets the parent index number. - /// - /// The parent index number. - public int? ParentIndexNumber { get; set; } + /// + /// Gets or sets the parent index number. + /// + /// The parent index number. + public int? ParentIndexNumber { get; set; } - /// - /// Gets or sets the image tag. - /// - /// The image tag. - public string? PrimaryImageTag { get; set; } + /// + /// Gets or sets the image tag. + /// + /// The image tag. + public string? PrimaryImageTag { get; set; } - /// - /// Gets or sets the thumb image tag. - /// - /// The thumb image tag. - public string? ThumbImageTag { get; set; } + /// + /// Gets or sets the thumb image tag. + /// + /// The thumb image tag. + public string? ThumbImageTag { get; set; } - /// - /// Gets or sets the thumb image item identifier. - /// - /// The thumb image item identifier. - public string? ThumbImageItemId { get; set; } + /// + /// Gets or sets the thumb image item identifier. + /// + /// The thumb image item identifier. + public string? ThumbImageItemId { get; set; } - /// - /// Gets or sets the backdrop image tag. - /// - /// The backdrop image tag. - public string? BackdropImageTag { get; set; } + /// + /// Gets or sets the backdrop image tag. + /// + /// The backdrop image tag. + public string? BackdropImageTag { get; set; } - /// - /// Gets or sets the backdrop image item identifier. - /// - /// The backdrop image item identifier. - public string? BackdropImageItemId { get; set; } + /// + /// Gets or sets the backdrop image item identifier. + /// + /// The backdrop image item identifier. + public string? BackdropImageItemId { get; set; } - /// - /// Gets or sets the type. - /// - /// The type. - public BaseItemKind Type { get; set; } + /// + /// Gets or sets the type. + /// + /// The type. + public BaseItemKind Type { get; set; } - /// - /// Gets or sets a value indicating whether this instance is folder. - /// - /// true if this instance is folder; otherwise, false. - public bool? IsFolder { get; set; } + /// + /// Gets or sets a value indicating whether this instance is folder. + /// + /// true if this instance is folder; otherwise, false. + public bool? IsFolder { get; set; } - /// - /// Gets or sets the run time ticks. - /// - /// The run time ticks. - public long? RunTimeTicks { get; set; } + /// + /// Gets or sets the run time ticks. + /// + /// The run time ticks. + public long? RunTimeTicks { get; set; } - /// - /// Gets or sets the type of the media. - /// - /// The type of the media. - [DefaultValue(MediaType.Unknown)] - public MediaType MediaType { get; set; } + /// + /// Gets or sets the type of the media. + /// + /// The type of the media. + [DefaultValue(MediaType.Unknown)] + public MediaType MediaType { get; set; } - /// - /// Gets or sets the start date. - /// - /// The start date. - public DateTime? StartDate { get; set; } + /// + /// Gets or sets the start date. + /// + /// The start date. + public DateTime? StartDate { get; set; } - /// - /// Gets or sets the end date. - /// - /// The end date. - public DateTime? EndDate { get; set; } + /// + /// Gets or sets the end date. + /// + /// The end date. + public DateTime? EndDate { get; set; } - /// - /// Gets or sets the series. - /// - /// The series. - public string? Series { get; set; } + /// + /// Gets or sets the series. + /// + /// The series. + public string? Series { get; set; } - /// - /// Gets or sets the status. - /// - /// The status. - public string? Status { get; set; } + /// + /// Gets or sets the status. + /// + /// The status. + public string? Status { get; set; } - /// - /// Gets or sets the album. - /// - /// The album. - public string? Album { get; set; } + /// + /// Gets or sets the album. + /// + /// The album. + public string? Album { get; set; } - /// - /// Gets or sets the album id. - /// - /// The album id. - public Guid? AlbumId { get; set; } + /// + /// Gets or sets the album id. + /// + /// The album id. + public Guid? AlbumId { get; set; } - /// - /// Gets or sets the album artist. - /// - /// The album artist. - public string? AlbumArtist { get; set; } + /// + /// Gets or sets the album artist. + /// + /// The album artist. + public string? AlbumArtist { get; set; } - /// - /// Gets or sets the artists. - /// - /// The artists. - public IReadOnlyList Artists { get; set; } + /// + /// Gets or sets the artists. + /// + /// The artists. + public IReadOnlyList Artists { get; set; } - /// - /// Gets or sets the song count. - /// - /// The song count. - public int? SongCount { get; set; } + /// + /// Gets or sets the song count. + /// + /// The song count. + public int? SongCount { get; set; } - /// - /// Gets or sets the episode count. - /// - /// The episode count. - public int? EpisodeCount { get; set; } + /// + /// Gets or sets the episode count. + /// + /// The episode count. + public int? EpisodeCount { get; set; } - /// - /// Gets or sets the channel identifier. - /// - /// The channel identifier. - public Guid? ChannelId { get; set; } + /// + /// Gets or sets the channel identifier. + /// + /// The channel identifier. + public Guid? ChannelId { get; set; } - /// - /// Gets or sets the name of the channel. - /// - /// The name of the channel. - public string? ChannelName { get; set; } + /// + /// Gets or sets the name of the channel. + /// + /// The name of the channel. + public string? ChannelName { get; set; } - /// - /// Gets or sets the primary image aspect ratio. - /// - /// The primary image aspect ratio. - public double? PrimaryImageAspectRatio { get; set; } - } -} + /// + /// Gets or sets the primary image aspect ratio. + /// + /// The primary image aspect ratio. + public double? PrimaryImageAspectRatio { get; set; } + } diff --git a/MediaBrowser.Model/Search/SearchHintResult.cs b/MediaBrowser.Model/Search/SearchHintResult.cs index 35bc80f0..bddcfda7 100644 --- a/MediaBrowser.Model/Search/SearchHintResult.cs +++ b/MediaBrowser.Model/Search/SearchHintResult.cs @@ -2,36 +2,34 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; +namespace MediaBrowser.Model.Search; + using global::System.Collections.Generic; -namespace MediaBrowser.Model.Search -{ - /// - /// Class SearchHintResult. - /// - public class SearchHintResult - { - /// - /// Initializes a new instance of the class. - /// - /// The search hints. - /// The total record count. - public SearchHintResult(IReadOnlyList searchHints, int totalRecordCount) - { - SearchHints = searchHints; - TotalRecordCount = totalRecordCount; - } + /// + /// Class SearchHintResult. + /// + public class SearchHintResult + { + /// + /// Initializes a new instance of the class. + /// + /// The search hints. + /// The total record count. + public SearchHintResult(IReadOnlyList searchHints, int totalRecordCount) + { + SearchHints = searchHints; + TotalRecordCount = totalRecordCount; + } - /// - /// Gets the search hints. - /// - /// The search hints. - public IReadOnlyList SearchHints { get; } + /// + /// Gets the search hints. + /// + /// The search hints. + public IReadOnlyList SearchHints { get; } - /// - /// Gets the total record count. - /// - /// The total record count. - public int TotalRecordCount { get; } - } -} + /// + /// Gets the total record count. + /// + /// The total record count. + public int TotalRecordCount { get; } + } diff --git a/MediaBrowser.Model/Search/SearchQuery.cs b/MediaBrowser.Model/Search/SearchQuery.cs index 58064ab8..2b4a1b72 100644 --- a/MediaBrowser.Model/Search/SearchQuery.cs +++ b/MediaBrowser.Model/Search/SearchQuery.cs @@ -4,76 +4,77 @@ #pragma warning disable CS1591 -using System; +using global::System; using Jellyfin.Data.Enums; -namespace MediaBrowser.Model.Search -{ - public class SearchQuery - { - public SearchQuery() - { - IncludeArtists = true; - IncludeGenres = true; - IncludeMedia = true; - IncludePeople = true; - IncludeStudios = true; +namespace MediaBrowser.Model.Search; + public class SearchQuery + { + /// + /// Initializes a new instance of the class. + /// + public SearchQuery() + { + IncludeArtists = true; + IncludeGenres = true; + IncludeMedia = true; + IncludePeople = true; + IncludeStudios = true; - MediaTypes = Array.Empty(); - IncludeItemTypes = Array.Empty(); - ExcludeItemTypes = Array.Empty(); - } + MediaTypes = Array.Empty(); + IncludeItemTypes = Array.Empty(); + ExcludeItemTypes = Array.Empty(); + } - /// - /// Gets or sets the user to localize search results for. - /// - /// The user id. - public Guid UserId { get; set; } + /// + /// Gets or sets the user to localize search results for. + /// + /// The user id. + public Guid UserId { get; set; } - /// - /// Gets or sets the search term. - /// - /// The search term. - public required string SearchTerm { get; set; } + /// + /// Gets or sets the search term. + /// + /// The search term. + public required string SearchTerm { get; set; } - /// - /// Gets or sets the start index. Used for paging. - /// - /// The start index. - public int? StartIndex { get; set; } + /// + /// Gets or sets the start index. Used for paging. + /// + /// The start index. + public int? StartIndex { get; set; } - /// - /// Gets or sets the maximum number of items to return. - /// - /// The limit. - public int? Limit { get; set; } + /// + /// Gets or sets the maximum number of items to return. + /// + /// The limit. + public int? Limit { get; set; } - public bool IncludePeople { get; set; } + public bool IncludePeople { get; set; } - public bool IncludeMedia { get; set; } + public bool IncludeMedia { get; set; } - public bool IncludeGenres { get; set; } + public bool IncludeGenres { get; set; } - public bool IncludeStudios { get; set; } + public bool IncludeStudios { get; set; } - public bool IncludeArtists { get; set; } + public bool IncludeArtists { get; set; } - public MediaType[] MediaTypes { get; set; } + public MediaType[] MediaTypes { get; set; } - public BaseItemKind[] IncludeItemTypes { get; set; } + public BaseItemKind[] IncludeItemTypes { get; set; } - public BaseItemKind[] ExcludeItemTypes { get; set; } + public BaseItemKind[] ExcludeItemTypes { get; set; } - public Guid? ParentId { get; set; } + public Guid? ParentId { get; set; } - public bool? IsMovie { get; set; } + public bool? IsMovie { get; set; } - public bool? IsSeries { get; set; } + public bool? IsSeries { get; set; } - public bool? IsNews { get; set; } + public bool? IsNews { get; set; } - public bool? IsKids { get; set; } + public bool? IsKids { get; set; } - public bool? IsSports { get; set; } - } -} + public bool? IsSports { get; set; } + } diff --git a/MediaBrowser.Model/Serialization/IXmlSerializer.cs b/MediaBrowser.Model/Serialization/IXmlSerializer.cs index 5a8d77f7..1e1d9627 100644 --- a/MediaBrowser.Model/Serialization/IXmlSerializer.cs +++ b/MediaBrowser.Model/Serialization/IXmlSerializer.cs @@ -5,49 +5,47 @@ #nullable disable #pragma warning disable CS1591 -using System; -using System.IO; +using global::System; +using global::System.IO; -namespace MediaBrowser.Model.Serialization -{ - public interface IXmlSerializer - { - /// - /// Deserializes from stream. - /// - /// The type. - /// The stream. - /// System.Object. - object DeserializeFromStream(Type type, Stream stream); +namespace MediaBrowser.Model.Serialization; + public interface IXmlSerializer + { + /// + /// Deserializes from stream. + /// + /// The type. + /// The stream. + /// System.Object. + object DeserializeFromStream(Type type, Stream stream); - /// - /// Serializes to stream. - /// - /// The obj. - /// The stream. - void SerializeToStream(object obj, Stream stream); + /// + /// Serializes to stream. + /// + /// The obj. + /// The stream. + void SerializeToStream(object obj, Stream stream); - /// - /// Serializes to file. - /// - /// The obj. - /// The file. - void SerializeToFile(object obj, string file); + /// + /// Serializes to file. + /// + /// The obj. + /// The file. + void SerializeToFile(object obj, string file); - /// - /// Deserializes from file. - /// - /// The type. - /// The file. - /// System.Object. - object DeserializeFromFile(Type type, string file); + /// + /// Deserializes from file. + /// + /// The type. + /// The file. + /// System.Object. + object DeserializeFromFile(Type type, string file); - /// - /// Deserializes from bytes. - /// - /// The type. - /// The buffer. - /// System.Object. - object DeserializeFromBytes(Type type, byte[] buffer); - } -} + /// + /// Deserializes from bytes. + /// + /// The type. + /// The buffer. + /// System.Object. + object DeserializeFromBytes(Type type, byte[] buffer); + } diff --git a/MediaBrowser.Model/Session/BrowseRequest.cs b/MediaBrowser.Model/Session/BrowseRequest.cs index 43b10eaa..6e4e7107 100644 --- a/MediaBrowser.Model/Session/BrowseRequest.cs +++ b/MediaBrowser.Model/Session/BrowseRequest.cs @@ -2,32 +2,30 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Jellyfin.Data.Enums; - #nullable disable -namespace MediaBrowser.Model.Session -{ - /// - /// Class BrowseRequest. - /// - public class BrowseRequest - { - /// - /// Gets or sets the item type. - /// - /// The type of the item. - public BaseItemKind ItemType { get; set; } +namespace MediaBrowser.Model.Session; + using Jellyfin.Data.Enums; - /// - /// Gets or sets the item id. - /// - /// The item id. - public string ItemId { get; set; } + /// + /// Class BrowseRequest. + /// + public class BrowseRequest + { + /// + /// Gets or sets the item type. + /// + /// The type of the item. + public BaseItemKind ItemType { get; set; } - /// - /// Gets or sets the name of the item. - /// - /// The name of the item. - public string ItemName { get; set; } - } -} + /// + /// Gets or sets the item id. + /// + /// The item id. + public string ItemId { get; set; } + + /// + /// Gets or sets the name of the item. + /// + /// The name of the item. + public string ItemName { get; set; } + } diff --git a/MediaBrowser.Model/Session/ClientCapabilities.cs b/MediaBrowser.Model/Session/ClientCapabilities.cs index 69f22fca..f566518d 100644 --- a/MediaBrowser.Model/Session/ClientCapabilities.cs +++ b/MediaBrowser.Model/Session/ClientCapabilities.cs @@ -5,34 +5,35 @@ #nullable disable #pragma warning disable CS1591 -using System; -using System.Collections.Generic; +using global::System; +using global::System.Collections.Generic; using Jellyfin.Data.Enums; using MediaBrowser.Model.Dlna; -namespace MediaBrowser.Model.Session -{ - public class ClientCapabilities - { - public ClientCapabilities() - { - PlayableMediaTypes = Array.Empty(); - SupportedCommands = Array.Empty(); - SupportsPersistentIdentifier = true; - } +namespace MediaBrowser.Model.Session; + public class ClientCapabilities + { + /// + /// Initializes a new instance of the class. + /// + public ClientCapabilities() + { + PlayableMediaTypes = Array.Empty(); + SupportedCommands = Array.Empty(); + SupportsPersistentIdentifier = true; + } - public IReadOnlyList PlayableMediaTypes { get; set; } + public IReadOnlyList PlayableMediaTypes { get; set; } - public IReadOnlyList SupportedCommands { get; set; } + public IReadOnlyList SupportedCommands { get; set; } - public bool SupportsMediaControl { get; set; } + public bool SupportsMediaControl { get; set; } - public bool SupportsPersistentIdentifier { get; set; } + public bool SupportsPersistentIdentifier { get; set; } - public DeviceProfile DeviceProfile { get; set; } + public DeviceProfile DeviceProfile { get; set; } - public string AppStoreUrl { get; set; } + public string AppStoreUrl { get; set; } - public string IconUrl { get; set; } - } -} + public string IconUrl { get; set; } + } diff --git a/MediaBrowser.Model/Session/GeneralCommand.cs b/MediaBrowser.Model/Session/GeneralCommand.cs index 228566b7..84560918 100644 --- a/MediaBrowser.Model/Session/GeneralCommand.cs +++ b/MediaBrowser.Model/Session/GeneralCommand.cs @@ -4,19 +4,26 @@ #pragma warning disable CS1591 -using System; -using System.Collections.Generic; -using System.Text.Json.Serialization; +using global::System; +using global::System.Collections.Generic; +using global::System.Text.Json.Serialization; namespace MediaBrowser.Model.Session; public class GeneralCommand { + /// + /// Initializes a new instance of the class. + /// public GeneralCommand() : this(new Dictionary()) { } + /// + /// Initializes a new instance of the class. + /// + /// The command arguments. [JsonConstructor] public GeneralCommand(Dictionary? arguments) { diff --git a/MediaBrowser.Model/Session/GeneralCommandType.cs b/MediaBrowser.Model/Session/GeneralCommandType.cs index fcc8b3d6..bbe8030b 100644 --- a/MediaBrowser.Model/Session/GeneralCommandType.cs +++ b/MediaBrowser.Model/Session/GeneralCommandType.cs @@ -4,55 +4,53 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Session -{ - /// - /// This exists simply to identify a set of known commands. - /// - public enum GeneralCommandType - { - MoveUp = 0, - MoveDown = 1, - MoveLeft = 2, - MoveRight = 3, - PageUp = 4, - PageDown = 5, - PreviousLetter = 6, - NextLetter = 7, - ToggleOsd = 8, - ToggleContextMenu = 9, - Select = 10, - Back = 11, - TakeScreenshot = 12, - SendKey = 13, - SendString = 14, - GoHome = 15, - GoToSettings = 16, - VolumeUp = 17, - VolumeDown = 18, - Mute = 19, - Unmute = 20, - ToggleMute = 21, - SetVolume = 22, - SetAudioStreamIndex = 23, - SetSubtitleStreamIndex = 24, - ToggleFullscreen = 25, - DisplayContent = 26, - GoToSearch = 27, - DisplayMessage = 28, - SetRepeatMode = 29, - ChannelUp = 30, - ChannelDown = 31, - Guide = 32, - ToggleStats = 33, - PlayMediaSource = 34, - PlayTrailers = 35, - SetShuffleQueue = 36, - PlayState = 37, - PlayNext = 38, - ToggleOsdMenu = 39, - Play = 40, - SetMaxStreamingBitrate = 41, - SetPlaybackOrder = 42 - } -} +namespace MediaBrowser.Model.Session; + /// + /// This exists simply to identify a set of known commands. + /// + public enum GeneralCommandType + { + MoveUp = 0, + MoveDown = 1, + MoveLeft = 2, + MoveRight = 3, + PageUp = 4, + PageDown = 5, + PreviousLetter = 6, + NextLetter = 7, + ToggleOsd = 8, + ToggleContextMenu = 9, + Select = 10, + Back = 11, + TakeScreenshot = 12, + SendKey = 13, + SendString = 14, + GoHome = 15, + GoToSettings = 16, + VolumeUp = 17, + VolumeDown = 18, + Mute = 19, + Unmute = 20, + ToggleMute = 21, + SetVolume = 22, + SetAudioStreamIndex = 23, + SetSubtitleStreamIndex = 24, + ToggleFullscreen = 25, + DisplayContent = 26, + GoToSearch = 27, + DisplayMessage = 28, + SetRepeatMode = 29, + ChannelUp = 30, + ChannelDown = 31, + Guide = 32, + ToggleStats = 33, + PlayMediaSource = 34, + PlayTrailers = 35, + SetShuffleQueue = 36, + PlayState = 37, + PlayNext = 38, + ToggleOsdMenu = 39, + Play = 40, + SetMaxStreamingBitrate = 41, + SetPlaybackOrder = 42, + } diff --git a/MediaBrowser.Model/Session/MessageCommand.cs b/MediaBrowser.Model/Session/MessageCommand.cs index e90cc0c8..a4a9f9c5 100644 --- a/MediaBrowser.Model/Session/MessageCommand.cs +++ b/MediaBrowser.Model/Session/MessageCommand.cs @@ -5,17 +5,15 @@ #nullable disable #pragma warning disable CS1591 -using System.ComponentModel.DataAnnotations; +using global::System.ComponentModel.DataAnnotations; -namespace MediaBrowser.Model.Session -{ - public class MessageCommand - { - public string Header { get; set; } +namespace MediaBrowser.Model.Session; + public class MessageCommand + { + public string Header { get; set; } - [Required(AllowEmptyStrings = false)] - public string Text { get; set; } + [Required(AllowEmptyStrings = false)] + public string Text { get; set; } - public long? TimeoutMs { get; set; } - } -} + public long? TimeoutMs { get; set; } + } diff --git a/MediaBrowser.Model/Session/PlayCommand.cs b/MediaBrowser.Model/Session/PlayCommand.cs index 33b100ad..8e39c12a 100644 --- a/MediaBrowser.Model/Session/PlayCommand.cs +++ b/MediaBrowser.Model/Session/PlayCommand.cs @@ -2,36 +2,34 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Session -{ - /// - /// Enum PlayCommand. - /// - public enum PlayCommand - { - /// - /// The play now. - /// - PlayNow = 0, +namespace MediaBrowser.Model.Session; + /// + /// Enum PlayCommand. + /// + public enum PlayCommand + { + /// + /// The play now. + /// + PlayNow = 0, - /// - /// The play next. - /// - PlayNext = 1, + /// + /// The play next. + /// + PlayNext = 1, - /// - /// The play last. - /// - PlayLast = 2, + /// + /// The play last. + /// + PlayLast = 2, - /// - /// The play instant mix. - /// - PlayInstantMix = 3, + /// + /// The play instant mix. + /// + PlayInstantMix = 3, - /// - /// The play shuffle. - /// - PlayShuffle = 4 - } -} + /// + /// The play shuffle. + /// + PlayShuffle = 4, + } diff --git a/MediaBrowser.Model/Session/PlayMethod.cs b/MediaBrowser.Model/Session/PlayMethod.cs index ba05c0ae..313ee2bd 100644 --- a/MediaBrowser.Model/Session/PlayMethod.cs +++ b/MediaBrowser.Model/Session/PlayMethod.cs @@ -4,12 +4,10 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Session -{ - public enum PlayMethod - { - Transcode = 0, - DirectStream = 1, - DirectPlay = 2 - } -} +namespace MediaBrowser.Model.Session; + public enum PlayMethod + { + Transcode = 0, + DirectStream = 1, + DirectPlay = 2, + } diff --git a/MediaBrowser.Model/Session/PlayRequest.cs b/MediaBrowser.Model/Session/PlayRequest.cs index f59e8a12..49b3eef4 100644 --- a/MediaBrowser.Model/Session/PlayRequest.cs +++ b/MediaBrowser.Model/Session/PlayRequest.cs @@ -5,45 +5,43 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.Session -{ - /// - /// Class PlayRequest. - /// - public class PlayRequest - { - /// - /// Gets or sets the item ids. - /// - /// The item ids. - public Guid[] ItemIds { get; set; } +namespace MediaBrowser.Model.Session; + /// + /// Class PlayRequest. + /// + public class PlayRequest + { + /// + /// Gets or sets the item ids. + /// + /// The item ids. + public Guid[] ItemIds { get; set; } - /// - /// Gets or sets the start position ticks that the first item should be played at. - /// - /// The start position ticks. - public long? StartPositionTicks { get; set; } + /// + /// Gets or sets the start position ticks that the first item should be played at. + /// + /// The start position ticks. + public long? StartPositionTicks { get; set; } - /// - /// Gets or sets the play command. - /// - /// The play command. - public PlayCommand PlayCommand { get; set; } + /// + /// Gets or sets the play command. + /// + /// The play command. + public PlayCommand PlayCommand { get; set; } - /// - /// Gets or sets the controlling user identifier. - /// - /// The controlling user identifier. - public Guid ControllingUserId { get; set; } + /// + /// Gets or sets the controlling user identifier. + /// + /// The controlling user identifier. + public Guid ControllingUserId { get; set; } - public int? SubtitleStreamIndex { get; set; } + public int? SubtitleStreamIndex { get; set; } - public int? AudioStreamIndex { get; set; } + public int? AudioStreamIndex { get; set; } - public string MediaSourceId { get; set; } + public string MediaSourceId { get; set; } - public int? StartIndex { get; set; } - } -} + public int? StartIndex { get; set; } + } diff --git a/MediaBrowser.Model/Session/PlaybackOrder.cs b/MediaBrowser.Model/Session/PlaybackOrder.cs index 863c5be9..85b7167c 100644 --- a/MediaBrowser.Model/Session/PlaybackOrder.cs +++ b/MediaBrowser.Model/Session/PlaybackOrder.cs @@ -2,21 +2,19 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Session -{ - /// - /// Enum PlaybackOrder. - /// - public enum PlaybackOrder - { - /// - /// Sorted playlist. - /// - Default = 0, +namespace MediaBrowser.Model.Session; + /// + /// Enum PlaybackOrder. + /// + public enum PlaybackOrder + { + /// + /// Sorted playlist. + /// + Default = 0, - /// - /// Shuffled playlist. - /// - Shuffle = 1 - } -} + /// + /// Shuffled playlist. + /// + Shuffle = 1, + } diff --git a/MediaBrowser.Model/Session/PlaybackProgressInfo.cs b/MediaBrowser.Model/Session/PlaybackProgressInfo.cs index 635368b9..ba2d449a 100644 --- a/MediaBrowser.Model/Session/PlaybackProgressInfo.cs +++ b/MediaBrowser.Model/Session/PlaybackProgressInfo.cs @@ -5,120 +5,118 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; using MediaBrowser.Model.Dto; -namespace MediaBrowser.Model.Session -{ - /// - /// Class PlaybackProgressInfo. - /// - public class PlaybackProgressInfo - { - /// - /// Gets or sets a value indicating whether this instance can seek. - /// - /// true if this instance can seek; otherwise, false. - public bool CanSeek { get; set; } +namespace MediaBrowser.Model.Session; + /// + /// Class PlaybackProgressInfo. + /// + public class PlaybackProgressInfo + { + /// + /// Gets or sets a value indicating whether this instance can seek. + /// + /// true if this instance can seek; otherwise, false. + public bool CanSeek { get; set; } - /// - /// Gets or sets the item. - /// - /// The item. - public BaseItemDto Item { get; set; } + /// + /// Gets or sets the item. + /// + /// The item. + public BaseItemDto Item { get; set; } - /// - /// Gets or sets the item identifier. - /// - /// The item identifier. - public Guid ItemId { get; set; } + /// + /// Gets or sets the item identifier. + /// + /// The item identifier. + public Guid ItemId { get; set; } - /// - /// Gets or sets the session id. - /// - /// The session id. - public string SessionId { get; set; } + /// + /// Gets or sets the session id. + /// + /// The session id. + public string SessionId { get; set; } - /// - /// Gets or sets the media version identifier. - /// - /// The media version identifier. - public string MediaSourceId { get; set; } + /// + /// Gets or sets the media version identifier. + /// + /// The media version identifier. + public string MediaSourceId { get; set; } - /// - /// Gets or sets the index of the audio stream. - /// - /// The index of the audio stream. - public int? AudioStreamIndex { get; set; } + /// + /// Gets or sets the index of the audio stream. + /// + /// The index of the audio stream. + public int? AudioStreamIndex { get; set; } - /// - /// Gets or sets the index of the subtitle stream. - /// - /// The index of the subtitle stream. - public int? SubtitleStreamIndex { get; set; } + /// + /// Gets or sets the index of the subtitle stream. + /// + /// The index of the subtitle stream. + public int? SubtitleStreamIndex { get; set; } - /// - /// Gets or sets a value indicating whether this instance is paused. - /// - /// true if this instance is paused; otherwise, false. - public bool IsPaused { get; set; } + /// + /// Gets or sets a value indicating whether this instance is paused. + /// + /// true if this instance is paused; otherwise, false. + public bool IsPaused { get; set; } - /// - /// Gets or sets a value indicating whether this instance is muted. - /// - /// true if this instance is muted; otherwise, false. - public bool IsMuted { get; set; } + /// + /// Gets or sets a value indicating whether this instance is muted. + /// + /// true if this instance is muted; otherwise, false. + public bool IsMuted { get; set; } - /// - /// Gets or sets the position ticks. - /// - /// The position ticks. - public long? PositionTicks { get; set; } + /// + /// Gets or sets the position ticks. + /// + /// The position ticks. + public long? PositionTicks { get; set; } - public long? PlaybackStartTimeTicks { get; set; } + public long? PlaybackStartTimeTicks { get; set; } - /// - /// Gets or sets the volume level. - /// - /// The volume level. - public int? VolumeLevel { get; set; } + /// + /// Gets or sets the volume level. + /// + /// The volume level. + public int? VolumeLevel { get; set; } - public int? Brightness { get; set; } + public int? Brightness { get; set; } - public string AspectRatio { get; set; } + public string AspectRatio { get; set; } - /// - /// Gets or sets the play method. - /// - /// The play method. - public PlayMethod PlayMethod { get; set; } + /// + /// Gets or sets the play method. + /// + /// The play method. + public PlayMethod PlayMethod { get; set; } - /// - /// Gets or sets the live stream identifier. - /// - /// The live stream identifier. - public string LiveStreamId { get; set; } + /// + /// Gets or sets the live stream identifier. + /// + /// The live stream identifier. + public string LiveStreamId { get; set; } - /// - /// Gets or sets the play session identifier. - /// - /// The play session identifier. - public string PlaySessionId { get; set; } + /// + /// Gets or sets the play session identifier. + /// + /// The play session identifier. + public string PlaySessionId { get; set; } - /// - /// Gets or sets the repeat mode. - /// - /// The repeat mode. - public RepeatMode RepeatMode { get; set; } + /// + /// Gets or sets the repeat mode. + /// + /// The repeat mode. + public RepeatMode RepeatMode { get; set; } - /// - /// Gets or sets the playback order. - /// - /// The playback order. - public PlaybackOrder PlaybackOrder { get; set; } + /// + /// Gets or sets the playback order. + /// + /// The playback order. + public PlaybackOrder PlaybackOrder { get; set; } - public QueueItem[] NowPlayingQueue { get; set; } + public QueueItem[] NowPlayingQueue { get; set; } - public string PlaylistItemId { get; set; } - } -} + public string PlaylistItemId { get; set; } + } diff --git a/MediaBrowser.Model/Session/PlaybackStartInfo.cs b/MediaBrowser.Model/Session/PlaybackStartInfo.cs index 3bda2960..5bda024f 100644 --- a/MediaBrowser.Model/Session/PlaybackStartInfo.cs +++ b/MediaBrowser.Model/Session/PlaybackStartInfo.cs @@ -2,12 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Session -{ - /// - /// Class PlaybackStartInfo. - /// - public class PlaybackStartInfo : PlaybackProgressInfo - { - } -} +namespace MediaBrowser.Model.Session; + /// + /// Class PlaybackStartInfo. + /// + public class PlaybackStartInfo : PlaybackProgressInfo + { + } diff --git a/MediaBrowser.Model/Session/PlaybackStopInfo.cs b/MediaBrowser.Model/Session/PlaybackStopInfo.cs index f0fbf5e1..3f44b7a8 100644 --- a/MediaBrowser.Model/Session/PlaybackStopInfo.cs +++ b/MediaBrowser.Model/Session/PlaybackStopInfo.cs @@ -5,68 +5,66 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; using MediaBrowser.Model.Dto; -namespace MediaBrowser.Model.Session -{ - /// - /// Class PlaybackStopInfo. - /// - public class PlaybackStopInfo - { - /// - /// Gets or sets the item. - /// - /// The item. - public BaseItemDto Item { get; set; } +namespace MediaBrowser.Model.Session; + /// + /// Class PlaybackStopInfo. + /// + public class PlaybackStopInfo + { + /// + /// Gets or sets the item. + /// + /// The item. + public BaseItemDto Item { get; set; } - /// - /// Gets or sets the item identifier. - /// - /// The item identifier. - public Guid ItemId { get; set; } + /// + /// Gets or sets the item identifier. + /// + /// The item identifier. + public Guid ItemId { get; set; } - /// - /// Gets or sets the session id. - /// - /// The session id. - public string SessionId { get; set; } + /// + /// Gets or sets the session id. + /// + /// The session id. + public string SessionId { get; set; } - /// - /// Gets or sets the media version identifier. - /// - /// The media version identifier. - public string MediaSourceId { get; set; } + /// + /// Gets or sets the media version identifier. + /// + /// The media version identifier. + public string MediaSourceId { get; set; } - /// - /// Gets or sets the position ticks. - /// - /// The position ticks. - public long? PositionTicks { get; set; } + /// + /// Gets or sets the position ticks. + /// + /// The position ticks. + public long? PositionTicks { get; set; } - /// - /// Gets or sets the live stream identifier. - /// - /// The live stream identifier. - public string LiveStreamId { get; set; } + /// + /// Gets or sets the live stream identifier. + /// + /// The live stream identifier. + public string LiveStreamId { get; set; } - /// - /// Gets or sets the play session identifier. - /// - /// The play session identifier. - public string PlaySessionId { get; set; } + /// + /// Gets or sets the play session identifier. + /// + /// The play session identifier. + public string PlaySessionId { get; set; } - /// - /// Gets or sets a value indicating whether this is failed. - /// - /// true if failed; otherwise, false. - public bool Failed { get; set; } + /// + /// Gets or sets a value indicating whether this is failed. + /// + /// true if failed; otherwise, false. + public bool Failed { get; set; } - public string NextMediaType { get; set; } + public string NextMediaType { get; set; } - public string PlaylistItemId { get; set; } + public string PlaylistItemId { get; set; } - public QueueItem[] NowPlayingQueue { get; set; } - } -} + public QueueItem[] NowPlayingQueue { get; set; } + } diff --git a/MediaBrowser.Model/Session/PlayerStateInfo.cs b/MediaBrowser.Model/Session/PlayerStateInfo.cs index 9123d6bd..e4b1658d 100644 --- a/MediaBrowser.Model/Session/PlayerStateInfo.cs +++ b/MediaBrowser.Model/Session/PlayerStateInfo.cs @@ -5,80 +5,78 @@ #nullable disable #pragma warning disable CS1591 -namespace MediaBrowser.Model.Session -{ - public class PlayerStateInfo - { - /// - /// Gets or sets the now playing position ticks. - /// - /// The now playing position ticks. - public long? PositionTicks { get; set; } +namespace MediaBrowser.Model.Session; + public class PlayerStateInfo + { + /// + /// Gets or sets the now playing position ticks. + /// + /// The now playing position ticks. + public long? PositionTicks { get; set; } - /// - /// Gets or sets a value indicating whether this instance can seek. - /// - /// true if this instance can seek; otherwise, false. - public bool CanSeek { get; set; } + /// + /// Gets or sets a value indicating whether this instance can seek. + /// + /// true if this instance can seek; otherwise, false. + public bool CanSeek { get; set; } - /// - /// Gets or sets a value indicating whether this instance is paused. - /// - /// true if this instance is paused; otherwise, false. - public bool IsPaused { get; set; } + /// + /// Gets or sets a value indicating whether this instance is paused. + /// + /// true if this instance is paused; otherwise, false. + public bool IsPaused { get; set; } - /// - /// Gets or sets a value indicating whether this instance is muted. - /// - /// true if this instance is muted; otherwise, false. - public bool IsMuted { get; set; } + /// + /// Gets or sets a value indicating whether this instance is muted. + /// + /// true if this instance is muted; otherwise, false. + public bool IsMuted { get; set; } - /// - /// Gets or sets the volume level. - /// - /// The volume level. - public int? VolumeLevel { get; set; } + /// + /// Gets or sets the volume level. + /// + /// The volume level. + public int? VolumeLevel { get; set; } - /// - /// Gets or sets the index of the now playing audio stream. - /// - /// The index of the now playing audio stream. - public int? AudioStreamIndex { get; set; } + /// + /// Gets or sets the index of the now playing audio stream. + /// + /// The index of the now playing audio stream. + public int? AudioStreamIndex { get; set; } - /// - /// Gets or sets the index of the now playing subtitle stream. - /// - /// The index of the now playing subtitle stream. - public int? SubtitleStreamIndex { get; set; } + /// + /// Gets or sets the index of the now playing subtitle stream. + /// + /// The index of the now playing subtitle stream. + public int? SubtitleStreamIndex { get; set; } - /// - /// Gets or sets the now playing media version identifier. - /// - /// The now playing media version identifier. - public string MediaSourceId { get; set; } + /// + /// Gets or sets the now playing media version identifier. + /// + /// The now playing media version identifier. + public string MediaSourceId { get; set; } - /// - /// Gets or sets the play method. - /// - /// The play method. - public PlayMethod? PlayMethod { get; set; } + /// + /// Gets or sets the play method. + /// + /// The play method. + public PlayMethod? PlayMethod { get; set; } - /// - /// Gets or sets the repeat mode. - /// - /// The repeat mode. - public RepeatMode RepeatMode { get; set; } + /// + /// Gets or sets the repeat mode. + /// + /// The repeat mode. + public RepeatMode RepeatMode { get; set; } - /// - /// Gets or sets the playback order. - /// - /// The playback order. - public PlaybackOrder PlaybackOrder { get; set; } + /// + /// Gets or sets the playback order. + /// + /// The playback order. + public PlaybackOrder PlaybackOrder { get; set; } - /// - /// Gets or sets the now playing live stream identifier. - /// - /// The live stream identifier. - public string LiveStreamId { get; set; } - } -} + /// + /// Gets or sets the now playing live stream identifier. + /// + /// The live stream identifier. + public string LiveStreamId { get; set; } + } diff --git a/MediaBrowser.Model/Session/PlaystateCommand.cs b/MediaBrowser.Model/Session/PlaystateCommand.cs index ff517a82..7cf52fc8 100644 --- a/MediaBrowser.Model/Session/PlaystateCommand.cs +++ b/MediaBrowser.Model/Session/PlaystateCommand.cs @@ -2,56 +2,54 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Session -{ - /// - /// Enum PlaystateCommand. - /// - public enum PlaystateCommand - { - /// - /// The stop. - /// - Stop, +namespace MediaBrowser.Model.Session; + /// + /// Enum PlaystateCommand. + /// + public enum PlaystateCommand + { + /// + /// The stop. + /// + Stop, - /// - /// The pause. - /// - Pause, + /// + /// The pause. + /// + Pause, - /// - /// The unpause. - /// - Unpause, + /// + /// The unpause. + /// + Unpause, - /// - /// The next track. - /// - NextTrack, + /// + /// The next track. + /// + NextTrack, - /// - /// The previous track. - /// - PreviousTrack, + /// + /// The previous track. + /// + PreviousTrack, - /// - /// The seek. - /// - Seek, + /// + /// The seek. + /// + Seek, - /// - /// The rewind. - /// - Rewind, + /// + /// The rewind. + /// + Rewind, - /// - /// The fast forward. - /// - FastForward, + /// + /// The fast forward. + /// + FastForward, - /// - /// The play pause. - /// - PlayPause - } -} + /// + /// The play pause. + /// + PlayPause + } diff --git a/MediaBrowser.Model/Session/PlaystateRequest.cs b/MediaBrowser.Model/Session/PlaystateRequest.cs index c80bbc0a..9acacc41 100644 --- a/MediaBrowser.Model/Session/PlaystateRequest.cs +++ b/MediaBrowser.Model/Session/PlaystateRequest.cs @@ -4,18 +4,16 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Session -{ - public class PlaystateRequest - { - public PlaystateCommand Command { get; set; } +namespace MediaBrowser.Model.Session; + public class PlaystateRequest + { + public PlaystateCommand Command { get; set; } - public long? SeekPositionTicks { get; set; } + public long? SeekPositionTicks { get; set; } - /// - /// Gets or sets the controlling user identifier. - /// - /// The controlling user identifier. - public string? ControllingUserId { get; set; } - } -} + /// + /// Gets or sets the controlling user identifier. + /// + /// The controlling user identifier. + public string? ControllingUserId { get; set; } + } diff --git a/MediaBrowser.Model/Session/QueueItem.cs b/MediaBrowser.Model/Session/QueueItem.cs index 3e5b02b9..8574a519 100644 --- a/MediaBrowser.Model/Session/QueueItem.cs +++ b/MediaBrowser.Model/Session/QueueItem.cs @@ -5,7 +5,7 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; namespace MediaBrowser.Model.Session; diff --git a/MediaBrowser.Model/Session/RepeatMode.cs b/MediaBrowser.Model/Session/RepeatMode.cs index cd20d7ed..52429b81 100644 --- a/MediaBrowser.Model/Session/RepeatMode.cs +++ b/MediaBrowser.Model/Session/RepeatMode.cs @@ -4,12 +4,10 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Session -{ - public enum RepeatMode - { - RepeatNone = 0, - RepeatAll = 1, - RepeatOne = 2 - } -} +namespace MediaBrowser.Model.Session; + public enum RepeatMode + { + RepeatNone = 0, + RepeatAll = 1, + RepeatOne = 2, + } diff --git a/MediaBrowser.Model/Session/SessionMessageType.cs b/MediaBrowser.Model/Session/SessionMessageType.cs index e3858c3c..548f54e0 100644 --- a/MediaBrowser.Model/Session/SessionMessageType.cs +++ b/MediaBrowser.Model/Session/SessionMessageType.cs @@ -4,51 +4,49 @@ #pragma warning disable CS1591 -namespace MediaBrowser.Model.Session -{ - /// - /// The different kinds of messages that are used in the WebSocket api. - /// - public enum SessionMessageType - { - // Server -> Client - ForceKeepAlive, - GeneralCommand, - UserDataChanged, - Sessions, - Play, - SyncPlayCommand, - SyncPlayGroupUpdate, - Playstate, - RestartRequired, - ServerShuttingDown, - ServerRestarting, - LibraryChanged, - UserDeleted, - UserUpdated, - SeriesTimerCreated, - TimerCreated, - SeriesTimerCancelled, - TimerCancelled, - RefreshProgress, - ScheduledTaskEnded, - PackageInstallationCancelled, - PackageInstallationFailed, - PackageInstallationCompleted, - PackageInstalling, - PackageUninstalled, - ActivityLogEntry, - ScheduledTasksInfo, +namespace MediaBrowser.Model.Session; + /// + /// The different kinds of messages that are used in the WebSocket api. + /// + public enum SessionMessageType + { + // Server -> Client + ForceKeepAlive, + GeneralCommand, + UserDataChanged, + Sessions, + Play, + SyncPlayCommand, + SyncPlayGroupUpdate, + Playstate, + RestartRequired, + ServerShuttingDown, + ServerRestarting, + LibraryChanged, + UserDeleted, + UserUpdated, + SeriesTimerCreated, + TimerCreated, + SeriesTimerCancelled, + TimerCancelled, + RefreshProgress, + ScheduledTaskEnded, + PackageInstallationCancelled, + PackageInstallationFailed, + PackageInstallationCompleted, + PackageInstalling, + PackageUninstalled, + ActivityLogEntry, + ScheduledTasksInfo, - // Client -> Server - ActivityLogEntryStart, - ActivityLogEntryStop, - SessionsStart, - SessionsStop, - ScheduledTasksInfoStart, - ScheduledTasksInfoStop, + // Client -> Server + ActivityLogEntryStart, + ActivityLogEntryStop, + SessionsStart, + SessionsStop, + ScheduledTasksInfoStart, + ScheduledTasksInfoStop, - // Shared - KeepAlive, - } -} + // Shared + KeepAlive, + } diff --git a/MediaBrowser.Model/Session/SessionUserInfo.cs b/MediaBrowser.Model/Session/SessionUserInfo.cs index b609afc9..44ffe777 100644 --- a/MediaBrowser.Model/Session/SessionUserInfo.cs +++ b/MediaBrowser.Model/Session/SessionUserInfo.cs @@ -2,26 +2,24 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Model.Session; #nullable disable -using System; + using global::System; -namespace MediaBrowser.Model.Session -{ - /// - /// Class SessionUserInfo. - /// - public class SessionUserInfo - { - /// - /// Gets or sets the user identifier. - /// - /// The user identifier. - public Guid UserId { get; set; } + /// + /// Class SessionUserInfo. + /// + public class SessionUserInfo + { + /// + /// Gets or sets the user identifier. + /// + /// The user identifier. + public Guid UserId { get; set; } - /// - /// Gets or sets the name of the user. - /// - /// The name of the user. - public string UserName { get; set; } - } -} + /// + /// Gets or sets the name of the user. + /// + /// The name of the user. + public string UserName { get; set; } + } diff --git a/MediaBrowser.Model/Session/TranscodeReason.cs b/MediaBrowser.Model/Session/TranscodeReason.cs index 8a2e9952..48985c93 100644 --- a/MediaBrowser.Model/Session/TranscodeReason.cs +++ b/MediaBrowser.Model/Session/TranscodeReason.cs @@ -4,48 +4,46 @@ #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.Session -{ - [Flags] - public enum TranscodeReason - { - // Primary - ContainerNotSupported = 1 << 0, - VideoCodecNotSupported = 1 << 1, - AudioCodecNotSupported = 1 << 2, - SubtitleCodecNotSupported = 1 << 3, - AudioIsExternal = 1 << 4, - SecondaryAudioNotSupported = 1 << 5, - StreamCountExceedsLimit = 1 << 26, +namespace MediaBrowser.Model.Session; + [Flags] + public enum TranscodeReason + { + // Primary + ContainerNotSupported = 1 << 0, + VideoCodecNotSupported = 1 << 1, + AudioCodecNotSupported = 1 << 2, + SubtitleCodecNotSupported = 1 << 3, + AudioIsExternal = 1 << 4, + SecondaryAudioNotSupported = 1 << 5, + StreamCountExceedsLimit = 1 << 26, - // Video Constraints - VideoProfileNotSupported = 1 << 6, - VideoRangeTypeNotSupported = 1 << 24, - VideoCodecTagNotSupported = 1 << 25, - VideoLevelNotSupported = 1 << 7, - VideoResolutionNotSupported = 1 << 8, - VideoBitDepthNotSupported = 1 << 9, - VideoFramerateNotSupported = 1 << 10, - RefFramesNotSupported = 1 << 11, - AnamorphicVideoNotSupported = 1 << 12, - InterlacedVideoNotSupported = 1 << 13, + // Video Constraints + VideoProfileNotSupported = 1 << 6, + VideoRangeTypeNotSupported = 1 << 24, + VideoCodecTagNotSupported = 1 << 25, + VideoLevelNotSupported = 1 << 7, + VideoResolutionNotSupported = 1 << 8, + VideoBitDepthNotSupported = 1 << 9, + VideoFramerateNotSupported = 1 << 10, + RefFramesNotSupported = 1 << 11, + AnamorphicVideoNotSupported = 1 << 12, + InterlacedVideoNotSupported = 1 << 13, - // Audio Constraints - AudioChannelsNotSupported = 1 << 14, - AudioProfileNotSupported = 1 << 15, - AudioSampleRateNotSupported = 1 << 16, - AudioBitDepthNotSupported = 1 << 17, + // Audio Constraints + AudioChannelsNotSupported = 1 << 14, + AudioProfileNotSupported = 1 << 15, + AudioSampleRateNotSupported = 1 << 16, + AudioBitDepthNotSupported = 1 << 17, - // Bitrate Constraints - ContainerBitrateExceedsLimit = 1 << 18, - VideoBitrateNotSupported = 1 << 19, - AudioBitrateNotSupported = 1 << 20, + // Bitrate Constraints + ContainerBitrateExceedsLimit = 1 << 18, + VideoBitrateNotSupported = 1 << 19, + AudioBitrateNotSupported = 1 << 20, - // Errors - UnknownVideoStreamInfo = 1 << 21, - UnknownAudioStreamInfo = 1 << 22, - DirectPlayError = 1 << 23, - } -} + // Errors + UnknownVideoStreamInfo = 1 << 21, + UnknownAudioStreamInfo = 1 << 22, + DirectPlayError = 1 << 23, + } diff --git a/MediaBrowser.Model/Session/TranscodingInfo.cs b/MediaBrowser.Model/Session/TranscodingInfo.cs index 253d9ad7..384ae124 100644 --- a/MediaBrowser.Model/Session/TranscodingInfo.cs +++ b/MediaBrowser.Model/Session/TranscodingInfo.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Model.Session; + #nullable disable using MediaBrowser.Model.Entities; -namespace MediaBrowser.Model.Session; - /// /// Class holding information on a running transcode. /// diff --git a/MediaBrowser.Model/Session/UserDataChangeInfo.cs b/MediaBrowser.Model/Session/UserDataChangeInfo.cs index daf7f5ef..c9260532 100644 --- a/MediaBrowser.Model/Session/UserDataChangeInfo.cs +++ b/MediaBrowser.Model/Session/UserDataChangeInfo.cs @@ -2,26 +2,24 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using MediaBrowser.Model.Dto; +namespace MediaBrowser.Model.Session; + using global::System; + using MediaBrowser.Model.Dto; -namespace MediaBrowser.Model.Session -{ - /// - /// Class UserDataChangeInfo. - /// - public class UserDataChangeInfo - { - /// - /// Gets or sets the user id. - /// - /// The user id. - public Guid UserId { get; set; } + /// + /// Class UserDataChangeInfo. + /// + public class UserDataChangeInfo + { + /// + /// Gets or sets the user id. + /// + /// The user id. + public Guid UserId { get; set; } - /// - /// Gets or sets the user data list. - /// - /// The user data list. - public required UserItemDataDto[] UserDataList { get; set; } - } -} + /// + /// Gets or sets the user data list. + /// + /// The user data list. + public required UserItemDataDto[] UserDataList { get; set; } + } diff --git a/MediaBrowser.Model/Subtitles/FontFile.cs b/MediaBrowser.Model/Subtitles/FontFile.cs index 66133d2d..bea68c83 100644 --- a/MediaBrowser.Model/Subtitles/FontFile.cs +++ b/MediaBrowser.Model/Subtitles/FontFile.cs @@ -2,37 +2,35 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; +namespace MediaBrowser.Model.Subtitles; + using global::System; -namespace MediaBrowser.Model.Subtitles -{ - /// - /// Class FontFile. - /// - public class FontFile - { - /// - /// Gets or sets the name. - /// - /// The name. - public string? Name { get; set; } + /// + /// Class FontFile. + /// + public class FontFile + { + /// + /// Gets or sets the name. + /// + /// The name. + public string? Name { get; set; } - /// - /// Gets or sets the size. - /// - /// The size. - public long Size { get; set; } + /// + /// Gets or sets the size. + /// + /// The size. + public long Size { get; set; } - /// - /// Gets or sets the date created. - /// - /// The date created. - public DateTime DateCreated { get; set; } + /// + /// Gets or sets the date created. + /// + /// The date created. + public DateTime DateCreated { get; set; } - /// - /// Gets or sets the date modified. - /// - /// The date modified. - public DateTime DateModified { get; set; } - } -} + /// + /// Gets or sets the date modified. + /// + /// The date modified. + public DateTime DateModified { get; set; } + } diff --git a/MediaBrowser.Model/SyncPlay/GroupInfoDto.cs b/MediaBrowser.Model/SyncPlay/GroupInfoDto.cs index 6c670817..36ee62b7 100644 --- a/MediaBrowser.Model/SyncPlay/GroupInfoDto.cs +++ b/MediaBrowser.Model/SyncPlay/GroupInfoDto.cs @@ -2,61 +2,59 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; +namespace MediaBrowser.Model.SyncPlay; + using global::System; + using global::System.Collections.Generic; -namespace MediaBrowser.Model.SyncPlay -{ - /// - /// Class GroupInfoDto. - /// - public class GroupInfoDto - { - /// - /// Initializes a new instance of the class. - /// - /// The group identifier. - /// The group name. - /// The group state. - /// The participants. - /// The date when this DTO has been created. - public GroupInfoDto(Guid groupId, string groupName, GroupStateType state, IReadOnlyList participants, DateTime lastUpdatedAt) - { - GroupId = groupId; - GroupName = groupName; - State = state; - Participants = participants; - LastUpdatedAt = lastUpdatedAt; - } + /// + /// Class GroupInfoDto. + /// + public class GroupInfoDto + { + /// + /// Initializes a new instance of the class. + /// + /// The group identifier. + /// The group name. + /// The group state. + /// The participants. + /// The date when this DTO has been created. + public GroupInfoDto(Guid groupId, string groupName, GroupStateType state, IReadOnlyList participants, DateTime lastUpdatedAt) + { + GroupId = groupId; + GroupName = groupName; + State = state; + Participants = participants; + LastUpdatedAt = lastUpdatedAt; + } - /// - /// Gets the group identifier. - /// - /// The group identifier. - public Guid GroupId { get; } + /// + /// Gets the group identifier. + /// + /// The group identifier. + public Guid GroupId { get; } - /// - /// Gets the group name. - /// - /// The group name. - public string GroupName { get; } + /// + /// Gets the group name. + /// + /// The group name. + public string GroupName { get; } - /// - /// Gets the group state. - /// - /// The group state. - public GroupStateType State { get; } + /// + /// Gets the group state. + /// + /// The group state. + public GroupStateType State { get; } - /// - /// Gets the participants. - /// - /// The participants. - public IReadOnlyList Participants { get; } + /// + /// Gets the participants. + /// + /// The participants. + public IReadOnlyList Participants { get; } - /// - /// Gets the date when this DTO has been created. - /// - /// The date when this DTO has been created. - public DateTime LastUpdatedAt { get; } - } -} + /// + /// Gets the date when this DTO has been created. + /// + /// The date when this DTO has been created. + public DateTime LastUpdatedAt { get; } + } diff --git a/MediaBrowser.Model/SyncPlay/GroupQueueMode.cs b/MediaBrowser.Model/SyncPlay/GroupQueueMode.cs index 4a185e51..e5f83519 100644 --- a/MediaBrowser.Model/SyncPlay/GroupQueueMode.cs +++ b/MediaBrowser.Model/SyncPlay/GroupQueueMode.cs @@ -2,21 +2,19 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.SyncPlay -{ - /// - /// Enum GroupQueueMode. - /// - public enum GroupQueueMode - { - /// - /// Insert items at the end of the queue. - /// - Queue = 0, +namespace MediaBrowser.Model.SyncPlay; + /// + /// Enum GroupQueueMode. + /// + public enum GroupQueueMode + { + /// + /// Insert items at the end of the queue. + /// + Queue = 0, - /// - /// Insert items after the currently playing item. - /// - QueueNext = 1 - } -} + /// + /// Insert items after the currently playing item. + /// + QueueNext = 1, + } diff --git a/MediaBrowser.Model/SyncPlay/GroupRepeatMode.cs b/MediaBrowser.Model/SyncPlay/GroupRepeatMode.cs index 17bc27c6..dfb1d8a0 100644 --- a/MediaBrowser.Model/SyncPlay/GroupRepeatMode.cs +++ b/MediaBrowser.Model/SyncPlay/GroupRepeatMode.cs @@ -2,26 +2,24 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.SyncPlay -{ - /// - /// Enum GroupRepeatMode. - /// - public enum GroupRepeatMode - { - /// - /// Repeat one item only. - /// - RepeatOne = 0, +namespace MediaBrowser.Model.SyncPlay; + /// + /// Enum GroupRepeatMode. + /// + public enum GroupRepeatMode + { + /// + /// Repeat one item only. + /// + RepeatOne = 0, - /// - /// Cycle the playlist. - /// - RepeatAll = 1, + /// + /// Cycle the playlist. + /// + RepeatAll = 1, - /// - /// Do not repeat. - /// - RepeatNone = 2 - } -} + /// + /// Do not repeat. + /// + RepeatNone = 2, + } diff --git a/MediaBrowser.Model/SyncPlay/GroupShuffleMode.cs b/MediaBrowser.Model/SyncPlay/GroupShuffleMode.cs index 5272b85c..e1f55f6f 100644 --- a/MediaBrowser.Model/SyncPlay/GroupShuffleMode.cs +++ b/MediaBrowser.Model/SyncPlay/GroupShuffleMode.cs @@ -2,21 +2,19 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.SyncPlay -{ - /// - /// Enum GroupShuffleMode. - /// - public enum GroupShuffleMode - { - /// - /// Sorted playlist. - /// - Sorted = 0, +namespace MediaBrowser.Model.SyncPlay; + /// + /// Enum GroupShuffleMode. + /// + public enum GroupShuffleMode + { + /// + /// Sorted playlist. + /// + Sorted = 0, - /// - /// Shuffled playlist. - /// - Shuffle = 1 - } -} + /// + /// Shuffled playlist. + /// + Shuffle = 1, + } diff --git a/MediaBrowser.Model/SyncPlay/GroupStateType.cs b/MediaBrowser.Model/SyncPlay/GroupStateType.cs index d569627b..05b3e032 100644 --- a/MediaBrowser.Model/SyncPlay/GroupStateType.cs +++ b/MediaBrowser.Model/SyncPlay/GroupStateType.cs @@ -2,31 +2,29 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.SyncPlay -{ - /// - /// Enum GroupState. - /// - public enum GroupStateType - { - /// - /// The group is in idle state. No media is playing. - /// - Idle = 0, +namespace MediaBrowser.Model.SyncPlay; + /// + /// Enum GroupState. + /// + public enum GroupStateType + { + /// + /// The group is in idle state. No media is playing. + /// + Idle = 0, - /// - /// The group is in waiting state. Playback is paused. Will start playing when users are ready. - /// - Waiting = 1, + /// + /// The group is in waiting state. Playback is paused. Will start playing when users are ready. + /// + Waiting = 1, - /// - /// The group is in paused state. Playback is paused. Will resume on play command. - /// - Paused = 2, + /// + /// The group is in paused state. Playback is paused. Will resume on play command. + /// + Paused = 2, - /// - /// The group is in playing state. Playback is advancing. - /// - Playing = 3 - } -} + /// + /// The group is in playing state. Playback is advancing. + /// + Playing = 3, + } diff --git a/MediaBrowser.Model/SyncPlay/GroupStateUpdate.cs b/MediaBrowser.Model/SyncPlay/GroupStateUpdate.cs index 5efa49d6..03481cc4 100644 --- a/MediaBrowser.Model/SyncPlay/GroupStateUpdate.cs +++ b/MediaBrowser.Model/SyncPlay/GroupStateUpdate.cs @@ -2,34 +2,32 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.SyncPlay -{ - /// - /// Class GroupStateUpdate. - /// - public class GroupStateUpdate - { - /// - /// Initializes a new instance of the class. - /// - /// The state of the group. - /// The reason of the state change. - public GroupStateUpdate(GroupStateType state, PlaybackRequestType reason) - { - State = state; - Reason = reason; - } +namespace MediaBrowser.Model.SyncPlay; + /// + /// Class GroupStateUpdate. + /// + public class GroupStateUpdate + { + /// + /// Initializes a new instance of the class. + /// + /// The state of the group. + /// The reason of the state change. + public GroupStateUpdate(GroupStateType state, PlaybackRequestType reason) + { + State = state; + Reason = reason; + } - /// - /// Gets the state of the group. - /// - /// The state of the group. - public GroupStateType State { get; } + /// + /// Gets the state of the group. + /// + /// The state of the group. + public GroupStateType State { get; } - /// - /// Gets the reason of the state change. - /// - /// The reason of the state change. - public PlaybackRequestType Reason { get; } - } -} + /// + /// Gets the reason of the state change. + /// + /// The reason of the state change. + public PlaybackRequestType Reason { get; } + } diff --git a/MediaBrowser.Model/SyncPlay/GroupUpdate.cs b/MediaBrowser.Model/SyncPlay/GroupUpdate.cs index a750b9cf..55e75110 100644 --- a/MediaBrowser.Model/SyncPlay/GroupUpdate.cs +++ b/MediaBrowser.Model/SyncPlay/GroupUpdate.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace MediaBrowser.Model.SyncPlay; +using global::System; + /// /// Group update without data. /// diff --git a/MediaBrowser.Model/SyncPlay/GroupUpdateType.cs b/MediaBrowser.Model/SyncPlay/GroupUpdateType.cs index 49330d5e..5108a4b6 100644 --- a/MediaBrowser.Model/SyncPlay/GroupUpdateType.cs +++ b/MediaBrowser.Model/SyncPlay/GroupUpdateType.cs @@ -2,56 +2,54 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.SyncPlay -{ - /// - /// Enum GroupUpdateType. - /// - public enum GroupUpdateType - { - /// - /// The user-joined update. Tells members of a group about a new user. - /// - UserJoined, +namespace MediaBrowser.Model.SyncPlay; + /// + /// Enum GroupUpdateType. + /// + public enum GroupUpdateType + { + /// + /// The user-joined update. Tells members of a group about a new user. + /// + UserJoined, - /// - /// The user-left update. Tells members of a group that a user left. - /// - UserLeft, + /// + /// The user-left update. Tells members of a group that a user left. + /// + UserLeft, - /// - /// The group-joined update. Tells a user that the group has been joined. - /// - GroupJoined, + /// + /// The group-joined update. Tells a user that the group has been joined. + /// + GroupJoined, - /// - /// The group-left update. Tells a user that the group has been left. - /// - GroupLeft, + /// + /// The group-left update. Tells a user that the group has been left. + /// + GroupLeft, - /// - /// The group-state update. Tells members of the group that the state changed. - /// - StateUpdate, + /// + /// The group-state update. Tells members of the group that the state changed. + /// + StateUpdate, - /// - /// The play-queue update. Tells a user the playing queue of the group. - /// - PlayQueue, + /// + /// The play-queue update. Tells a user the playing queue of the group. + /// + PlayQueue, - /// - /// The not-in-group error. Tells a user that they don't belong to a group. - /// - NotInGroup, + /// + /// The not-in-group error. Tells a user that they don't belong to a group. + /// + NotInGroup, - /// - /// The group-does-not-exist error. Sent when trying to join a non-existing group. - /// - GroupDoesNotExist, + /// + /// The group-does-not-exist error. Sent when trying to join a non-existing group. + /// + GroupDoesNotExist, - /// - /// The library-access-denied error. Sent when a user tries to join a group without required access to the library. - /// - LibraryAccessDenied - } -} + /// + /// The library-access-denied error. Sent when a user tries to join a group without required access to the library. + /// + LibraryAccessDenied + } diff --git a/MediaBrowser.Model/SyncPlay/PlayQueueUpdate.cs b/MediaBrowser.Model/SyncPlay/PlayQueueUpdate.cs index 5d6892b3..7eaac214 100644 --- a/MediaBrowser.Model/SyncPlay/PlayQueueUpdate.cs +++ b/MediaBrowser.Model/SyncPlay/PlayQueueUpdate.cs @@ -2,85 +2,83 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; +namespace MediaBrowser.Model.SyncPlay; + using global::System; + using global::System.Collections.Generic; -namespace MediaBrowser.Model.SyncPlay -{ - /// - /// Class PlayQueueUpdate. - /// - public class PlayQueueUpdate - { - /// - /// Initializes a new instance of the class. - /// - /// The reason for the update. - /// The UTC time of the last change to the playing queue. - /// The playlist. - /// The playing item index in the playlist. - /// The start position ticks. - /// The playing item status. - /// The shuffle mode. - /// The repeat mode. - public PlayQueueUpdate(PlayQueueUpdateReason reason, DateTime lastUpdate, IReadOnlyList playlist, int playingItemIndex, long startPositionTicks, bool isPlaying, GroupShuffleMode shuffleMode, GroupRepeatMode repeatMode) - { - Reason = reason; - LastUpdate = lastUpdate; - Playlist = playlist; - PlayingItemIndex = playingItemIndex; - StartPositionTicks = startPositionTicks; - IsPlaying = isPlaying; - ShuffleMode = shuffleMode; - RepeatMode = repeatMode; - } + /// + /// Class PlayQueueUpdate. + /// + public class PlayQueueUpdate + { + /// + /// Initializes a new instance of the class. + /// + /// The reason for the update. + /// The UTC time of the last change to the playing queue. + /// The playlist. + /// The playing item index in the playlist. + /// The start position ticks. + /// The playing item status. + /// The shuffle mode. + /// The repeat mode. + public PlayQueueUpdate(PlayQueueUpdateReason reason, DateTime lastUpdate, IReadOnlyList playlist, int playingItemIndex, long startPositionTicks, bool isPlaying, GroupShuffleMode shuffleMode, GroupRepeatMode repeatMode) + { + Reason = reason; + LastUpdate = lastUpdate; + Playlist = playlist; + PlayingItemIndex = playingItemIndex; + StartPositionTicks = startPositionTicks; + IsPlaying = isPlaying; + ShuffleMode = shuffleMode; + RepeatMode = repeatMode; + } - /// - /// Gets the request type that originated this update. - /// - /// The reason for the update. - public PlayQueueUpdateReason Reason { get; } + /// + /// Gets the request type that originated this update. + /// + /// The reason for the update. + public PlayQueueUpdateReason Reason { get; } - /// - /// Gets the UTC time of the last change to the playing queue. - /// - /// The UTC time of the last change to the playing queue. - public DateTime LastUpdate { get; } + /// + /// Gets the UTC time of the last change to the playing queue. + /// + /// The UTC time of the last change to the playing queue. + public DateTime LastUpdate { get; } - /// - /// Gets the playlist. - /// - /// The playlist. - public IReadOnlyList Playlist { get; } + /// + /// Gets the playlist. + /// + /// The playlist. + public IReadOnlyList Playlist { get; } - /// - /// Gets the playing item index in the playlist. - /// - /// The playing item index in the playlist. - public int PlayingItemIndex { get; } + /// + /// Gets the playing item index in the playlist. + /// + /// The playing item index in the playlist. + public int PlayingItemIndex { get; } - /// - /// Gets the start position ticks. - /// - /// The start position ticks. - public long StartPositionTicks { get; } + /// + /// Gets the start position ticks. + /// + /// The start position ticks. + public long StartPositionTicks { get; } - /// - /// Gets a value indicating whether the current item is playing. - /// - /// The playing item status. - public bool IsPlaying { get; } + /// + /// Gets a value indicating whether the current item is playing. + /// + /// The playing item status. + public bool IsPlaying { get; } - /// - /// Gets the shuffle mode. - /// - /// The shuffle mode. - public GroupShuffleMode ShuffleMode { get; } + /// + /// Gets the shuffle mode. + /// + /// The shuffle mode. + public GroupShuffleMode ShuffleMode { get; } - /// - /// Gets the repeat mode. - /// - /// The repeat mode. - public GroupRepeatMode RepeatMode { get; } - } -} + /// + /// Gets the repeat mode. + /// + /// The repeat mode. + public GroupRepeatMode RepeatMode { get; } + } diff --git a/MediaBrowser.Model/SyncPlay/PlayQueueUpdateReason.cs b/MediaBrowser.Model/SyncPlay/PlayQueueUpdateReason.cs index 4f88dff9..a635e957 100644 --- a/MediaBrowser.Model/SyncPlay/PlayQueueUpdateReason.cs +++ b/MediaBrowser.Model/SyncPlay/PlayQueueUpdateReason.cs @@ -2,61 +2,59 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.SyncPlay -{ - /// - /// Enum PlayQueueUpdateReason. - /// - public enum PlayQueueUpdateReason - { - /// - /// A user is requesting to play a new playlist. - /// - NewPlaylist = 0, +namespace MediaBrowser.Model.SyncPlay; + /// + /// Enum PlayQueueUpdateReason. + /// + public enum PlayQueueUpdateReason + { + /// + /// A user is requesting to play a new playlist. + /// + NewPlaylist = 0, - /// - /// A user is changing the playing item. - /// - SetCurrentItem = 1, + /// + /// A user is changing the playing item. + /// + SetCurrentItem = 1, - /// - /// A user is removing items from the playlist. - /// - RemoveItems = 2, + /// + /// A user is removing items from the playlist. + /// + RemoveItems = 2, - /// - /// A user is moving an item in the playlist. - /// - MoveItem = 3, + /// + /// A user is moving an item in the playlist. + /// + MoveItem = 3, - /// - /// A user is adding items the queue. - /// - Queue = 4, + /// + /// A user is adding items the queue. + /// + Queue = 4, - /// - /// A user is adding items to the queue, after the currently playing item. - /// - QueueNext = 5, + /// + /// A user is adding items to the queue, after the currently playing item. + /// + QueueNext = 5, - /// - /// A user is requesting the next item in queue. - /// - NextItem = 6, + /// + /// A user is requesting the next item in queue. + /// + NextItem = 6, - /// - /// A user is requesting the previous item in queue. - /// - PreviousItem = 7, + /// + /// A user is requesting the previous item in queue. + /// + PreviousItem = 7, - /// - /// A user is changing repeat mode. - /// - RepeatMode = 8, + /// + /// A user is changing repeat mode. + /// + RepeatMode = 8, - /// - /// A user is changing shuffle mode. - /// - ShuffleMode = 9 - } -} + /// + /// A user is changing shuffle mode. + /// + ShuffleMode = 9, + } diff --git a/MediaBrowser.Model/SyncPlay/PlaybackRequestType.cs b/MediaBrowser.Model/SyncPlay/PlaybackRequestType.cs index ba4a8381..ef0e44cd 100644 --- a/MediaBrowser.Model/SyncPlay/PlaybackRequestType.cs +++ b/MediaBrowser.Model/SyncPlay/PlaybackRequestType.cs @@ -2,96 +2,94 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.SyncPlay -{ - /// - /// Enum PlaybackRequestType. - /// - public enum PlaybackRequestType - { - /// - /// A user is setting a new playlist. - /// - Play = 0, +namespace MediaBrowser.Model.SyncPlay; + /// + /// Enum PlaybackRequestType. + /// + public enum PlaybackRequestType + { + /// + /// A user is setting a new playlist. + /// + Play = 0, + + /// + /// A user is changing the playlist item. + /// + SetPlaylistItem = 1, + + /// + /// A user is removing items from the playlist. + /// + RemoveFromPlaylist = 2, + + /// + /// A user is moving an item in the playlist. + /// + MovePlaylistItem = 3, + + /// + /// A user is adding items to the playlist. + /// + Queue = 4, + + /// + /// A user is requesting an unpause command for the group. + /// + Unpause = 5, + + /// + /// A user is requesting a pause command for the group. + /// + Pause = 6, + + /// + /// A user is requesting a stop command for the group. + /// + Stop = 7, + + /// + /// A user is requesting a seek command for the group. + /// + Seek = 8, /// - /// A user is changing the playlist item. - /// - SetPlaylistItem = 1, + /// A user is signaling that playback is buffering. + /// + Buffer = 9, - /// - /// A user is removing items from the playlist. - /// - RemoveFromPlaylist = 2, + /// + /// A user is signaling that playback resumed. + /// + Ready = 10, - /// - /// A user is moving an item in the playlist. - /// - MovePlaylistItem = 3, + /// + /// A user is requesting next item in playlist. + /// + NextItem = 11, - /// - /// A user is adding items to the playlist. - /// - Queue = 4, + /// + /// A user is requesting previous item in playlist. + /// + PreviousItem = 12, - /// - /// A user is requesting an unpause command for the group. - /// - Unpause = 5, + /// + /// A user is setting the repeat mode. + /// + SetRepeatMode = 13, - /// - /// A user is requesting a pause command for the group. - /// - Pause = 6, + /// + /// A user is setting the shuffle mode. + /// + SetShuffleMode = 14, - /// - /// A user is requesting a stop command for the group. - /// - Stop = 7, + /// + /// A user is reporting their ping. + /// + Ping = 15, - /// - /// A user is requesting a seek command for the group. - /// - Seek = 8, - - /// - /// A user is signaling that playback is buffering. - /// - Buffer = 9, - - /// - /// A user is signaling that playback resumed. - /// - Ready = 10, - - /// - /// A user is requesting next item in playlist. - /// - NextItem = 11, - - /// - /// A user is requesting previous item in playlist. - /// - PreviousItem = 12, - - /// - /// A user is setting the repeat mode. - /// - SetRepeatMode = 13, - - /// - /// A user is setting the shuffle mode. - /// - SetShuffleMode = 14, - - /// - /// A user is reporting their ping. - /// - Ping = 15, - - /// - /// A user is requesting to be ignored on group wait. - /// - IgnoreWait = 16 - } -} + /// + /// A user is requesting to be ignored on group wait. + /// + IgnoreWait = 16, + } diff --git a/MediaBrowser.Model/SyncPlay/RequestType.cs b/MediaBrowser.Model/SyncPlay/RequestType.cs index 41c4172b..26143266 100644 --- a/MediaBrowser.Model/SyncPlay/RequestType.cs +++ b/MediaBrowser.Model/SyncPlay/RequestType.cs @@ -2,36 +2,34 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.SyncPlay -{ - /// - /// Enum RequestType. - /// - public enum RequestType - { - /// - /// A user is requesting to create a new group. - /// - NewGroup = 0, +namespace MediaBrowser.Model.SyncPlay; + /// + /// Enum RequestType. + /// + public enum RequestType + { + /// + /// A user is requesting to create a new group. + /// + NewGroup = 0, - /// - /// A user is requesting to join a group. - /// - JoinGroup = 1, + /// + /// A user is requesting to join a group. + /// + JoinGroup = 1, - /// - /// A user is requesting to leave a group. - /// - LeaveGroup = 2, + /// + /// A user is requesting to leave a group. + /// + LeaveGroup = 2, - /// - /// A user is requesting the list of available groups. - /// - ListGroups = 3, + /// + /// A user is requesting the list of available groups. + /// + ListGroups = 3, - /// - /// A user is sending a playback command to a group. - /// - Playback = 4 - } -} + /// + /// A user is sending a playback command to a group. + /// + Playback = 4, + } diff --git a/MediaBrowser.Model/SyncPlay/SendCommand.cs b/MediaBrowser.Model/SyncPlay/SendCommand.cs index a4295aef..2389d5ee 100644 --- a/MediaBrowser.Model/SyncPlay/SendCommand.cs +++ b/MediaBrowser.Model/SyncPlay/SendCommand.cs @@ -2,68 +2,66 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; +namespace MediaBrowser.Model.SyncPlay; + using global::System; -namespace MediaBrowser.Model.SyncPlay -{ - /// - /// Class SendCommand. - /// - public class SendCommand - { - /// - /// Initializes a new instance of the class. - /// - /// The group identifier. - /// The playlist identifier of the playing item. - /// The UTC time when to execute the command. - /// The command. - /// The position ticks, for commands that require it. - /// The UTC time when this command has been emitted. - public SendCommand(Guid groupId, Guid playlistItemId, DateTime when, SendCommandType command, long? positionTicks, DateTime emittedAt) - { - GroupId = groupId; - PlaylistItemId = playlistItemId; - When = when; - Command = command; - PositionTicks = positionTicks; - EmittedAt = emittedAt; - } + /// + /// Class SendCommand. + /// + public class SendCommand + { + /// + /// Initializes a new instance of the class. + /// + /// The group identifier. + /// The playlist identifier of the playing item. + /// The UTC time when to execute the command. + /// The command. + /// The position ticks, for commands that require it. + /// The UTC time when this command has been emitted. + public SendCommand(Guid groupId, Guid playlistItemId, DateTime when, SendCommandType command, long? positionTicks, DateTime emittedAt) + { + GroupId = groupId; + PlaylistItemId = playlistItemId; + When = when; + Command = command; + PositionTicks = positionTicks; + EmittedAt = emittedAt; + } - /// - /// Gets the group identifier. - /// - /// The group identifier. - public Guid GroupId { get; } + /// + /// Gets the group identifier. + /// + /// The group identifier. + public Guid GroupId { get; } - /// - /// Gets the playlist identifier of the playing item. - /// - /// The playlist identifier of the playing item. - public Guid PlaylistItemId { get; } + /// + /// Gets the playlist identifier of the playing item. + /// + /// The playlist identifier of the playing item. + public Guid PlaylistItemId { get; } - /// - /// Gets or sets the UTC time when to execute the command. - /// - /// The UTC time when to execute the command. - public DateTime When { get; set; } + /// + /// Gets or sets the UTC time when to execute the command. + /// + /// The UTC time when to execute the command. + public DateTime When { get; set; } - /// - /// Gets the position ticks. - /// - /// The position ticks. - public long? PositionTicks { get; } + /// + /// Gets the position ticks. + /// + /// The position ticks. + public long? PositionTicks { get; } - /// - /// Gets the command. - /// - /// The command. - public SendCommandType Command { get; } + /// + /// Gets the command. + /// + /// The command. + public SendCommandType Command { get; } - /// - /// Gets the UTC time when this command has been emitted. - /// - /// The UTC time when this command has been emitted. - public DateTime EmittedAt { get; } - } -} + /// + /// Gets the UTC time when this command has been emitted. + /// + /// The UTC time when this command has been emitted. + public DateTime EmittedAt { get; } + } diff --git a/MediaBrowser.Model/SyncPlay/SendCommandType.cs b/MediaBrowser.Model/SyncPlay/SendCommandType.cs index e5bcbc53..fe04cf6f 100644 --- a/MediaBrowser.Model/SyncPlay/SendCommandType.cs +++ b/MediaBrowser.Model/SyncPlay/SendCommandType.cs @@ -2,31 +2,29 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.SyncPlay -{ - /// - /// Enum SendCommandType. - /// - public enum SendCommandType - { - /// - /// The unpause command. Instructs users to unpause playback. - /// - Unpause = 0, +namespace MediaBrowser.Model.SyncPlay; + /// + /// Enum SendCommandType. + /// + public enum SendCommandType + { + /// + /// The unpause command. Instructs users to unpause playback. + /// + Unpause = 0, - /// - /// The pause command. Instructs users to pause playback. - /// - Pause = 1, + /// + /// The pause command. Instructs users to pause playback. + /// + Pause = 1, - /// - /// The stop command. Instructs users to stop playback. - /// - Stop = 2, + /// + /// The stop command. Instructs users to stop playback. + /// + Stop = 2, - /// - /// The seek command. Instructs users to seek to a specified time. - /// - Seek = 3 - } -} + /// + /// The seek command. Instructs users to seek to a specified time. + /// + Seek = 3, + } diff --git a/MediaBrowser.Model/SyncPlay/SyncPlayBroadcastType.cs b/MediaBrowser.Model/SyncPlay/SyncPlayBroadcastType.cs index 9dad55fa..b60fafa9 100644 --- a/MediaBrowser.Model/SyncPlay/SyncPlayBroadcastType.cs +++ b/MediaBrowser.Model/SyncPlay/SyncPlayBroadcastType.cs @@ -2,31 +2,29 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.SyncPlay -{ - /// - /// Used to filter the sessions of a group. - /// - public enum SyncPlayBroadcastType - { - /// - /// All sessions will receive the message. - /// - AllGroup = 0, +namespace MediaBrowser.Model.SyncPlay; + /// + /// Used to filter the sessions of a group. + /// + public enum SyncPlayBroadcastType + { + /// + /// All sessions will receive the message. + /// + AllGroup = 0, - /// - /// Only the specified session will receive the message. - /// - CurrentSession = 1, + /// + /// Only the specified session will receive the message. + /// + CurrentSession = 1, - /// - /// All sessions, except the current one, will receive the message. - /// - AllExceptCurrentSession = 2, + /// + /// All sessions, except the current one, will receive the message. + /// + AllExceptCurrentSession = 2, - /// - /// Only sessions that are not buffering will receive the message. - /// - AllReady = 3 - } -} + /// + /// Only sessions that are not buffering will receive the message. + /// + AllReady = 3, + } diff --git a/MediaBrowser.Model/SyncPlay/SyncPlayGroupDoesNotExistUpdate.cs b/MediaBrowser.Model/SyncPlay/SyncPlayGroupDoesNotExistUpdate.cs index 5b88c71a..5a585e58 100644 --- a/MediaBrowser.Model/SyncPlay/SyncPlayGroupDoesNotExistUpdate.cs +++ b/MediaBrowser.Model/SyncPlay/SyncPlayGroupDoesNotExistUpdate.cs @@ -1,12 +1,12 @@ -// +// // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.ComponentModel; - namespace MediaBrowser.Model.SyncPlay; +using global::System; +using global::System.ComponentModel; + /// public class SyncPlayGroupDoesNotExistUpdate : GroupUpdate { diff --git a/MediaBrowser.Model/SyncPlay/SyncPlayGroupJoinedUpdate.cs b/MediaBrowser.Model/SyncPlay/SyncPlayGroupJoinedUpdate.cs index e582b8a4..d7715350 100644 --- a/MediaBrowser.Model/SyncPlay/SyncPlayGroupJoinedUpdate.cs +++ b/MediaBrowser.Model/SyncPlay/SyncPlayGroupJoinedUpdate.cs @@ -1,12 +1,12 @@ -// +// // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.ComponentModel; - namespace MediaBrowser.Model.SyncPlay; +using global::System; +using global::System.ComponentModel; + /// public class SyncPlayGroupJoinedUpdate : GroupUpdate { diff --git a/MediaBrowser.Model/SyncPlay/SyncPlayGroupLeftUpdate.cs b/MediaBrowser.Model/SyncPlay/SyncPlayGroupLeftUpdate.cs index 6b9851b1..edc2c810 100644 --- a/MediaBrowser.Model/SyncPlay/SyncPlayGroupLeftUpdate.cs +++ b/MediaBrowser.Model/SyncPlay/SyncPlayGroupLeftUpdate.cs @@ -1,12 +1,12 @@ -// +// // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.ComponentModel; - namespace MediaBrowser.Model.SyncPlay; +using global::System; +using global::System.ComponentModel; + /// public class SyncPlayGroupLeftUpdate : GroupUpdate { diff --git a/MediaBrowser.Model/SyncPlay/SyncPlayLibraryAccessDeniedUpdate.cs b/MediaBrowser.Model/SyncPlay/SyncPlayLibraryAccessDeniedUpdate.cs index e79821d9..72441816 100644 --- a/MediaBrowser.Model/SyncPlay/SyncPlayLibraryAccessDeniedUpdate.cs +++ b/MediaBrowser.Model/SyncPlay/SyncPlayLibraryAccessDeniedUpdate.cs @@ -1,12 +1,12 @@ -// +// // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.ComponentModel; - namespace MediaBrowser.Model.SyncPlay; +using global::System; +using global::System.ComponentModel; + /// public class SyncPlayLibraryAccessDeniedUpdate : GroupUpdate { diff --git a/MediaBrowser.Model/SyncPlay/SyncPlayNotInGroupUpdate.cs b/MediaBrowser.Model/SyncPlay/SyncPlayNotInGroupUpdate.cs index f662566b..3116666b 100644 --- a/MediaBrowser.Model/SyncPlay/SyncPlayNotInGroupUpdate.cs +++ b/MediaBrowser.Model/SyncPlay/SyncPlayNotInGroupUpdate.cs @@ -1,12 +1,12 @@ -// +// // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.ComponentModel; - namespace MediaBrowser.Model.SyncPlay; +using global::System; +using global::System.ComponentModel; + /// public class SyncPlayNotInGroupUpdate : GroupUpdate { diff --git a/MediaBrowser.Model/SyncPlay/SyncPlayPlayQueueUpdate.cs b/MediaBrowser.Model/SyncPlay/SyncPlayPlayQueueUpdate.cs index 81656841..31f6d34e 100644 --- a/MediaBrowser.Model/SyncPlay/SyncPlayPlayQueueUpdate.cs +++ b/MediaBrowser.Model/SyncPlay/SyncPlayPlayQueueUpdate.cs @@ -1,12 +1,12 @@ -// +// // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.ComponentModel; - namespace MediaBrowser.Model.SyncPlay; +using global::System; +using global::System.ComponentModel; + /// public class SyncPlayPlayQueueUpdate : GroupUpdate { diff --git a/MediaBrowser.Model/SyncPlay/SyncPlayQueueItem.cs b/MediaBrowser.Model/SyncPlay/SyncPlayQueueItem.cs index 58b0afde..6c981f39 100644 --- a/MediaBrowser.Model/SyncPlay/SyncPlayQueueItem.cs +++ b/MediaBrowser.Model/SyncPlay/SyncPlayQueueItem.cs @@ -2,34 +2,32 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; +namespace MediaBrowser.Model.SyncPlay; + using global::System; -namespace MediaBrowser.Model.SyncPlay -{ - /// - /// Class QueueItem. - /// - public class SyncPlayQueueItem - { - /// - /// Initializes a new instance of the class. - /// - /// The item identifier. - public SyncPlayQueueItem(Guid itemId) - { - ItemId = itemId; - } + /// + /// Class QueueItem. + /// + public class SyncPlayQueueItem + { + /// + /// Initializes a new instance of the class. + /// + /// The item identifier. + public SyncPlayQueueItem(Guid itemId) + { + ItemId = itemId; + } - /// - /// Gets the item identifier. - /// - /// The item identifier. - public Guid ItemId { get; } + /// + /// Gets the item identifier. + /// + /// The item identifier. + public Guid ItemId { get; } - /// - /// Gets the playlist identifier of the item. - /// - /// The playlist identifier of the item. - public Guid PlaylistItemId { get; } = Guid.NewGuid(); - } -} + /// + /// Gets the playlist identifier of the item. + /// + /// The playlist identifier of the item. + public Guid PlaylistItemId { get; } = Guid.NewGuid(); + } diff --git a/MediaBrowser.Model/SyncPlay/SyncPlayStateUpdate.cs b/MediaBrowser.Model/SyncPlay/SyncPlayStateUpdate.cs index fb039359..85a4f2b2 100644 --- a/MediaBrowser.Model/SyncPlay/SyncPlayStateUpdate.cs +++ b/MediaBrowser.Model/SyncPlay/SyncPlayStateUpdate.cs @@ -1,12 +1,12 @@ -// +// // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.ComponentModel; - namespace MediaBrowser.Model.SyncPlay; +using global::System; +using global::System.ComponentModel; + /// public class SyncPlayStateUpdate : GroupUpdate { diff --git a/MediaBrowser.Model/SyncPlay/SyncPlayUserJoinedUpdate.cs b/MediaBrowser.Model/SyncPlay/SyncPlayUserJoinedUpdate.cs index e4e1208f..2440092d 100644 --- a/MediaBrowser.Model/SyncPlay/SyncPlayUserJoinedUpdate.cs +++ b/MediaBrowser.Model/SyncPlay/SyncPlayUserJoinedUpdate.cs @@ -1,12 +1,12 @@ -// +// // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.ComponentModel; - namespace MediaBrowser.Model.SyncPlay; +using global::System; +using global::System.ComponentModel; + /// public class SyncPlayUserJoinedUpdate : GroupUpdate { diff --git a/MediaBrowser.Model/SyncPlay/SyncPlayUserLeftUpdate.cs b/MediaBrowser.Model/SyncPlay/SyncPlayUserLeftUpdate.cs index 0e90e9ec..7efd647f 100644 --- a/MediaBrowser.Model/SyncPlay/SyncPlayUserLeftUpdate.cs +++ b/MediaBrowser.Model/SyncPlay/SyncPlayUserLeftUpdate.cs @@ -1,12 +1,12 @@ -// +// // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.ComponentModel; - namespace MediaBrowser.Model.SyncPlay; +using global::System; +using global::System.ComponentModel; + /// public class SyncPlayUserLeftUpdate : GroupUpdate { diff --git a/MediaBrowser.Model/SyncPlay/UtcTimeResponse.cs b/MediaBrowser.Model/SyncPlay/UtcTimeResponse.cs index 332f3413..3a2ce355 100644 --- a/MediaBrowser.Model/SyncPlay/UtcTimeResponse.cs +++ b/MediaBrowser.Model/SyncPlay/UtcTimeResponse.cs @@ -2,36 +2,34 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; +namespace MediaBrowser.Model.SyncPlay; + using global::System; -namespace MediaBrowser.Model.SyncPlay -{ - /// - /// Class UtcTimeResponse. - /// - public class UtcTimeResponse - { - /// - /// Initializes a new instance of the class. - /// - /// The UTC time when request has been received. - /// The UTC time when response has been sent. - public UtcTimeResponse(DateTime requestReceptionTime, DateTime responseTransmissionTime) - { - RequestReceptionTime = requestReceptionTime; - ResponseTransmissionTime = responseTransmissionTime; - } + /// + /// Class UtcTimeResponse. + /// + public class UtcTimeResponse + { + /// + /// Initializes a new instance of the class. + /// + /// The UTC time when request has been received. + /// The UTC time when response has been sent. + public UtcTimeResponse(DateTime requestReceptionTime, DateTime responseTransmissionTime) + { + RequestReceptionTime = requestReceptionTime; + ResponseTransmissionTime = responseTransmissionTime; + } - /// - /// Gets the UTC time when request has been received. - /// - /// The UTC time when request has been received. - public DateTime RequestReceptionTime { get; } + /// + /// Gets the UTC time when request has been received. + /// + /// The UTC time when request has been received. + public DateTime RequestReceptionTime { get; } - /// - /// Gets the UTC time when response has been sent. - /// - /// The UTC time when response has been sent. - public DateTime ResponseTransmissionTime { get; } - } -} + /// + /// Gets the UTC time when response has been sent. + /// + /// The UTC time when response has been sent. + public DateTime ResponseTransmissionTime { get; } + } diff --git a/MediaBrowser.Model/System/LibraryStorageInfo.cs b/MediaBrowser.Model/System/LibraryStorageInfo.cs index 95166019..a3b7aad1 100644 --- a/MediaBrowser.Model/System/LibraryStorageInfo.cs +++ b/MediaBrowser.Model/System/LibraryStorageInfo.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; - namespace MediaBrowser.Model.System; +using global::System; +using global::System.Collections.Generic; + /// /// Contains informations about a libraries storage informations. /// diff --git a/MediaBrowser.Model/System/LogFile.cs b/MediaBrowser.Model/System/LogFile.cs index ffda8afe..18262bf8 100644 --- a/MediaBrowser.Model/System/LogFile.cs +++ b/MediaBrowser.Model/System/LogFile.cs @@ -4,34 +4,32 @@ #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.System -{ - public class LogFile - { - /// - /// Gets or sets the date created. - /// - /// The date created. - public DateTime DateCreated { get; set; } +namespace MediaBrowser.Model.System; + public class LogFile + { + /// + /// Gets or sets the date created. + /// + /// The date created. + public DateTime DateCreated { get; set; } - /// - /// Gets or sets the date modified. - /// - /// The date modified. - public DateTime DateModified { get; set; } + /// + /// Gets or sets the date modified. + /// + /// The date modified. + public DateTime DateModified { get; set; } - /// - /// Gets or sets the size. - /// - /// The size. - public long Size { get; set; } + /// + /// Gets or sets the size. + /// + /// The size. + public long Size { get; set; } - /// - /// Gets or sets the name. - /// - /// The name. - public required string Name { get; set; } - } -} + /// + /// Gets or sets the name. + /// + /// The name. + public required string Name { get; set; } + } diff --git a/MediaBrowser.Model/System/PublicSystemInfo.cs b/MediaBrowser.Model/System/PublicSystemInfo.cs index 4b2469cb..5aed388c 100644 --- a/MediaBrowser.Model/System/PublicSystemInfo.cs +++ b/MediaBrowser.Model/System/PublicSystemInfo.cs @@ -5,55 +5,53 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.System -{ - public class PublicSystemInfo - { - /// - /// Gets or sets the local address. - /// - /// The local address. - public string LocalAddress { get; set; } +namespace MediaBrowser.Model.System; + public class PublicSystemInfo + { + /// + /// Gets or sets the local address. + /// + /// The local address. + public string LocalAddress { get; set; } - /// - /// Gets or sets the name of the server. - /// - /// The name of the server. - public string ServerName { get; set; } + /// + /// Gets or sets the name of the server. + /// + /// The name of the server. + public string ServerName { get; set; } - /// - /// Gets or sets the server version. - /// - /// The version. - public string Version { get; set; } + /// + /// Gets or sets the server version. + /// + /// The version. + public string Version { get; set; } - /// - /// Gets or sets the product name. This is the AssemblyProduct name. - /// - public string ProductName { get; set; } + /// + /// Gets or sets the product name. This is the AssemblyProduct name. + /// + public string ProductName { get; set; } - /// - /// Gets or sets the operating system. - /// - /// The operating system. - [Obsolete("This is no longer set")] - public string OperatingSystem { get; set; } = string.Empty; + /// + /// Gets or sets the operating system. + /// + /// The operating system. + [Obsolete("This is no longer set")] + public string OperatingSystem { get; set; } = string.Empty; - /// - /// Gets or sets the id. - /// - /// The id. - public string Id { get; set; } + /// + /// Gets or sets the id. + /// + /// The id. + public string Id { get; set; } - /// - /// Gets or sets a value indicating whether the startup wizard is completed. - /// - /// - /// Nullable for OpenAPI specification only to retain backwards compatibility in api clients. - /// - /// The startup completion status.] - public bool? StartupWizardCompleted { get; set; } - } -} + /// + /// Gets or sets a value indicating whether the startup wizard is completed. + /// + /// + /// Nullable for OpenAPI specification only to retain backwards compatibility in api clients. + /// + /// The startup completion status.] + public bool? StartupWizardCompleted { get; set; } + } diff --git a/MediaBrowser.Model/System/SystemInfo.cs b/MediaBrowser.Model/System/SystemInfo.cs index 5ee3921d..91b6ca76 100644 --- a/MediaBrowser.Model/System/SystemInfo.cs +++ b/MediaBrowser.Model/System/SystemInfo.cs @@ -5,9 +5,9 @@ #nullable disable #pragma warning disable CS1591 -using System; -using System.Collections.Generic; -using System.ComponentModel; +using global::System; +using global::System.Collections.Generic; +using global::System.ComponentModel; using MediaBrowser.Model.Updates; namespace MediaBrowser.Model.System; diff --git a/MediaBrowser.Model/System/SystemStorageInfo.cs b/MediaBrowser.Model/System/SystemStorageInfo.cs index 12a8f9cf..9d69748a 100644 --- a/MediaBrowser.Model/System/SystemStorageInfo.cs +++ b/MediaBrowser.Model/System/SystemStorageInfo.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; - namespace MediaBrowser.Model.System; +using global::System.Collections.Generic; + /// /// Contains informations about the systems storage. /// diff --git a/MediaBrowser.Model/Tasks/IConfigurableScheduledTask.cs b/MediaBrowser.Model/Tasks/IConfigurableScheduledTask.cs index 93dcd0c5..c9ecf4d0 100644 --- a/MediaBrowser.Model/Tasks/IConfigurableScheduledTask.cs +++ b/MediaBrowser.Model/Tasks/IConfigurableScheduledTask.cs @@ -2,29 +2,27 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Tasks -{ - /// - /// Interface for configurable scheduled tasks. - /// - public interface IConfigurableScheduledTask - { - /// - /// Gets a value indicating whether this instance is hidden. - /// - /// true if this instance is hidden; otherwise, false. - bool IsHidden { get; } +namespace MediaBrowser.Model.Tasks; + /// + /// Interface for configurable scheduled tasks. + /// + public interface IConfigurableScheduledTask + { + /// + /// Gets a value indicating whether this instance is hidden. + /// + /// true if this instance is hidden; otherwise, false. + bool IsHidden { get; } - /// - /// Gets a value indicating whether this instance is enabled. - /// - /// true if this instance is enabled; otherwise, false. - bool IsEnabled { get; } + /// + /// Gets a value indicating whether this instance is enabled. + /// + /// true if this instance is enabled; otherwise, false. + bool IsEnabled { get; } - /// - /// Gets a value indicating whether this instance is logged. - /// - /// true if this instance is logged; otherwise, false. - bool IsLogged { get; } - } -} + /// + /// Gets a value indicating whether this instance is logged. + /// + /// true if this instance is logged; otherwise, false. + bool IsLogged { get; } + } diff --git a/MediaBrowser.Model/Tasks/IScheduledTask.cs b/MediaBrowser.Model/Tasks/IScheduledTask.cs index 8ea35090..3dc87d9c 100644 --- a/MediaBrowser.Model/Tasks/IScheduledTask.cs +++ b/MediaBrowser.Model/Tasks/IScheduledTask.cs @@ -2,53 +2,51 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; +namespace MediaBrowser.Model.Tasks; + using global::System; + using global::System.Collections.Generic; + using global::System.Threading; + using global::System.Threading.Tasks; -namespace MediaBrowser.Model.Tasks -{ - /// - /// Interface IScheduledTaskWorker. - /// - public interface IScheduledTask - { - /// - /// Gets the name of the task. - /// - /// The name. - string Name { get; } + /// + /// Interface IScheduledTaskWorker. + /// + public interface IScheduledTask + { + /// + /// Gets the name of the task. + /// + /// The name. + string Name { get; } - /// - /// Gets the key of the task. - /// - string Key { get; } + /// + /// Gets the key of the task. + /// + string Key { get; } - /// - /// Gets the description. - /// - /// The description. - string Description { get; } + /// + /// Gets the description. + /// + /// The description. + string Description { get; } - /// - /// Gets the category. - /// - /// The category. - string Category { get; } + /// + /// Gets the category. + /// + /// The category. + string Category { get; } - /// - /// Executes the task. - /// - /// The progress. - /// The cancellation token. - /// Task. - Task ExecuteAsync(IProgress progress, CancellationToken cancellationToken); + /// + /// Executes the task. + /// + /// The progress. + /// The cancellation token. + /// Task. + Task ExecuteAsync(IProgress progress, CancellationToken cancellationToken); - /// - /// Gets the default triggers that define when the task will run. - /// - /// The default triggers that define when the task will run. - IEnumerable GetDefaultTriggers(); - } -} + /// + /// Gets the default triggers that define when the task will run. + /// + /// The default triggers that define when the task will run. + IEnumerable GetDefaultTriggers(); + } diff --git a/MediaBrowser.Model/Tasks/IScheduledTaskWorker.cs b/MediaBrowser.Model/Tasks/IScheduledTaskWorker.cs index 8e3920ec..a845b827 100644 --- a/MediaBrowser.Model/Tasks/IScheduledTaskWorker.cs +++ b/MediaBrowser.Model/Tasks/IScheduledTaskWorker.cs @@ -2,80 +2,78 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Model.Tasks; #nullable disable -using System; -using System.Collections.Generic; -using Jellyfin.Data.Events; + using global::System; + using global::System.Collections.Generic; + using Jellyfin.Data.Events; -namespace MediaBrowser.Model.Tasks -{ - /// - /// Interface IScheduledTaskWorker. - /// - public interface IScheduledTaskWorker : IDisposable - { - /// - /// Occurs when [task progress]. - /// - event EventHandler> TaskProgress; + /// + /// Interface IScheduledTaskWorker. + /// + public interface IScheduledTaskWorker : IDisposable + { + /// + /// Occurs when [task progress]. + /// + event EventHandler> TaskProgress; - /// - /// Gets the scheduled task. - /// - /// The scheduled task. - IScheduledTask ScheduledTask { get; } + /// + /// Gets the scheduled task. + /// + /// The scheduled task. + IScheduledTask ScheduledTask { get; } - /// - /// Gets the last execution result. - /// - /// The last execution result. - TaskResult LastExecutionResult { get; } + /// + /// Gets the last execution result. + /// + /// The last execution result. + TaskResult LastExecutionResult { get; } - /// - /// Gets the name. - /// - /// The name. - string Name { get; } + /// + /// Gets the name. + /// + /// The name. + string Name { get; } - /// - /// Gets the description. - /// - /// The description. - string Description { get; } + /// + /// Gets the description. + /// + /// The description. + string Description { get; } - /// - /// Gets the category. - /// - /// The category. - string Category { get; } + /// + /// Gets the category. + /// + /// The category. + string Category { get; } - /// - /// Gets the state. - /// - /// The state. - TaskState State { get; } + /// + /// Gets the state. + /// + /// The state. + TaskState State { get; } - /// - /// Gets the current progress. - /// - /// The current progress. - double? CurrentProgress { get; } + /// + /// Gets the current progress. + /// + /// The current progress. + double? CurrentProgress { get; } - /// - /// Gets or sets the triggers that define when the task will run. - /// - /// The triggers. - IReadOnlyList Triggers { get; set; } + /// + /// Gets or sets the triggers that define when the task will run. + /// + /// The triggers. + IReadOnlyList Triggers { get; set; } - /// - /// Gets the unique id. - /// - /// The unique id. - string Id { get; } + /// + /// Gets the unique id. + /// + /// The unique id. + string Id { get; } - /// - /// Reloads the trigger events. - /// - void ReloadTriggerEvents(); - } -} + /// + /// Reloads the trigger events. + /// + void ReloadTriggerEvents(); + } diff --git a/MediaBrowser.Model/Tasks/ITaskManager.cs b/MediaBrowser.Model/Tasks/ITaskManager.cs index 0fa6908c..36fc0f63 100644 --- a/MediaBrowser.Model/Tasks/ITaskManager.cs +++ b/MediaBrowser.Model/Tasks/ITaskManager.cs @@ -2,110 +2,108 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Jellyfin.Data.Events; +namespace MediaBrowser.Model.Tasks; + using global::System; + using global::System.Collections.Generic; + using global::System.Threading.Tasks; + using Jellyfin.Data.Events; -namespace MediaBrowser.Model.Tasks -{ - /// - /// Interface for the TaskManager class. - /// - public interface ITaskManager : IDisposable - { - /// - /// Event handler for task execution. - /// - event EventHandler>? TaskExecuting; + /// + /// Interface for the TaskManager class. + /// + public interface ITaskManager : IDisposable + { + /// + /// Event handler for task execution. + /// + event EventHandler>? TaskExecuting; - /// - /// Event handler for task completion. - /// - event EventHandler? TaskCompleted; + /// + /// Event handler for task completion. + /// + event EventHandler? TaskCompleted; - /// - /// Gets the list of Scheduled Tasks. - /// - /// The scheduled tasks. - IReadOnlyList ScheduledTasks { get; } + /// + /// Gets the list of Scheduled Tasks. + /// + /// The scheduled tasks. + IReadOnlyList ScheduledTasks { get; } - /// - /// Cancels if running and queue. - /// - /// An implementation of . - /// Task options. - void CancelIfRunningAndQueue(TaskOptions options) - where T : IScheduledTask; + /// + /// Cancels if running and queue. + /// + /// An implementation of . + /// Task options. + void CancelIfRunningAndQueue(TaskOptions options) + where T : IScheduledTask; - /// - /// Cancels if running and queue. - /// - /// An implementation of . - void CancelIfRunningAndQueue() - where T : IScheduledTask; + /// + /// Cancels if running and queue. + /// + /// An implementation of . + void CancelIfRunningAndQueue() + where T : IScheduledTask; - /// - /// Cancels if running. - /// - /// An implementation of . - void CancelIfRunning() - where T : IScheduledTask; + /// + /// Cancels if running. + /// + /// An implementation of . + void CancelIfRunning() + where T : IScheduledTask; - /// - /// Queues the scheduled task. - /// - /// An implementation of . - /// Task options. - void QueueScheduledTask(TaskOptions options) - where T : IScheduledTask; + /// + /// Queues the scheduled task. + /// + /// An implementation of . + /// Task options. + void QueueScheduledTask(TaskOptions options) + where T : IScheduledTask; - /// - /// Queues the scheduled task. - /// - /// An implementation of . - void QueueScheduledTask() - where T : IScheduledTask; + /// + /// Queues the scheduled task. + /// + /// An implementation of . + void QueueScheduledTask() + where T : IScheduledTask; - /// - /// Queues the scheduled task if it is not already running. - /// - /// An implementation of . - void QueueIfNotRunning() - where T : IScheduledTask; + /// + /// Queues the scheduled task if it is not already running. + /// + /// An implementation of . + void QueueIfNotRunning() + where T : IScheduledTask; - /// - /// Queues the scheduled task. - /// - /// The to queue. - /// The to use. - void QueueScheduledTask(IScheduledTask task, TaskOptions options); + /// + /// Queues the scheduled task. + /// + /// The to queue. + /// The to use. + void QueueScheduledTask(IScheduledTask task, TaskOptions options); - /// - /// Adds the tasks. - /// - /// The tasks. - void AddTasks(IEnumerable tasks); + /// + /// Adds the tasks. + /// + /// The tasks. + void AddTasks(IEnumerable tasks); - /// - /// Adds the tasks. - /// - /// The tasks. - void Cancel(IScheduledTaskWorker task); + /// + /// Adds the tasks. + /// + /// The tasks. + void Cancel(IScheduledTaskWorker task); - /// - /// Executes the tasks. - /// - /// The tasks. - /// The options. - /// The executed tasks. - Task Execute(IScheduledTaskWorker task, TaskOptions options); + /// + /// Executes the tasks. + /// + /// The tasks. + /// The options. + /// The executed tasks. + Task Execute(IScheduledTaskWorker task, TaskOptions options); - /// - /// Executes the tasks. - /// - /// An implementation of . - void Execute() - where T : IScheduledTask; - } -} + /// + /// Executes the tasks. + /// + /// An implementation of . + void Execute() + where T : IScheduledTask; + } diff --git a/MediaBrowser.Model/Tasks/ITaskTrigger.cs b/MediaBrowser.Model/Tasks/ITaskTrigger.cs index aa71720a..0d2f4b1d 100644 --- a/MediaBrowser.Model/Tasks/ITaskTrigger.cs +++ b/MediaBrowser.Model/Tasks/ITaskTrigger.cs @@ -2,38 +2,36 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Microsoft.Extensions.Logging; +namespace MediaBrowser.Model.Tasks; + using global::System; + using Microsoft.Extensions.Logging; -namespace MediaBrowser.Model.Tasks -{ - /// - /// Interface ITaskTrigger. - /// - public interface ITaskTrigger - { - /// - /// Fires when the trigger condition is satisfied and the task should run. - /// - event EventHandler? Triggered; + /// + /// Interface ITaskTrigger. + /// + public interface ITaskTrigger + { + /// + /// Fires when the trigger condition is satisfied and the task should run. + /// + event EventHandler? Triggered; - /// - /// Gets the options of this task. - /// - TaskOptions TaskOptions { get; } + /// + /// Gets the options of this task. + /// + TaskOptions TaskOptions { get; } - /// - /// Stars waiting for the trigger action. - /// - /// Result of the last run triggered task. - /// The . - /// The name of the task. - /// Whether or not this is fired during startup. - void Start(TaskResult? lastResult, ILogger logger, string taskName, bool isApplicationStartup); + /// + /// Stars waiting for the trigger action. + /// + /// Result of the last run triggered task. + /// The . + /// The name of the task. + /// Whether or not this is fired during startup. + void Start(TaskResult? lastResult, ILogger logger, string taskName, bool isApplicationStartup); - /// - /// Stops waiting for the trigger action. - /// - void Stop(); - } -} + /// + /// Stops waiting for the trigger action. + /// + void Stop(); + } diff --git a/MediaBrowser.Model/Tasks/ScheduledTaskHelpers.cs b/MediaBrowser.Model/Tasks/ScheduledTaskHelpers.cs index e9b2108d..512bb93b 100644 --- a/MediaBrowser.Model/Tasks/ScheduledTaskHelpers.cs +++ b/MediaBrowser.Model/Tasks/ScheduledTaskHelpers.cs @@ -2,44 +2,42 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Tasks -{ - /// - /// Class ScheduledTaskHelpers. - /// - public static class ScheduledTaskHelpers - { - /// - /// Gets the task info. - /// - /// The task. - /// TaskInfo. - public static TaskInfo GetTaskInfo(IScheduledTaskWorker task) - { - var isHidden = false; +namespace MediaBrowser.Model.Tasks; + /// + /// Class ScheduledTaskHelpers. + /// + public static class ScheduledTaskHelpers + { + /// + /// Gets the task info. + /// + /// The task. + /// TaskInfo. + public static TaskInfo GetTaskInfo(IScheduledTaskWorker task) + { + var isHidden = false; - if (task.ScheduledTask is IConfigurableScheduledTask configurableTask) - { - isHidden = configurableTask.IsHidden; - } + if (task.ScheduledTask is IConfigurableScheduledTask configurableTask) + { + isHidden = configurableTask.IsHidden; + } - string key = task.ScheduledTask.Key; + string key = task.ScheduledTask.Key; - return new TaskInfo - { - Name = task.Name, - CurrentProgressPercentage = task.CurrentProgress, - State = task.State, - Id = task.Id, - LastExecutionResult = task.LastExecutionResult, + return new TaskInfo + { + Name = task.Name, + CurrentProgressPercentage = task.CurrentProgress, + State = task.State, + Id = task.Id, + LastExecutionResult = task.LastExecutionResult, - Triggers = task.Triggers, + Triggers = task.Triggers, - Description = task.Description, - Category = task.Category, - IsHidden = isHidden, - Key = key - }; - } - } -} + Description = task.Description, + Category = task.Category, + IsHidden = isHidden, + Key = key, + }; + } + } diff --git a/MediaBrowser.Model/Tasks/TaskCompletionEventArgs.cs b/MediaBrowser.Model/Tasks/TaskCompletionEventArgs.cs index 1aadb9f8..ac8c9813 100644 --- a/MediaBrowser.Model/Tasks/TaskCompletionEventArgs.cs +++ b/MediaBrowser.Model/Tasks/TaskCompletionEventArgs.cs @@ -2,36 +2,34 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; +namespace MediaBrowser.Model.Tasks; + using global::System; -namespace MediaBrowser.Model.Tasks -{ - /// - /// Class containing event arguments for task completion. - /// - public class TaskCompletionEventArgs : EventArgs - { - /// - /// Initializes a new instance of the class. - /// - /// Instance of the interface. - /// The task result. - public TaskCompletionEventArgs(IScheduledTaskWorker task, TaskResult result) - { - Task = task; - Result = result; - } + /// + /// Class containing event arguments for task completion. + /// + public class TaskCompletionEventArgs : EventArgs + { + /// + /// Initializes a new instance of the class. + /// + /// Instance of the interface. + /// The task result. + public TaskCompletionEventArgs(IScheduledTaskWorker task, TaskResult result) + { + Task = task; + Result = result; + } - /// - /// Gets the task. - /// - /// The task. - public IScheduledTaskWorker Task { get; } + /// + /// Gets the task. + /// + /// The task. + public IScheduledTaskWorker Task { get; } - /// - /// Gets the result. - /// - /// The result. - public TaskResult Result { get; } - } -} + /// + /// Gets the result. + /// + /// The result. + public TaskResult Result { get; } + } diff --git a/MediaBrowser.Model/Tasks/TaskCompletionStatus.cs b/MediaBrowser.Model/Tasks/TaskCompletionStatus.cs index 9018790f..b0e8e3e8 100644 --- a/MediaBrowser.Model/Tasks/TaskCompletionStatus.cs +++ b/MediaBrowser.Model/Tasks/TaskCompletionStatus.cs @@ -2,31 +2,29 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Tasks -{ - /// - /// Enum TaskCompletionStatus. - /// - public enum TaskCompletionStatus - { - /// - /// The completed. - /// - Completed, +namespace MediaBrowser.Model.Tasks; + /// + /// Enum TaskCompletionStatus. + /// + public enum TaskCompletionStatus + { + /// + /// The completed. + /// + Completed, - /// - /// The failed. - /// - Failed, + /// + /// The failed. + /// + Failed, - /// - /// Manually cancelled by the user. - /// - Cancelled, + /// + /// Manually cancelled by the user. + /// + Cancelled, - /// - /// Aborted due to a system failure or shutdown. - /// - Aborted - } -} + /// + /// Aborted due to a system failure or shutdown. + /// + Aborted + } diff --git a/MediaBrowser.Model/Tasks/TaskInfo.cs b/MediaBrowser.Model/Tasks/TaskInfo.cs index be58d3ed..e85b6233 100644 --- a/MediaBrowser.Model/Tasks/TaskInfo.cs +++ b/MediaBrowser.Model/Tasks/TaskInfo.cs @@ -2,83 +2,81 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Model.Tasks; #nullable disable -using System; -using System.Collections.Generic; + using global::System; + using global::System.Collections.Generic; -namespace MediaBrowser.Model.Tasks -{ - /// - /// Class TaskInfo. - /// - public class TaskInfo - { - /// - /// Initializes a new instance of the class. - /// - public TaskInfo() - { - Triggers = []; - } + /// + /// Class TaskInfo. + /// + public class TaskInfo + { + /// + /// Initializes a new instance of the class. + /// + public TaskInfo() + { + Triggers = []; + } - /// - /// Gets or sets the name. - /// - /// The name. - public string Name { get; set; } + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } - /// - /// Gets or sets the state of the task. - /// - /// The state of the task. - public TaskState State { get; set; } + /// + /// Gets or sets the state of the task. + /// + /// The state of the task. + public TaskState State { get; set; } - /// - /// Gets or sets the progress. - /// - /// The progress. - public double? CurrentProgressPercentage { get; set; } + /// + /// Gets or sets the progress. + /// + /// The progress. + public double? CurrentProgressPercentage { get; set; } - /// - /// Gets or sets the id. - /// - /// The id. - public string Id { get; set; } + /// + /// Gets or sets the id. + /// + /// The id. + public string Id { get; set; } - /// - /// Gets or sets the last execution result. - /// - /// The last execution result. - public TaskResult LastExecutionResult { get; set; } + /// + /// Gets or sets the last execution result. + /// + /// The last execution result. + public TaskResult LastExecutionResult { get; set; } - /// - /// Gets or sets the triggers. - /// - /// The triggers. - public IReadOnlyList Triggers { get; set; } + /// + /// Gets or sets the triggers. + /// + /// The triggers. + public IReadOnlyList Triggers { get; set; } - /// - /// Gets or sets the description. - /// - /// The description. - public string Description { get; set; } + /// + /// Gets or sets the description. + /// + /// The description. + public string Description { get; set; } - /// - /// Gets or sets the category. - /// - /// The category. - public string Category { get; set; } + /// + /// Gets or sets the category. + /// + /// The category. + public string Category { get; set; } - /// - /// Gets or sets a value indicating whether this instance is hidden. - /// - /// true if this instance is hidden; otherwise, false. - public bool IsHidden { get; set; } + /// + /// Gets or sets a value indicating whether this instance is hidden. + /// + /// true if this instance is hidden; otherwise, false. + public bool IsHidden { get; set; } - /// - /// Gets or sets the key. - /// - /// The key. - public string Key { get; set; } - } -} + /// + /// Gets or sets the key. + /// + /// The key. + public string Key { get; set; } + } diff --git a/MediaBrowser.Model/Tasks/TaskOptions.cs b/MediaBrowser.Model/Tasks/TaskOptions.cs index 1527fe51..639333b4 100644 --- a/MediaBrowser.Model/Tasks/TaskOptions.cs +++ b/MediaBrowser.Model/Tasks/TaskOptions.cs @@ -2,17 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Tasks -{ - /// - /// Class containing options for tasks. - /// - public class TaskOptions - { - /// - /// Gets or sets the maximum runtime in ticks. - /// - /// The ticks. - public long? MaxRuntimeTicks { get; set; } - } -} +namespace MediaBrowser.Model.Tasks; + /// + /// Class containing options for tasks. + /// + public class TaskOptions + { + /// + /// Gets or sets the maximum runtime in ticks. + /// + /// The ticks. + public long? MaxRuntimeTicks { get; set; } + } diff --git a/MediaBrowser.Model/Tasks/TaskResult.cs b/MediaBrowser.Model/Tasks/TaskResult.cs index 18481022..04e87b1e 100644 --- a/MediaBrowser.Model/Tasks/TaskResult.cs +++ b/MediaBrowser.Model/Tasks/TaskResult.cs @@ -2,62 +2,60 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Model.Tasks; #nullable disable -using System; + using global::System; -namespace MediaBrowser.Model.Tasks -{ - /// - /// Class TaskExecutionInfo. - /// - public class TaskResult - { - /// - /// Gets or sets the start time UTC. - /// - /// The start time UTC. - public DateTime StartTimeUtc { get; set; } + /// + /// Class TaskExecutionInfo. + /// + public class TaskResult + { + /// + /// Gets or sets the start time UTC. + /// + /// The start time UTC. + public DateTime StartTimeUtc { get; set; } - /// - /// Gets or sets the end time UTC. - /// - /// The end time UTC. - public DateTime EndTimeUtc { get; set; } + /// + /// Gets or sets the end time UTC. + /// + /// The end time UTC. + public DateTime EndTimeUtc { get; set; } - /// - /// Gets or sets the status. - /// - /// The status. - public TaskCompletionStatus Status { get; set; } + /// + /// Gets or sets the status. + /// + /// The status. + public TaskCompletionStatus Status { get; set; } - /// - /// Gets or sets the name. - /// - /// The name. - public string Name { get; set; } + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } - /// - /// Gets or sets the key. - /// - /// The key. - public string Key { get; set; } + /// + /// Gets or sets the key. + /// + /// The key. + public string Key { get; set; } - /// - /// Gets or sets the id. - /// - /// The id. - public string Id { get; set; } + /// + /// Gets or sets the id. + /// + /// The id. + public string Id { get; set; } - /// - /// Gets or sets the error message. - /// - /// The error message. - public string ErrorMessage { get; set; } + /// + /// Gets or sets the error message. + /// + /// The error message. + public string ErrorMessage { get; set; } - /// - /// Gets or sets the long error message. - /// - /// The long error message. - public string LongErrorMessage { get; set; } - } -} + /// + /// Gets or sets the long error message. + /// + /// The long error message. + public string LongErrorMessage { get; set; } + } diff --git a/MediaBrowser.Model/Tasks/TaskState.cs b/MediaBrowser.Model/Tasks/TaskState.cs index 2fb85bfd..7e5091f7 100644 --- a/MediaBrowser.Model/Tasks/TaskState.cs +++ b/MediaBrowser.Model/Tasks/TaskState.cs @@ -2,26 +2,24 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Tasks -{ - /// - /// Enum TaskState. - /// - public enum TaskState - { - /// - /// The idle. - /// - Idle, +namespace MediaBrowser.Model.Tasks; + /// + /// Enum TaskState. + /// + public enum TaskState + { + /// + /// The idle. + /// + Idle, - /// - /// The cancelling. - /// - Cancelling, + /// + /// The cancelling. + /// + Cancelling, - /// - /// The running. - /// - Running - } -} + /// + /// The running. + /// + Running + } diff --git a/MediaBrowser.Model/Tasks/TaskTriggerInfo.cs b/MediaBrowser.Model/Tasks/TaskTriggerInfo.cs index 761194a1..a814f284 100644 --- a/MediaBrowser.Model/Tasks/TaskTriggerInfo.cs +++ b/MediaBrowser.Model/Tasks/TaskTriggerInfo.cs @@ -2,44 +2,42 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Model.Tasks; #nullable disable -using System; + using global::System; -namespace MediaBrowser.Model.Tasks -{ - /// - /// Class TaskTriggerInfo. - /// - public class TaskTriggerInfo - { - /// - /// Gets or sets the type. - /// - /// The type. - public TaskTriggerInfoType Type { get; set; } + /// + /// Class TaskTriggerInfo. + /// + public class TaskTriggerInfo + { + /// + /// Gets or sets the type. + /// + /// The type. + public TaskTriggerInfoType Type { get; set; } - /// - /// Gets or sets the time of day. - /// - /// The time of day. - public long? TimeOfDayTicks { get; set; } + /// + /// Gets or sets the time of day. + /// + /// The time of day. + public long? TimeOfDayTicks { get; set; } - /// - /// Gets or sets the interval. - /// - /// The interval. - public long? IntervalTicks { get; set; } + /// + /// Gets or sets the interval. + /// + /// The interval. + public long? IntervalTicks { get; set; } - /// - /// Gets or sets the day of week. - /// - /// The day of week. - public DayOfWeek? DayOfWeek { get; set; } + /// + /// Gets or sets the day of week. + /// + /// The day of week. + public DayOfWeek? DayOfWeek { get; set; } - /// - /// Gets or sets the maximum runtime ticks. - /// - /// The maximum runtime ticks. - public long? MaxRuntimeTicks { get; set; } - } -} + /// + /// Gets or sets the maximum runtime ticks. + /// + /// The maximum runtime ticks. + public long? MaxRuntimeTicks { get; set; } + } diff --git a/MediaBrowser.Model/Tasks/TaskTriggerInfoType.cs b/MediaBrowser.Model/Tasks/TaskTriggerInfoType.cs index 26ee57bf..718c1e42 100644 --- a/MediaBrowser.Model/Tasks/TaskTriggerInfoType.cs +++ b/MediaBrowser.Model/Tasks/TaskTriggerInfoType.cs @@ -2,31 +2,29 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Tasks -{ - /// - /// Enum TaskTriggerInfoType. - /// - public enum TaskTriggerInfoType - { - /// - /// The daily trigger. - /// - DailyTrigger, +namespace MediaBrowser.Model.Tasks; + /// + /// Enum TaskTriggerInfoType. + /// + public enum TaskTriggerInfoType + { + /// + /// The daily trigger. + /// + DailyTrigger, - /// - /// The weekly trigger. - /// - WeeklyTrigger, + /// + /// The weekly trigger. + /// + WeeklyTrigger, - /// - /// The interval trigger. - /// - IntervalTrigger, + /// + /// The interval trigger. + /// + IntervalTrigger, - /// - /// The startup trigger. - /// - StartupTrigger - } -} + /// + /// The startup trigger. + /// + StartupTrigger + } diff --git a/MediaBrowser.Model/Updates/InstallationInfo.cs b/MediaBrowser.Model/Updates/InstallationInfo.cs index 1ebd16df..747bccdf 100644 --- a/MediaBrowser.Model/Updates/InstallationInfo.cs +++ b/MediaBrowser.Model/Updates/InstallationInfo.cs @@ -2,59 +2,57 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Model.Updates; #nullable disable -using System; -using System.Text.Json.Serialization; + using global::System; + using global::System.Text.Json.Serialization; -namespace MediaBrowser.Model.Updates -{ - /// - /// Class InstallationInfo. - /// - public class InstallationInfo - { - /// - /// Gets or sets the Id. - /// - /// The Id. - [JsonPropertyName("Guid")] - public Guid Id { get; set; } + /// + /// Class InstallationInfo. + /// + public class InstallationInfo + { + /// + /// Gets or sets the Id. + /// + /// The Id. + [JsonPropertyName("Guid")] + public Guid Id { get; set; } - /// - /// Gets or sets the name. - /// - /// The name. - public string Name { get; set; } + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } - /// - /// Gets or sets the version. - /// - /// The version. - public Version Version { get; set; } + /// + /// Gets or sets the version. + /// + /// The version. + public Version Version { get; set; } - /// - /// Gets or sets the changelog for this version. - /// - /// The changelog. - public string Changelog { get; set; } + /// + /// Gets or sets the changelog for this version. + /// + /// The changelog. + public string Changelog { get; set; } - /// - /// Gets or sets the source URL. - /// - /// The source URL. - public string SourceUrl { get; set; } + /// + /// Gets or sets the source URL. + /// + /// The source URL. + public string SourceUrl { get; set; } - /// - /// Gets or sets a checksum for the binary. - /// - /// The checksum. - public string Checksum { get; set; } + /// + /// Gets or sets a checksum for the binary. + /// + /// The checksum. + public string Checksum { get; set; } - /// - /// Gets or sets package information for the installation. - /// - /// The package information. - public PackageInfo PackageInfo { get; set; } - } -} + /// + /// Gets or sets package information for the installation. + /// + /// The package information. + public PackageInfo PackageInfo { get; set; } + } diff --git a/MediaBrowser.Model/Updates/PackageInfo.cs b/MediaBrowser.Model/Updates/PackageInfo.cs index d448b54a..d73e87bc 100644 --- a/MediaBrowser.Model/Updates/PackageInfo.cs +++ b/MediaBrowser.Model/Updates/PackageInfo.cs @@ -2,86 +2,84 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Text.Json.Serialization; +namespace MediaBrowser.Model.Updates; + using global::System; + using global::System.Collections.Generic; + using global::System.Text.Json.Serialization; -namespace MediaBrowser.Model.Updates -{ - /// - /// Class PackageInfo. - /// - public class PackageInfo - { - /// - /// Initializes a new instance of the class. - /// - public PackageInfo() - { - Versions = Array.Empty(); - Category = string.Empty; - Name = string.Empty; - Overview = string.Empty; - Owner = string.Empty; - Description = string.Empty; - } + /// + /// Class PackageInfo. + /// + public class PackageInfo + { + /// + /// Initializes a new instance of the class. + /// + public PackageInfo() + { + Versions = Array.Empty(); + Category = string.Empty; + Name = string.Empty; + Overview = string.Empty; + Owner = string.Empty; + Description = string.Empty; + } - /// - /// Gets or sets the name. - /// - /// The name. - [JsonPropertyName("name")] - public string Name { get; set; } + /// + /// Gets or sets the name. + /// + /// The name. + [JsonPropertyName("name")] + public string Name { get; set; } - /// - /// Gets or sets a long description of the plugin containing features or helpful explanations. - /// - /// The description. - [JsonPropertyName("description")] - public string Description { get; set; } + /// + /// Gets or sets a long description of the plugin containing features or helpful explanations. + /// + /// The description. + [JsonPropertyName("description")] + public string Description { get; set; } - /// - /// Gets or sets a short overview of what the plugin does. - /// - /// The overview. - [JsonPropertyName("overview")] - public string Overview { get; set; } + /// + /// Gets or sets a short overview of what the plugin does. + /// + /// The overview. + [JsonPropertyName("overview")] + public string Overview { get; set; } - /// - /// Gets or sets the owner. - /// - /// The owner. - [JsonPropertyName("owner")] - public string Owner { get; set; } + /// + /// Gets or sets the owner. + /// + /// The owner. + [JsonPropertyName("owner")] + public string Owner { get; set; } - /// - /// Gets or sets the category. - /// - /// The category. - [JsonPropertyName("category")] - public string Category { get; set; } + /// + /// Gets or sets the category. + /// + /// The category. + [JsonPropertyName("category")] + public string Category { get; set; } - /// - /// Gets or sets the guid of the assembly associated with this plugin. - /// This is used to identify the proper item for automatic updates. - /// - /// The name. - [JsonPropertyName("guid")] - public Guid Id { get; set; } + /// + /// Gets or sets the guid of the assembly associated with this plugin. + /// This is used to identify the proper item for automatic updates. + /// + /// The name. + [JsonPropertyName("guid")] + public Guid Id { get; set; } - /// - /// Gets or sets the versions. - /// - /// The versions. - [JsonPropertyName("versions")] + /// + /// Gets or sets the versions. + /// + /// The versions. + [JsonPropertyName("versions")] #pragma warning disable CA2227 // Collection properties should be read only - public IList Versions { get; set; } + public IList Versions { get; set; } #pragma warning restore CA2227 // Collection properties should be read only - /// - /// Gets or sets the image url for the package. - /// - [JsonPropertyName("imageUrl")] - public string? ImageUrl { get; set; } - } -} + /// + /// Gets or sets the image url for the package. + /// + [JsonPropertyName("imageUrl")] + public string? ImageUrl { get; set; } + } diff --git a/MediaBrowser.Model/Updates/RepositoryInfo.cs b/MediaBrowser.Model/Updates/RepositoryInfo.cs index 6929de31..e6092ef4 100644 --- a/MediaBrowser.Model/Updates/RepositoryInfo.cs +++ b/MediaBrowser.Model/Updates/RepositoryInfo.cs @@ -2,29 +2,27 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -namespace MediaBrowser.Model.Updates -{ - /// - /// Class RepositoryInfo. - /// - public class RepositoryInfo - { - /// - /// Gets or sets the name. - /// - /// The name. - public string? Name { get; set; } +namespace MediaBrowser.Model.Updates; + /// + /// Class RepositoryInfo. + /// + public class RepositoryInfo + { + /// + /// Gets or sets the name. + /// + /// The name. + public string? Name { get; set; } - /// - /// Gets or sets the URL. - /// - /// The URL. - public string? Url { get; set; } + /// + /// Gets or sets the URL. + /// + /// The URL. + public string? Url { get; set; } - /// - /// Gets or sets a value indicating whether the repository is enabled. - /// - /// true if enabled. - public bool Enabled { get; set; } = true; - } -} + /// + /// Gets or sets a value indicating whether the repository is enabled. + /// + /// true if enabled. + public bool Enabled { get; set; } = true; + } diff --git a/MediaBrowser.Model/Updates/VersionInfo.cs b/MediaBrowser.Model/Updates/VersionInfo.cs index 63c22fc8..b898f463 100644 --- a/MediaBrowser.Model/Updates/VersionInfo.cs +++ b/MediaBrowser.Model/Updates/VersionInfo.cs @@ -2,80 +2,78 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; -using SysVersion = System.Version; +namespace MediaBrowser.Model.Updates; + using global::System.Text.Json.Serialization; + using SysVersion = global::System.Version; -namespace MediaBrowser.Model.Updates -{ - /// - /// Defines the class. - /// - public class VersionInfo - { - private SysVersion? _version; + /// + /// Defines the class. + /// + public class VersionInfo + { + private SysVersion? _version; - /// - /// Gets or sets the version. - /// - /// The version. - [JsonPropertyName("version")] - public string Version - { - get => _version is null ? string.Empty : _version.ToString(); + /// + /// Gets or sets the version. + /// + /// The version. + [JsonPropertyName("version")] + public string Version + { + get => _version is null ? string.Empty : _version.ToString(); - set => _version = SysVersion.Parse(value); - } + set => _version = SysVersion.Parse(value); + } - /// - /// Gets the version as a . - /// - public SysVersion VersionNumber => _version ?? new SysVersion(0, 0, 0); + /// + /// Gets the version as a . + /// + public SysVersion VersionNumber => _version ?? new SysVersion(0, 0, 0); - /// - /// Gets or sets the changelog for this version. - /// - /// The changelog. - [JsonPropertyName("changelog")] - public string? Changelog { get; set; } + /// + /// Gets or sets the changelog for this version. + /// + /// The changelog. + [JsonPropertyName("changelog")] + public string? Changelog { get; set; } - /// - /// Gets or sets the ABI that this version was built against. - /// - /// The target ABI version. - [JsonPropertyName("targetAbi")] - public string? TargetAbi { get; set; } + /// + /// Gets or sets the ABI that this version was built against. + /// + /// The target ABI version. + [JsonPropertyName("targetAbi")] + public string? TargetAbi { get; set; } - /// - /// Gets or sets the source URL. - /// - /// The source URL. - [JsonPropertyName("sourceUrl")] - public string? SourceUrl { get; set; } + /// + /// Gets or sets the source URL. + /// + /// The source URL. + [JsonPropertyName("sourceUrl")] + public string? SourceUrl { get; set; } - /// - /// Gets or sets a checksum for the binary. - /// - /// The checksum. - [JsonPropertyName("checksum")] - public string? Checksum { get; set; } + /// + /// Gets or sets a checksum for the binary. + /// + /// The checksum. + [JsonPropertyName("checksum")] + public string? Checksum { get; set; } - /// - /// Gets or sets a timestamp of when the binary was built. - /// - /// The timestamp. - [JsonPropertyName("timestamp")] - public string? Timestamp { get; set; } + /// + /// Gets or sets a timestamp of when the binary was built. + /// + /// The timestamp. + [JsonPropertyName("timestamp")] + public string? Timestamp { get; set; } - /// - /// Gets or sets the repository name. - /// - [JsonPropertyName("repositoryName")] - public string RepositoryName { get; set; } = string.Empty; + /// + /// Gets or sets the repository name. + /// + [JsonPropertyName("repositoryName")] + public string RepositoryName { get; set; } = string.Empty; - /// - /// Gets or sets the repository url. - /// - [JsonPropertyName("repositoryUrl")] - public string RepositoryUrl { get; set; } = string.Empty; - } -} + /// + /// Gets or sets the repository url. + /// + [JsonPropertyName("repositoryUrl")] + public string RepositoryUrl { get; set; } = string.Empty; + } diff --git a/MediaBrowser.Model/Users/ForgotPasswordAction.cs b/MediaBrowser.Model/Users/ForgotPasswordAction.cs index 371dc349..a000dc6e 100644 --- a/MediaBrowser.Model/Users/ForgotPasswordAction.cs +++ b/MediaBrowser.Model/Users/ForgotPasswordAction.cs @@ -4,16 +4,14 @@ #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.Users -{ - public enum ForgotPasswordAction - { - [Obsolete("Returning different actions represents a security concern.")] - ContactAdmin = 0, - PinCode = 1, - [Obsolete("Returning different actions represents a security concern.")] - InNetworkRequired = 2 - } -} +namespace MediaBrowser.Model.Users; + public enum ForgotPasswordAction + { + [Obsolete("Returning different actions represents a security concern.")] + ContactAdmin = 0, + PinCode = 1, + [Obsolete("Returning different actions represents a security concern.")] + InNetworkRequired = 2, + } diff --git a/MediaBrowser.Model/Users/ForgotPasswordResult.cs b/MediaBrowser.Model/Users/ForgotPasswordResult.cs index 534ea830..98f55859 100644 --- a/MediaBrowser.Model/Users/ForgotPasswordResult.cs +++ b/MediaBrowser.Model/Users/ForgotPasswordResult.cs @@ -5,28 +5,26 @@ #nullable disable #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.Users -{ - public class ForgotPasswordResult - { - /// - /// Gets or sets the action. - /// - /// The action. - public ForgotPasswordAction Action { get; set; } +namespace MediaBrowser.Model.Users; + public class ForgotPasswordResult + { + /// + /// Gets or sets the action. + /// + /// The action. + public ForgotPasswordAction Action { get; set; } - /// - /// Gets or sets the pin file. - /// - /// The pin file. - public string PinFile { get; set; } + /// + /// Gets or sets the pin file. + /// + /// The pin file. + public string PinFile { get; set; } - /// - /// Gets or sets the pin expiration date. - /// - /// The pin expiration date. - public DateTime? PinExpirationDate { get; set; } - } -} + /// + /// Gets or sets the pin expiration date. + /// + /// The pin expiration date. + public DateTime? PinExpirationDate { get; set; } + } diff --git a/MediaBrowser.Model/Users/PinRedeemResult.cs b/MediaBrowser.Model/Users/PinRedeemResult.cs index 6411c89c..84fc8c5f 100644 --- a/MediaBrowser.Model/Users/PinRedeemResult.cs +++ b/MediaBrowser.Model/Users/PinRedeemResult.cs @@ -4,22 +4,20 @@ #pragma warning disable CS1591 -using System; +using global::System; -namespace MediaBrowser.Model.Users -{ - public class PinRedeemResult - { - /// - /// Gets or sets a value indicating whether this is success. - /// - /// true if success; otherwise, false. - public bool Success { get; set; } +namespace MediaBrowser.Model.Users; + public class PinRedeemResult + { + /// + /// Gets or sets a value indicating whether this is success. + /// + /// true if success; otherwise, false. + public bool Success { get; set; } - /// - /// Gets or sets the users reset. - /// - /// The users reset. - public string[] UsersReset { get; set; } = Array.Empty(); - } -} + /// + /// Gets or sets the users reset. + /// + /// The users reset. + public string[] UsersReset { get; set; } = Array.Empty(); + } diff --git a/MediaBrowser.Model/Users/UserPolicy.cs b/MediaBrowser.Model/Users/UserPolicy.cs index f6eb6f18..c82a65f0 100644 --- a/MediaBrowser.Model/Users/UserPolicy.cs +++ b/MediaBrowser.Model/Users/UserPolicy.cs @@ -5,65 +5,64 @@ #nullable disable #pragma warning disable CS1591, CA1819 -using System; -using System.ComponentModel; -using System.ComponentModel.DataAnnotations; -using System.Xml.Serialization; +using global::System; +using global::System.ComponentModel; +using global::System.ComponentModel.DataAnnotations; +using global::System.Xml.Serialization; using Jellyfin.Data.Enums; using Jellyfin.Database.Implementations.Enums; using AccessSchedule = Jellyfin.Database.Implementations.Entities.AccessSchedule; -namespace MediaBrowser.Model.Users -{ - public class UserPolicy - { - public UserPolicy() - { - IsHidden = true; - EnableCollectionManagement = false; - EnableSubtitleManagement = false; +namespace MediaBrowser.Model.Users; + public class UserPolicy + { + public UserPolicy() + { + IsHidden = true; + EnableCollectionManagement = false; + EnableSubtitleManagement = false; - EnableContentDeletion = false; - EnableContentDeletionFromFolders = Array.Empty(); + EnableContentDeletion = false; + EnableContentDeletionFromFolders = Array.Empty(); - EnableSyncTranscoding = true; - EnableMediaConversion = true; + EnableSyncTranscoding = true; + EnableMediaConversion = true; - EnableMediaPlayback = true; - EnableAudioPlaybackTranscoding = true; - EnableVideoPlaybackTranscoding = true; - EnablePlaybackRemuxing = true; - ForceRemoteSourceTranscoding = false; - EnableLiveTvManagement = true; - EnableLiveTvAccess = true; + EnableMediaPlayback = true; + EnableAudioPlaybackTranscoding = true; + EnableVideoPlaybackTranscoding = true; + EnablePlaybackRemuxing = true; + ForceRemoteSourceTranscoding = false; + EnableLiveTvManagement = true; + EnableLiveTvAccess = true; - // Without this on by default, admins won't be able to do this - // Improve in the future - EnableLiveTvManagement = true; + // Without this on by default, admins won't be able to do this + // Improve in the future + EnableLiveTvManagement = true; - EnableSharedDeviceControl = true; + EnableSharedDeviceControl = true; - BlockedTags = Array.Empty(); - AllowedTags = Array.Empty(); - BlockUnratedItems = Array.Empty(); + BlockedTags = Array.Empty(); + AllowedTags = Array.Empty(); + BlockUnratedItems = Array.Empty(); - EnableUserPreferenceAccess = true; + EnableUserPreferenceAccess = true; - AccessSchedules = Array.Empty(); + AccessSchedules = Array.Empty(); - LoginAttemptsBeforeLockout = -1; + LoginAttemptsBeforeLockout = -1; - MaxActiveSessions = 0; - MaxParentalRating = null; + MaxActiveSessions = 0; + MaxParentalRating = null; - EnableAllChannels = true; - EnabledChannels = Array.Empty(); + EnableAllChannels = true; + EnabledChannels = Array.Empty(); - EnableAllFolders = true; - EnabledFolders = Array.Empty(); + EnableAllFolders = true; + EnabledFolders = Array.Empty(); - EnabledDevices = Array.Empty(); - EnableAllDevices = true; + EnabledDevices = Array.Empty(); + EnableAllDevices = true; EnableContentDownloading = true; EnablePublicSharing = true; @@ -71,133 +70,132 @@ namespace MediaBrowser.Model.Users SyncPlayAccess = SyncPlayUserAccessType.CreateAndJoinGroups; } - /// - /// Gets or sets a value indicating whether this instance is administrator. - /// - /// true if this instance is administrator; otherwise, false. - public bool IsAdministrator { get; set; } + /// + /// Gets or sets a value indicating whether this instance is administrator. + /// + /// true if this instance is administrator; otherwise, false. + public bool IsAdministrator { get; set; } - /// - /// Gets or sets a value indicating whether this instance is hidden. - /// - /// true if this instance is hidden; otherwise, false. - public bool IsHidden { get; set; } + /// + /// Gets or sets a value indicating whether this instance is hidden. + /// + /// true if this instance is hidden; otherwise, false. + public bool IsHidden { get; set; } - /// - /// Gets or sets a value indicating whether this instance can manage collections. - /// - /// true if this instance is hidden; otherwise, false. - [DefaultValue(false)] - public bool EnableCollectionManagement { get; set; } + /// + /// Gets or sets a value indicating whether this instance can manage collections. + /// + /// true if this instance is hidden; otherwise, false. + [DefaultValue(false)] + public bool EnableCollectionManagement { get; set; } - /// - /// Gets or sets a value indicating whether this instance can manage subtitles. - /// - /// true if this instance is allowed; otherwise, false. - [DefaultValue(false)] - public bool EnableSubtitleManagement { get; set; } + /// + /// Gets or sets a value indicating whether this instance can manage subtitles. + /// + /// true if this instance is allowed; otherwise, false. + [DefaultValue(false)] + public bool EnableSubtitleManagement { get; set; } - /// - /// Gets or sets a value indicating whether this user can manage lyrics. - /// - [DefaultValue(false)] - public bool EnableLyricManagement { get; set; } + /// + /// Gets or sets a value indicating whether this user can manage lyrics. + /// + [DefaultValue(false)] + public bool EnableLyricManagement { get; set; } - /// - /// Gets or sets a value indicating whether this instance is disabled. - /// - /// true if this instance is disabled; otherwise, false. - public bool IsDisabled { get; set; } + /// + /// Gets or sets a value indicating whether this instance is disabled. + /// + /// true if this instance is disabled; otherwise, false. + public bool IsDisabled { get; set; } - /// - /// Gets or sets the max parental rating. - /// - /// The max parental rating. - public int? MaxParentalRating { get; set; } + /// + /// Gets or sets the max parental rating. + /// + /// The max parental rating. + public int? MaxParentalRating { get; set; } - public int? MaxParentalSubRating { get; set; } + public int? MaxParentalSubRating { get; set; } - public string[] BlockedTags { get; set; } + public string[] BlockedTags { get; set; } - public string[] AllowedTags { get; set; } + public string[] AllowedTags { get; set; } - public bool EnableUserPreferenceAccess { get; set; } + public bool EnableUserPreferenceAccess { get; set; } - public AccessSchedule[] AccessSchedules { get; set; } + public AccessSchedule[] AccessSchedules { get; set; } - public UnratedItem[] BlockUnratedItems { get; set; } + public UnratedItem[] BlockUnratedItems { get; set; } - public bool EnableRemoteControlOfOtherUsers { get; set; } + public bool EnableRemoteControlOfOtherUsers { get; set; } - public bool EnableSharedDeviceControl { get; set; } + public bool EnableSharedDeviceControl { get; set; } - public bool EnableRemoteAccess { get; set; } + public bool EnableRemoteAccess { get; set; } - public bool EnableLiveTvManagement { get; set; } + public bool EnableLiveTvManagement { get; set; } - public bool EnableLiveTvAccess { get; set; } + public bool EnableLiveTvAccess { get; set; } - public bool EnableMediaPlayback { get; set; } + public bool EnableMediaPlayback { get; set; } - public bool EnableAudioPlaybackTranscoding { get; set; } + public bool EnableAudioPlaybackTranscoding { get; set; } - public bool EnableVideoPlaybackTranscoding { get; set; } + public bool EnableVideoPlaybackTranscoding { get; set; } - public bool EnablePlaybackRemuxing { get; set; } + public bool EnablePlaybackRemuxing { get; set; } - public bool ForceRemoteSourceTranscoding { get; set; } + public bool ForceRemoteSourceTranscoding { get; set; } - public bool EnableContentDeletion { get; set; } + public bool EnableContentDeletion { get; set; } - public string[] EnableContentDeletionFromFolders { get; set; } + public string[] EnableContentDeletionFromFolders { get; set; } - public bool EnableContentDownloading { get; set; } + public bool EnableContentDownloading { get; set; } - /// - /// Gets or sets a value indicating whether [enable synchronize]. - /// - /// true if [enable synchronize]; otherwise, false. - public bool EnableSyncTranscoding { get; set; } + /// + /// Gets or sets a value indicating whether [enable synchronize]. + /// + /// true if [enable synchronize]; otherwise, false. + public bool EnableSyncTranscoding { get; set; } - public bool EnableMediaConversion { get; set; } + public bool EnableMediaConversion { get; set; } - public string[] EnabledDevices { get; set; } + public string[] EnabledDevices { get; set; } - public bool EnableAllDevices { get; set; } + public bool EnableAllDevices { get; set; } - public Guid[] EnabledChannels { get; set; } + public Guid[] EnabledChannels { get; set; } - public bool EnableAllChannels { get; set; } + public bool EnableAllChannels { get; set; } - public Guid[] EnabledFolders { get; set; } + public Guid[] EnabledFolders { get; set; } - public bool EnableAllFolders { get; set; } + public bool EnableAllFolders { get; set; } - public int InvalidLoginAttemptCount { get; set; } + public int InvalidLoginAttemptCount { get; set; } - public int LoginAttemptsBeforeLockout { get; set; } + public int LoginAttemptsBeforeLockout { get; set; } - public int MaxActiveSessions { get; set; } + public int MaxActiveSessions { get; set; } - public bool EnablePublicSharing { get; set; } + public bool EnablePublicSharing { get; set; } - public Guid[] BlockedMediaFolders { get; set; } + public Guid[] BlockedMediaFolders { get; set; } - public Guid[] BlockedChannels { get; set; } + public Guid[] BlockedChannels { get; set; } - public int RemoteClientBitrateLimit { get; set; } + public int RemoteClientBitrateLimit { get; set; } - [XmlElement(ElementName = "AuthenticationProviderId")] - [Required(AllowEmptyStrings = false)] - public string AuthenticationProviderId { get; set; } + [XmlElement(ElementName = "AuthenticationProviderId")] + [Required(AllowEmptyStrings = false)] + public string AuthenticationProviderId { get; set; } - [Required(AllowEmptyStrings= false)] - public string PasswordResetProviderId { get; set; } + [Required(AllowEmptyStrings= false)] + public string PasswordResetProviderId { get; set; } - /// - /// Gets or sets a value indicating what SyncPlay features the user can access. - /// - /// Access level to SyncPlay features. - public SyncPlayUserAccessType SyncPlayAccess { get; set; } - } -} + /// + /// Gets or sets a value indicating what SyncPlay features the user can access. + /// + /// Access level to SyncPlay features. + public SyncPlayUserAccessType SyncPlayAccess { get; set; } + } diff --git a/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.CodeAnalysis.dll b/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.CodeAnalysis.dll new file mode 100644 index 0000000000000000000000000000000000000000..c9e705a97cbdda8d6e529aa7e5537a4d248a52f3 GIT binary patch literal 8704 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 literal 0 HcmV?d00001 diff --git a/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.CodeAnalysis.pdb b/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.CodeAnalysis.pdb new file mode 100644 index 0000000000000000000000000000000000000000..93049873b0aacca0f8125c40e1e357e6c7ccee2e GIT binary patch literal 9652 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 WMP{Nl;CN2T^dVN@jwUw>`}`lTaA&pv literal 0 HcmV?d00001 diff --git a/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.CodeAnalysis.xml b/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.CodeAnalysis.xml new file mode 100644 index 00000000..d781356f --- /dev/null +++ b/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.CodeAnalysis.xml @@ -0,0 +1,24 @@ + + + + Jellyfin.CodeAnalysis + + + + + Analyzer to detect sync disposal of async-created IAsyncDisposable objects. + + + + + Diagnostic descriptor for sync disposal of async-created IAsyncDisposable objects. + + + + + + + + + + diff --git a/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Data.dll b/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Data.dll new file mode 100644 index 0000000000000000000000000000000000000000..ce75ada7c5cfd6c2e3f0f30fc4bfb5d6714bab64 GIT binary patch literal 18944 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 n4^IV9yBt^9pGjxd6N>-W-~Wpm=r;e)mj@1w literal 0 HcmV?d00001 diff --git a/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Data.pdb b/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Data.pdb new file mode 100644 index 0000000000000000000000000000000000000000..e1738e54b0b58d2782f948172510425d5075f23a GIT binary patch literal 17540 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 DwFxp> literal 0 HcmV?d00001 diff --git a/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Data.xml b/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Data.xml new file mode 100644 index 00000000..ecc10cd2 --- /dev/null +++ b/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Data.xml @@ -0,0 +1,1198 @@ + + + + Jellyfin.Data + + + + + Attribute to specify that the enum value is to be ignored when generating the openapi spec. + + + + + A dto representing custom options for a device. + + + + + Gets or sets the id. + + + + + Gets or sets the device id. + + + + + Gets or sets the custom name. + + + + + Activity log sorting options. + + + + + Sort by name. + + + + + Sort by overview. + + + + + Sort by short overview. + + + + + Sort by type. + + + + + Sort by date. + + + + + Sort by username. + + + + + Sort by severity. + + + + + An enum representing formats of spatial audio. + + + + + None audio spatial format. + + + + + Dolby Atmos audio spatial format. + + + + + DTS:X audio spatial format. + + + + + The base item kind. + + + This enum is generated from all classes that inherit from BaseItem. + + + + + Item is aggregate folder. + + + + + Item is audio. + + + + + Item is audio book. + + + + + Item is base plugin folder. + + + + + Item is book. + + + + + Item is box set. + + + + + Item is channel. + + + + + Item is channel folder item. + + + + + Item is collection folder. + + + + + Item is episode. + + + + + Item is folder. + + + + + Item is genre. + + + + + Item is manual playlists folder. + + + + + Item is movie. + + + + + Item is a live tv channel. + + + + + Item is a live tv program. + + + + + Item is music album. + + + + + Item is music artist. + + + + + Item is music genre. + + + + + Item is music video. + + + + + Item is person. + + + + + Item is photo. + + + + + Item is photo album. + + + + + Item is playlist. + + + + + Item is playlist folder. + + + + + Item is program. + + + + + Item is recording. + + + Manually added. + + + + + Item is season. + + + + + Item is series. + + + + + Item is studio. + + + + + Item is trailer. + + + + + Item is live tv channel. + + + Type is overridden. + + + + + Item is live tv program. + + + Type is overridden. + + + + + Item is user root folder. + + + + + Item is user view. + + + + + Item is video. + + + + + Item is year. + + + + + Collection type. + + + + + Unknown collection. + + + + + Movies collection. + + + + + Tv shows collection. + + + + + Music collection. + + + + + Music videos collection. + + + + + Trailers collection. + + + + + Home videos collection. + + + + + Box sets collection. + + + + + Books collection. + + + + + Photos collection. + + + + + Live tv collection. + + + + + Playlists collection. + + + + + Folders collection. + + + + + Tv show series collection. + + + + + Tv genres collection. + + + + + Tv genre collection. + + + + + Tv latest collection. + + + + + Tv next up collection. + + + + + Tv resume collection. + + + + + Tv favorite series collection. + + + + + Tv favorite episodes collection. + + + + + Latest movies collection. + + + + + Movies to resume collection. + + + + + Movie movie collection. + + + + + Movie collections collection. + + + + + Movie favorites collection. + + + + + Movie genres collection. + + + + + Movie genre collection. + + + + + These represent sort orders. + + + + + Default sort order. + + + + + The aired episode order. + + + + + The album. + + + + + The album artist. + + + + + The artist. + + + + + The date created. + + + + + The official rating. + + + + + The date played. + + + + + The premiere date. + + + + + The start date. + + + + + The sort name. + + + + + The name. + + + + + The random. + + + + + The runtime. + + + + + The community rating. + + + + + The production year. + + + + + The play count. + + + + + The critic rating. + + + + + The IsFolder boolean. + + + + + The IsUnplayed boolean. + + + + + The IsPlayed boolean. + + + + + The series sort. + + + + + The video bitrate. + + + + + The air time. + + + + + The studio. + + + + + The IsFavouriteOrLiked boolean. + + + + + The last content added date. + + + + + The series last played date. + + + + + The parent index number. + + + + + The index number. + + + + + Media streaming protocol. + Lowercase for backwards compatibility. + + + + + HTTP. + + + + + HTTP Live Streaming. + + + + + Media types. + + + + + Unknown media type. + + + + + Video media. + + + + + Audio media. + + + + + Photo media. + + + + + Book media. + + + + + The person kind. + + + + + An unknown person kind. + + + + + A person whose profession is acting on the stage, in films, or on television. + + + + + A person who supervises the actors and other staff in a film, play, or similar production. + + + + + A person who writes music, especially as a professional occupation. + + + + + A writer of a book, article, or document. Can also be used as a generic term for music writer if there is a lack of specificity. + + + + + A well-known actor or other performer who appears in a work in which they do not have a regular role. + + + + + A person responsible for the financial and managerial aspects of the making of a film or broadcast or for staging a play, opera, etc. + + + + + A person who directs the performance of an orchestra or choir. + + + + + A person who writes the words to a song or musical. + + + + + A person who adapts a musical composition for performance. + + + + + An audio engineer who performed a general engineering role. + + + + + An engineer responsible for using a mixing console to mix a recorded track into a single piece of music suitable for release. + + + + + A person who remixed a recording by taking one or more other tracks, substantially altering them and mixing them together with other material. + + + + + A person who created the material. + + + + + A person who was the artist. + + + + + A person who was the album artist. + + + + + A person who was the author. + + + + + A person who was the illustrator. + + + + + A person responsible for drawing the art. + + + + + A person responsible for inking the pencil art. + + + + + A person responsible for applying color to drawings. + + + + + A person responsible for drawing text and speech bubbles. + + + + + A person responsible for drawing the cover art. + + + + + A person contributing to a resource by revising or elucidating the content, e.g., adding an introduction, notes, or other critical matter. + An editor may also prepare a resource for production, publication, or distribution. + + + + + A person who renders a text from one language into another. + + + + + Enum SyncPlayAccessRequirementType. + + + + + User must have access to SyncPlay, in some form. + + + + + User must be able to create groups. + + + + + User must be able to join groups. + + + + + User must be in a group. + + + + + An enum representing an unrated item. + + + + + A movie. + + + + + A trailer. + + + + + A series. + + + + + Music. + + + + + A book. + + + + + A live TV channel. + + + + + A live TV program. + + + + + Channel content. + + + + + Another type, not covered by the other fields. + + + + + An enum representing video ranges. + + + + + Unknown video range. + + + + + SDR video range. + + + + + HDR video range. + + + + + An enum representing types of video ranges. + + + + + Unknown video range type. + + + + + SDR video range type (8bit). + + + + + HDR10 video range type (10bit). + + + + + HLG video range type (10bit). + + + + + Dolby Vision video range type (10bit encoded / 12bit remapped). + + + + + Dolby Vision with HDR10 video range fallback (10bit). + + + + + Dolby Vision with HLG video range fallback (10bit). + + + + + Dolby Vision with SDR video range fallback (8bit / 10bit). + + + + + Dolby Vision with Enhancment Layer (Profile 7). + + + + + Dolby Vision and HDR10+ Metadata coexists. + + + + + Dolby Vision with Enhancment Layer (Profile 7) and HDR10+ Metadata coexists. + + + + + Dolby Vision with invalid configuration. e.g. Profile 8 compat id 6. + When using this range, the server would assume the video is still HDR10 after removing the Dolby Vision metadata. + + + + + HDR10+ video range type (10bit to 16bit). + + + + + Provides a generic EventArgs subclass that can hold any kind of object. + + The type of this event. + + + + Initializes a new instance of the class. + + The argument. + + + + Gets the argument. + + The argument. + + + + An event that occurs when there is a pending restart. + + + + + An event that occurs when a user is created. + + + + + Initializes a new instance of the class. + + The user. + + + + An event that occurs when a user is deleted. + + + + + Initializes a new instance of the class. + + The user. + + + + An event that occurs when a user is locked out. + + + + + Initializes a new instance of the class. + + The user. + + + + An event that occurs when a user's password has changed. + + + + + Initializes a new instance of the class. + + The user. + + + + An event that occurs when a user is updated. + + + + + Initializes a new instance of the class. + + The user. + + + + A class representing a query to the activity logs. + + + + + Gets or sets a value indicating whether to take entries with a user id. + + + + + Gets or sets the minimum date to query for. + + + + + Gets or sets the maximum date to query for. + + + + + Gets or sets the name filter. + + + + + Gets or sets the overview filter. + + + + + Gets or sets the short overview filter. + + + + + Gets or sets the type filter. + + + + + Gets or sets the item filter. + + + + + Gets or sets the username filter. + + + + + Gets or sets the log level filter. + + + + + Gets or sets the result ordering. + + + + + A query to retrieve devices. + + + + + Gets or sets the user id of the device. + + + + + Gets or sets the device id. + + + + + Gets or sets the access token. + + + + + An abstract class for paginated queries. + + + + + Gets or sets the index to start at. + + + + + Gets or sets the maximum number of items to include. + + + + + Contains extension methods for manipulation of entities. + + + + + The values being delimited here are Guids, so commas work as they do not appear in Guids. + + + + + Checks whether the user has the specified permission. + + The entity to update. + The permission kind. + True if the user has the specified permission. + + + + Sets the given permission kind to the provided value. + + The entity to update. + The permission kind. + The value to set. + + + + Gets the user's preferences for the given preference kind. + + The entity to update. + The preference kind. + A string array containing the user's preferences. + + + + Gets the user's preferences for the given preference kind. + + The entity to update. + The preference kind. + Type of preference. + A {T} array containing the user's preference. + + + + Sets the specified preference to the given value. + + The entity to update. + The preference kind. + The values. + + + + Sets the specified preference to the given value. + + The entity to update. + The preference kind. + The values. + The type of value. + + + + Checks whether this user is currently allowed to use the server. + + The entity to update. + True if the current time is within an access schedule, or there are no access schedules. + + + + Checks whether the provided folder is in this user's grouped folders. + + The entity to update. + The Guid of the folder. + True if the folder is in the user's grouped folders. + + + + Initializes the default permissions for a user. Should only be called on user creation. + + The entity to update. + + + + Initializes the default preferences. Should only be called on user creation. + + The entity to update. + + + diff --git a/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Database.Implementations.dll b/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Database.Implementations.dll new file mode 100644 index 0000000000000000000000000000000000000000..3f421027d9905087af154bb4682f2036b493c379 GIT binary patch literal 218624 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%0DH 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 literal 0 HcmV?d00001 diff --git a/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Database.Implementations.pdb b/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Database.Implementations.pdb new file mode 100644 index 0000000000000000000000000000000000000000..4d92ee9fe713dbafdafdddcf49be641675b9a2d6 GIT binary patch literal 66792 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 PP&-RHTS@1^& + + + Jellyfin.Database.Implementations + + + + + The custom value option for custom database providers. + + + + + Gets or sets the key of the value. + + + + + Gets or sets the value. + + + + + Defines the options for a custom database connector. + + + + + Gets or sets the Plugin name to search for database providers. + + + + + Gets or sets the plugin assembly to search for providers. + + + + + Gets or sets the connection string for the custom database provider. + + + + + Gets or sets the list of extra options for the custom provider. + + + + + Options to configure jellyfins managed database. + + + + + Gets or Sets the type of database jellyfin should use. + + + + + Gets or sets the options required to use a custom database provider. + + + + + Gets or Sets the kind of locking behavior jellyfin should perform. Possible options are "NoLock", "Pessimistic", "Optimistic". + Defaults to "NoLock". + + + + + Defines all possible methods for locking database access for concurrent queries. + + + + + Defines that no explicit application level locking for reads and writes should be done and only provider specific locking should be relied on. + + + + + Defines a behavior that always blocks all reads while any one write is done. + + + + + Defines that all writes should be attempted and when fail should be retried. + + + + + An entity representing a user's access schedule. + + + + + Initializes a new instance of the class. + + The day of the week. + The start hour. + The end hour. + The associated user's id. + + + + Gets the id of this instance. + + + Identity, Indexed, Required. + + + + + Gets the id of the associated user. + + + + + Gets or sets the day of week. + + The day of week. + + + + Gets or sets the start hour. + + The start hour. + + + + Gets or sets the end hour. + + The end hour. + + + + An entity referencing an activity log entry. + + + + + Initializes a new instance of the class. + Public constructor with required data. + + The name. + The type. + The user id. + + + + Gets the identity of this instance. + + + + + Gets or sets the name. + + + Required, Max length = 512. + + + + + Gets or sets the overview. + + + Max length = 512. + + + + + Gets or sets the short overview. + + + Max length = 512. + + + + + Gets or sets the type. + + + Required, Max length = 256. + + + + + Gets or sets the user id. + + + Required. + + + + + Gets or sets the item id. + + + Max length = 256. + + + + + Gets or sets the date created. This should be in UTC. + + + Required. + + + + + Gets or sets the log severity. Default is . + + + Required. + + + + + Gets the concurrency token used for optimistic concurrency control. + + + + + Updates the concurrency token before saving changes. + + + + + Represents the relational information for an . + + + + + Gets or Sets the AncestorId. + + + + + Gets or Sets the related BaseItem. + + + + + Gets or Sets the ParentItem. + + + + + Gets or Sets the Child item. + + + + + Provides information about an Attachment to an . + + + + + Gets or Sets the reference. + + + + + Gets or Sets the reference. + + + + + Gets or Sets the index within the source file. + + + + + Gets or Sets the codec of the attachment. + + + + + Gets or Sets the codec tag of the attachment. + + + + + Gets or Sets the comment of the attachment. + + + + + Gets or Sets the filename of the attachment. + + + + + Gets or Sets the attachments mimetype. + + + + + Enum TrailerTypes. + + + + + Gets or Sets. + + + + + Gets or Sets the path to the original image. + + + + + Gets or Sets the time the image was last modified. + + + + + Gets or Sets the imagetype. + + + + + Gets or Sets the width of the original image. + + + + + Gets or Sets the height of the original image. + + + + + Gets or Sets the blurhash. + + + + + Gets or Sets the reference id to the BaseItem. + + + + + Gets or Sets the referenced Item. + + + + + Enum MetadataFields. + + + + + Gets or Sets Numerical ID of this enumerable. + + + + + Gets or Sets all referenced . + + + + + Gets or Sets all referenced . + + + + + Represents a Key-Value relation of an BaseItem's provider. + + + + + Gets or Sets the reference ItemId. + + + + + Gets or Sets the reference BaseItem. + + + + + Gets or Sets the ProvidersId. + + + + + Gets or Sets the Providers Value. + + + + + Enum TrailerTypes. + + + + + Gets or Sets Numerical ID of this enumerable. + + + + + Gets or Sets all referenced . + + + + + Gets or Sets all referenced . + + + + + The Chapter entity. + + + + + Gets or Sets the reference id. + + + + + Gets or Sets the reference. + + + + + Gets or Sets the chapters index in Item. + + + + + Gets or Sets the position within the source file. + + + + + Gets or Sets the common name. + + + + + Gets or Sets the image path. + + + + + Gets or Sets the time the image was last modified. + + + + + An entity that represents a user's custom display preferences for a specific item. + + + + + Initializes a new instance of the class. + + The user id. + The item id. + The client. + The preference key. + The preference value. + + + + Gets the Id. + + + Required. + + + + + Gets or sets the user Id. + + + Required. + + + + + Gets or sets the id of the associated item. + + + Required. + + + + + Gets or sets the client string. + + + Required. Max Length = 32. + + + + + Gets or sets the preference key. + + + Required. + + + + + Gets or sets the preference value. + + + Required. + + + + + An entity representing a user's display preferences. + + + + + Initializes a new instance of the class. + + The user's id. + The item id. + The client string. + + + + Gets the Id. + + + Required. + + + + + Gets or sets the user Id. + + + Required. + + + + + Gets or sets the id of the associated item. + + + Required. + + + + + Gets or sets the client string. + + + Required. Max Length = 32. + + + + + Gets or sets a value indicating whether to show the sidebar. + + + Required. + + + + + Gets or sets a value indicating whether to show the backdrop. + + + Required. + + + + + Gets or sets the scroll direction. + + + Required. + + + + + Gets or sets what the view should be indexed by. + + + + + Gets or sets the length of time to skip forwards, in milliseconds. + + + Required. + + + + + Gets or sets the length of time to skip backwards, in milliseconds. + + + Required. + + + + + Gets or sets the Chromecast Version. + + + Required. + + + + + Gets or sets a value indicating whether the next video info overlay should be shown. + + + Required. + + + + + Gets or sets the dashboard theme. + + + + + Gets or sets the tv home screen. + + + + + Gets the home sections. + + + + + An entity representing a group. + + + + + Initializes a new instance of the class. + + The name of the group. + + + + Gets the id of this group. + + + Identity, Indexed, Required. + + + + + Gets or sets the group's name. + + + Required, Max length = 255. + + + + + + + + Gets a collection containing the group's permissions. + + + + + Gets a collection containing the group's preferences. + + + + + + + + An entity representing a section on the user's home page. + + + + + Gets the id. + + + Identity. Required. + + + + + Gets or sets the Id of the associated display preferences. + + + Required. + + + + + Gets or sets the order. + + + Required. + + + + + Gets or sets the type. + + + Required. + + + + + An entity representing an image. + + + + + Initializes a new instance of the class. + + The path. + + + + Gets the id. + + + Identity, Indexed, Required. + + + + + Gets the user id. + + + + + Gets or sets the path of the image. + + + Required. + + + + + Gets or sets the date last modified. + + + Required. + + + + + Enum ImageType. + + + + + The primary. + + + + + The art. + + + + + The backdrop. + + + + + The banner. + + + + + The logo. + + + + + The thumb. + + + + + The disc. + + + + + The box. + + + + + The screenshot. + + + This enum value is obsolete. + XmlSerializer does not serialize/deserialize objects that are marked as [Obsolete]. + + + + + The menu. + + + + + The chapter image. + + + + + The box rear. + + + + + The user profile image. + + + + + An entity that represents a user's display preferences for a specific item. + + + + + Initializes a new instance of the class. + + The user id. + The item id. + The client. + + + + Gets the id. + + + Required. + + + + + Gets or sets the user Id. + + + Required. + + + + + Gets or sets the id of the associated item. + + + Required. + + + + + Gets or sets the client string. + + + Required. Max Length = 32. + + + + + Gets or sets the view type. + + + Required. + + + + + Gets or sets a value indicating whether the indexing should be remembered. + + + Required. + + + + + Gets or sets what the view should be indexed by. + + + + + Gets or sets a value indicating whether the sorting type should be remembered. + + + Required. + + + + + Gets or sets what the view should be sorted by. + + + Required. + + + + + Gets or sets the sort order. + + + Required. + + + + + Represents an ItemValue for a BaseItem. + + + + + Gets or Sets the ItemValueId. + + + + + Gets or Sets the Type. + + + + + Gets or Sets the Value. + + + + + Gets or Sets the sanitized Value. + + + + + Gets or Sets all associated BaseItems. + + + + + Mapping table for the ItemValue BaseItem relation. + + + + + Gets or Sets the ItemId. + + + + + Gets or Sets the ItemValueId. + + + + + Gets or Sets the referenced . + + + + + Gets or Sets the referenced . + + + + + Provides the Value types for an . + + + + + Artists. + + + + + Album. + + + + + Genre. + + + + + Studios. + + + + + Tags. + + + + + InheritedTags. + + + + + Keyframe information for a specific file. + + + + + Gets or Sets the ItemId. + + + + + Gets or sets the total duration of the stream in ticks. + + + + + Gets or sets the keyframes in ticks. + + + + + Gets or sets the item reference. + + + + + An entity representing artwork. + + + + + Initializes a new instance of the class. + + The path. + The kind of art. + + + + Gets the id. + + + Identity, Indexed, Required. + + + + + Gets or sets the path. + + + Required, Max length = 65535. + + + + + Gets or sets the kind of artwork. + + + Required. + + + + + + + + + + + An entity representing a book. + + + + + Initializes a new instance of the class. + + The library. + + + + Gets a collection containing the metadata for this book. + + + + + + + + An entity containing metadata for a book. + + + + + Initializes a new instance of the class. + + The title or name of the object. + ISO-639-3 3-character language codes. + + + + Gets or sets the ISBN. + + + + + Gets a collection of the publishers for this book. + + + + + + + + An entity representing a chapter. + + + + + Initializes a new instance of the class. + + ISO-639-3 3-character language codes. + The start time for this chapter. + + + + Gets the id. + + + Identity, Indexed, Required. + + + + + Gets or sets the name. + + + Max length = 1024. + + + + + Gets or sets the language. + + + Required, Min length = 3, Max length = 3 + ISO-639-3 3-character language codes. + + + + + Gets or sets the start time. + + + Required. + + + + + Gets or sets the end time. + + + + + + + + + + + An entity representing a collection. + + + + + Initializes a new instance of the class. + + + + + Gets the id. + + + Identity, Indexed, Required. + + + + + Gets or sets the name. + + + Max length = 1024. + + + + + + + + Gets a collection containing this collection's items. + + + + + + + + An entity representing a collection item. + + + + + Initializes a new instance of the class. + + The library item. + + + + Gets or sets the id. + + + Identity, Indexed, Required. + + + + + + + + Gets or sets the library item. + + + Required. + + + + + Gets or sets the next item in the collection. + + + TODO check if this properly updated Dependent and has the proper principal relationship. + + + + + Gets or sets the previous item in the collection. + + + TODO check if this properly updated Dependent and has the proper principal relationship. + + + + + + + + An entity representing a company. + + + + + Initializes a new instance of the class. + + + + + Gets the id. + + + Identity, Indexed, Required. + + + + + + + + Gets a collection containing the metadata. + + + + + Gets a collection containing this company's child companies. + + + + + + + + + + + An entity holding metadata for a . + + + + + Initializes a new instance of the class. + + The title or name of the object. + ISO-639-3 3-character language codes. + + + + Gets or sets the description. + + + Max length = 65535. + + + + + Gets or sets the headquarters. + + + Max length = 255. + + + + + Gets or sets the country code. + + + Max length = 2. + + + + + Gets or sets the homepage. + + + Max length = 1024. + + + + + An entity representing a custom item. + + + + + Initializes a new instance of the class. + + The library. + + + + Gets a collection containing the metadata for this item. + + + + + + + + An entity containing metadata for a custom item. + + + + + Initializes a new instance of the class. + + The title or name of the object. + ISO-639-3 3-character language codes. + + + + An entity representing an episode. + + + + + Initializes a new instance of the class. + + The library. + + + + Gets or sets the episode number. + + + + + + + + Gets a collection containing the metadata for this episode. + + + + + An entity containing metadata for an . + + + + + Initializes a new instance of the class. + + The title or name of the object. + ISO-639-3 3-character language codes. + + + + Gets or sets the outline. + + + Max length = 1024. + + + + + Gets or sets the plot. + + + Max length = 65535. + + + + + Gets or sets the tagline. + + + Max length = 1024. + + + + + An entity representing a genre. + + + + + Initializes a new instance of the class. + + The name. + + + + Gets the id. + + + Identity, Indexed, Required. + + + + + Gets or sets the name. + + + Indexed, Required, Max length = 255. + + + + + + + + + + + An abstract class that holds metadata. + + + + + Initializes a new instance of the class. + + The title or name of the object. + ISO-639-3 3-character language codes. + + + + Gets the id. + + + Identity, Indexed, Required. + + + + + Gets or sets the title. + + + Required, Max length = 1024. + + + + + Gets or sets the original title. + + + Max length = 1024. + + + + + Gets or sets the sort title. + + + Max length = 1024. + + + + + Gets or sets the language. + + + Required, Min length = 3, Max length = 3. + ISO-639-3 3-character language codes. + + + + + Gets or sets the release date. + + + + + Gets the date added. + + + Required. + + + + + Gets or sets the date modified. + + + Required. + + + + + + + + Gets a collection containing the person roles for this item. + + + + + Gets a collection containing the genres for this item. + + + + + + + + Gets a collection containing the ratings for this item. + + + + + Gets a collection containing the metadata sources for this item. + + + + + + + + An entity representing a library. + + + + + Initializes a new instance of the class. + + The name of the library. + The path of the library. + + + + Gets the id. + + + Identity, Indexed, Required. + + + + + Gets or sets the name. + + + Required, Max length = 128. + + + + + Gets or sets the root path of the library. + + + Required. + + + + + + + + + + + An entity representing a library item. + + + + + Initializes a new instance of the class. + + The library of this item. + + + + Gets the id. + + + Identity, Indexed, Required. + + + + + Gets the date this library item was added. + + + + + + + + Gets or sets the library of this item. + + + Required. + + + + + + + + An entity representing a file on disk. + + + + + Initializes a new instance of the class. + + The path relative to the LibraryRoot. + The file kind. + + + + Gets the id. + + + Identity, Indexed, Required. + + + + + Gets or sets the path relative to the library root. + + + Required, Max length = 65535. + + + + + Gets or sets the kind of media file. + + + Required. + + + + + + + + Gets a collection containing the streams in this file. + + + + + + + + An entity representing a stream in a media file. + + + + + Initializes a new instance of the class. + + The number of this stream. + + + + Gets the id. + + + Identity, Indexed, Required. + + + + + Gets or sets the stream number. + + + Required. + + + + + + + + + + + An entity representing a metadata provider. + + + + + Initializes a new instance of the class. + + The name of the metadata provider. + + + + Gets the id. + + + Identity, Indexed, Required. + + + + + Gets or sets the name. + + + Required, Max length = 1024. + + + + + + + + + + + An entity representing a unique identifier for a metadata provider. + + + + + Initializes a new instance of the class. + + The provider id. + The metadata provider. + + + + Gets the id. + + + Identity, Indexed, Required. + + + + + Gets or sets the provider id. + + + Required, Max length = 255. + + + + + + + + Gets or sets the metadata provider. + + + Required. + + + + + + + + An entity representing a movie. + + + + + Initializes a new instance of the class. + + The library. + + + + + + + Gets a collection containing the metadata for this movie. + + + + + An entity holding the metadata for a movie. + + + + + Initializes a new instance of the class. + + The title or name of the movie. + ISO-639-3 3-character language codes. + + + + Gets or sets the outline. + + + Max length = 1024. + + + + + Gets or sets the tagline. + + + Max length = 1024. + + + + + Gets or sets the plot. + + + Max length = 65535. + + + + + Gets or sets the country code. + + + Max length = 2. + + + + + Gets the studios that produced this movie. + + + + + + + + An entity representing a music album. + + + + + Initializes a new instance of the class. + + The library. + + + + Gets a collection containing the album metadata. + + + + + Gets a collection containing the tracks. + + + + + An entity holding the metadata for a music album. + + + + + Initializes a new instance of the class. + + The title or name of the album. + ISO-639-3 3-character language codes. + + + + Gets or sets the barcode. + + + Max length = 255. + + + + + Gets or sets the label number. + + + Max length = 255. + + + + + Gets or sets the country code. + + + Max length = 2. + + + + + Gets a collection containing the labels. + + + + + An entity representing a person. + + + + + Initializes a new instance of the class. + + The name of the person. + + + + Gets the id. + + + Identity, Indexed, Required. + + + + + Gets or sets the name. + + + Required, Max length = 1024. + + + + + Gets or sets the source id. + + + Max length = 255. + + + + + Gets the date added. + + + Required. + + + + + Gets or sets the date modified. + + + Required. + + + + + + + + Gets a list of metadata sources for this person. + + + + + + + + An entity representing a person's role in media. + + + + + Initializes a new instance of the class. + + The role type. + The person. + + + + Gets the id. + + + Identity, Indexed, Required. + + + + + Gets or sets the name of the person's role. + + + Max length = 1024. + + + + + Gets or sets the person's role type. + + + Required. + + + + + + + + Gets or sets the person. + + + Required. + + + + + + + + Gets a collection containing the metadata sources for this person role. + + + + + + + + An entity representing a photo. + + + + + Initializes a new instance of the class. + + The library. + + + + Gets a collection containing the photo metadata. + + + + + + + + An entity that holds metadata for a photo. + + + + + Initializes a new instance of the class. + + The title or name of the photo. + ISO-639-3 3-character language codes. + + + + An entity representing a rating for an entity. + + + + + Initializes a new instance of the class. + + The value. + + + + Gets the id. + + + Identity, Indexed, Required. + + + + + Gets or sets the value. + + + Required. + + + + + Gets or sets the number of votes. + + + + + + + + Gets or sets the rating type. + If this is null it's the internal user rating. + + + + + + + + This is the entity to store review ratings, not age ratings. + + + + + Initializes a new instance of the class. + + The minimum value. + The maximum value. + + + + Gets the id. + + + Identity, Indexed, Required. + + + + + Gets or sets the name. + + + Max length = 1024. + + + + + Gets or sets the minimum value. + + + Required. + + + + + Gets or sets the maximum value. + + + Required. + + + + + + + + Gets or sets the metadata source. + + + + + + + + An entity representing a release for a library item, eg. Director's cut vs. standard. + + + + + Initializes a new instance of the class. + + The name of this release. + + + + Gets the id. + + + Identity, Indexed, Required. + + + + + Gets or sets the name. + + + Required, Max length = 1024. + + + + + + + + Gets a collection containing the media files for this release. + + + + + Gets a collection containing the chapters for this release. + + + + + + + + An entity representing a season. + + + + + Initializes a new instance of the class. + + The library. + + + + Gets or sets the season number. + + + + + Gets the season metadata. + + + + + Gets a collection containing the number of episodes. + + + + + An entity that holds metadata for seasons. + + + + + Initializes a new instance of the class. + + The title or name of the object. + ISO-639-3 3-character language codes. + + + + Gets or sets the outline. + + + Max length = 1024. + + + + + An entity representing a series. + + + + + Initializes a new instance of the class. + + The library. + + + + Gets or sets the days of week. + + + + + Gets or sets the time the show airs, ignore the date portion. + + + + + Gets or sets the date the series first aired. + + + + + Gets a collection containing the series metadata. + + + + + Gets a collection containing the seasons. + + + + + An entity representing series metadata. + + + + + Initializes a new instance of the class. + + The title or name of the object. + ISO-639-3 3-character language codes. + + + + Gets or sets the outline. + + + Max length = 1024. + + + + + Gets or sets the plot. + + + Max length = 65535. + + + + + Gets or sets the tagline. + + + Max length = 1024. + + + + + Gets or sets the country code. + + + Max length = 2. + + + + + Gets a collection containing the networks. + + + + + + + + An entity representing a track. + + + + + Initializes a new instance of the class. + + The library. + + + + Gets or sets the track number. + + + + + + + + Gets a collection containing the track metadata. + + + + + An entity holding metadata for a track. + + + + + Initializes a new instance of the class. + + The title or name of the object. + ISO-639-3 3-character language codes. + + + + An entity representing the metadata for a group of trickplay tiles. + + + + + Gets or sets the id of the media segment. + + + + + Gets or sets the id of the associated item. + + + + + Gets or sets the Type of content this segment defines. + + + + + Gets or sets the end of the segment. + + + + + Gets or sets the start of the segment. + + + + + Gets or sets Id of the media segment provider this entry originates from. + + + + + Enum MediaStreamType. + + + + + The audio. + + + + + The video. + + + + + The subtitle. + + + + + The embedded image. + + + + + The data. + + + + + The lyric. + + + + + People entity. + + + + + Gets or Sets the PeopleId. + + + + + Gets or Sets the Persons Name. + + + + + Gets or Sets the Type. + + + + + Gets or Sets the mapping of People to BaseItems. + + + + + Mapping table for People to BaseItems. + + + + + Gets or Sets the SortOrder. + + + + + Gets or Sets the ListOrder. + + + + + Gets or Sets the Role name the associated actor played in the . + + + + + Gets or Sets The ItemId. + + + + + Gets or Sets Reference Item. + + + + + Gets or Sets The PeopleId. + + + + + Gets or Sets Reference People. + + + + + An entity representing whether the associated user has a specific permission. + + + + + Initializes a new instance of the class. + Public constructor with required data. + + The permission kind. + The value of this permission. + + + + Gets the id of this permission. + + + Identity, Indexed, Required. + + + + + Gets or sets the id of the associated user. + + + + + Gets the type of this permission. + + + Required. + + + + + Gets or sets a value indicating whether the associated user has this permission. + + + Required. + + + + + + + + + + + An entity representing a preference attached to a user or group. + + + + + Initializes a new instance of the class. + Public constructor with required data. + + The preference kind. + The value. + + + + Gets the id of this preference. + + + Identity, Indexed, Required. + + + + + Gets or sets the id of the associated user. + + + + + Gets the type of this preference. + + + Required. + + + + + Gets or sets the value of this preference. + + + Required, Max length = 65535. + + + + + + + + + + + Lists types of Audio. + + + + + Mono. + + + + + Stereo. + + + + + Dolby. + + + + + DolbyDigital. + + + + + Thx. + + + + + Atmos. + + + + + An entity representing an API key. + + + + + Initializes a new instance of the class. + + The name. + + + + Gets the id. + + + Identity, Indexed, Required. + + + + + Gets or sets the date created. + + + + + Gets or sets the date of last activity. + + + + + Gets or sets the name. + + + + + Gets or sets the access token. + + + + + An entity representing a device. + + + + + Initializes a new instance of the class. + + The user id. + The app name. + The app version. + The device name. + The device id. + + + + Gets the id. + + + + + Gets the user id. + + + + + Gets or sets the access token. + + + + + Gets or sets the app name. + + + + + Gets or sets the app version. + + + + + Gets or sets the device name. + + + + + Gets or sets the device id. + + + + + Gets or sets a value indicating whether this device is active. + + + + + Gets or sets the date created. + + + + + Gets or sets the date modified. + + + + + Gets or sets the date of last activity. + + + + + Gets the user. + + + + + An entity representing custom options for a device. + + + + + Initializes a new instance of the class. + + The device id. + + + + Gets the id. + + + + + Gets the device id. + + + + + Gets or sets the custom name. + + + + + An entity representing the metadata for a group of trickplay tiles. + + + + + Gets or sets the id of the associated item. + + + Required. + + + + + Gets or sets width of an individual thumbnail. + + + Required. + + + + + Gets or sets height of an individual thumbnail. + + + Required. + + + + + Gets or sets amount of thumbnails per row. + + + Required. + + + + + Gets or sets amount of thumbnails per column. + + + Required. + + + + + Gets or sets total amount of non-black thumbnails. + + + Required. + + + + + Gets or sets interval in milliseconds between each trickplay thumbnail. + + + Required. + + + + + Gets or sets peak bandwidth usage in bits per second. + + + Required. + + + + + An entity representing a user. + + + + + Initializes a new instance of the class. + Public constructor with required data. + + The username for the new user. + The Id of the user's authentication provider. + The Id of the user's password reset provider. + + + + Gets or sets the Id of the user. + + + Identity, Indexed, Required. + + + + + Gets or sets the user's name. + + + Required, Max length = 255. + + + + + Gets or sets the user's password, or null if none is set. + + + Max length = 65535. + + + + + Gets or sets a value indicating whether the user must update their password. + + + Required. + + + + + Gets or sets the audio language preference. + + + Max length = 255. + + + + + Gets or sets the authentication provider id. + + + Required, Max length = 255. + + + + + Gets or sets the password reset provider id. + + + Required, Max length = 255. + + + + + Gets or sets the invalid login attempt count. + + + Required. + + + + + Gets or sets the last activity date. + + + + + Gets or sets the last login date. + + + + + Gets or sets the number of login attempts the user can make before they are locked out. + + + + + Gets or sets the maximum number of active sessions the user can have at once. + + + + + Gets or sets the subtitle mode. + + + Required. + + + + + Gets or sets a value indicating whether the default audio track should be played. + + + Required. + + + + + Gets or sets the subtitle language preference. + + + Max length = 255. + + + + + Gets or sets a value indicating whether missing episodes should be displayed. + + + Required. + + + + + Gets or sets a value indicating whether to display the collections view. + + + Required. + + + + + Gets or sets a value indicating whether the user has a local password. + + + Required. + + + + + Gets or sets a value indicating whether the server should hide played content in "Latest". + + + Required. + + + + + Gets or sets a value indicating whether to remember audio selections on played content. + + + Required. + + + + + Gets or sets a value indicating whether to remember subtitle selections on played content. + + + Required. + + + + + Gets or sets a value indicating whether to enable auto-play for the next episode. + + + Required. + + + + + Gets or sets a value indicating whether the user should auto-login. + + + Required. + + + + + Gets or sets a value indicating whether the user can change their preferences. + + + Required. + + + + + Gets or sets the maximum parental rating score. + + + + + Gets or sets the maximum parental rating sub score. + + + + + Gets or sets the remote client bitrate limit. + + + + + Gets or sets the internal id. + This is a temporary stopgap for until the library db is migrated. + This corresponds to the value of the index of this user in the library db. + + + + + Gets or sets the user's profile image. Can be null. + + + + + Gets the user's display preferences. + + + + + Gets or sets the level of sync play permissions this user has. + + + + + Gets or sets the cast receiver id. + + + + + + + + Gets the list of access schedules this user has. + + + + + Gets the list of item display preferences. + + + + + Gets the list of permissions this user has. + + + + + Gets the list of preferences this user has. + + + + + + + + Provides and related data. + + + + + Gets or sets the custom data key. + + The rating. + + + + Gets or sets the users 0-10 rating. + + The rating. + + + + Gets or sets the playback position ticks. + + The playback position ticks. + + + + Gets or sets the play count. + + The play count. + + + + Gets or sets a value indicating whether this instance is favorite. + + true if this instance is favorite; otherwise, false. + + + + Gets or sets the last played date. + + The last played date. + + + + Gets or sets a value indicating whether this is played. + + true if played; otherwise, false. + + + + Gets or sets the index of the audio stream. + + The index of the audio stream. + + + + Gets or sets the index of the subtitle stream. + + The index of the subtitle stream. + + + + Gets or sets a value indicating whether the item is liked or not. + This should never be serialized. + + null if [likes] contains no value, true if [likes]; otherwise, false. + + + + Gets or Sets the date the referenced has been deleted. + + + + + Gets or sets the key. + + The key. + + + + Gets or Sets the BaseItem. + + + + + Gets or Sets the UserId. + + + + + Gets or Sets the User. + + + + + An enum representing types of art. + + + + + Another type of art, not covered by the other members. + + + + + A poster. + + + + + A banner. + + + + + A thumbnail. + + + + + A logo. + + + + + An enum representing the version of Chromecast to be used by clients. + + + + + Stable Chromecast version. + + + + + Unstable Chromecast version. + + + + + An enum that represents a day of the week, weekdays, weekends, or all days. + + + + + Sunday. + + + + + Monday. + + + + + Tuesday. + + + + + Wednesday. + + + + + Thursday. + + + + + Friday. + + + + + Saturday. + + + + + All days of the week. + + + + + A week day, or Monday-Friday. + + + + + Saturday and Sunday. + + + + + An enum representing the different options for the home screen sections. + + + + + None. + + + + + My Media. + + + + + My Media Small. + + + + + Active Recordings. + + + + + Continue Watching. + + + + + Continue Listening. + + + + + Latest Media. + + + + + Next Up. + + + + + Live TV. + + + + + Continue Reading. + + + + + An enum representing a type of indexing in a user's display preferences. + + + + + Index by the premiere date. + + + + + Index by the production year. + + + + + Index by the community rating. + + + + + An enum representing the type of media file. + + + + + The main file. + + + + + A sidecar file. + + + + + An additional part to the main file. + + + + + An alternative format to the main file. + + + + + An additional stream for the main file. + + + + + Defines the types of content an individual represents. + + + + + Default media type or custom one. + + + + + Commercial. + + + + + Preview. + + + + + Recap. + + + + + Outro. + + + + + Intro. + + + + + The types of user permissions. + + + + + Whether the user is an administrator. + + + + + Whether the user is hidden. + + + + + Whether the user is disabled. + + + + + Whether the user can control shared devices. + + + + + Whether the user can access the server remotely. + + + + + Whether the user can manage live tv. + + + + + Whether the user can access live tv. + + + + + Whether the user can play media. + + + + + Whether the server should transcode audio for the user if requested. + + + + + Whether the server should transcode video for the user if requested. + + + + + Whether the user can delete content. + + + + + Whether the user can download content. + + + + + Whether to enable sync transcoding for the user. + + + + + Whether the user can do media conversion. + + + + + Whether the user has access to all devices. + + + + + Whether the user has access to all channels. + + + + + Whether the user has access to all folders. + + + + + Whether to enable public sharing for the user. + + + + + Whether the user can remotely control other users. + + + + + Whether the user is permitted to do playback remuxing. + + + + + Whether the server should force transcoding on remote connections for the user. + + + + + Whether the user can create, modify and delete collections. + + + + + Whether the user can edit subtitles. + + + + + Whether the user can edit lyrics. + + + + + An enum representing a person's role in a specific media item. + + + + + Another role, not covered by the other types. + + + + + The director of the media. + + + + + An artist. + + + + + The original artist. + + + + + An actor. + + + + + A voice actor. + + + + + A producer. + + + + + A remixer. + + + + + A conductor. + + + + + A composer. + + + + + An author. + + + + + An editor. + + + + + The types of user preferences. + + + + + A list of blocked tags. + + + + + A list of blocked channels. + + + + + A list of blocked media folders. + + + + + A list of enabled devices. + + + + + A list of enabled channels. + + + + + A list of enabled folders. + + + + + A list of folders to allow content deletion from. + + + + + A list of latest items to exclude. + + + + + A list of media to exclude. + + + + + A list of grouped folders. + + + + + A list of unrated items to block. + + + + + A list of ordered views. + + + + + A list of allowed tags. + + + + + An enum representing the axis that should be scrolled. + + + + + Horizontal scrolling direction. + + + + + Vertical scrolling direction. + + + + + An enum representing the sorting order. + + + + + Sort in increasing order. + + + + + Sort in decreasing order. + + + + + An enum representing a subtitle playback mode. + + + + + The default subtitle playback mode. + + + + + Always show subtitles. + + + + + Only show forced subtitles. + + + + + Don't show subtitles. + + + + + Only show subtitles when the current audio stream is in a different language. + + + + + Enum SyncPlayUserAccessType. + + + + + User can create groups and join them. + + + + + User can only join already existing groups. + + + + + SyncPlay is disabled for the user. + + + + + An enum representing the type of view for a library or collection. + + + + + Shows albums. + + + + + Shows album artists. + + + + + Shows artists. + + + + + Shows channels. + + + + + Shows collections. + + + + + Shows episodes. + + + + + Shows favorites. + + + + + Shows genres. + + + + + Shows guide. + + + + + Shows movies. + + + + + Shows networks. + + + + + Shows playlists. + + + + + Shows programs. + + + + + Shows recordings. + + + + + Shows schedule. + + + + + Shows series. + + + + + Shows shows. + + + + + Shows songs. + + + + + Shows songs. + + + + + Shows trailers. + + + + + Shows upcoming. + + + + + Defines the type and extension points for multi database support. + + + + + Gets or Sets the Database Factory when initialisaition is done. + + + + + Initialises jellyfins EFCore database access. + + The EFCore database options. + The Jellyfin database options. + + + + Will be invoked when EFCore wants to build its model. + + The ModelBuilder from EFCore. + + + + Will be invoked when EFCore wants to configure its model. + + The ModelConfigurationBuilder from EFCore. + + + + If supported this should run any periodic maintaince tasks. + + The token to abort the operation. + A representing the asynchronous operation. + + + + If supported this should perform any actions that are required on stopping the jellyfin server. + + The token that will be used to abort the operation. + A representing the asynchronous operation. + + + + Runs a full Database backup that can later be restored to. + + A cancellation token. + A key to identify the backup. + May throw an NotImplementException if this operation is not supported for this database. + + + + Restores a backup that has been previously created by . + + The key to the backup from which the current database should be restored from. + A cancellation token. + A representing the result of the asynchronous operation. + + + + Deletes a backup that has been previously created by . + + The key to the backup which should be cleaned up. + A representing the result of the asynchronous operation. + + + + Removes all contents from the database. + + The Database context. + The names of the tables to purge or null for all tables to be purged. + A Task. + + + + An interface abstracting an entity that has artwork. + + + + + Gets a collection containing this entity's artwork. + + + + + An abstraction representing an entity that has companies. + + + + + Gets a collection containing this entity's companies. + + + + + An interface abstracting an entity that has a concurrency token. + + + + + Gets the version of this row. Acts as a concurrency token. + + + + + Called when saving changes to this entity. + + + + + An abstraction representing an entity that has permissions. + + + + + Gets a collection containing this entity's permissions. + + + + + An abstraction representing an entity that has releases. + + + + + Gets a collection containing this entity's releases. + + + + + Defines the key of the database provider. + + + + + Initializes a new instance of the class. + + The key on which to identify the annotated provider. + + + + Gets the key on which to identify the annotated provider. + + + + + + Initializes a new instance of the class. + + The database context options. + Logger. + The provider for the database engine specific operations. + The locking behavior. + + + + + Initializes a new instance of the class. + + The database context options. + Logger. + The provider for the database engine specific operations. + The locking behavior. + + + + Gets the containing the access schedules. + + + + + Gets the containing the activity logs. + + + + + Gets the containing the API keys. + + + + + Gets the containing the devices. + + + + + Gets the containing the device options. + + + + + Gets the containing the display preferences. + + + + + Gets the containing the image infos. + + + + + Gets the containing the item display preferences. + + + + + Gets the containing the custom item display preferences. + + + + + Gets the containing the permissions. + + + + + Gets the containing the preferences. + + + + + Gets the containing the users. + + + + + Gets the containing the trickplay metadata. + + + + + Gets the containing the media segments. + + + + + Gets the containing the user data. + + + + + Gets the containing the user data. + + + + + Gets the containing the user data. + + + + + Gets the containing the user data. + + + + + Gets the containing the user data. + + + + + Gets the . + + + + + Gets the . + + + + + Gets the . + + + + + Gets the . + + + + + Gets the . + + + + + Gets the containing the referenced Providers with ids. + + + + + Gets the . + + + + + Gets the . + + + + + Gets the . + + + + + Gets the . + + + + + + + + + + + + + + + + + Contains a number of query related extensions. + + + + + Builds an optimised query checking one property against a list of values while maintaining an optimal query. + + The entity. + The property type to compare. + The source query. + The list of items to check. + Property expression. + A Query. + + + + Builds a query that checks referenced ItemValues for a cross BaseItem lookup. + + The source query. + The database context. + The type of item value to reference. + The list of BaseItem ids to check matches. + If set an exclusion check is performed instead. + A Query. + + + + Builds a query that checks referenced ItemValues for a cross BaseItem lookup. + + The source query. + The database context. + The type of item value to reference. + The list of BaseItem ids to check matches. + If set an exclusion check is performed instead. + A Query. + + + + Builds a query expression that checks referenced ItemValues for a cross BaseItem lookup. + + The database context. + The type of item value to reference. + The list of BaseItem ids to check matches. + If set an exclusion check is performed instead. + A Query. + + + + Builds an optimised query expression checking one property against a list of values while maintaining an optimal query. + + The entity. + The property type to compare. + The list of items to check. + Property expression. + A Query. + + + + Defines a jellyfin locking behavior that can be configured. + + + + + Provides access to the builder to setup any connection related locking behavior. + + The options builder. + + + + Will be invoked when changes should be saved in the current locking behavior. + + The database context invoking the action. + Callback for performing the actual save changes. + + + + Will be invoked when changes should be saved in the current locking behavior. + + The database context invoking the action. + Callback for performing the actual save changes. + A representing the asynchronous operation. + + + + Default lock behavior. Defines no explicit application locking behavior. + + + + + Initializes a new instance of the class. + + The Application logger. + + + + + + + + + + + + + Defines a locking mechanism that will retry any write operation for a few times. + + + + + Initializes a new instance of the class. + + The application logger. + + + + + + + + + + + + + A locking behavior that will always block any operation while a write is requested. Mimicks the old SqliteRepository behavior. + + + + + Initializes a new instance of the class. + + The application logger. + The logger factory. + + + + + + + + + + + + + Adds strict read/write locking. + + + + + FluentAPI configuration for the ActivityLog entity. + + + + + + + + AncestorId configuration. + + + + + + + + FluentAPI configuration for the ApiKey entity. + + + + + + + + FluentAPI configuration for the AttachmentStreamInfo entity. + + + + + + + + Configuration for BaseItem. + + + + + + + + Provides configuration for the BaseItemMetadataField entity. + + + + + + + + BaseItemProvider configuration. + + + + + + + + Provides configuration for the BaseItemMetadataField entity. + + + + + + + + Chapter configuration. + + + + + + + + FluentAPI configuration for the CustomItemDisplayPreferences entity. + + + + + + + + FluentAPI configuration for the Device entity. + + + + + + + + FluentAPI configuration for the DeviceOptions entity. + + + + + + + + FluentAPI configuration for the DisplayPreferencesConfiguration entity. + + + + + + + + itemvalues Configuration. + + + + + + + + itemvalues Configuration. + + + + + + + + KeyframeData Configuration. + + + + + + + + People configuration. + + + + + + + + People configuration. + + + + + + + + People configuration. + + + + + + + + FluentAPI configuration for the Permission entity. + + + + + + + + FluentAPI configuration for the Permission entity. + + + + + + + + FluentAPI configuration for the TrickplayInfo entity. + + + + + + + + FluentAPI configuration for the User entity. + + + + + + + + FluentAPI configuration for the UserData entity. + + + + + + + + Wrapper for progress reporting on Partition helpers. + + The entity to load. + + + + Contains helpers to partition EFCore queries. + + + + + Adds a callback to any directly following calls of Partition for every partition thats been invoked. + + The entity to load. + The source query. + The callback invoked for partition before enumerating items. + The callback invoked for partition after enumerating items. + A queryable that can be used to partition. + + + + Adds a callback to any directly following calls of Partition for every item thats been invoked. + + The entity to load. + The source query. + The callback invoked for each item before processing. + The callback invoked for each item after processing. + A queryable that can be used to partition. + + + + Adds a callback to any directly following calls of Partition for every partition thats been invoked. + + The entity to load. + The source query. + The callback invoked for partition before enumerating items. + The callback invoked for partition after enumerating items. + A queryable that can be used to partition. + + + + Adds a callback to any directly following calls of Partition for every item thats been invoked. + + The entity to load. + The source query. + The callback invoked for each item before processing. + The callback invoked for each item after processing. + A queryable that can be used to partition. + + + + Enumerates the source query by loading the entities in partitions in a lazy manner reading each item from the database as its requested. + + The entity to load. + The source query. + The number of elements to load per partition. + The cancellation token. + A enumerable representing the whole of the query. + + + + Enumerates the source query by loading the entities in partitions directly into memory. + + The entity to load. + The source query. + The number of elements to load per partition. + The cancellation token. + A enumerable representing the whole of the query. + + + + Enumerates the source query by loading the entities in partitions in a lazy manner reading each item from the database as its requested. + + The entity to load. + The source query. + The number of elements to load per partition. + Reporting helper. + The cancellation token. + A enumerable representing the whole of the query. + + + + Enumerates the source query by loading the entities in partitions directly into memory. + + The entity to load. + The source query. + The number of elements to load per partition. + Reporting helper. + The cancellation token. + A enumerable representing the whole of the query. + + + + Adds an Index to the enumeration of the async enumerable. + + The entity to load. + The source query. + The source list with an index added. + + + diff --git a/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Extensions.dll b/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Extensions.dll new file mode 100644 index 0000000000000000000000000000000000000000..ffee01b041bdf9db5c181c44f901a3ab03bd1694 GIT binary patch literal 33280 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 B6UqPp literal 0 HcmV?d00001 diff --git a/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Extensions.pdb b/MediaBrowser.Model/bin/Debug/net10.0/Jellyfin.Extensions.pdb new file mode 100644 index 0000000000000000000000000000000000000000..b879446fea39640411517fc16331bedf629ff770 GIT binary patch literal 26092 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⁢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 + + + Jellyfin.Extensions + + + + + Provides CopyTo extensions methods for . + + + + + Copies all the elements of the current collection to the specified list + starting at the specified destination array index. The index is specified as a 32-bit integer. + + The current collection that is the source of the elements. + The list that is the destination of the elements copied from the current collection. + A 32-bit integer that represents the index in destination at which copying begins. + The type of the array. + + + + Static extensions for the interface. + + + + + Gets a string from a string dictionary, checking all keys sequentially, + stopping at the first key that returns a result that's neither null nor blank. + + The dictionary. + The first checked key. + The second checked key. + The third checked key. + The fourth checked key. + System.String. + + + + Static extensions for the interface. + + + + + Determines whether the value is contained in the source collection. + + An instance of the interface. + The value to look for in the collection. + The string comparison. + A value indicating whether the value is contained in the collection. + The source is null. + + + + Gets an IEnumerable from a single item. + + The item to return. + The type of item. + The IEnumerable{T}. + + + + Gets an IEnumerable consisting of all flags of an enum. + + The flags enum. + The type of item. + The IEnumerable{Enum}. + + + + Provides helper functions for . + + + + + Creates, or truncates a file in the specified path. + + The path and name of the file to create. + + + + A custom StreamWriter which supports setting a IFormatProvider. + + + + + Initializes a new instance of the class. + + The stream to write to. + The format provider to use. + + + + Initializes a new instance of the class. + + The complete file path to write to. + The format provider to use. + + + + + + + Guid specific extensions. + + + + + Determine whether the guid is default. + + The guid. + Whether the guid is the default value. + + + + Determine whether the guid is null or default. + + The guid. + Whether the guid is null or the default valueF. + + + + Converts a number to a boolean. + This is needed for HDHomerun. + + + + + + + + + + + Converts a string to a boolean. + This is needed for FFprobe. + + + + + + + + + + + Convert comma delimited string to collection of type. + + Type to convert to. + + + + Initializes a new instance of the class. + + + + + + + + Json comma delimited collection converter factory. + + + This must be applied as an attribute, adding to the JsonConverter list causes stack overflow. + + + + + + + + + + + Legacy DateTime converter. + Milliseconds aren't output if zero by default. + + + + + + + + + + + Json unknown enum converter. + + The type of enum. + + + + Initializes a new instance of the class. + + The base json converter. + + + + + + + + + + Utilizes the JsonStringEnumConverter and sets a default value if not provided. + + + + + + + + + + + Convert delimited string to array of type. + + Type to convert to. + + + + Initializes a new instance of the class. + + + + + Gets the array delimiter. + + + + + + + + + + + Enum flag to json array converter. + + The type of enum. + + + + + + + + + + Json flag enum converter factory. + + + + + + + + + + + Converts a GUID object or value to/from JSON. + + + + + + + + + + + Converts a GUID object or value to/from JSON. + + + + + + + + + + + Converts a nullable struct or value to/from JSON. + Required - some clients send an empty string. + + The struct type. + + + + + + + + + + Json nullable struct converter factory. + + + + + + + + + + + Convert Pipe delimited string to array of type. + + Type to convert to. + + + + Initializes a new instance of the class. + + + + + + + + Json Pipe delimited collection converter factory. + + + This must be applied as an attribute, adding to the JsonConverter list causes stack overflow. + + + + + + + + + + + Converter to allow the serializer to read strings. + + + + + + + + + + + Converts a Version object or value to/from JSON. + + + Required to send as a string instead of an object. + + + + + + + + + + + Helper class for having compatible JSON throughout the codebase. + + + + + Pascal case json profile media type. + + + + + Camel case json profile media type. + + + + + When changing these options, update + Jellyfin.Server/Extensions/ApiServiceCollectionExtensions.cs + -> AddJellyfinApi + -> AddJsonOptions. + + + + + Gets the default options. + + + The return value must not be modified. + If the defaults must be modified the author must use the copy constructor. + + The default options. + + + + Gets camelCase json options. + + + The return value must not be modified. + If the defaults must be modified the author must use the copy constructor. + + The camelCase options. + + + + Gets PascalCase json options. + + + The return value must not be modified. + If the defaults must be modified the author must use the copy constructor. + + The PascalCase options. + + + + Extensions for Utf8JsonReader and Utf8JsonWriter. + + + + + Determines if the reader contains an empty string. + + The reader. + Whether the reader contains an empty string. + + + + Determines if the reader contains a null value. + + The reader. + Whether the reader contains null. + + + + Static extensions for the interface. + + + + + Finds the index of the desired item. + + The source list. + The value to fine. + The type of item to find. + Index if found, else -1. + + + + Finds the index of the predicate. + + The source list. + The value to find. + The type of item to find. + Index if found, else -1. + + + + Get the first or default item from a list. + + The source list. + The type of item. + The first item or default if list is empty. + + + + Provides Shuffle extensions methods for . + + + + + Shuffles the items in a list. + + The list that should get shuffled. + The type. + + + + Shuffles the items in a list. + + The list that should get shuffled. + The random number generator to use. + The type. + + + + Extension class for splitting lines without unnecessary allocations. + + + + + Creates a new string split enumerator. + + The string to split. + The separator to split on. + The enumerator struct. + + + + Creates a new span split enumerator. + + The span to split. + The separator to split on. + The enumerator struct. + + + + Provides an enumerator for the substrings separated by the separator. + + + + + Initializes a new instance of the struct. + + The span to split. + The separator to split on. + + + + Gets a reference to the item at the current position of the enumerator. + + + + + Returns this. + + this. + + + + Advances the enumerator to the next item. + + true if there is a next element; otherwise false. + + + + Class BaseExtensions. + + + + + Reads all lines in the . + + The to read from. + All lines in the stream. + + + + Reads all lines in the . + + The to read from. + The character encoding to use. + All lines in the stream. + + + + Reads all lines in the . + + The to read from. + All lines in the stream. + + + + Reads all lines in the . + + The to read from. + The token to monitor for cancellation requests. + All lines in the stream. + + + + Extension methods for the class. + + + + + Concatenates and appends the members of a collection in single quotes using the specified delimiter. + + The string builder. + The character delimiter. + The collection of strings to concatenate. + The updated string builder. + + + + Provides extensions methods for . + + + Checks whether or not the specified string has diacritics in it. + + + + + Removes the diacritics character from the strings. + + The string to act on. + The string without diacritics character. + + + + Checks whether or not the specified string has diacritics in it. + + The string to check. + True if the string has diacritics, false otherwise. + + + + Counts the number of occurrences of [needle] in the string. + + The haystack to search in. + The character to search for. + The number of occurrences of the [needle] character. + + + + Returns the part on the left of the needle. + + The string to seek. + The needle to find. + The part left of the . + + + + Returns the part on the right of the needle. + + The string to seek. + The needle to find. + The part right of the . + + + + Returns a transliterated string which only contain ascii characters. + + The string to act on. + The transliterated string. + + + + Ensures all strings are non-null and trimmed of leading an trailing blanks. + + The enumerable of strings to trim. + The enumeration of trimmed strings. + + + + Truncates a string at the first null character ('\0'). + + The input string. + + The substring up to (but not including) the first null character, + or the original string if no null character is present. + + + + + Pattern:
+ ([\ud800-\udbff](?![\udc00-\udfff]))|((?<![\ud800-\udbff])[\udc00-\udfff])|(�)
+ Explanation:
+ + ○ Match with 3 alternative expressions, atomically.
+ ○ 1st capture group.
+ ○ Match a character in the set [\uD800-\uDBFF].
+ ○ Zero-width negative lookahead.
+ ○ Match a character in the set [\uDC00-\uDFFF].
+ ○ 2nd capture group.
+ ○ Zero-width negative lookbehind.
+ ○ Match a character in the set [\uD800-\uDBFF] right-to-left.
+ ○ Match a character in the set [\uDC00-\uDFFF].
+ ○ 3rd capture group.
+ ○ Match '�'.
+
+
+
+ + Custom -derived type for the NonConformingUnicodeRegex method. + + + Cached, thread-safe singleton instance. + + + Initializes the instance. + + + Provides a factory for creating instances to be used by methods on . + + + Creates an instance of a used by methods on . + + + Provides the runner that contains the custom logic implementing the specified regular expression. + + + Scan the starting from base.runtextstart for the next match. + The text being scanned by the regular expression. + + + Search starting from base.runtextpos for the next location a match could possibly start. + The text being scanned by the regular expression. + true if a possible match was found; false if no more matches are possible. + + + Determine whether at base.runtextpos is a match for the regular expression. + The text being scanned by the regular expression. + true if the regular expression matches at the current position; otherwise, false. + + + Helper methods used by generated -derived implementations. + + + Default timeout value set in , or if none was set. + + + Whether is non-infinite. + + + Finds the next index of any character that matches a character in the set [\uD800-\uDFFF\uFFFD]. + +
+
diff --git a/MediaBrowser.Model/bin/Debug/net10.0/MediaBrowser.Model.deps.json b/MediaBrowser.Model/bin/Debug/net10.0/MediaBrowser.Model.deps.json new file mode 100644 index 00000000..0b795579 --- /dev/null +++ b/MediaBrowser.Model/bin/Debug/net10.0/MediaBrowser.Model.deps.json @@ -0,0 +1,396 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v10.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v10.0": { + "MediaBrowser.Model/10.12.0": { + "dependencies": { + "Jellyfin.CodeAnalysis": "1.0.0", + "Jellyfin.Data": "10.12.0", + "Jellyfin.Extensions": "10.12.0", + "Jellyfin.Sdk": "2025.10.21" + }, + "runtime": { + "MediaBrowser.Model.dll": {} + } + }, + "Diacritics/4.1.4": { + "runtime": { + "lib/net9.0/Diacritics.dll": { + "assemblyVersion": "4.1.4.0", + "fileVersion": "4.1.4.0" + } + } + }, + "ICU4N/60.1.0-alpha.356": { + "dependencies": { + "J2N": "2.0.0" + }, + "runtime": { + "lib/netstandard2.0/ICU4N.dll": { + "assemblyVersion": "60.0.0.0", + "fileVersion": "60.1.0.0" + } + } + }, + "ICU4N.Transliterator/60.1.0-alpha.356": { + "dependencies": { + "ICU4N": "60.1.0-alpha.356" + }, + "runtime": { + "lib/netstandard2.0/ICU4N.Transliterator.dll": { + "assemblyVersion": "60.0.0.0", + "fileVersion": "60.1.0.0" + } + } + }, + "J2N/2.0.0": { + "runtime": { + "lib/net6.0/J2N.dll": { + "assemblyVersion": "2.0.0.0", + "fileVersion": "2.0.0.0" + } + } + }, + "Jellyfin.Sdk/2025.10.21": { + "dependencies": { + "Microsoft.Kiota.Abstractions": "1.20.1", + "Microsoft.Kiota.Http.HttpClientLibrary": "1.20.1", + "Microsoft.Kiota.Serialization.Form": "1.20.1", + "Microsoft.Kiota.Serialization.Json": "1.20.1", + "Microsoft.Kiota.Serialization.Multipart": "1.20.1", + "Microsoft.Kiota.Serialization.Text": "1.20.1" + }, + "runtime": { + "lib/net8.0/Jellyfin.Sdk.dll": { + "assemblyVersion": "2025.10.21.0", + "fileVersion": "2025.10.21.0" + } + } + }, + "Microsoft.EntityFrameworkCore/10.0.3": { + "dependencies": { + "Microsoft.EntityFrameworkCore.Abstractions": "10.0.3" + }, + "runtime": { + "lib/net10.0/Microsoft.EntityFrameworkCore.dll": { + "assemblyVersion": "10.0.3.0", + "fileVersion": "10.0.326.7603" + } + } + }, + "Microsoft.EntityFrameworkCore.Abstractions/10.0.3": { + "runtime": { + "lib/net10.0/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "assemblyVersion": "10.0.3.0", + "fileVersion": "10.0.326.7603" + } + } + }, + "Microsoft.EntityFrameworkCore.Relational/10.0.3": { + "dependencies": { + "Microsoft.EntityFrameworkCore": "10.0.3" + }, + "runtime": { + "lib/net10.0/Microsoft.EntityFrameworkCore.Relational.dll": { + "assemblyVersion": "10.0.3.0", + "fileVersion": "10.0.326.7603" + } + } + }, + "Microsoft.Kiota.Abstractions/1.20.1": { + "dependencies": { + "Std.UriTemplate": "2.0.5" + }, + "runtime": { + "lib/net8.0/Microsoft.Kiota.Abstractions.dll": { + "assemblyVersion": "1.20.1.0", + "fileVersion": "1.20.1.0" + } + } + }, + "Microsoft.Kiota.Http.HttpClientLibrary/1.20.1": { + "dependencies": { + "Microsoft.Kiota.Abstractions": "1.20.1" + }, + "runtime": { + "lib/net8.0/Microsoft.Kiota.Http.HttpClientLibrary.dll": { + "assemblyVersion": "1.20.1.0", + "fileVersion": "1.20.1.0" + } + } + }, + "Microsoft.Kiota.Serialization.Form/1.20.1": { + "dependencies": { + "Microsoft.Kiota.Abstractions": "1.20.1" + }, + "runtime": { + "lib/net8.0/Microsoft.Kiota.Serialization.Form.dll": { + "assemblyVersion": "1.20.1.0", + "fileVersion": "1.20.1.0" + } + } + }, + "Microsoft.Kiota.Serialization.Json/1.20.1": { + "dependencies": { + "Microsoft.Kiota.Abstractions": "1.20.1" + }, + "runtime": { + "lib/net8.0/Microsoft.Kiota.Serialization.Json.dll": { + "assemblyVersion": "1.20.1.0", + "fileVersion": "1.20.1.0" + } + } + }, + "Microsoft.Kiota.Serialization.Multipart/1.20.1": { + "dependencies": { + "Microsoft.Kiota.Abstractions": "1.20.1" + }, + "runtime": { + "lib/net8.0/Microsoft.Kiota.Serialization.Multipart.dll": { + "assemblyVersion": "1.20.1.0", + "fileVersion": "1.20.1.0" + } + } + }, + "Microsoft.Kiota.Serialization.Text/1.20.1": { + "dependencies": { + "Microsoft.Kiota.Abstractions": "1.20.1" + }, + "runtime": { + "lib/net8.0/Microsoft.Kiota.Serialization.Text.dll": { + "assemblyVersion": "1.20.1.0", + "fileVersion": "1.20.1.0" + } + } + }, + "Polly/8.6.5": { + "dependencies": { + "Polly.Core": "8.6.5" + }, + "runtime": { + "lib/net6.0/Polly.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.6.5.5194" + } + } + }, + "Polly.Core/8.6.5": { + "runtime": { + "lib/net8.0/Polly.Core.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.6.5.5194" + } + } + }, + "Std.UriTemplate/2.0.5": { + "runtime": { + "lib/net5.0/Std.UriTemplate.dll": { + "assemblyVersion": "2.0.5.0", + "fileVersion": "2.0.5.0" + } + } + }, + "Jellyfin.CodeAnalysis/1.0.0": { + "dependencies": { + "Jellyfin.Sdk": "2025.10.21" + }, + "runtime": { + "Jellyfin.CodeAnalysis.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + }, + "Jellyfin.Data/10.12.0": { + "dependencies": { + "Jellyfin.CodeAnalysis": "1.0.0", + "Jellyfin.Database.Implementations": "10.11.0", + "Jellyfin.Sdk": "2025.10.21" + }, + "runtime": { + "Jellyfin.Data.dll": { + "assemblyVersion": "10.12.0.0", + "fileVersion": "10.12.0.0" + } + } + }, + "Jellyfin.Database.Implementations/10.11.0": { + "dependencies": { + "Jellyfin.CodeAnalysis": "1.0.0", + "Microsoft.EntityFrameworkCore.Relational": "10.0.3", + "Polly": "8.6.5" + }, + "runtime": { + "Jellyfin.Database.Implementations.dll": { + "assemblyVersion": "10.12.0.0", + "fileVersion": "10.12.0.0" + } + } + }, + "Jellyfin.Extensions/10.12.0": { + "dependencies": { + "Diacritics": "4.1.4", + "ICU4N.Transliterator": "60.1.0-alpha.356", + "Jellyfin.CodeAnalysis": "1.0.0", + "Jellyfin.Sdk": "2025.10.21" + }, + "runtime": { + "Jellyfin.Extensions.dll": { + "assemblyVersion": "10.12.0.0", + "fileVersion": "10.12.0.0" + } + } + } + } + }, + "libraries": { + "MediaBrowser.Model/10.12.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Diacritics/4.1.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-9JK2bI+oWnzOK4Lu+5FXt7czofD28AMnZ95np5fkSClqioPnga1JVpjaUxVJaEpc/5HIlfikc6YI33lm2qu4mw==", + "path": "diacritics/4.1.4", + "hashPath": "diacritics.4.1.4.nupkg.sha512" + }, + "ICU4N/60.1.0-alpha.356": { + "type": "package", + "serviceable": true, + "sha512": "sha512-YMZtDnjcqWzziOKiE7w6Ma7Rl5vuFDxzOsUlHh1QyfghbNEIZQOLRs9MMfwCWAjX6n9UitrF6vLXy55Z5q+4Fg==", + "path": "icu4n/60.1.0-alpha.356", + "hashPath": "icu4n.60.1.0-alpha.356.nupkg.sha512" + }, + "ICU4N.Transliterator/60.1.0-alpha.356": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lFOSO6bbEtB6HkWMNDJAq+rFwVyi9g6xVc5O/2xHa6iZnV7wLVDqCbaQ4W4vIeBSQZAafqhxciaEkmAvSdzlCg==", + "path": "icu4n.transliterator/60.1.0-alpha.356", + "hashPath": "icu4n.transliterator.60.1.0-alpha.356.nupkg.sha512" + }, + "J2N/2.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-M5bwDajAARZiyqupU+rHQJnsVLxNBOHJ8vKYHd8LcLIb1FgLfzzcJvc31Qo5Xz/GEHFjDF9ScjKL/ks/zRTXuA==", + "path": "j2n/2.0.0", + "hashPath": "j2n.2.0.0.nupkg.sha512" + }, + "Jellyfin.Sdk/2025.10.21": { + "type": "package", + "serviceable": true, + "sha512": "sha512-1pG60suEiV3v77zqLd5fO9S8m8qryxj9mZYb24Me1XgSXlaCIt0SC1V1sbFKyoG70Q3n915wT4Ko4BUanorRug==", + "path": "jellyfin.sdk/2025.10.21", + "hashPath": "jellyfin.sdk.2025.10.21.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore/10.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CDEImwD4A7BseABJMCpLZnhfFjmPY/bHwhhS70elc6gLI/bYUEOhxWt7PmaNGYGhIEzOnStlCy5QcVb+8dod5Q==", + "path": "microsoft.entityframeworkcore/10.0.3", + "hashPath": "microsoft.entityframeworkcore.10.0.3.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Abstractions/10.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-c7Uoz381xnMHNBRB8eHRhGgzUtXbgddlbODhwZRrTSzZWDharp3RkJsFwhxyESbeXhCqmML7VdvjMQ7uu+HreA==", + "path": "microsoft.entityframeworkcore.abstractions/10.0.3", + "hashPath": "microsoft.entityframeworkcore.abstractions.10.0.3.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Relational/10.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Pmh60OK9neVr/M0FJwm9hlzm2bD4Kd65SID8E6SP5c90tExNgXwORrlEWl0oGU/ig9ifpNN4PSpIrnHNozlT5w==", + "path": "microsoft.entityframeworkcore.relational/10.0.3", + "hashPath": "microsoft.entityframeworkcore.relational.10.0.3.nupkg.sha512" + }, + "Microsoft.Kiota.Abstractions/1.20.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-bv1n2gnxA/O+1a26h3YB6bgcc3ZSLCjRumMh7sVkFmksLaVonhcrJpUrEtBlnnYPrnHwzm/1BYQnYjCVG7A+fA==", + "path": "microsoft.kiota.abstractions/1.20.1", + "hashPath": "microsoft.kiota.abstractions.1.20.1.nupkg.sha512" + }, + "Microsoft.Kiota.Http.HttpClientLibrary/1.20.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-pQzs+9n3QAG/FKFwgIaRE0EqOXfW3rWliOdk9XZbghyRdeAtiQjSbJbpascdZlf7uatLpPYA145q6MYpLxvsgA==", + "path": "microsoft.kiota.http.httpclientlibrary/1.20.1", + "hashPath": "microsoft.kiota.http.httpclientlibrary.1.20.1.nupkg.sha512" + }, + "Microsoft.Kiota.Serialization.Form/1.20.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-n7izb8GZSoatmFSpMaHmh78U3oW+YdYb2gDwhkG86COHuiGWV9s0BKBeUlFakAV00CDwaH9iFqxCQ0veYVkG1A==", + "path": "microsoft.kiota.serialization.form/1.20.1", + "hashPath": "microsoft.kiota.serialization.form.1.20.1.nupkg.sha512" + }, + "Microsoft.Kiota.Serialization.Json/1.20.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4MumZe45DI/o1YP+hq7wyArOHDhjkSiu14ysN4xWKe6vwlu43BUYydA/yT0CtjoPwbFW/6jfx/NVSvM3DzBzbg==", + "path": "microsoft.kiota.serialization.json/1.20.1", + "hashPath": "microsoft.kiota.serialization.json.1.20.1.nupkg.sha512" + }, + "Microsoft.Kiota.Serialization.Multipart/1.20.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-tP7ZxA1zsIi3FE8CHwfA5JnzlW1NYld+LpFihFq+S7IXFDv1x37I968lPKGIdEpWW9vWacuqDQVKIyJiKZ257A==", + "path": "microsoft.kiota.serialization.multipart/1.20.1", + "hashPath": "microsoft.kiota.serialization.multipart.1.20.1.nupkg.sha512" + }, + "Microsoft.Kiota.Serialization.Text/1.20.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Cue4l9AeU0WgL2CdUW8K58BMwQOyiHgT7aCov2qGEKpmpeWQj7cmAWCgxDfPHYPkZtz1Ccbrw4/6KrDgCmrC3Q==", + "path": "microsoft.kiota.serialization.text/1.20.1", + "hashPath": "microsoft.kiota.serialization.text.1.20.1.nupkg.sha512" + }, + "Polly/8.6.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-VqtW2ZE/ALvQMAH1cQY3qZ2cF2OXa3oe/HKMdOv6Q02HCoEW0rsFNfcBONXlHBe1TnjWW1vdRxBEkPeq0/2FHA==", + "path": "polly/8.6.5", + "hashPath": "polly.8.6.5.nupkg.sha512" + }, + "Polly.Core/8.6.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-t+sUVrIwvo7UmsgHGgOG9F0GDZSRIm47u2ylH17Gvcv1q5hNEwgD5GoBlFyc0kh/pebmPyrAgvGsR/65ZBaXlg==", + "path": "polly.core/8.6.5", + "hashPath": "polly.core.8.6.5.nupkg.sha512" + }, + "Std.UriTemplate/2.0.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-PtqPdWNBObRcDHjyjbgOz2XoCJQaiA+HNDPQve/O7yGCkospfHDCuH9ULVx1msImwHHG+uhpDjiZX7bpLN/cnw==", + "path": "std.uritemplate/2.0.5", + "hashPath": "std.uritemplate.2.0.5.nupkg.sha512" + }, + "Jellyfin.CodeAnalysis/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Jellyfin.Data/10.12.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Jellyfin.Database.Implementations/10.11.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Jellyfin.Extensions/10.12.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/MediaBrowser.Model/bin/Debug/net10.0/MediaBrowser.Model.dll b/MediaBrowser.Model/bin/Debug/net10.0/MediaBrowser.Model.dll new file mode 100644 index 0000000000000000000000000000000000000000..bc316172531d898e568da28e86ce4f604f85ace0 GIT binary patch literal 505344 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
DjgBFQ&$ad^}FL@T+Djyvc=MGs({3{kv{5w#FL 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 }mp9injeU4Y_ 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
-`IFEy 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 RG7yb@WHPH>8;^8N{{Oj0Fna(1 literal 0 HcmV?d00001 diff --git a/MediaBrowser.Model/bin/Debug/net10.0/MediaBrowser.Model.xml b/MediaBrowser.Model/bin/Debug/net10.0/MediaBrowser.Model.xml new file mode 100644 index 00000000..31749655 --- /dev/null +++ b/MediaBrowser.Model/bin/Debug/net10.0/MediaBrowser.Model.xml @@ -0,0 +1,11272 @@ + + + + MediaBrowser.Model + + + + + An activity log entry. + + + + + Initializes a new instance of the class. + + The name. + The type. + The user id. + + + + Gets or sets the identifier. + + The identifier. + + + + Gets or sets the name. + + The name. + + + + Gets or sets the overview. + + The overview. + + + + Gets or sets the short overview. + + The short overview. + + + + Gets or sets the type. + + The type. + + + + Gets or sets the item identifier. + + The item identifier. + + + + Gets or sets the date. + + The date. + + + + Gets or sets the user identifier. + + The user identifier. + + + + Gets or sets the user primary image tag. + + The user primary image tag. + + + + Gets or sets the log severity. + + The log severity. + + + + Interface for the activity manager. + + + + + The event that is triggered when an entity is created. + + + + + Create a new activity log entry. + + The entry to create. + A representing the asynchronous operation. + + + + Get a paged list of activity log entries. + + The activity log query. + The page of entries. + + + + Remove all activity logs before the specified date. + + Activity log start date. + A representing the asynchronous operation. + + + + The server discovery info model. + + + + + Initializes a new instance of the class. + + The server address. + The server id. + The server name. + The endpoint address. + + + + Gets the address. + + + + + Gets the server identifier. + + + + + Gets the name. + + + + + Gets the endpoint address. + + + + + The branding options. + + + + + Gets or sets the login disclaimer. + + The login disclaimer. + + + + Gets or sets the custom CSS. + + The custom CSS. + + + + Gets or sets a value indicating whether to enable the splashscreen. + + + + + Gets or sets the splashscreen location on disk. + + + + + The branding options DTO for API use. + This DTO excludes SplashscreenLocation to prevent it from being updated via API. + + + + + Gets or sets the login disclaimer. + + The login disclaimer. + + + + Gets or sets the custom CSS. + + The custom CSS. + + + + Gets or sets a value indicating whether to enable the splashscreen. + + + + + Gets or sets the name. + + The name. + + + + Gets or sets the identifier. + + The identifier. + + + + Gets or sets a value indicating whether this instance can search. + + true if this instance can search; otherwise, false. + + + + Gets or sets the media types. + + The media types. + + + + Gets or sets the content types. + + The content types. + + + + Gets or sets the maximum number of records the channel allows retrieving at a time. + + + + + Gets or sets the automatic refresh levels. + + The automatic refresh levels. + + + + Gets or sets the default sort orders. + + The default sort orders. + + + + Gets or sets a value indicating whether a sort ascending/descending toggle is supported. + + + + + Gets or sets a value indicating whether [supports latest media]. + + true if [supports latest media]; otherwise, false. + + + + Gets or sets a value indicating whether this instance can filter. + + true if this instance can filter; otherwise, false. + + + + Gets or sets a value indicating whether [supports content downloading]. + + true if [supports content downloading]; otherwise, false. + + + + Gets or sets the fields to return within the items, in addition to basic information. + + The fields. + + + + Gets or sets the user identifier. + + The user identifier. + + + + Gets or sets the start index. Use for paging. + + The start index. + + + + Gets or sets the maximum number of items to return. + + The limit. + + + + Gets or sets a value indicating whether [supports latest items]. + + true if [supports latest items]; otherwise, false. + + + + Gets or sets a value indicating whether this instance is favorite. + + null if [is favorite] contains no value, true if [is favorite]; otherwise, false. + + + + Serves as a common base class for the Server and UI application Configurations + ProtoInclude tells Protobuf about subclasses, + The number 50 can be any number, so long as it doesn't clash with any of the ProtoMember numbers either here or in subclasses. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the number of days we should retain log files. + + The log file retention days. + + + + Gets or sets a value indicating whether this instance is first run. + + true if this instance is first run; otherwise, false. + + + + Gets or sets the cache path. + + The cache path. + + + + Gets or sets the last known version that was ran using the configuration. + + The version from previous run. + + + + Gets or sets the stringified PreviousVersion to be stored/loaded, + because System.Version itself isn't xml-serializable. + + String value of PreviousVersion. + + + + An enum representing the options to disable embedded subs. + + + + + Allow all embedded subs. + + + + + Allow only embedded subs that are text based. + + + + + Allow only embedded subs that are image based. + + + + + Disable all embedded subs. + + + + + Class EncodingOptions. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the thread count used for encoding. + + + + + Gets or sets the temporary transcoding path. + + + + + Gets or sets the path to the fallback font. + + + + + Gets or sets a value indicating whether to use the fallback font. + + + + + Gets or sets a value indicating whether audio VBR is enabled. + + + + + Gets or sets the audio boost applied when downmixing audio. + + + + + Gets or sets the algorithm used for downmixing audio to stereo. + + + + + Gets or sets the maximum size of the muxing queue. + + + + + Gets or sets a value indicating whether throttling is enabled. + + + + + Gets or sets the delay after which throttling happens. + + + + + Gets or sets a value indicating whether segment deletion is enabled. + + + + + Gets or sets seconds for which segments should be kept before being deleted. + + + + + Gets or sets the hardware acceleration type. + + + + + Gets or sets the FFmpeg path as set by the user via the UI. + + + + + Gets or sets the current FFmpeg path being used by the system and displayed on the transcode page. + + + + + Gets or sets the VA-API device. + + + + + Gets or sets the QSV device. + + + + + Gets or sets a value indicating whether tonemapping is enabled. + + + + + Gets or sets a value indicating whether VPP tonemapping is enabled. + + + + + Gets or sets a value indicating whether videotoolbox tonemapping is enabled. + + + + + Gets or sets the tone-mapping algorithm. + + + + + Gets or sets the tone-mapping mode. + + + + + Gets or sets the tone-mapping range. + + + + + Gets or sets the tone-mapping desaturation. + + + + + Gets or sets the tone-mapping peak. + + + + + Gets or sets the tone-mapping parameters. + + + + + Gets or sets the VPP tone-mapping brightness. + + + + + Gets or sets the VPP tone-mapping contrast. + + + + + Gets or sets the H264 CRF. + + + + + Gets or sets the H265 CRF. + + + + + Gets or sets the encoder preset. + + + + + Gets or sets a value indicating whether the framerate is doubled when deinterlacing. + + + + + Gets or sets the deinterlace method. + + + + + Gets or sets a value indicating whether 10bit HEVC decoding is enabled. + + + + + Gets or sets a value indicating whether 10bit VP9 decoding is enabled. + + + + + Gets or sets a value indicating whether 8/10bit HEVC RExt decoding is enabled. + + + + + Gets or sets a value indicating whether 12bit HEVC RExt decoding is enabled. + + + + + Gets or sets a value indicating whether the enhanced NVDEC is enabled. + + + + + Gets or sets a value indicating whether the system native hardware decoder should be used. + + + + + Gets or sets a value indicating whether the Intel H264 low-power hardware encoder should be used. + + + + + Gets or sets a value indicating whether the Intel HEVC low-power hardware encoder should be used. + + + + + Gets or sets a value indicating whether hardware encoding is enabled. + + + + + Gets or sets a value indicating whether HEVC encoding is enabled. + + + + + Gets or sets a value indicating whether AV1 encoding is enabled. + + + + + Gets or sets a value indicating whether subtitle extraction is enabled. + + + + + Gets or sets the timeout for subtitle extraction in minutes. + + + + + Gets or sets the codecs hardware encoding is used for. + + + + + Gets or sets the file extensions on-demand metadata based keyframe extraction is enabled for. + + + + + Gets or sets the method used for audio seeking in HLS. + + + + + An enum representing the options to seek the input audio stream when + transcoding HLS segments. + + + + + If the video stream is transcoded and the audio stream is copied, + seek the video stream to the same keyframe as the audio stream. The + resulting timestamps in the output streams may be inaccurate. + + + + + Prevent audio streams from being copied if the video stream is transcoded. + The resulting timestamps will be accurate, but additional audio transcoding + overhead will be incurred. + + + + + Gets or sets the type. + + The type. + + + + Gets or sets the limit. + + The limit. + + + + Gets or sets the minimum width. + + The minimum width. + + + + Gets or sets the preferred metadata language. + + The preferred metadata language. + + + + Gets or sets the metadata country code. + + The metadata country code. + + + + Class MetadataOptions. + + + + + Gets or sets the name. + + The name. + + + + Gets or sets the type. + + The type. + + + + Gets or sets the type of the item. + + The type of the item. + + + + Gets or sets the plugins. + + The plugins. + + + + Gets or sets the supported image types. + + The supported image types. + + + + Enum MetadataPluginType. + + + + + Defines the . + + + + + Gets or sets the value to substitute. + + + + + Gets or sets the value to substitution with. + + + + + Represents the server configuration. + + + + + Initializes a new instance of the class. + + + + + Gets or sets a value indicating whether to enable prometheus metrics exporting. + + + + + Gets or sets a value indicating whether this instance is port authorized. + + true if this instance is port authorized; otherwise, false. + + + + Gets or sets a value indicating whether quick connect is available for use on this server. + + + + + Gets or sets a value indicating whether [enable case-sensitive item ids]. + + true if [enable case-sensitive item ids]; otherwise, false. + + + + Gets or sets the metadata path. + + The metadata path. + + + + Gets or sets the preferred metadata language. + + The preferred metadata language. + + + + Gets or sets the metadata country code. + + The metadata country code. + + + + Gets or sets characters to be replaced with a ' ' in strings to create a sort name. + + The sort replace characters. + + + + Gets or sets characters to be removed from strings to create a sort name. + + The sort remove characters. + + + + Gets or sets words to be removed from strings to create a sort name. + + The sort remove words. + + + + Gets or sets the minimum percentage of an item that must be played in order for playstate to be updated. + + The min resume PCT. + + + + Gets or sets the maximum percentage of an item that can be played while still saving playstate. If this percentage is crossed playstate will be reset to the beginning and the item will be marked watched. + + The max resume PCT. + + + + Gets or sets the minimum duration that an item must have in order to be eligible for playstate updates.. + + The min resume duration seconds. + + + + Gets or sets the minimum minutes of a book that must be played in order for playstate to be updated. + + The min resume in minutes. + + + + Gets or sets the remaining minutes of a book that can be played while still saving playstate. If this percentage is crossed playstate will be reset to the beginning and the item will be marked watched. + + The remaining time in minutes. + + + + Gets or sets the threshold in minutes after a inactive session gets closed automatically. + If set to 0 the check for inactive sessions gets disabled. + + The close inactive session threshold in minutes. 0 to disable. + + + + Gets or sets the delay in seconds that we will wait after a file system change to try and discover what has been added/removed + Some delay is necessary with some items because their creation is not atomic. It involves the creation of several + different directories and files. + + The file watcher delay. + + + + Gets or sets the duration in seconds that we will wait after a library updated event before executing the library changed notification. + + The library update duration. + + + + Gets or sets the maximum amount of items to cache. + + + + + Gets or sets the image saving convention. + + The image saving convention. + + + + Gets or sets a value indicating whether slow server responses should be logged as a warning. + + + + + Gets or sets the threshold for the slow response time warning in ms. + + + + + Gets or sets the cors hosts. + + + + + Gets or sets the number of days we should retain activity logs. + + + + + Gets or sets the how the library scan fans out. + + + + + Gets or sets the how many metadata refreshes can run concurrently. + + + + + Gets or sets a value indicating whether clients should be allowed to upload logs. + + + + + Gets or sets the dummy chapter duration in seconds, use 0 (zero) or less to disable generation altogether. + + The dummy chapters duration. + + + + Gets or sets the chapter image resolution. + + The chapter image resolution. + + + + Gets or sets the limit for parallel image encoding. + + The limit for parallel image encoding. + + + + Gets or sets the list of cast receiver applications. + + + + + Gets or sets the trickplay options. + + The trickplay options. + + + + Gets or sets a value indicating whether old authorization methods are allowed. + + + + + Class TrickplayOptions. + + + + + Gets or sets a value indicating whether or not to use HW acceleration. + + + + + Gets or sets a value indicating whether or not to use HW accelerated MJPEG encoding. + + + + + Gets or sets a value indicating whether to only extract key frames. + Significantly faster, but is not compatible with all decoders and/or video files. + + + + + Gets or sets the behavior used by trickplay provider on library scan/update. + + + + + Gets or sets the process priority for the ffmpeg process. + + + + + Gets or sets the interval, in ms, between each new trickplay image. + + + + + Gets or sets the target width resolutions, in px, to generates preview images for. + + + + + Gets or sets number of tile images to allow in X dimension. + + + + + Gets or sets number of tile images to allow in Y dimension. + + + + + Gets or sets the ffmpeg output quality level. + + + + + Gets or sets the jpeg quality to use for image tiles. + + + + + Gets or sets the number of threads to be used by ffmpeg. + + + + + Enum TrickplayScanBehavior. + + + + + Starts generation, only return once complete. + + + + + Start generation, return immediately. + + + + + Class UserConfiguration. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the audio language preference. + + The audio language preference. + + + + Gets or sets a value indicating whether [play default audio track]. + + true if [play default audio track]; otherwise, false. + + + + Gets or sets the subtitle language preference. + + The subtitle language preference. + + + + Gets or sets the id of the selected cast receiver. + + + + + Class containing global constants for Jellyfin Cryptography. + + + + + The default length for new salts. + + + + + The default output length. + + + + + The default amount of iterations for hashing passwords. + + + + + Creates a new instance. + + The password that will be hashed. + A instance with the hash method, hash, salt and number of iterations. + + + + Gets the symbolic name for the function used. + + Returns the symbolic name for the function used. + + + + Gets the additional parameters used by the hash function. + + + + + Gets the salt used for hashing the password. + + Returns the salt used for hashing the password. + + + + Gets the hashed password. + + Return the hashed password. + + + + + + + A class for device Information. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name. + + The name. + + + + Gets or sets the custom name. + + The custom name. + + + + Gets or sets the access token. + + The access token. + + + + Gets or sets the identifier. + + The identifier. + + + + Gets or sets the last name of the user. + + The last name of the user. + + + + Gets or sets the name of the application. + + The name of the application. + + + + Gets or sets the application version. + + The application version. + + + + Gets or sets the last user identifier. + + The last user identifier. + + + + Gets or sets the date last modified. + + The date last modified. + + + + Gets or sets the capabilities. + + The capabilities. + + + + Gets or sets the icon URL. + + The icon URL. + + + + Defines the . + + + + + Initializes a new instance of the class. + + + + + Gets or sets the which this container must meet. + + + + + Gets or sets the list of which this profile must meet. + + + + + Gets or sets the list of to apply if this profile is met. + + + + + Gets or sets the codec(s) that this profile applies to. + + + + + Gets or sets the container(s) which this profile will be applied to. + + + + + Gets or sets the sub-container(s) which this profile will be applied to. + + + + + Checks to see whether the codecs and containers contain the given parameters. + + The codec to match (single codec or comma-separated list). + The container to match. + When true and Container is "hls", uses SubContainer instead of Container for matching. + True if both the codec and container conditions are met. + + + + Checks to see whether the codecs and containers contain the given parameters. + + The list of codecs to match. + The container to match. + When true and Container is "hls", uses SubContainer instead of Container for matching. + True if both the codec and container conditions are met. + + + + The condition processor. + + + + + Checks if a video condition is satisfied. + + The . + The width. + The height. + The bit depth. + The bitrate. + The video profile. + The . + The video level. + The framerate. + The packet length. + The . + A value indicating whether the video is anamorphic. + A value indicating whether the video is interlaced. + The reference frames. + The number of streams. + The number of video streams. + The number of audio streams. + The video codec tag. + A value indicating whether the video is AVC. + True if the condition is satisfied. + + + + Checks if a image condition is satisfied. + + The . + The width. + The height. + True if the condition is satisfied. + + + + Checks if an audio condition is satisfied. + + The . + The channel count. + The bitrate. + The sample rate. + The bit depth. + True if the condition is satisfied. + + + + Checks if an audio condition is satisfied for a video. + + The . + The channel count. + The bitrate. + The sample rate. + The bit depth. + The profile. + A value indicating whether the audio is a secondary track. + True if the condition is satisfied. + + + + Defines the . + + + + + Gets or sets the which this container must meet. + + + + + Gets or sets the list of which this container will be applied to. + + + + + Gets or sets the container(s) which this container must meet. + + + + + Gets or sets the sub container(s) which this container must meet. + + + + + Returns true if an item in appears in the property. + + The item to match. + Consider subcontainers. + The result of the operation. + + + + A represents a set of metadata which determines which content a certain device is able to play. +
+ Specifically, it defines the supported containers and + codecs (video and/or audio, including codec profiles and levels) + the device is able to direct play (without transcoding or remuxing), + as well as which containers/codecs to transcode to in case it isn't. +
+
+ + + Gets or sets the name of this device profile. User profiles must have a unique name. + + + + + Gets or sets the unique internal identifier. + + + + + Gets or sets the maximum allowed bitrate for all streamed content. + + + + + Gets or sets the maximum allowed bitrate for statically streamed content (= direct played files). + + + + + Gets or sets the maximum allowed bitrate for transcoded music streams. + + + + + Gets or sets the maximum allowed bitrate for statically streamed (= direct played) music files. + + + + + Gets or sets the direct play profiles. + + + + + Gets or sets the transcoding profiles. + + + + + Gets or sets the container profiles. Failing to meet these optional conditions causes transcoding to occur. + + + + + Gets or sets the codec profiles. + + + + + Gets or sets the subtitle profiles. + + + + + Defines the . + + + + + Gets or sets the container. + + + + + Gets or sets the audio codec. + + + + + Gets or sets the video codec. + + + + + Gets or sets the Dlna profile type. + + + + + Returns whether the supports the . + + The container to match against. + True if supported. + + + + Returns whether the supports the . + + The codec to match against. + True if supported. + + + + Returns whether the supports the . + + The codec to match against. + True if supported. + + + + Class MediaOptions. + + + + + Initializes a new instance of the class. + + + + + Gets or sets a value indicating whether direct playback is allowed. + + + + + Gets or sets a value indicating whether direct streaming is allowed. + + + + + Gets or sets a value indicating whether direct playback is forced. + + + + + Gets or sets a value indicating whether direct streaming is forced. + + + + + Gets or sets a value indicating whether audio stream copy is allowed. + + + + + Gets or sets a value indicating whether video stream copy is allowed. + + + + + Gets or sets a value indicating whether always burn in subtitles when transcoding. + + + + + Gets or sets the item id. + + + + + Gets or sets the media sources. + + + + + Gets or sets the device profile. + + + + + Gets or sets a media source id. Optional. Only needed if a specific AudioStreamIndex or SubtitleStreamIndex are requested. + + + + + Gets or sets the device id. + + + + + Gets or sets an override of supported number of audio channels + Example: DeviceProfile supports five channel, but user only has stereo speakers. + + + + + Gets or sets the application's configured maximum bitrate. + + + + + Gets or sets the context. + + The context. + + + + Gets or sets the audio transcoding bitrate. + + The audio transcoding bitrate. + + + + Gets or sets an override for the audio stream index. + + + + + Gets or sets an override for the subtitle stream index. + + + + + Gets the maximum bitrate. + + Whether or not this is audio. + System.Nullable<System.Int32>. + + + + Initializes a new instance of the class. + + The maximum width. + The maximum bitrate. + + + + Normalizes resolution options based on bitrate and dimensions. + + The input bitrate. + The output bitrate. + The H264 equivalent output bitrate. + The maximum width. + The maximum height. + The target frames per second. + Whether the content is HDR. + The normalized resolution options. + + + + Class StreamBuilder. + + + + + Initializes a new instance of the class. + + The object. + The object. + + + + Gets the optimal audio stream. + + The object to get the audio stream from. + The of the optimal audio stream. + + + + Gets the optimal video stream. + + The object to get the video stream from. + The of the optimal video stream. + + + + Normalizes input container. + + The input container. + The . + The . + The object to get the video stream from. + The normalized input container. + + + + Normalizes input container. + + The . + The of the subtitle stream. + The list of supported s. + The . + The . + The output container. + The subtitle transcoding protocol. + The normalized input container. + + + + Check the profile conditions. + + Profile conditions. + Media source. + Video stream. + Failed profile conditions. + + + + Check the compatibility of the container. + + Media options. + Media source. + Container. + Video stream. + Transcode reasons if the container is not fully compatible. + + + + Check the compatibility of the video codec. + + Media options. + Media source. + Container. + Video stream. + Transcode reasons if the video stream is not fully compatible. + + + + Check the compatibility of the audio codec. + + Media options. + Media source. + Container. + Audio stream. + Override audio codec. + The media source is video. + The audio stream is secondary. + Transcode reasons if the audio stream is not fully compatible. + + + + Check the compatibility of the audio codec for direct playback. + + Media options. + Media source. + Container. + Audio stream. + The media source is video. + The audio stream is secondary. + Transcode reasons if the audio stream is not fully compatible for direct playback. + + + + Class holding information on a stream. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the item id. + + The item id. + + + + Gets or sets the play method. + + The play method. + + + + Gets or sets the encoding context. + + The encoding context. + + + + Gets or sets the media type. + + The media type. + + + + Gets or sets the container. + + The container. + + + + Gets or sets the sub protocol. + + The sub protocol. + + + + Gets or sets the start position ticks. + + The start position ticks. + + + + Gets or sets the segment length. + + The segment length. + + + + Gets or sets the minimum segments count. + + The minimum segments count. + + + + Gets or sets a value indicating whether the stream requires AVC. + + + + + Gets or sets a value indicating whether the stream requires AVC. + + + + + Gets or sets a value indicating whether timestamps should be copied. + + + + + Gets or sets a value indicating whether timestamps should be copied. + + + + + Gets or sets a value indicating whether the subtitle manifest is enabled. + + + + + Gets or sets the audio codecs. + + The audio codecs. + + + + Gets or sets the video codecs. + + The video codecs. + + + + Gets or sets the audio stream index. + + The audio stream index. + + + + Gets or sets the video stream index. + + The subtitle stream index. + + + + Gets or sets the maximum transcoding audio channels. + + The maximum transcoding audio channels. + + + + Gets or sets the global maximum audio channels. + + The global maximum audio channels. + + + + Gets or sets the audio bitrate. + + The audio bitrate. + + + + Gets or sets the audio sample rate. + + The audio sample rate. + + + + Gets or sets the video bitrate. + + The video bitrate. + + + + Gets or sets the maximum output width. + + The output width. + + + + Gets or sets the maximum output height. + + The maximum output height. + + + + Gets or sets the maximum framerate. + + The maximum framerate. + + + + Gets or sets the device profile. + + The device profile. + + + + Gets or sets the device profile id. + + The device profile id. + + + + Gets or sets the device id. + + The device id. + + + + Gets or sets the runtime ticks. + + The runtime ticks. + + + + Gets or sets the transcode seek info. + + The transcode seek info. + + + + Gets or sets a value indicating whether content length should be estimated. + + + + + Gets or sets the media source info. + + The media source info. + + + + Gets or sets the subtitle codecs. + + The subtitle codecs. + + + + Gets or sets the subtitle delivery method. + + The subtitle delivery method. + + + + Gets or sets the subtitle format. + + The subtitle format. + + + + Gets or sets the play session id. + + The play session id. + + + + Gets or sets the transcode reasons. + + The transcode reasons. + + + + Gets the stream options. + + The stream options. + + + + Gets the media source id. + + The media source id. + + + + Gets or sets a value indicating whether audio VBR encoding is enabled. + + + + + Gets or sets a value indicating whether always burn in subtitles when transcoding. + + + + + Gets a value indicating whether the stream is direct. + + + + + Gets the audio stream that will be used in the output stream. + + The audio stream. + + + + Gets the video stream that will be used in the output stream. + + The video stream. + + + + Gets the audio sample rate that will be in the output stream. + + The target audio sample rate. + + + + Gets the audio bit depth that will be in the output stream. + + The target bit depth. + + + + Gets the video bit depth that will be in the output stream. + + The target video bit depth. + + + + Gets the target reference frames that will be in the output stream. + + The target reference frames. + + + + Gets the target framerate that will be in the output stream. + + The target framerate. + + + + Gets the target video level that will be in the output stream. + + The target video level. + + + + Gets the target packet length that will be in the output stream. + + The target packet length. + + + + Gets the target video profile that will be in the output stream. + + The target video profile. + + + + Gets the target video range type that will be in the output stream. + + The video range type. + + + + Gets the target video codec tag. + + The video codec tag. + + + + Gets the audio bitrate that will be in the output stream. + + The audio bitrate. + + + + Gets the amount of audio channels that will be in the output stream. + + The target audio channels. + + + + Gets the audio codec that will be in the output stream. + + The audio codec. + + + + Gets the video codec that will be in the output stream. + + The target video codec. + + + + Gets the target size of the output stream. + + The target size. + + + + Gets the target video bitrate of the output stream. + + The video bitrate. + + + + Gets the target timestamp of the output stream. + + The target timestamp. + + + + Gets the target total bitrate of the output stream. + + The target total bitrate. + + + + Gets a value indicating whether the output stream is anamorphic. + + + + + Gets a value indicating whether the output stream is interlaced. + + + + + Gets a value indicating whether the output stream is AVC. + + + + + Gets the target width of the output stream. + + The target width. + + + + Gets the target height of the output stream. + + The target height. + + + + Gets the target video stream count of the output stream. + + The target video stream count. + + + + Gets the target audio stream count of the output stream. + + The target audio stream count. + + + + Sets a stream option. + + The qualifier. + The name. + The value. + + + + Sets a stream option. + + The name. + The value. + + + + Gets a stream option. + + The qualifier. + The name. + The value. + + + + Gets a stream option. + + The name. + The value. + + + + Returns this output stream URL for this class. + + The base Url. + The access Token. + Optional extra query. + A querystring representation of this object. + + + + Gets the subtitle profiles. + + The transcoder support. + If only the selected track should be included. + The base URL. + The access token. + The of the profiles. + + + + Gets the subtitle profiles. + + The transcoder support. + If only the selected track should be included. + If all profiles are enabled. + The base URL. + The access token. + The of the profiles. + + + + Gets the target video bit depth. + + The codec. + The target video bit depth. + + + + Gets the target audio bit depth. + + The codec. + The target audio bit depth. + + + + Gets the target video level. + + The codec. + The target video level. + + + + Gets the target reference frames. + + The codec. + The target reference frames. + + + + Gets the target audio channels. + + The codec. + The target audio channels. + + + + Gets the media stream count. + + The type. + The limit. + The media stream count. + + + + Delivery method to use during playback of a specific subtitle format. + + + + + Burn the subtitles in the video track. + + + + + Embed the subtitles in the file or stream. + + + + + Serve the subtitles as an external file. + + + + + Serve the subtitles as a separate HLS stream. + + + + + Drop the subtitle. + + + + + A class for subtitle profile information. + + + + + Gets or sets the format. + + + + + Gets or sets the delivery method. + + + + + Gets or sets the DIDL mode. + + + + + Gets or sets the language. + + + + + Gets or sets the container. + + + + + Checks if a language is supported. + + The language to check for support. + true if supported. + + + + A class for transcoding profile information. + Note for client developers: Conditions defined in has higher priority and can override values defined here. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class copying the values from another instance. + + Another instance of to be copied. + + + + Gets or sets the container. + + + + + Gets or sets the DLNA profile type. + + + + + Gets or sets the video codec. + + + + + Gets or sets the audio codec. + + + + + Gets or sets the protocol. + + + + + Gets or sets a value indicating whether the content length should be estimated. + + + + + Gets or sets a value indicating whether M2TS mode is enabled. + + + + + Gets or sets the transcoding seek info mode. + + + + + Gets or sets a value indicating whether timestamps should be copied. + + + + + Gets or sets the encoding context. + + + + + Gets or sets a value indicating whether subtitles are allowed in the manifest. + + + + + Gets or sets the maximum audio channels. + + + + + Gets or sets the minimum amount of segments. + + + + + Gets or sets the segment length. + + + + + Gets or sets a value indicating whether breaking the video stream on non-keyframes is supported. + + + + + Gets or sets the profile conditions. + + + + + Gets or sets a value indicating whether variable bitrate encoding is supported. + + + + + Class DrawingUtils. + + + + + Resizes a set of dimensions. + + The original size object. + A new fixed width, if desired. + A new fixed height, if desired. + A max fixed width, if desired. + A max fixed height, if desired. + A new size object. + + + + Scale down to fill box. + Returns original size if both width and height are null or zero. + + The original size object. + A new fixed width, if desired. + A new fixed height, if desired. + A new size object or size. + + + + Gets the new width. + + Height of the current. + Width of the current. + The new height. + The new width. + + + + Gets the new height. + + Height of the current. + Width of the current. + The new width. + System.Double. + + + + Struct ImageDimensions. + + + + + Gets the height. + + The height. + + + + Gets the width. + + The width. + + + + + + + Enum ImageOutputFormat. + + + + + BMP format. + + + + + GIF format. + + + + + JPG format. + + + + + PNG format. + + + + + WEBP format. + + + + + SVG format. + + + + + Extension class for the enum. + + + + + Returns the correct mime type for this . + + This . + The is an invalid enumeration value. + The correct mime type for this . + + + + Returns the correct extension for this . + + This . + The is an invalid enumeration value. + The correct extension for this . + + + + Enum ImageResolution. + + + + + MatchSource. + + + + + 144p. + + + + + 240p. + + + + + 360p. + + + + + 480p. + + + + + 720p. + + + + + 1080p. + + + + + 1440p. + + + + + 2160p. + + + + + This is strictly used as a data transfer object from the api layer. + This holds information about a BaseItem in a format that is convenient for the client. + + + + + Gets or sets the name. + + The name. + + + + Gets or sets the server identifier. + + The server identifier. + + + + Gets or sets the id. + + The id. + + + + Gets or sets the etag. + + The etag. + + + + Gets or sets the type of the source. + + The type of the source. + + + + Gets or sets the playlist item identifier. + + The playlist item identifier. + + + + Gets or sets the date created. + + The date created. + + + + Gets or sets the name of the sort. + + The name of the sort. + + + + Gets or sets the video3 D format. + + The video3 D format. + + + + Gets or sets the premiere date. + + The premiere date. + + + + Gets or sets the external urls. + + The external urls. + + + + Gets or sets the media versions. + + The media versions. + + + + Gets or sets the critic rating. + + The critic rating. + + + + Gets or sets the path. + + The path. + + + + Gets or sets the official rating. + + The official rating. + + + + Gets or sets the custom rating. + + The custom rating. + + + + Gets or sets the channel identifier. + + The channel identifier. + + + + Gets or sets the overview. + + The overview. + + + + Gets or sets the taglines. + + The taglines. + + + + Gets or sets the genres. + + The genres. + + + + Gets or sets the community rating. + + The community rating. + + + + Gets or sets the cumulative run time ticks. + + The cumulative run time ticks. + + + + Gets or sets the run time ticks. + + The run time ticks. + + + + Gets or sets the play access. + + The play access. + + + + Gets or sets the aspect ratio. + + The aspect ratio. + + + + Gets or sets the production year. + + The production year. + + + + Gets or sets a value indicating whether this instance is place holder. + + null if [is place holder] contains no value, true if [is place holder]; otherwise, false. + + + + Gets or sets the number. + + The number. + + + + Gets or sets the index number. + + The index number. + + + + Gets or sets the index number end. + + The index number end. + + + + Gets or sets the parent index number. + + The parent index number. + + + + Gets or sets the trailer urls. + + The trailer urls. + + + + Gets or sets the provider ids. + + The provider ids. + + + + Gets or sets a value indicating whether this instance is HD. + + null if [is HD] contains no value, true if [is HD]; otherwise, false. + + + + Gets or sets a value indicating whether this instance is folder. + + true if this instance is folder; otherwise, false. + + + + Gets or sets the parent id. + + The parent id. + + + + Gets or sets the type. + + The type. + + + + Gets or sets the people. + + The people. + + + + Gets or sets the studios. + + The studios. + + + + Gets or sets whether the item has a logo, this will hold the Id of the Parent that has one. + + The parent logo item id. + + + + Gets or sets whether the item has any backdrops, this will hold the Id of the Parent that has one. + + The parent backdrop item id. + + + + Gets or sets the parent backdrop image tags. + + The parent backdrop image tags. + + + + Gets or sets the local trailer count. + + The local trailer count. + + + + Gets or sets the user data for this item based on the user it's being requested for. + + The user data. + + + + Gets or sets the recursive item count. + + The recursive item count. + + + + Gets or sets the child count. + + The child count. + + + + Gets or sets the name of the series. + + The name of the series. + + + + Gets or sets the series id. + + The series id. + + + + Gets or sets the season identifier. + + The season identifier. + + + + Gets or sets the special feature count. + + The special feature count. + + + + Gets or sets the display preferences id. + + The display preferences id. + + + + Gets or sets the status. + + The status. + + + + Gets or sets the air time. + + The air time. + + + + Gets or sets the air days. + + The air days. + + + + Gets or sets the tags. + + The tags. + + + + Gets or sets the primary image aspect ratio, after image enhancements. + + The primary image aspect ratio. + + + + Gets or sets the artists. + + The artists. + + + + Gets or sets the artist items. + + The artist items. + + + + Gets or sets the album. + + The album. + + + + Gets or sets the type of the collection. + + The type of the collection. + + + + Gets or sets the display order. + + The display order. + + + + Gets or sets the album id. + + The album id. + + + + Gets or sets the album image tag. + + The album image tag. + + + + Gets or sets the series primary image tag. + + The series primary image tag. + + + + Gets or sets the album artist. + + The album artist. + + + + Gets or sets the album artists. + + The album artists. + + + + Gets or sets the name of the season. + + The name of the season. + + + + Gets or sets the media streams. + + The media streams. + + + + Gets or sets the type of the video. + + The type of the video. + + + + Gets or sets the part count. + + The part count. + + + + Gets or sets the image tags. + + The image tags. + + + + Gets or sets the backdrop image tags. + + The backdrop image tags. + + + + Gets or sets the screenshot image tags. + + The screenshot image tags. + + + + Gets or sets the parent logo image tag. + + The parent logo image tag. + + + + Gets or sets whether the item has fan art, this will hold the Id of the Parent that has one. + + The parent art item id. + + + + Gets or sets the parent art image tag. + + The parent art image tag. + + + + Gets or sets the series thumb image tag. + + The series thumb image tag. + + + + Gets or sets the blurhashes for the image tags. + Maps image type to dictionary mapping image tag to blurhash value. + + The blurhashes. + + + + Gets or sets the series studio. + + The series studio. + + + + Gets or sets the parent thumb item id. + + The parent thumb item id. + + + + Gets or sets the parent thumb image tag. + + The parent thumb image tag. + + + + Gets or sets the parent primary image item identifier. + + The parent primary image item identifier. + + + + Gets or sets the parent primary image tag. + + The parent primary image tag. + + + + Gets or sets the chapters. + + The chapters. + + + + Gets or sets the trickplay manifest. + + The trickplay manifest. + + + + Gets or sets the type of the location. + + The type of the location. + + + + Gets or sets the type of the iso. + + The type of the iso. + + + + Gets or sets the type of the media. + + The type of the media. + + + + Gets or sets the end date. + + The end date. + + + + Gets or sets the locked fields. + + The locked fields. + + + + Gets or sets the trailer count. + + The trailer count. + + + + Gets or sets the movie count. + + The movie count. + + + + Gets or sets the series count. + + The series count. + + + + Gets or sets the episode count. + + The episode count. + + + + Gets or sets the song count. + + The song count. + + + + Gets or sets the album count. + + The album count. + + + + Gets or sets the music video count. + + The music video count. + + + + Gets or sets a value indicating whether [enable internet providers]. + + true if [enable internet providers]; otherwise, false. + + + + Gets or sets the series timer identifier. + + The series timer identifier. + + + + Gets or sets the program identifier. + + The program identifier. + + + + Gets or sets the channel primary image tag. + + The channel primary image tag. + + + + Gets or sets the start date of the recording, in UTC. + + + + + Gets or sets the completion percentage. + + The completion percentage. + + + + Gets or sets a value indicating whether this instance is repeat. + + true if this instance is repeat; otherwise, false. + + + + Gets or sets the episode title. + + The episode title. + + + + Gets or sets the type of the channel. + + The type of the channel. + + + + Gets or sets the audio. + + The audio. + + + + Gets or sets a value indicating whether this instance is movie. + + true if this instance is movie; otherwise, false. + + + + Gets or sets a value indicating whether this instance is sports. + + true if this instance is sports; otherwise, false. + + + + Gets or sets a value indicating whether this instance is series. + + true if this instance is series; otherwise, false. + + + + Gets or sets a value indicating whether this instance is live. + + true if this instance is live; otherwise, false. + + + + Gets or sets a value indicating whether this instance is news. + + true if this instance is news; otherwise, false. + + + + Gets or sets a value indicating whether this instance is kids. + + true if this instance is kids; otherwise, false. + + + + Gets or sets a value indicating whether this instance is premiere. + + true if this instance is premiere; otherwise, false. + + + + Gets or sets the timer identifier. + + The timer identifier. + + + + Gets or sets the gain required for audio normalization. + + The gain required for audio normalization. + + + + Gets or sets the current program. + + The current program. + + + + This is used by the api to get information about a Person within a BaseItem. + + + + + Gets or sets the name. + + The name. + + + + Gets or sets the identifier. + + The identifier. + + + + Gets or sets the role. + + The role. + + + + Gets or sets the type. + + The type. + + + + Gets or sets the primary image tag. + + The primary image tag. + + + + Gets or sets the primary image blurhash. + + The primary image blurhash. + + + + Gets a value indicating whether this instance has primary image. + + true if this instance has primary image; otherwise, false. + + + + Client capabilities dto. + + + + + Gets or sets the list of playable media types. + + + + + Gets or sets the list of supported commands. + + + + + Gets or sets a value indicating whether session supports media control. + + + + + Gets or sets a value indicating whether session supports a persistent identifier. + + + + + Gets or sets the device profile. + + + + + Gets or sets the app store url. + + + + + Gets or sets the icon url. + + + + + Convert the dto to the full model. + + The converted model. + + + + A DTO representing device information. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name. + + The name. + + + + Gets or sets the custom name. + + The custom name. + + + + Gets or sets the access token. + + The access token. + + + + Gets or sets the identifier. + + The identifier. + + + + Gets or sets the last name of the user. + + The last name of the user. + + + + Gets or sets the name of the application. + + The name of the application. + + + + Gets or sets the application version. + + The application version. + + + + Gets or sets the last user identifier. + + The last user identifier. + + + + Gets or sets the date last modified. + + The date last modified. + + + + Gets or sets the capabilities. + + The capabilities. + + + + Gets or sets the icon URL. + + The icon URL. + + + + Defines the display preferences for any item that supports them (usually Folders). + + + + + Initializes a new instance of the class. + + + + + Gets or sets the user id. + + The user id. + + + + Gets or sets the type of the view. + + The type of the view. + + + + Gets or sets the sort by. + + The sort by. + + + + Gets or sets the index by. + + The index by. + + + + Gets or sets a value indicating whether [remember indexing]. + + true if [remember indexing]; otherwise, false. + + + + Gets or sets the height of the primary image. + + The height of the primary image. + + + + Gets or sets the width of the primary image. + + The width of the primary image. + + + + Gets or sets the custom prefs. + + The custom prefs. + + + + Gets or sets the scroll direction. + + The scroll direction. + + + + Gets or sets a value indicating whether to show backdrops on this item. + + true if showing backdrops; otherwise, false. + + + + Gets or sets a value indicating whether [remember sorting]. + + true if [remember sorting]; otherwise, false. + + + + Gets or sets the sort order. + + The sort order. + + + + Gets or sets a value indicating whether [show sidebar]. + + true if [show sidebar]; otherwise, false. + + + + Gets or sets the client. + + + + + Interface IItemDto. + + + + + Gets or sets the primary image aspect ratio. + + The primary image aspect ratio. + + + + Class ImageInfo. + + + + + Gets or sets the type of the image. + + The type of the image. + + + + Gets or sets the index of the image. + + The index of the image. + + + + Gets or sets the image tag. + + + + + Gets or sets the path. + + The path. + + + + Gets or sets the blurhash. + + The blurhash. + + + + Gets or sets the height. + + The height. + + + + Gets or sets the width. + + The width. + + + + Gets or sets the size. + + The size. + + + + Class LibrarySummary. + + + + + Gets or sets the movie count. + + The movie count. + + + + Gets or sets the series count. + + The series count. + + + + Gets or sets the episode count. + + The episode count. + + + + Gets or sets the artist count. + + The artist count. + + + + Gets or sets the program count. + + The program count. + + + + Gets or sets the trailer count. + + The trailer count. + + + + Gets or sets the song count. + + The song count. + + + + Gets or sets the album count. + + The album count. + + + + Gets or sets the music video count. + + The music video count. + + + + Gets or sets the box set count. + + The box set count. + + + + Gets or sets the book count. + + The book count. + + + + Gets or sets the item count. + + The item count. + + + + Adds all counts. + + The total of the counts. + + + + Gets or sets a value indicating whether the media is remote. + Differentiate internet url vs local network. + + + + + A class representing metadata editor information. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the parental rating options. + + + + + Gets or sets the countries. + + + + + Gets or sets the cultures. + + + + + Gets or sets the external id infos. + + + + + Gets or sets the content type. + + + + + Gets or sets the content type options. + + + + + Gets or sets the name. + + The name. + + + + Gets or sets the identifier. + + The identifier. + + + + Gets or sets the name. + + The name. + + + + Gets or sets the value. + + The value. + + + + DTO for playlists. + + + + + Gets or sets a value indicating whether the playlist is publicly readable. + + + + + Gets or sets the share permissions. + + + + + Gets or sets the item ids. + + + + + Session info DTO. + + + + + Gets or sets the play state. + + The play state. + + + + Gets or sets the additional users. + + The additional users. + + + + Gets or sets the client capabilities. + + The client capabilities. + + + + Gets or sets the remote end point. + + The remote end point. + + + + Gets or sets the playable media types. + + The playable media types. + + + + Gets or sets the id. + + The id. + + + + Gets or sets the user id. + + The user id. + + + + Gets or sets the username. + + The username. + + + + Gets or sets the type of the client. + + The type of the client. + + + + Gets or sets the last activity date. + + The last activity date. + + + + Gets or sets the last playback check in. + + The last playback check in. + + + + Gets or sets the last paused date. + + The last paused date. + + + + Gets or sets the name of the device. + + The name of the device. + + + + Gets or sets the type of the device. + + The type of the device. + + + + Gets or sets the now playing item. + + The now playing item. + + + + Gets or sets the now viewing item. + + The now viewing item. + + + + Gets or sets the device id. + + The device id. + + + + Gets or sets the application version. + + The application version. + + + + Gets or sets the transcoding info. + + The transcoding info. + + + + Gets or sets a value indicating whether this session is active. + + true if this session is active; otherwise, false. + + + + Gets or sets a value indicating whether the session supports media control. + + true if this session supports media control; otherwise, false. + + + + Gets or sets a value indicating whether the session supports remote control. + + true if this session supports remote control; otherwise, false. + + + + Gets or sets the now playing queue. + + The now playing queue. + + + + Gets or sets the now playing queue full items. + + The now playing queue full items. + + + + Gets or sets a value indicating whether the session has a custom device name. + + true if this session has a custom device name; otherwise, false. + + + + Gets or sets the playlist item id. + + The playlist item id. + + + + Gets or sets the server id. + + The server id. + + + + Gets or sets the user primary image tag. + + The user primary image tag. + + + + Gets or sets the supported commands. + + The supported commands. + + + + The trickplay api model. + + + + + Initializes a new instance of the class. + + The trickplay info. + + + + Gets the width of an individual thumbnail. + + + + + Gets the height of an individual thumbnail. + + + + + Gets the amount of thumbnails per row. + + + + + Gets the amount of thumbnails per column. + + + + + Gets the total amount of non-black thumbnails. + + + + + Gets the interval in milliseconds between each trickplay thumbnail. + + + + + Gets the peak bandwidth usage in bits per second. + + + + + This is used by the api to get information about a item user data. + + + + + Gets or sets the rating. + + The rating. + + + + Gets or sets the played percentage. + + The played percentage. + + + + Gets or sets the unplayed item count. + + The unplayed item count. + + + + Gets or sets the playback position ticks. + + The playback position ticks. + + + + Gets or sets the play count. + + The play count. + + + + Gets or sets a value indicating whether this instance is favorite. + + true if this instance is favorite; otherwise, false. + + + + Gets or sets a value indicating whether this is likes. + + null if [likes] contains no value, true if [likes]; otherwise, false. + + + + Gets or sets the last played date. + + The last played date. + + + + Gets or sets a value indicating whether this is played. + + true if played; otherwise, false. + + + + Gets or sets the key. + + The key. + + + + Gets or sets the item identifier. + + The item identifier. + + + + Class UserDto. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name. + + The name. + + + + Gets or sets the server identifier. + + The server identifier. + + + + Gets or sets the name of the server. + This is not used by the server and is for client-side usage only. + + The name of the server. + + + + Gets or sets the id. + + The id. + + + + Gets or sets the primary image tag. + + The primary image tag. + + + + Gets or sets a value indicating whether this instance has password. + + true if this instance has password; otherwise, false. + + + + Gets or sets a value indicating whether this instance has configured password. + + true if this instance has configured password; otherwise, false. + + + + Gets or sets a value indicating whether this instance has configured easy password. + + true if this instance has configured easy password; otherwise, false. + + + + Gets or sets whether async login is enabled or not. + + + + + Gets or sets the last login date. + + The last login date. + + + + Gets or sets the last activity date. + + The last activity date. + + + + Gets or sets the configuration. + + The configuration. + + + + Gets or sets the policy. + + The policy. + + + + Gets or sets the primary image aspect ratio. + + The primary image aspect ratio. + + + + + + + Class UserItemDataDto. + + + + + Gets or sets the rating. + + The rating. + + + + Gets or sets the played percentage. + + The played percentage. + + + + Gets or sets the unplayed item count. + + The unplayed item count. + + + + Gets or sets the playback position ticks. + + The playback position ticks. + + + + Gets or sets the play count. + + The play count. + + + + Gets or sets a value indicating whether this instance is favorite. + + true if this instance is favorite; otherwise, false. + + + + Gets or sets a value indicating whether this is likes. + + null if [likes] contains no value, true if [likes]; otherwise, false. + + + + Gets or sets the last played date. + + The last played date. + + + + Gets or sets a value indicating whether this is played. + + true if played; otherwise, false. + + + + Gets or sets the key. + + The key. + + + + Gets or sets the item identifier. + + The item identifier. + + + + Class ChapterInfo. + + + + + Gets or sets the start position ticks. + + The start position ticks. + + + + Gets or sets the name. + + The name. + + + + Gets or sets the image path. + + The image path. + + + + The collection type options. + + + + + Movies. + + + + + TV Shows. + + + + + Music. + + + + + Music Videos. + + + + + Home Videos (and Photos). + + + + + Box Sets. + + + + + Books. + + + + + Mixed Movies and TV Shows. + + + + + Enum containing deinterlace methods. + + + + + YADIF. + + + + + BWDIF. + + + + + An enum representing an algorithm to downmix surround sound to stereo. + + + + + No special algorithm. + + + + + Algorithm by Dave_750. + Sourced from https://superuser.com/questions/852400/properly-downmix-5-1-to-stereo-using-ffmpeg/1410620#1410620. + + + + + Nightmode Dialogue algorithm. + Sourced from https://superuser.com/questions/852400/properly-downmix-5-1-to-stereo-using-ffmpeg/1410620#1410620. + + + + + RFC7845 Section 5.1.1.5 defined algorithm. + + + + + AC-4 standard algorithm with its default gain values. + Defined in ETSI TS 103 190 Section 6.2.17. + + + + + Enum containing encoder presets. + + + + + Auto preset. + + + + + Placebo preset. + + + + + Veryslow preset. + + + + + Slower preset. + + + + + Slow preset. + + + + + Medium preset. + + + + + Fast preset. + + + + + Faster preset. + + + + + Veryfast preset. + + + + + Superfast preset. + + + + + Ultrafast preset. + + + + + Enum containing hardware acceleration types. + + + + + Software acceleration. + + + + + AMD AMF. + + + + + Intel Quick Sync Video. + + + + + NVIDIA NVENC. + + + + + Video4Linux2 V4L2M2M. + + + + + Video Acceleration API (VAAPI). + + + + + Video ToolBox. + + + + + Rockchip Media Process Platform (RKMPP). + + + + + Since BaseItem and DTOBaseItem both have ProviderIds, this interface helps avoid code repetition by using extension methods. + + + + + Gets or sets the provider ids. + + The provider ids. + + + + Interface for access to shares. + + + + + Gets or sets the shares. + + + + + Enum ImageType. + + + + + The primary. + + + + + The art. + + + + + The backdrop. + + + + + The banner. + + + + + The logo. + + + + + The thumb. + + + + + The disc. + + + + + The box. + + + + + The screenshot. + + + This enum value is obsolete. + XmlSerializer does not serialize/deserialize objects that are marked as [Obsolete]. + + + + + The menu. + + + + + The chapter image. + + + + + The box rear. + + + + + The user profile image. + + + + + Enum IsoType. + + + + + The DVD. + + + + + The blu ray. + + + + + Class LibraryUpdateInfo. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the folders added to. + + The folders added to. + + + + Gets or sets the folders removed from. + + The folders removed from. + + + + Gets or sets the items added. + + The items added. + + + + Gets or sets the items removed. + + The items removed. + + + + Gets or sets the items updated. + + The items updated. + + + + Enum LocationType. + + + + + The file system. + + + + + The remote. + + + + + The virtual. + + + + + The offline. + + + + + Class MediaAttachment. + + + + + Gets or sets the codec. + + The codec. + + + + Gets or sets the codec tag. + + The codec tag. + + + + Gets or sets the comment. + + The comment. + + + + Gets or sets the index. + + The index. + + + + Gets or sets the filename. + + The filename. + + + + Gets or sets the MIME type. + + The MIME type. + + + + Gets or sets the delivery URL. + + The delivery URL. + + + + Class MediaStream. + + + + + Special ISO 639-2 language codes that should not be displayed in the UI. + + + + + Gets or sets the codec. + + The codec. + + + + Gets or sets the codec tag. + + The codec tag. + + + + Gets or sets the language. + + The language. + + + + Gets or sets the color range. + + The color range. + + + + Gets or sets the color space. + + The color space. + + + + Gets or sets the color transfer. + + The color transfer. + + + + Gets or sets the color primaries. + + The color primaries. + + + + Gets or sets the Dolby Vision version major. + + The Dolby Vision version major. + + + + Gets or sets the Dolby Vision version minor. + + The Dolby Vision version minor. + + + + Gets or sets the Dolby Vision profile. + + The Dolby Vision profile. + + + + Gets or sets the Dolby Vision level. + + The Dolby Vision level. + + + + Gets or sets the Dolby Vision rpu present flag. + + The Dolby Vision rpu present flag. + + + + Gets or sets the Dolby Vision el present flag. + + The Dolby Vision el present flag. + + + + Gets or sets the Dolby Vision bl present flag. + + The Dolby Vision bl present flag. + + + + Gets or sets the Dolby Vision bl signal compatibility id. + + The Dolby Vision bl signal compatibility id. + + + + Gets or sets the Rotation in degrees. + + The video rotation. + + + + Gets or sets the comment. + + The comment. + + + + Gets or sets the time base. + + The time base. + + + + Gets or sets the codec time base. + + The codec time base. + + + + Gets or sets the title. + + The title. + + + + Gets or sets a value indicating whether the HDR10+ present flag. + + The HDR10+ present flag. + + + + Gets the video range. + + The video range. + + + + Gets the video range type. + + The video range type. + + + + Gets the video dovi title. + + The video dovi title. + + + + Gets the audio spatial format. + + The audio spatial format. + + + + Gets or sets the localized text for undefined language. + + The localized text for undefined language. + + + + Gets or sets the localized text for default stream indicator. + + The localized text for default stream indicator. + + + + Gets or sets the localized text for forced stream indicator. + + The localized text for forced stream indicator. + + + + Gets or sets the localized text for external stream indicator. + + The localized text for external stream indicator. + + + + Gets or sets the localized text for hearing impaired indicator. + + The localized text for hearing impaired indicator. + + + + Gets or sets the localized language name. + + The localized language name. + + + + Gets the display title for the media stream. + + The display title. + + + + Gets or sets the NAL length size. + + The NAL length size. + + + + Gets or sets a value indicating whether this instance is interlaced. + + true if this instance is interlaced; otherwise, false. + + + + Gets or sets a value indicating whether this instance is AVC. + + true if this instance is AVC; otherwise, false. + + + + Gets or sets the channel layout. + + The channel layout. + + + + Gets or sets the bit rate. + + The bit rate. + + + + Gets or sets the bit depth. + + The bit depth. + + + + Gets or sets the reference frames. + + The reference frames. + + + + Gets or sets the length of the packet. + + The length of the packet. + + + + Gets or sets the channels. + + The channels. + + + + Gets or sets the sample rate. + + The sample rate. + + + + Gets or sets a value indicating whether this instance is default. + + true if this instance is default; otherwise, false. + + + + Gets or sets a value indicating whether this instance is forced. + + true if this instance is forced; otherwise, false. + + + + Gets or sets a value indicating whether this instance is for the hearing impaired. + + true if this instance is for the hearing impaired; otherwise, false. + + + + Gets or sets the height. + + The height. + + + + Gets or sets the width. + + The width. + + + + Gets or sets the average frame rate. + + The average frame rate. + + + + Gets or sets the real frame rate. + + The real frame rate. + + + + Gets the framerate used as reference. + Prefer AverageFrameRate, if that is null or an unrealistic value + then fallback to RealFrameRate. + + The reference frame rate. + + + + Gets or sets the profile. + + The profile. + + + + Gets or sets the type. + + The type. + + + + Gets or sets the aspect ratio. + + The aspect ratio. + + + + Gets or sets the index. + + The index. + + + + Gets or sets the score. + + The score. + + + + Gets or sets a value indicating whether this instance is external. + + true if this instance is external; otherwise, false. + + + + Gets or sets the method. + + The method. + + + + Gets or sets the delivery URL. + + The delivery URL. + + + + Gets or sets a value indicating whether this instance is external URL. + + null if [is external URL] contains no value, true if [is external URL]; otherwise, false. + + + + Gets a value indicating whether this instance is a text subtitle stream. + + true if this instance is a text subtitle stream; otherwise, false. + + + + Gets a value indicating whether this instance is a PGS subtitle stream. + + true if this instance is a PGS subtitle stream; otherwise, false. + + + + Gets a value indicating whether this is a subtitle steam that is extractable by ffmpeg. + All text-based and pgs subtitles can be extracted. + + true if this is a extractable subtitle steam otherwise, false. + + + + Gets or sets a value indicating whether [supports external stream]. + + true if [supports external stream]; otherwise, false. + + + + Gets or sets the filename. + + The filename. + + + + Gets or sets the pixel format. + + The pixel format. + + + + Gets or sets the level. + + The level. + + + + Gets or sets whether this instance is anamorphic. + + true if this instance is anamorphic; otherwise, false. + + + + Determines whether the specified format is a text-based subtitle format. + + The subtitle format/codec to check. + true if the format is text-based; otherwise, false. + + + + Determines whether the specified format is a PGS (Presentation Graphic Stream) subtitle format. + + The subtitle format/codec to check. + true if the format is PGS; otherwise, false. + + + + Determines whether this subtitle stream can be converted to the specified codec. + + The target codec to convert to. + true if the subtitle stream can be converted to the specified codec; otherwise, false. + + + + Gets the video color range information based on codec tags, Dolby Vision properties, and color transfer characteristics. + + A tuple containing the video range (SDR/HDR) and the specific video range type. + + + + Gets the resolution text based on width and height. + + The resolution text (e.g., "1080p", "4K") or null if width/height are not available. + + + + Enum MediaStreamType. + + + + + The audio. + + + + + The video. + + + + + The subtitle. + + + + + The embedded image. + + + + + The data. + + + + + The lyric. + + + + + Enum MetadataFields. + + + + + The cast. + + + + + The genres. + + + + + The production locations. + + + + + The studios. + + + + + The tags. + + + + + The name. + + + + + The overview. + + + + + The runtime. + + + + + The official rating. + + + + + Enum MetadataProviders. + + + + + This metadata provider is for users and/or plugins to override the + default merging behaviour. + + + + + The IMDb provider. + + + + + The TMDb provider. + + + + + The TVDb provider. + + + + + The tvcom provider. + + + + + TMDb collection provider. + + + + + The MusicBrainz album provider. + + + + + The MusicBrainz album artist provider. + + + + + The MusicBrainz artist provider. + + + + + The MusicBrainz release group provider. + + + + + The Zap2It provider. + + + + + The TvRage provider. + + + + + The AudioDb artist provider. + + + + + The AudioDb collection provider. + + + + + The MusicBrainz track provider. + + + + + The TvMaze provider. + + + + + The MusicBrainz recording provider. + + + + + Class ParentalRating. + + + + + Initializes a new instance of the class. + + The name. + The score. + + + + Gets or sets the name. + + The name. + + + + Gets or sets the value. + + The value. + + Deprecated. + + + + + Gets or sets the rating score. + + The rating score. + + + + A class representing an parental rating entry. + + + + + Gets or sets the rating strings. + + + + + Gets or sets the score. + + + + + A class representing an parental rating score. + + + + + Initializes a new instance of the class. + + The score. + The sub score. + + + + Gets or sets the score. + + + + + Gets or sets the sub score. + + + + + A class representing a parental rating system. + + + + + Gets or sets the country code. + + + + + Gets or sets a value indicating whether sub scores are supported. + + + + + Gets or sets the ratings. + + + + + Types of persons. + + + + + A person whose profession is acting on the stage, in films, or on television. + + + + + A person who supervises the actors and other staff in a film, play, or similar production. + + + + + A person who writes music, especially as a professional occupation. + + + + + A writer of a book, article, or document. Can also be used as a generic term for music writer if there is a lack of specificity. + + + + + A well-known actor or other performer who appears in a work in which they do not have a regular role. + + + + + A person responsible for the financial and managerial aspects of the making of a film or broadcast or for staging a play, opera, etc. + + + + + A person who directs the performance of an orchestra or choir. + + + + + A person who writes the words to a song or musical. + + + + + A person who adapts a musical composition for performance. + + + + + An audio engineer who performed a general engineering role. + + + + + An engineer responsible for using a mixing console to mix a recorded track into a single piece of music suitable for release. + + + + + A person who remixed a recording by taking one or more other tracks, substantially altering them and mixing them together with other material. + + + + + Class to hold data on user permissions for playlists. + + + + + Initializes a new instance of the class. + + The user id. + Edit permission. + + + + Gets or sets the user id. + + + + + Gets or sets a value indicating whether the user has edit permissions. + + + + + Class ProviderIdsExtensions. + + + + + Case-insensitive dictionary of string representation. + + + + + Checks if this instance has an id for the given provider. + + The instance. + The of the provider name. + true if a provider id with the given name was found; otherwise false. + + + + Checks if this instance has an id for the given provider. + + The instance. + The provider. + true if a provider id with the given name was found; otherwise false. + + + + Gets a provider id. + + The instance. + The name. + The provider id. + true if a provider id with the given name was found; otherwise false. + + + + Gets a provider id. + + The instance. + The provider. + The provider id. + true if a provider id with the given name was found; otherwise false. + + + + Gets a provider id. + + The instance. + The name. + System.String. + + + + Gets a provider id. + + The instance. + The provider. + System.String. + + + + Sets a provider id. + + The instance. + The name, this should not contain a '=' character. + The value. + Due to how deserialization from the database works the name cannot contain '='. + true if the provider id got set successfully; otherwise, false. + + + + Sets a provider id. + + The instance. + The provider. + The value. + true if the provider id got set successfully; otherwise, false. + + + + Sets a provider id. + + The instance. + The name, this should not contain a '=' character. + The value. + Due to how deserialization from the database works the name cannot contain '='. + + + + Sets a provider id. + + The instance. + The provider. + The value. + + + + Removes a provider id. + + The instance. + The name. + + + + Removes a provider id. + + The instance. + The provider. + + + + The status of a series. + + + + + The continuing status. This indicates that a series is currently releasing. + + + + + The ended status. This indicates that a series has completed and is no longer being released. + + + + + The unreleased status. This indicates that a series has not been released yet. + + + + + Enum containing tonemapping algorithms. + + + + + None. + + + + + Clip. + + + + + Linear. + + + + + Gamma. + + + + + Reinhard. + + + + + Hable. + + + + + Mobius. + + + + + BT2390. + + + + + Enum containing tonemapping modes. + + + + + Auto. + + + + + Max. + + + + + RGB. + + + + + Lum. + + + + + ITP. + + + + + Enum containing tonemapping ranges. + + + + + Auto. + + + + + TV. + + + + + PC. + + + + + Enum UserDataSaveReason. + + + + + The playback start. + + + + + The playback progress. + + + + + The playback finished. + + + + + The toggle played. + + + + + The update user rating. + + + + + The import. + + + + + API call updated item user data. + + + + + Enum VideoType. + + + + + The video file. + + + + + The iso. + + + + + The DVD. + + + + + The blu ray. + + + + + Used to hold information about a user's list of configured virtual folders. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name. + + The name. + + + + Gets or sets the locations. + + The locations. + + + + Gets or sets the type of the collection. + + The type of the collection. + + + + Gets or sets the item identifier. + + The item identifier. + + + + Gets or sets the primary image item identifier. + + The primary image item identifier. + + + + Defines the class. + + + + + Compares two containers, returning true if an item in exists + in . + + The comma-delimited string being searched. + If the parameter begins with the - character, the operation is reversed. + If the parameter is empty or null, all containers in will be accepted. + The comma-delimited string being matched. + The result of the operation. + + + + Compares two containers, returning true if an item in exists + in . + + The comma-delimited string being searched. + If the parameter begins with the - character, the operation is reversed. + If the parameter is empty or null, all containers in will be accepted. + The comma-delimited string being matched. + The result of the operation. + + + + Compares two containers, returning if an item in + does not exist in . + + The comma-delimited string being searched. + If the parameter is empty or null, all containers in will be accepted. + The boolean result to return if a match is not found. + The comma-delimited string being matched. + The result of the operation. + + + + Compares two containers, returning if an item in + does not exist in . + + The comma-delimited string being searched. + If the parameter is empty or null, all containers in will be accepted. + The boolean result to return if a match is not found. + The comma-delimited string being matched. + The result of the operation. + + + + Compares two containers, returning if an item in + does not exist in . + + The profile containers being matched searched. + If the parameter is empty or null, all containers in will be accepted. + The boolean result to return if a match is not found. + The comma-delimited string being matched. + The result of the operation. + + + + Splits and input string. + + The input string. + The result of the operation. + + + + Extension methods for . + + + + + Orders by requested language in descending order, prioritizing "en" over other non-matches. + + The remote image infos. + The requested language for the images. + The ordered remote image infos. + + + + Extensions for . + + + + + Get the custom tag delimiters. + + This LibraryOptions. + CustomTagDelimiters in char[]. + + + + Helper methods for manipulating strings. + + + + + Returns the string with the first character as uppercase. + + The input string. + The string with the first character as uppercase. + + + + Class CountryInfo. + + + + + Gets or sets the name. + + The name. + + + + Gets or sets the display name. + + The display name. + + + + Gets or sets the name of the two letter ISO region. + + The name of the two letter ISO region. + + + + Gets or sets the name of the three letter ISO region. + + The name of the three letter ISO region. + + + + Class CultureDto. + + + + + Gets the name. + + The name. + + + + Gets the display name. + + The display name. + + + + Gets the name of the two letter ISO language. + + The name of the two letter ISO language. + + + + Gets the name of the three letter ISO language. + + The name of the three letter ISO language. + + + + Interface ILocalizationManager. + + + + + Gets the cultures. + + . + + + + Gets the countries. + + . + + + + Gets the parental ratings. + + . + + + + Gets the rating level. + + The rating. + The optional two letter ISO language string. + or null. + + + + Gets the localized string. + + The phrase. + The culture. + . + + + + Gets the localized string. + + The phrase. + System.String. + + + + Gets the localization options. + + . + + + + Returns the correct for the given language. + + The language. + The correct for the given language. + + + + Returns the language in ISO 639-2/T when the input is ISO 639-2/B. + + The language in ISO 639-2/B. + The language in ISO 639-2/T. + Whether the language could be converted. + + + + Helper class to create async s. + + + + + Gets the default for reading files async. + + + + + Gets the default for writing files async. + + + + + Creates, or truncates and overwrites, a file in the specified path. + + The path and name of the file to create. + A that provides read/write access to the file specified in path. + + + + Opens an existing file for reading. + + The file to be opened for reading. + A read-only on the specified path. + + + + Opens an existing file for writing. + + The file to be opened for writing. + An unshared object on the specified path with Write access. + + + + Class FileSystemEntryInfo. + + + + + Initializes a new instance of the class. + + The filename. + The file path. + The file type. + + + + Gets the name. + + The name. + + + + Gets the path. + + The path. + + + + Gets the type. + + The type. + + + + Enum FileSystemEntryType. + + + + + The file. + + + + + The directory. + + + + + The network computer. + + + + + The network share. + + + + + Gets or sets a value indicating whether this is exists. + + true if exists; otherwise, false. + + + + Gets or sets the full name. + + The full name. + + + + Gets or sets the name. + + The name. + + + + Gets or sets the extension. + + The extension. + + + + Gets or sets the length. + + The length. + + + + Gets or sets the last write time UTC. + + The last write time UTC. + + + + Gets or sets the creation time UTC. + + The creation time UTC. + + + + Gets or sets a value indicating whether this instance is directory. + + true if this instance is directory; otherwise, false. + + + + Interface IFileSystem. + + + + + Determines whether the specified filename is shortcut. + + The filename. + true if the specified filename is shortcut; otherwise, false. + + + + Resolves the shortcut. + + The filename. + System.String. + + + + Creates the shortcut. + + The shortcut path. + The target. + + + + Moves a directory to a new location. + + Source directory. + Destination directory. + + + + Returns a object for the specified file or directory path. + + A path to a file or directory. + A object. + If the specified path points to a directory, the returned object's + property will be set to true and all other properties will reflect the properties of the directory. + + + + Returns a object for the specified file path. + + A path to a file. + A object. + If the specified path points to a directory, the returned object's + property and the property will both be set to false. + For automatic handling of files and directories, use . + + + + Returns a object for the specified directory path. + + A path to a directory. + A object. + If the specified path points to a file, the returned object's + property will be set to true and the property will be set to false. + For automatic handling of files and directories, use . + + + + Gets the valid filename. + + The filename. + System.String. + + + + Gets the creation time UTC. + + The information. + DateTime. + + + + Gets the creation time UTC. + + The path. + DateTime. + + + + Gets the last write time UTC. + + The information. + DateTime. + + + + Gets the last write time UTC. + + The path. + DateTime. + + + + Swaps the files. + + The file1. + The file2. + + + + Determines whether [contains sub path] [the specified parent path]. + + The parent path. + The path. + true if [contains sub path] [the specified parent path]; otherwise, false. + + + + Gets the file name without extension. + + The information. + System.String. + + + + Determines whether [is path file] [the specified path]. + + The path. + true if [is path file] [the specified path]; otherwise, false. + + + + Deletes the file. + + The path. + + + + Gets the directories. + + The path. + If set to true also searches in subdirectories. + All found directories. + + + + Gets the files. + + The path in which to search. + If set to true also searches in subdirectories. + All found files. + + + + Gets the files. + + The path in which to search. + The search string to match against the names of files. This parameter can contain a combination of valid literal path and wildcard (* and ?) characters, but it doesn't support regular expressions. + If set to true also searches in subdirectories. + All found files. + + + + Gets the files. + + The path in which to search. + The file extensions to search for. + Enable case-sensitive check for extensions. + If set to true also searches in subdirectories. + All found files. + + + + Gets the files. + + The path in which to search. + The search string to match against the names of files. This parameter can contain a combination of valid literal path and wildcard (* and ?) characters, but it doesn't support regular expressions. + The file extensions to search for. + Enable case-sensitive check for extensions. + If set to true also searches in subdirectories. + All found files. + + + + Gets the file system entries. + + The path. + if set to true [recursive]. + IEnumerable<FileSystemMetadata>. + + + + Gets the directory paths. + + The path. + if set to true [recursive]. + IEnumerable<System.String>. + + + + Gets the file paths. + + The path. + if set to true [recursive]. + IEnumerable<System.String>. + + + + Gets the file system entry paths. + + The path. + if set to true [recursive]. + IEnumerable<System.String>. + + + + Determines whether the directory exists. + + The path. + Whether the path exists. + + + + Determines whether the file exists. + + The path. + Whether the path exists. + + + + Class IODefaults. + + + + + The default copy to buffer size. + + + + + The default file stream buffer size. + + + + + The default buffer size. + + + + + Gets the extension. + + The extension. + + + + Resolves the specified shortcut path. + + The shortcut path. + System.String. + + + + Creates the specified shortcut path. + + The shortcut path. + The target path. + + + + Gets or sets the user. + + The user. + + + + Gets or sets a value indicating whether [include external content]. + + true if [include external content]; otherwise, false. + + + + Gets or sets a value indicating whether [include hidden]. + + true if [include hidden]; otherwise, false. + + + + Gets or sets the Id of the recording. + + + + + Gets or sets the server identifier. + + The server identifier. + + + + Gets or sets the external identifier. + + The external identifier. + + + + Gets or sets the channel id of the recording. + + + + + Gets or sets the external channel identifier. + + The external channel identifier. + + + + Gets or sets the channel name of the recording. + + + + + Gets or sets the program identifier. + + The program identifier. + + + + Gets or sets the external program identifier. + + The external program identifier. + + + + Gets or sets the name of the recording. + + + + + Gets or sets the description of the recording. + + + + + Gets or sets the start date of the recording, in UTC. + + + + + Gets or sets the end date of the recording, in UTC. + + + + + Gets or sets the name of the service. + + The name of the service. + + + + Gets or sets the priority. + + The priority. + + + + Gets or sets the pre padding seconds. + + The pre padding seconds. + + + + Gets or sets the post padding seconds. + + The post padding seconds. + + + + Gets or sets a value indicating whether this instance is pre padding required. + + true if this instance is pre padding required; otherwise, false. + + + + Gets or sets the Id of the Parent that has a backdrop if the item does not have one. + + The parent backdrop item id. + + + + Gets or sets the parent backdrop image tags. + + The parent backdrop image tags. + + + + Gets or sets a value indicating whether this instance is post padding required. + + true if this instance is post padding required; otherwise, false. + + + + Channel mapping options dto. + + + + + Gets or sets list of tuner channels. + + + + + Gets or sets list of provider channels. + + + + + Gets or sets list of mappings. + + + + + Gets or sets provider name. + + + + + Enum ChannelType. + + + + + The TV. + + + + + The radio. + + + + + Gets or sets the start date. + + The start date. + + + + Gets or sets the end date. + + The end date. + + + + Class ChannelQuery. + + + + + Gets or sets the type of the channel. + + The type of the channel. + + + + Gets or sets a value indicating whether this instance is favorite. + + null if [is favorite] contains no value, true if [is favorite]; otherwise, false. + + + + Gets or sets a value indicating whether this instance is liked. + + null if [is liked] contains no value, true if [is liked]; otherwise, false. + + + + Gets or sets a value indicating whether this instance is disliked. + + null if [is disliked] contains no value, true if [is disliked]; otherwise, false. + + + + Gets or sets a value indicating whether [enable favorite sorting]. + + true if [enable favorite sorting]; otherwise, false. + + + + Gets or sets the user identifier. + + The user identifier. + + + + Gets or sets the start index. Used for paging. + + The start index. + + + + Gets or sets the maximum number of items to return. + + The limit. + + + + Gets or sets a value indicating whether [add current program]. + + true if [add current program]; otherwise, false. + + + + Gets or sets a value whether to return news or not. + + If set to null, all programs will be returned. + + + + Gets or sets a value whether to return movies or not. + + If set to null, all programs will be returned. + + + + Gets or sets a value indicating whether this instance is kids. + + null if [is kids] contains no value, true if [is kids]; otherwise, false. + + + + Gets or sets a value indicating whether this instance is sports. + + null if [is sports] contains no value, true if [is sports]; otherwise, false. + + + + Gets or sets the sort order to return results with. + + The sort order. + + + + Gets or sets the services. + + The services. + + + + Gets or sets a value indicating whether this instance is enabled. + + true if this instance is enabled; otherwise, false. + + + + Gets or sets the enabled users. + + The enabled users. + + + + Class ServiceInfo. + + + + + Gets or sets the name. + + The name. + + + + Gets or sets the home page URL. + + The home page URL. + + + + Gets or sets the status. + + The status. + + + + Gets or sets the status message. + + The status message. + + + + Gets or sets the version. + + The version. + + + + Gets or sets a value indicating whether this instance has update available. + + true if this instance has update available; otherwise, false. + + + + Gets or sets a value indicating whether this instance is visible. + + true if this instance is visible; otherwise, false. + + + + Class RecordingQuery. + + + + + Gets or sets the channel identifier. + + The channel identifier. + + + + Gets or sets the user identifier. + + The user identifier. + + + + Gets or sets the identifier. + + The identifier. + + + + Gets or sets the start index. Use for paging. + + The start index. + + + + Gets or sets the maximum number of items to return. + + The limit. + + + + Gets or sets the status. + + The status. + + + + Gets or sets a value indicating whether this instance is in progress. + + null if [is in progress] contains no value, true if [is in progress]; otherwise, false. + + + + Gets or sets the series timer identifier. + + The series timer identifier. + + + + Gets or sets the fields to return within the items, in addition to basic information. + + The fields. + + + + Class SeriesTimerInfoDto. + + + + + Gets or sets a value indicating whether [record any time]. + + true if [record any time]; otherwise, false. + + + + Gets or sets a value indicating whether [record any channel]. + + true if [record any channel]; otherwise, false. + + + + Gets or sets a value indicating whether [record new only]. + + true if [record new only]; otherwise, false. + + + + Gets or sets the days. + + The days. + + + + Gets or sets the day pattern. + + The day pattern. + + + + Gets or sets the image tags. + + The image tags. + + + + Gets or sets the parent thumb item id. + + The parent thumb item id. + + + + Gets or sets the parent thumb image tag. + + The parent thumb image tag. + + + + Gets or sets the parent primary image item identifier. + + The parent primary image item identifier. + + + + Gets or sets the parent primary image tag. + + The parent primary image tag. + + + + Gets or sets the sort by - SortName, Priority. + + The sort by. + + + + Gets or sets the sort order. + + The sort order. + + + + Gets or sets the status. + + The status. + + + + Gets or sets the series timer identifier. + + The series timer identifier. + + + + Gets or sets the external series timer identifier. + + The external series timer identifier. + + + + Gets or sets the run time ticks. + + The run time ticks. + + + + Gets or sets the program information. + + The program information. + + + + Gets or sets the channel identifier. + + The channel identifier. + + + + Gets or sets the series timer identifier. + + The series timer identifier. + + + + LyricResponse model. + + + + + Gets or sets Metadata for the lyrics. + + + + + Gets or sets a collection of individual lyric lines. + + + + + The information for a raw lyrics file before parsing. + + + + + Initializes a new instance of the class. + + The name. + The content, must not be empty. + + + + Gets or sets the name of the lyrics file. This must include the file extension. + + + + + Gets or sets the contents of the file. + + + + + Lyric model. + + + + + Initializes a new instance of the class. + + The lyric text. + The lyric start time in ticks. + The time-aligned cues for the song's lyrics. + + + + Gets the text of this lyric line. + + + + + Gets the start time in ticks. + + + + + Gets the time-aligned cues for the song's lyrics. + + + + + LyricLineCue model, holds information about the timing of words within a LyricLine. + + + + + Initializes a new instance of the class. + + The start character index of the cue. + The end character index of the cue. + The start of the timestamp the lyric is synced to in ticks. + The end of the timestamp the lyric is synced to in ticks. + + + + Gets the start character index of the cue. + + + + + Gets the end character index of the cue. + + + + + Gets the timestamp the lyric is synced to in ticks. + + + + + Gets the end timestamp the lyric is synced to in ticks. + + + + + LyricMetadata model. + + + + + Gets or sets the song artist. + + + + + Gets or sets the album this song is on. + + + + + Gets or sets the title of the song. + + + + + Gets or sets the author of the lyric data. + + + + + Gets or sets the length of the song in ticks. + + + + + Gets or sets who the LRC file was created by. + + + + + Gets or sets the lyric offset compared to audio in ticks. + + + + + Gets or sets the software used to create the LRC file. + + + + + Gets or sets the version of the creator used. + + + + + Gets or sets a value indicating whether this lyric is synced. + + + + + LyricResponse model. + + + + + Gets or sets the lyric stream. + + + + + Gets or sets the lyric format. + + + + + Lyric search request. + + + + + Gets or sets the media path. + + + + + Gets or sets the album artist names. + + + + + Gets or sets the artist names. + + + + + Gets or sets the album name. + + + + + Gets or sets the song name. + + + + + Gets or sets the track duration in ticks. + + + + + + + + Gets or sets a value indicating whether to search all providers. + + + + + Gets or sets the list of disabled lyric fetcher names. + + + + + Gets or sets the order of lyric fetchers. + + + + + Gets or sets a value indicating whether this request is automated. + + + + + The remote lyric info dto. + + + + + Gets or sets the id for the lyric. + + + + + Gets the provider name. + + + + + Gets the lyrics. + + + + + Upload lyric dto. + + + + + Gets or sets the lyrics file. + + + + + How is the audio index determined. + + + + + The default index when no preference is specified. + + + + + The index is calculated whether the track is marked as default or not. + + + + + The index is calculated whether the track is in preferred language or not. + + + + + The index is specified by the user. + + + + + Represents the result of BDInfo output. + + + + + Gets or sets the media streams. + + The media streams. + + + + Gets or sets the run time ticks. + + The run time ticks. + + + + Gets or sets the files. + + The files. + + + + Gets or sets the playlist name. + + The playlist name. + + + + Gets or sets the chapters. + + The chapters. + + + + Interface IBlurayExaminer. + + + + + Gets the disc info. + + The path. + BlurayDiscInfo. + + + + Gets or sets the album. + + The album. + + + + Gets or sets the artists. + + The artists. + + + + Gets or sets the album artists. + + The album artists. + + + + Gets or sets the studios. + + The studios. + + + + Gets or sets the official rating. + + The official rating. + + + + Gets or sets the official rating description. + + The official rating description. + + + + Gets or sets the overview. + + The overview. + + + + Class PlaybackInfoResponse. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the media sources. + + The media sources. + + + + Gets or sets the play session identifier. + + The play session identifier. + + + + Gets or sets the error code. + + The error code. + + + + Api model for MediaSegment's. + + + + + Gets or sets the id of the media segment. + + + + + Gets or sets the id of the associated item. + + + + + Gets or sets the type of content this segment defines. + + + + + Gets or sets the start of the segment. + + + + + Gets or sets the end of the segment. + + + + + Model containing the arguments for enumerating the requested media item. + + + + + Gets the Id to the BaseItem the segments should be extracted from. + + + + + Gets existing media segments generated on an earlier scan by this provider. + + + + + Base network object class. + + + + + Initializes a new instance of the class. + + The . + The . + The interface name. + + + + Initializes a new instance of the class. + + The . + The . + + + + Gets or sets the object's IP address. + + + + + Gets or sets the object's IP address. + + + + + Gets or sets the interface index. + + + + + Gets or sets a value indicating whether the network supports multicast. + + + + + Gets or sets the interface name. + + + + + Gets the AddressFamily of the object. + + + + + Implemented by components that can create specific socket configurations. + + + + + Creates a new unicast socket using the specified local port number. + + The local port to bind to. + A new unicast socket using the specified local port number. + + + + Class MimeTypes. + + + + For more information on MIME types: + + http://en.wikipedia.org/wiki/Internet_media_type + https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types + http://www.iana.org/assignments/media-types/media-types.xhtml + + + + + + Any extension in this list is considered a video file. + + + + + Used for extensions not in or to override them. + + + + + Gets the type of the MIME. + + The filename to find the MIME type of. + The default value to return if no fitting MIME type is found. + The correct MIME type for the given filename, or if it wasn't found. + + + + Class holding information for a published server URI override. + + + + + Initializes a new instance of the class. + + The . + The override. + A value indicating whether the override is for internal requests. + A value indicating whether the override is for external requests. + + + + Gets or sets the object's IP address. + + + + + Gets or sets the override URI. + + + + + Gets or sets a value indicating whether the override should be applied to internal requests. + + + + + Gets or sets a value indicating whether the override should be applied to external requests. + + + + + A playlist creation request. + + + + + Gets or sets the name. + + + + + Gets or sets the list of items. + + + + + Gets or sets the media type. + + + + + Gets or sets the user id. + + + + + Gets or sets the user permissions. + + + + + Gets or sets a value indicating whether the playlist is public. + + + + + Initializes a new instance of the class. + + The playlist identifier. + + + + A playlist update request. + + + + + Gets or sets the id of the playlist. + + + + + Gets or sets the id of the user updating the playlist. + + + + + Gets or sets the name of the playlist. + + + + + Gets or sets item ids to add to the playlist. + + + + + Gets or sets the playlist users. + + + + + Gets or sets a value indicating whether the playlist is public. + + + + + A playlist user update request. + + + + + Gets or sets the id of the playlist. + + + + + Gets or sets the id of the updated user. + + + + + Gets or sets a value indicating whether the user can edit the playlist. + + + + + Class BasePluginConfiguration. + + + + + Gets the plugin pages. + + The plugin pages. + + + + This is a serializable stub class that is used by the api to provide information about installed plugins. + + + + + Initializes a new instance of the class. + + The plugin name. + The plugin . + The plugin description. + The . + True if this plugin can be uninstalled. + + + + Gets or sets the name. + + + + + Gets or sets the version. + + + + + Gets or sets the name of the configuration file. + + + + + Gets or sets the description. + + + + + Gets or sets the unique id. + + + + + Gets or sets a value indicating whether the plugin can be uninstalled. + + + + + Gets or sets a value indicating whether this plugin has a valid image. + + + + + Gets or sets a value indicating the status of the plugin. + + + + + Defines the . + + + + + Gets or sets the name of the plugin. + + + + + Gets or sets the display name of the plugin. + + + + + Gets or sets the resource path. + + + + + Gets or sets a value indicating whether this plugin should appear in the main menu. + + + + + Gets or sets the menu section. + + + + + Gets or sets the menu icon. + + + + + Plugin load status. + + + + + This plugin requires a restart in order for it to load. This is a memory only status. + The actual status of the plugin after reload is present in the manifest. + eg. A disabled plugin will still be active until the next restart, and so will have a memory status of Restart, + but a disk manifest status of Disabled. + + + + + This plugin is currently running. + + + + + This plugin has been marked as disabled. + + + + + This plugin does not meet the TargetAbi requirements. + + + + + This plugin caused an error when instantiated (either DI loop, or exception). + + + + + This plugin has been superseded by another version. + + + + + [DEPRECATED] See Superseded. + + + + + An attempt to remove this plugin from disk will happen at every restart. + It will not be loaded, if unable to do so. + + + + + Represents the external id information for serialization to the client. + + + + + Initializes a new instance of the class. + + Name of the external id provider (IE: IMDB, MusicBrainz, etc). + Key for this id. This key should be unique across all providers. + Specific media type for this id. + + + + Gets or sets the display name of the external id provider (IE: IMDB, MusicBrainz, etc). + + + + + Gets or sets the unique key for this id. This key should be unique across all providers. + + + + + Gets or sets the specific media type for this id. This is used to distinguish between the different + external id types for providers with multiple ids. + A null value indicates there is no specific media type associated with the external id, or this is the + default id for the external provider so there is no need to specify a type. + + + This can be used along with the to localize the external id on the client. + + + + + The specific media type of an . + + + Client applications may use this as a translation key. + + + + + A music album. + + + + + The artist of a music album. + + + + + The artist of a media item. + + + + + A boxed set of media. + + + + + A series episode. + + + + + A movie. + + + + + An alternative artist apart from the main artist. + + + + + A person. + + + + + A release group. + + + + + A single season of a series. + + + + + A series. + + + + + A music track. + + + + + A book. + + + + + A music recording. + + + + + Gets or sets the name. + + The name. + + + + Gets or sets the type of the item. + + The type of the item. + + + + Class ImageProviderInfo. + + + + + Initializes a new instance of the class. + + The name of the image provider. + The image types supported by the image provider. + + + + Gets the name. + + The name. + + + + Gets the supported image types. + + + + + Lyric provider info. + + + + + Gets the provider name. + + + + + Gets the provider id. + + + + + Class RemoteImageInfo. + + + + + Gets or sets the name of the provider. + + The name of the provider. + + + + Gets or sets the URL. + + The URL. + + + + Gets or sets a url used for previewing a smaller version. + + + + + Gets or sets the height. + + The height. + + + + Gets or sets the width. + + The width. + + + + Gets or sets the community rating. + + The community rating. + + + + Gets or sets the vote count. + + The vote count. + + + + Gets or sets the language. + + The language. + + + + Gets or sets the type. + + The type. + + + + Gets or sets the type of the rating. + + The type of the rating. + + + + Initializes a new instance of the class. + + The name of the image provider. + + + + Class RemoteImageResult. + + + + + Gets or sets the images. + + The images. + + + + Gets or sets the total record count. + + The total record count. + + + + Gets or sets the providers. + + The providers. + + + + The remote lyric info. + + + + + Gets or sets the id for the lyric. + + + + + Gets the provider name. + + + + + Gets the lyric metadata. + + + + + Gets the lyrics. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name. + + The name. + + + + Gets or sets the provider ids. + + The provider ids. + + + + Gets or sets the year. + + The year. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Used to control the data that gets attached to DtoBaseItems. + + + + + The air time. + + + + + The can delete. + + + + + The can download. + + + + + The channel information. + + + + + The chapters. + + + + + The trickplay manifest. + + + + + The child count. + + + + + The cumulative run time ticks. + + + + + The custom rating. + + + + + The date created of the item. + + + + + The date last media added. + + + + + Item display preferences. + + + + + The etag. + + + + + The external urls. + + + + + Genres. + + + + + The item counts. + + + + + The media source count. + + + + + The media versions. + + + + + The original title. + + + + + The item overview. + + + + + The id of the item's parent. + + + + + The physical path of the item. + + + + + The list of people for the item. + + + + + Value indicating whether playback access is granted. + + + + + The production locations. + + + + + The ids from IMDb, TMDb, etc. + + + + + The aspect ratio of the primary image. + + + + + The recursive item count. + + + + + The settings. + + + + + The series studio. + + + + + The sort name of the item. + + + + + The special episode numbers. + + + + + The studios of the item. + + + + + The taglines of the item. + + + + + The tags. + + + + + The trailer url of the item. + + + + + The media streams. + + + + + The season user data. + + + + + The last time metadata was refreshed. + + + + + The last time metadata was saved. + + + + + The refresh state. + + + + + The channel image. + + + + + Value indicating whether media source display is enabled. + + + + + The width. + + + + + The height. + + + + + The external Ids. + + + + + The local trailer count. + + + + + Value indicating whether the item is HD. + + + + + The special feature count. + + + + + Enum ItemFilter. + + + + + The item is a folder. + + + + + The item is not folder. + + + + + The item is unplayed. + + + + + The item is played. + + + + + The item is a favorite. + + + + + The item is resumable. + + + + + The likes. + + + + + The dislikes. + + + + + The is favorite or likes. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the user to localize search results for. + + The user id. + + + + Gets or sets the parent id. + Specify this to localize the search to a specific item or folder. Omit to use the root. + + The parent id. + + + + Gets or sets the start index. Used for paging. + + The start index. + + + + Gets or sets the maximum number of items to return. + + The limit. + + + + Gets or sets the fields to return within the items, in addition to basic information. + + The fields. + + + + Gets or sets the include item types. + + The include item types. + + + + Gets or sets a value indicating whether this instance is played. + + null if [is played] contains no value, true if [is played]; otherwise, false. + + + + Gets or sets a value indicating whether [group items]. + + true if [group items]; otherwise, false. + + + + Gets or sets a value indicating whether [enable images]. + + null if [enable images] contains no value, true if [enable images]; otherwise, false. + + + + Gets or sets the image type limit. + + The image type limit. + + + + Gets or sets the enable image types. + + The enable image types. + + + + Initializes a new instance of the class. + + + + + Gets or sets the user. + + The user. + + + + Gets or sets the parent identifier. + + The parent identifier. + + + + Gets or sets the series id. + + The series id. + + + + Gets or sets the start index. Use for paging. + + The start index. + + + + Gets or sets the maximum number of items to return. + + The limit. + + + + Gets or sets the enable image types. + + The enable image types. + + + + Gets or sets a value indicating the oldest date for a show to appear in Next Up. + + + + + Gets or sets a value indicating whether to include resumable episodes as next up. + + + + + Gets or sets a value indicating whether getting rewatching next up list. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Query result container. + + The type of item contained in the query result. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The list of items. + + + + Initializes a new instance of the class. + + The start index that was used to build the item list. + The total count of items. + The list of items. + + + + Gets or sets the items. + + The items. + + + + Gets or sets the total number of records available. + + The total record count. + + + + Gets or sets the index of the first record in Items. + + First record index. + + + + Class ThemeMediaResult. + + + + + Gets or sets the owner id. + + The owner id. + + + + Stores the state of an quick connect request. + + + + + Initializes a new instance of the class. + + The secret used to query the request state. + The code used to allow the request. + The time when the request was created. + The requesting device id. + The requesting device name. + The requesting app name. + The requesting app version. + + + + Gets or sets a value indicating whether this request is authorized. + + + + + Gets the secret value used to uniquely identify this request. Can be used to retrieve authentication information. + + + + + Gets the user facing code used so the user can quickly differentiate this request from others. + + + + + Gets the requesting device id. + + + + + Gets the requesting device name. + + + + + Gets the requesting app name. + + + + + Gets the requesting app version. + + + + + Gets or sets the DateTime that this request was created. + + + + + Class SearchHintResult. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the item id. + + The item id. + + + + Gets or sets the item id. + + The item id. + + + + Gets or sets the name. + + The name. + + + + Gets or sets the matched term. + + The matched term. + + + + Gets or sets the index number. + + The index number. + + + + Gets or sets the production year. + + The production year. + + + + Gets or sets the parent index number. + + The parent index number. + + + + Gets or sets the image tag. + + The image tag. + + + + Gets or sets the thumb image tag. + + The thumb image tag. + + + + Gets or sets the thumb image item identifier. + + The thumb image item identifier. + + + + Gets or sets the backdrop image tag. + + The backdrop image tag. + + + + Gets or sets the backdrop image item identifier. + + The backdrop image item identifier. + + + + Gets or sets the type. + + The type. + + + + Gets or sets a value indicating whether this instance is folder. + + true if this instance is folder; otherwise, false. + + + + Gets or sets the run time ticks. + + The run time ticks. + + + + Gets or sets the type of the media. + + The type of the media. + + + + Gets or sets the start date. + + The start date. + + + + Gets or sets the end date. + + The end date. + + + + Gets or sets the series. + + The series. + + + + Gets or sets the status. + + The status. + + + + Gets or sets the album. + + The album. + + + + Gets or sets the album id. + + The album id. + + + + Gets or sets the album artist. + + The album artist. + + + + Gets or sets the artists. + + The artists. + + + + Gets or sets the song count. + + The song count. + + + + Gets or sets the episode count. + + The episode count. + + + + Gets or sets the channel identifier. + + The channel identifier. + + + + Gets or sets the name of the channel. + + The name of the channel. + + + + Gets or sets the primary image aspect ratio. + + The primary image aspect ratio. + + + + Class SearchHintResult. + + + + + Initializes a new instance of the class. + + The search hints. + The total record count. + + + + Gets the search hints. + + The search hints. + + + + Gets the total record count. + + The total record count. + + + + Initializes a new instance of the class. + + + + + Gets or sets the user to localize search results for. + + The user id. + + + + Gets or sets the search term. + + The search term. + + + + Gets or sets the start index. Used for paging. + + The start index. + + + + Gets or sets the maximum number of items to return. + + The limit. + + + + Deserializes from stream. + + The type. + The stream. + System.Object. + + + + Serializes to stream. + + The obj. + The stream. + + + + Serializes to file. + + The obj. + The file. + + + + Deserializes from file. + + The type. + The file. + System.Object. + + + + Deserializes from bytes. + + The type. + The buffer. + System.Object. + + + + Class BrowseRequest. + + + + + Gets or sets the item type. + + The type of the item. + + + + Gets or sets the item id. + + The item id. + + + + Gets or sets the name of the item. + + The name of the item. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The command arguments. + + + + This exists simply to identify a set of known commands. + + + + + Enum PlaybackOrder. + + + + + Sorted playlist. + + + + + Shuffled playlist. + + + + + Class PlaybackProgressInfo. + + + + + Gets or sets a value indicating whether this instance can seek. + + true if this instance can seek; otherwise, false. + + + + Gets or sets the item. + + The item. + + + + Gets or sets the item identifier. + + The item identifier. + + + + Gets or sets the session id. + + The session id. + + + + Gets or sets the media version identifier. + + The media version identifier. + + + + Gets or sets the index of the audio stream. + + The index of the audio stream. + + + + Gets or sets the index of the subtitle stream. + + The index of the subtitle stream. + + + + Gets or sets a value indicating whether this instance is paused. + + true if this instance is paused; otherwise, false. + + + + Gets or sets a value indicating whether this instance is muted. + + true if this instance is muted; otherwise, false. + + + + Gets or sets the position ticks. + + The position ticks. + + + + Gets or sets the volume level. + + The volume level. + + + + Gets or sets the play method. + + The play method. + + + + Gets or sets the live stream identifier. + + The live stream identifier. + + + + Gets or sets the play session identifier. + + The play session identifier. + + + + Gets or sets the repeat mode. + + The repeat mode. + + + + Gets or sets the playback order. + + The playback order. + + + + Class PlaybackStartInfo. + + + + + Class PlaybackStopInfo. + + + + + Gets or sets the item. + + The item. + + + + Gets or sets the item identifier. + + The item identifier. + + + + Gets or sets the session id. + + The session id. + + + + Gets or sets the media version identifier. + + The media version identifier. + + + + Gets or sets the position ticks. + + The position ticks. + + + + Gets or sets the live stream identifier. + + The live stream identifier. + + + + Gets or sets the play session identifier. + + The play session identifier. + + + + Gets or sets a value indicating whether this is failed. + + true if failed; otherwise, false. + + + + Enum PlayCommand. + + + + + The play now. + + + + + The play next. + + + + + The play last. + + + + + The play instant mix. + + + + + The play shuffle. + + + + + Gets or sets the now playing position ticks. + + The now playing position ticks. + + + + Gets or sets a value indicating whether this instance can seek. + + true if this instance can seek; otherwise, false. + + + + Gets or sets a value indicating whether this instance is paused. + + true if this instance is paused; otherwise, false. + + + + Gets or sets a value indicating whether this instance is muted. + + true if this instance is muted; otherwise, false. + + + + Gets or sets the volume level. + + The volume level. + + + + Gets or sets the index of the now playing audio stream. + + The index of the now playing audio stream. + + + + Gets or sets the index of the now playing subtitle stream. + + The index of the now playing subtitle stream. + + + + Gets or sets the now playing media version identifier. + + The now playing media version identifier. + + + + Gets or sets the play method. + + The play method. + + + + Gets or sets the repeat mode. + + The repeat mode. + + + + Gets or sets the playback order. + + The playback order. + + + + Gets or sets the now playing live stream identifier. + + The live stream identifier. + + + + Class PlayRequest. + + + + + Gets or sets the item ids. + + The item ids. + + + + Gets or sets the start position ticks that the first item should be played at. + + The start position ticks. + + + + Gets or sets the play command. + + The play command. + + + + Gets or sets the controlling user identifier. + + The controlling user identifier. + + + + Enum PlaystateCommand. + + + + + The stop. + + + + + The pause. + + + + + The unpause. + + + + + The next track. + + + + + The previous track. + + + + + The seek. + + + + + The rewind. + + + + + The fast forward. + + + + + The play pause. + + + + + Gets or sets the controlling user identifier. + + The controlling user identifier. + + + + The different kinds of messages that are used in the WebSocket api. + + + + + Class SessionUserInfo. + + + + + Gets or sets the user identifier. + + The user identifier. + + + + Gets or sets the name of the user. + + The name of the user. + + + + Class holding information on a running transcode. + + + + + Gets or sets the thread count used for encoding. + + + + + Gets or sets the thread count used for encoding. + + + + + Gets or sets the thread count used for encoding. + + + + + Gets or sets a value indicating whether the video is passed through. + + + + + Gets or sets a value indicating whether the audio is passed through. + + + + + Gets or sets the bitrate. + + + + + Gets or sets the framerate. + + + + + Gets or sets the completion percentage. + + + + + Gets or sets the video width. + + + + + Gets or sets the video height. + + + + + Gets or sets the audio channels. + + + + + Gets or sets the hardware acceleration type. + + + + + Gets or sets the transcode reasons. + + + + + Class UserDataChangeInfo. + + + + + Gets or sets the user id. + + The user id. + + + + Gets or sets the user data list. + + The user data list. + + + + Class FontFile. + + + + + Gets or sets the name. + + The name. + + + + Gets or sets the size. + + The size. + + + + Gets or sets the date created. + + The date created. + + + + Gets or sets the date modified. + + The date modified. + + + + Class GroupInfoDto. + + + + + Initializes a new instance of the class. + + The group identifier. + The group name. + The group state. + The participants. + The date when this DTO has been created. + + + + Gets the group identifier. + + The group identifier. + + + + Gets the group name. + + The group name. + + + + Gets the group state. + + The group state. + + + + Gets the participants. + + The participants. + + + + Gets the date when this DTO has been created. + + The date when this DTO has been created. + + + + Enum GroupQueueMode. + + + + + Insert items at the end of the queue. + + + + + Insert items after the currently playing item. + + + + + Enum GroupRepeatMode. + + + + + Repeat one item only. + + + + + Cycle the playlist. + + + + + Do not repeat. + + + + + Enum GroupShuffleMode. + + + + + Sorted playlist. + + + + + Shuffled playlist. + + + + + Enum GroupState. + + + + + The group is in idle state. No media is playing. + + + + + The group is in waiting state. Playback is paused. Will start playing when users are ready. + + + + + The group is in paused state. Playback is paused. Will resume on play command. + + + + + The group is in playing state. Playback is advancing. + + + + + Class GroupStateUpdate. + + + + + Initializes a new instance of the class. + + The state of the group. + The reason of the state change. + + + + Gets the state of the group. + + The state of the group. + + + + Gets the reason of the state change. + + The reason of the state change. + + + + Group update without data. + + The type of the update data. + + + + Initializes a new instance of the class. + + The group identifier. + The update data. + + + + Gets the group identifier. + + The group identifier. + + + + Gets the update data. + + The update data. + + + + Gets the update type. + + The update type. + + + + Enum GroupUpdateType. + + + + + The user-joined update. Tells members of a group about a new user. + + + + + The user-left update. Tells members of a group that a user left. + + + + + The group-joined update. Tells a user that the group has been joined. + + + + + The group-left update. Tells a user that the group has been left. + + + + + The group-state update. Tells members of the group that the state changed. + + + + + The play-queue update. Tells a user the playing queue of the group. + + + + + The not-in-group error. Tells a user that they don't belong to a group. + + + + + The group-does-not-exist error. Sent when trying to join a non-existing group. + + + + + The library-access-denied error. Sent when a user tries to join a group without required access to the library. + + + + + Enum PlaybackRequestType. + + + + + A user is setting a new playlist. + + + + + A user is changing the playlist item. + + + + + A user is removing items from the playlist. + + + + + A user is moving an item in the playlist. + + + + + A user is adding items to the playlist. + + + + + A user is requesting an unpause command for the group. + + + + + A user is requesting a pause command for the group. + + + + + A user is requesting a stop command for the group. + + + + + A user is requesting a seek command for the group. + + + + + A user is signaling that playback is buffering. + + + + + A user is signaling that playback resumed. + + + + + A user is requesting next item in playlist. + + + + + A user is requesting previous item in playlist. + + + + + A user is setting the repeat mode. + + + + + A user is setting the shuffle mode. + + + + + A user is reporting their ping. + + + + + A user is requesting to be ignored on group wait. + + + + + Class PlayQueueUpdate. + + + + + Initializes a new instance of the class. + + The reason for the update. + The UTC time of the last change to the playing queue. + The playlist. + The playing item index in the playlist. + The start position ticks. + The playing item status. + The shuffle mode. + The repeat mode. + + + + Gets the request type that originated this update. + + The reason for the update. + + + + Gets the UTC time of the last change to the playing queue. + + The UTC time of the last change to the playing queue. + + + + Gets the playlist. + + The playlist. + + + + Gets the playing item index in the playlist. + + The playing item index in the playlist. + + + + Gets the start position ticks. + + The start position ticks. + + + + Gets a value indicating whether the current item is playing. + + The playing item status. + + + + Gets the shuffle mode. + + The shuffle mode. + + + + Gets the repeat mode. + + The repeat mode. + + + + Enum PlayQueueUpdateReason. + + + + + A user is requesting to play a new playlist. + + + + + A user is changing the playing item. + + + + + A user is removing items from the playlist. + + + + + A user is moving an item in the playlist. + + + + + A user is adding items the queue. + + + + + A user is adding items to the queue, after the currently playing item. + + + + + A user is requesting the next item in queue. + + + + + A user is requesting the previous item in queue. + + + + + A user is changing repeat mode. + + + + + A user is changing shuffle mode. + + + + + Enum RequestType. + + + + + A user is requesting to create a new group. + + + + + A user is requesting to join a group. + + + + + A user is requesting to leave a group. + + + + + A user is requesting the list of available groups. + + + + + A user is sending a playback command to a group. + + + + + Class SendCommand. + + + + + Initializes a new instance of the class. + + The group identifier. + The playlist identifier of the playing item. + The UTC time when to execute the command. + The command. + The position ticks, for commands that require it. + The UTC time when this command has been emitted. + + + + Gets the group identifier. + + The group identifier. + + + + Gets the playlist identifier of the playing item. + + The playlist identifier of the playing item. + + + + Gets or sets the UTC time when to execute the command. + + The UTC time when to execute the command. + + + + Gets the position ticks. + + The position ticks. + + + + Gets the command. + + The command. + + + + Gets the UTC time when this command has been emitted. + + The UTC time when this command has been emitted. + + + + Enum SendCommandType. + + + + + The unpause command. Instructs users to unpause playback. + + + + + The pause command. Instructs users to pause playback. + + + + + The stop command. Instructs users to stop playback. + + + + + The seek command. Instructs users to seek to a specified time. + + + + + Used to filter the sessions of a group. + + + + + All sessions will receive the message. + + + + + Only the specified session will receive the message. + + + + + All sessions, except the current one, will receive the message. + + + + + Only sessions that are not buffering will receive the message. + + + + + + + + Initializes a new instance of the class. + + The groupId. + The data. + + + + + + + + + + Initializes a new instance of the class. + + The groupId. + The data. + + + + + + + + + + Initializes a new instance of the class. + + The groupId. + The data. + + + + + + + + + + Initializes a new instance of the class. + + The groupId. + The data. + + + + + + + + + + Initializes a new instance of the class. + + The groupId. + The data. + + + + + + + + + + Initializes a new instance of the class. + + The groupId. + The data. + + + + + + + Class QueueItem. + + + + + Initializes a new instance of the class. + + The item identifier. + + + + Gets the item identifier. + + The item identifier. + + + + Gets the playlist identifier of the item. + + The playlist identifier of the item. + + + + + + + Initializes a new instance of the class. + + The groupId. + The data. + + + + + + + + + + Initializes a new instance of the class. + + The groupId. + The data. + + + + + + + + + + Initializes a new instance of the class. + + The groupId. + The data. + + + + + + + Class UtcTimeResponse. + + + + + Initializes a new instance of the class. + + The UTC time when request has been received. + The UTC time when response has been sent. + + + + Gets the UTC time when request has been received. + + The UTC time when request has been received. + + + + Gets the UTC time when response has been sent. + + The UTC time when response has been sent. + + + + The cast receiver application model. + + + + + Gets or sets the cast receiver application id. + + + + + Gets or sets the cast receiver application name. + + + + + Contains information about a specific folder. + + + + + Gets the path of the folder in question. + + + + + Gets the free space of the underlying storage device of the . + + + + + Gets the used space of the underlying storage device of the . + + + + + Gets the kind of storage device of the . + + + + + Gets the Device Identifier. + + + + + Contains informations about a libraries storage informations. + + + + + Gets or sets the Library Id. + + + + + Gets or sets the name of the library. + + + + + Gets or sets the storage informations about the folders used in a library. + + + + + Gets or sets the date created. + + The date created. + + + + Gets or sets the date modified. + + The date modified. + + + + Gets or sets the size. + + The size. + + + + Gets or sets the name. + + The name. + + + + Gets or sets the local address. + + The local address. + + + + Gets or sets the name of the server. + + The name of the server. + + + + Gets or sets the server version. + + The version. + + + + Gets or sets the product name. This is the AssemblyProduct name. + + + + + Gets or sets the operating system. + + The operating system. + + + + Gets or sets the id. + + The id. + + + + Gets or sets a value indicating whether the startup wizard is completed. + + + Nullable for OpenAPI specification only to retain backwards compatibility in api clients. + + The startup completion status.] + + + + Class SystemInfo. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the display name of the operating system. + + The display name of the operating system. + + + + Gets or sets the package name. + + The value of the '-package' command line argument. + + + + Gets or sets a value indicating whether this instance has pending restart. + + true if this instance has pending restart; otherwise, false. + + + + Gets or sets a value indicating whether [supports library monitor]. + + true if [supports library monitor]; otherwise, false. + + + + Gets or sets the web socket port number. + + The web socket port number. + + + + Gets or sets the completed installations. + + The completed installations. + + + + Gets or sets a value indicating whether this instance can self restart. + + true. + + + + Gets or sets the program data path. + + The program data path. + + + + Gets or sets the web UI resources path. + + The web UI resources path. + + + + Gets or sets the items by name path. + + The items by name path. + + + + Gets or sets the cache path. + + The cache path. + + + + Gets or sets the log path. + + The log path. + + + + Gets or sets the internal metadata path. + + The internal metadata path. + + + + Gets or sets the transcode path. + + The transcode path. + + + + Gets or sets the list of cast receiver applications. + + + + + Gets or sets a value indicating whether this instance has update available. + + true if this instance has update available; otherwise, false. + + + + Contains informations about the systems storage. + + + + + Gets or sets the program data path. + + The program data path. + + + + Gets or sets the web UI resources path. + + The web UI resources path. + + + + Gets or sets the items by name path. + + The items by name path. + + + + Gets or sets the cache path. + + The cache path. + + + + Gets or sets the log path. + + The log path. + + + + Gets or sets the internal metadata path. + + The internal metadata path. + + + + Gets or sets the transcode path. + + The transcode path. + + + + Gets or sets the storage informations of all libraries. + + + + + Interface for configurable scheduled tasks. + + + + + Gets a value indicating whether this instance is hidden. + + true if this instance is hidden; otherwise, false. + + + + Gets a value indicating whether this instance is enabled. + + true if this instance is enabled; otherwise, false. + + + + Gets a value indicating whether this instance is logged. + + true if this instance is logged; otherwise, false. + + + + Interface IScheduledTaskWorker. + + + + + Gets the name of the task. + + The name. + + + + Gets the key of the task. + + + + + Gets the description. + + The description. + + + + Gets the category. + + The category. + + + + Executes the task. + + The progress. + The cancellation token. + Task. + + + + Gets the default triggers that define when the task will run. + + The default triggers that define when the task will run. + + + + Interface IScheduledTaskWorker. + + + + + Occurs when [task progress]. + + + + + Gets the scheduled task. + + The scheduled task. + + + + Gets the last execution result. + + The last execution result. + + + + Gets the name. + + The name. + + + + Gets the description. + + The description. + + + + Gets the category. + + The category. + + + + Gets the state. + + The state. + + + + Gets the current progress. + + The current progress. + + + + Gets or sets the triggers that define when the task will run. + + The triggers. + + + + Gets the unique id. + + The unique id. + + + + Reloads the trigger events. + + + + + Interface for the TaskManager class. + + + + + Event handler for task execution. + + + + + Event handler for task completion. + + + + + Gets the list of Scheduled Tasks. + + The scheduled tasks. + + + + Cancels if running and queue. + + An implementation of . + Task options. + + + + Cancels if running and queue. + + An implementation of . + + + + Cancels if running. + + An implementation of . + + + + Queues the scheduled task. + + An implementation of . + Task options. + + + + Queues the scheduled task. + + An implementation of . + + + + Queues the scheduled task if it is not already running. + + An implementation of . + + + + Queues the scheduled task. + + The to queue. + The to use. + + + + Adds the tasks. + + The tasks. + + + + Adds the tasks. + + The tasks. + + + + Executes the tasks. + + The tasks. + The options. + The executed tasks. + + + + Executes the tasks. + + An implementation of . + + + + Interface ITaskTrigger. + + + + + Fires when the trigger condition is satisfied and the task should run. + + + + + Gets the options of this task. + + + + + Stars waiting for the trigger action. + + Result of the last run triggered task. + The . + The name of the task. + Whether or not this is fired during startup. + + + + Stops waiting for the trigger action. + + + + + Class ScheduledTaskHelpers. + + + + + Gets the task info. + + The task. + TaskInfo. + + + + Class containing event arguments for task completion. + + + + + Initializes a new instance of the class. + + Instance of the interface. + The task result. + + + + Gets the task. + + The task. + + + + Gets the result. + + The result. + + + + Enum TaskCompletionStatus. + + + + + The completed. + + + + + The failed. + + + + + Manually cancelled by the user. + + + + + Aborted due to a system failure or shutdown. + + + + + Class TaskInfo. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name. + + The name. + + + + Gets or sets the state of the task. + + The state of the task. + + + + Gets or sets the progress. + + The progress. + + + + Gets or sets the id. + + The id. + + + + Gets or sets the last execution result. + + The last execution result. + + + + Gets or sets the triggers. + + The triggers. + + + + Gets or sets the description. + + The description. + + + + Gets or sets the category. + + The category. + + + + Gets or sets a value indicating whether this instance is hidden. + + true if this instance is hidden; otherwise, false. + + + + Gets or sets the key. + + The key. + + + + Class containing options for tasks. + + + + + Gets or sets the maximum runtime in ticks. + + The ticks. + + + + Class TaskExecutionInfo. + + + + + Gets or sets the start time UTC. + + The start time UTC. + + + + Gets or sets the end time UTC. + + The end time UTC. + + + + Gets or sets the status. + + The status. + + + + Gets or sets the name. + + The name. + + + + Gets or sets the key. + + The key. + + + + Gets or sets the id. + + The id. + + + + Gets or sets the error message. + + The error message. + + + + Gets or sets the long error message. + + The long error message. + + + + Enum TaskState. + + + + + The idle. + + + + + The cancelling. + + + + + The running. + + + + + Class TaskTriggerInfo. + + + + + Gets or sets the type. + + The type. + + + + Gets or sets the time of day. + + The time of day. + + + + Gets or sets the interval. + + The interval. + + + + Gets or sets the day of week. + + The day of week. + + + + Gets or sets the maximum runtime ticks. + + The maximum runtime ticks. + + + + Enum TaskTriggerInfoType. + + + + + The daily trigger. + + + + + The weekly trigger. + + + + + The interval trigger. + + + + + The startup trigger. + + + + + Class InstallationInfo. + + + + + Gets or sets the Id. + + The Id. + + + + Gets or sets the name. + + The name. + + + + Gets or sets the version. + + The version. + + + + Gets or sets the changelog for this version. + + The changelog. + + + + Gets or sets the source URL. + + The source URL. + + + + Gets or sets a checksum for the binary. + + The checksum. + + + + Gets or sets package information for the installation. + + The package information. + + + + Class PackageInfo. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the name. + + The name. + + + + Gets or sets a long description of the plugin containing features or helpful explanations. + + The description. + + + + Gets or sets a short overview of what the plugin does. + + The overview. + + + + Gets or sets the owner. + + The owner. + + + + Gets or sets the category. + + The category. + + + + Gets or sets the guid of the assembly associated with this plugin. + This is used to identify the proper item for automatic updates. + + The name. + + + + Gets or sets the versions. + + The versions. + + + + Gets or sets the image url for the package. + + + + + Class RepositoryInfo. + + + + + Gets or sets the name. + + The name. + + + + Gets or sets the URL. + + The URL. + + + + Gets or sets a value indicating whether the repository is enabled. + + true if enabled. + + + + Defines the class. + + + + + Gets or sets the version. + + The version. + + + + Gets the version as a . + + + + + Gets or sets the changelog for this version. + + The changelog. + + + + Gets or sets the ABI that this version was built against. + + The target ABI version. + + + + Gets or sets the source URL. + + The source URL. + + + + Gets or sets a checksum for the binary. + + The checksum. + + + + Gets or sets a timestamp of when the binary was built. + + The timestamp. + + + + Gets or sets the repository name. + + + + + Gets or sets the repository url. + + + + + Gets or sets the action. + + The action. + + + + Gets or sets the pin file. + + The pin file. + + + + Gets or sets the pin expiration date. + + The pin expiration date. + + + + Gets or sets a value indicating whether this is success. + + true if success; otherwise, false. + + + + Gets or sets the users reset. + + The users reset. + + + + Gets or sets a value indicating whether this instance is administrator. + + true if this instance is administrator; otherwise, false. + + + + Gets or sets a value indicating whether this instance is hidden. + + true if this instance is hidden; otherwise, false. + + + + Gets or sets a value indicating whether this instance can manage collections. + + true if this instance is hidden; otherwise, false. + + + + Gets or sets a value indicating whether this instance can manage subtitles. + + true if this instance is allowed; otherwise, false. + + + + Gets or sets a value indicating whether this user can manage lyrics. + + + + + Gets or sets a value indicating whether this instance is disabled. + + true if this instance is disabled; otherwise, false. + + + + Gets or sets the max parental rating. + + The max parental rating. + + + + Gets or sets a value indicating whether [enable synchronize]. + + true if [enable synchronize]; otherwise, false. + + + + Gets or sets a value indicating what SyncPlay features the user can access. + + Access level to SyncPlay features. + + + + Provides utilities for mapping file names and extensions to MIME-types. + + + + + The fallback MIME-type. Defaults to application/octet-stream. + + + + + Attempts to fetch all available file extensions for a MIME-type. + + The name of the MIME-type + All available extensions for the given MIME-type + + + + Tries to get the MIME-type for the given file name. + + The name of the file. + The MIME-type for the given file name. + true if a MIME-type was found, false otherwise. + + + + Gets the MIME-type for the given file name, + or if a mapping doesn't exist. + + The name of the file. + The MIME-type for the given file name. + +
+
diff --git a/MediaBrowser.Model/obj/Debug/net10.0/MediaBro.1E970F38.Up2Date b/MediaBrowser.Model/obj/Debug/net10.0/MediaBro.1E970F38.Up2Date new file mode 100644 index 00000000..e69de29b diff --git a/MediaBrowser.Model/obj/Debug/net10.0/MediaBrowser.Model.csproj.AssemblyReference.cache b/MediaBrowser.Model/obj/Debug/net10.0/MediaBrowser.Model.csproj.AssemblyReference.cache index 7294dcae44ad5e7941122cd1e3d6f07c9704a6cd..d9d9f76fdc141790ac19c5e146a7459c19ce54a7 100644 GIT binary patch delta 694 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
DjgBFQ&$ad^}FL@T+Djyvc=MGs({3{kv{5w#FL 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 }mp9injeU4Y_ zKA*W-_xYi#b)O%;TKD-Q*Jz&~y+-^0*frl|=UJ{fV~>}vIctv}zvkQR@e}p&*=yco zzrOiet-SSGZPi?>GdX;%&g713btZRRt224SwK|hGU8^&B^R+sYw_K|;>8{n89J^L$ za`&}5lM~nKOio^_Gr3Ur{K2~C57j+?xbE}Bbvok7>vY8XuhS7vU8f^Hc%6wt_mn-R>%QL}&t3P|?eWR$CVPD9y1!>v@xi*!57m8s z*!KCVaQV6)ZeJDtZGHTu`ndaQH8<49*VV`0ZjW}CUae>3XYA4L)vI+@AFsduME&)% zuhtnp_Zm%~e~qR~{q;-r*PncirZ2xn=l_}4==@)Kjn4n>>$U#G^;&=Odab$tdaXHi zz1BQ*g}QRNK}Ub-1|9vAH|Xdu-=OF8mAd|Ob$z%| zN8GtlN4)Ar9p%~^b(HIG)V4R*>8*9z)al_my`xU=x>0+6!;SUTa$|k9+*n^NH`Z6n zje51*UH5RJ?%`zJ!~Jy+r|KRatb2%c4`=Eg9;$nIxbESRx`#(^)a&i>x}Q|{bFS{^ z$-1AX>VDo^_w&BGpZC}Opxc4mwMbw^|&9e$NfY- z?z1=Qb^d(a+Y5DXpRd0TH|dV;+@w2p)lIr%Hy_ZQy!C+k=79Rc2h`tjKzH)41G-ml zscX8r=2%^GcU^O$t~puP+JSL|^)@IUSGr31U|tHUP`yxtyPKJexC_?ZJ=V~?*KxX&IxcOcs1 z=MQ|Vy@s!Ut?t8t*Xlmp{94_IrZ$Ibb4P9Ndadrv8(ynB^QPD8&b;}xy6U&QR#$zj zuD`pkKT+48tn2Tu>mRJsSf^*|^x^vJN9wO1tt%g^D<8K#zbcHc)mPTJy5`Bc=Bc{o zy>-p|>e1g{kN$yr^b2+WAFS&?RM&sFuK!3~|FJqPb$Y2zKW0YKAHVNr z{rXS8?uXkO!!Nu}cjI&Q@$;|KJqfSZJvsJz^>@EsO{~8@Q-A$Xoj&|}-JeHZulw`p z>vexF+@kd#yhZCjbc^=z;ajxkBe!VHM{m)ZQm2>d^y78+^|`v$=j&GCR&BL&tF}6PtG2r1R-MURx9Ut%ZO+x^ z$=W=1tIqAcx9Z&9U#B0a)0gY7KU07GN?m#FLGA7OgWB7HgWB882es|32es|tI=!P# z@2b-`)aje*^vwtB*VI8>S9h?!at`VY?>?xnf)fYzRdDj4z6$O?sIP)k2ld_R!Grp4 z6%Xob;mkpOEj)BkUkeW()Yrlz2lbic(S!O-^4LLrCVBjzK9i(_`b=`}pgxm);NYLK zS5!XuJ@$Cv;5mEz;KB3u_@RS;(H=j1@cZrYk=t}#kKU&1dh9k`*Wh#UG>rCEq`!CsJcl-No+lOw~wh!N~Z6CQ^+dg``w(T1A#~Ssg>aQQHzrMRwf1*`? zveo+gTdhCU>R1o9x=XRuT{_e1EY9^v&HZ)Fsk-LDL-km7*XV`$+M%zh_rzrp@Z|3Ucn6JKKahr<3lztsHm;mmzUn16+NjjfkA zg%5tcye0g2^-y@W`eor4t8cXJHUDZn8a`Y5d&2&E)W1F4TKz`mr^9#G{H@{7RNq7Y zT_M-}MEJY+ywSG%q44Q@I#cJ}J9XYiEq{O5+$nYb@@ZT5_2x~R-+S-dYyatc?yqj{ zjHdQ;+SGPZ+sQBVKX3DIraxwE3wM@1cLRy16r%+V1=4|D36HnO^@q)(_cn z3i%mR$CWzn&*O8|&7F&>{jKJw!k;|x3cdXR&bIsXJyP?%rnYbBrTW&?cJ_m(dK{^B z9rNB3fc{E|R78H#oK4et=WYLu$Wg%>QWX61~)R_Jg(GRNI}m{42IT(@### zpSG;~^0!Ux_oAuwg>~{D+kR)V)OMH57j3)Crq(a!GvQb6k^d?@aAGxeK2qynGipC9jPz3dM3%~hJUi7dR+_1^O8C*`!V$P`FCnvLvEewJ96(-f7G(}E4AOqd~j-A zB9Bh>nLIhw7xL^>zmQj_diyI=+v{ryI_AAo>yENc zYF%VLIJNFH>!jA5HUC%mw)^Cs%@5v}Ouddrr?z{-vd&j(yYr^jXVy(lt$*6G)=RA~ z%x9<8UABD9<{#X*(63I-U$m_KNbM)==YBf1Zja@9KTWM`n72-?JH$Gvbsh8GsdbS& zIMtuFT;C^5y{;1T(W!NrJUP{0w0zCxXYMQXvs3eDEbBU?_J7&DX7jW6Ev#FeT7RX^ zpT95IZw>1Erc?7>%hzoF>wWgy{W`Y~h`*`kN9z2u_jUBWQ}g3>{u}p2`oXFB**f1n zndnES=I1TzbB(-a^F=2!^U0}og*-deFXYv!-u{x{_IjP_cP;C4h`eU=B_|u^ZS6mO zkJNpVT7RVWn>#!D-l_Rf%X+@0o{!_^HJh(I8Cf?twf=0K_a_tm=+yjtou53J=`Ys& zO(zR^c540QI{&tl3;pWU{6))ev_JK^V(Pl(HJiszhO4ke7g>rm>trM|Cptm~axAIXEM{Y%|vsrhNMe%;i$ecdo0Yu?-`>-&zW^-q{OzSQwE z^U0}oPqR*HovhzqSvNbi{u#^l>&w*og}HtBug7n&!-%I%Z6~#z)NvB?(W&EP^5j%s z$g{Jam*sk1W<4+Ft5fSkj=pzleyq-a z>O`a;oSL7uTY*Arg7z3x4xzV4)Y`(a#top*S&&h2v&^GH89b==deliE*WK03AT ziMsC7_eibF%qOST74qykF58B`QX&LL>`^$GkJ2Vf7-J4E4AN?X1!0Wo1I$!jAgBtT7TKp z`h|6?Q|n)}to2gsub5hI|53p9emS*%k7ccwTHi94n)hU>eALu>sr8Zh;MBU)tdm-I z*3@|<){RcBf5Ni%E44l|pPX7($g@-ZGnV!BDz*K>e06Hwi*=pdAJ)lwf9&6_(CcdB z)cQS^>-{mc-(B-l;pvkN>+FZkbvvo`hfJ-PS}(Q#&eZ;Ur`8{}T<@o;^^y7D)Vi~l zb=*WhIyHa7a=m}1_M@!hX4XwktuN%+seU1^PWAS~z3u&Rs&6dozDr$S>(snsF6;F> zH9uPC_IfgP-p9>Pg@1BV{)*klXllE`sqM~K*4Ou0^Hbs9pOpIfPGa5Y)cW&v-Dgi` z`pK#JMdpQmc4~f^`9i-sHNV0<9N<1VHQ%-Tsqop8ExlBKguXNN{PoPG=Es>w<^yx7 z`RUr*&tFX4zf`k*E;M!Dq}H7`KNSwXP1c{YF`t}Tcd@QJ`8IjW=1;t>FrS@Tce$>6 z`lP&N^Sy6dn6FN)yJES1ec8X$rt{f2HQ%+Yc|+eiH9uro_eJXZq}Ct7&aAI1r?xw4 zS=-6_x-zw0WZmG@`qP%RUTXbWQ|lA!MyJ-FXP)UNr{))#7y8+$`7@SvyvwXx$Wqs{ zI<-FhmhF03@1s-mJdag=_bm+D8dRG!FE`Ds)4P3m|r*8J&vr1BN>(B{v-ZTEF@ ze%q1iufDA_b^PNsfB82=^4XeCe?ualulWbRA(Njr>+wwO{~5CULe}f#iseI_fAbCY zpZD2%`&?YL@2jTPNv+#84{i3oy{U71Jy-4ZZED?-I{)goN9L!QOUWb{Wt6VXMWh!@7p_a#M7qEGm)PlOKmUf{bpWp!O(8cqrnabr_L*p zN2mHHEZ5hWspDnllT+)SuIoO1kJLJ;^D3;Hom#(;SEu^$#oRZi`i9&()pz9Hss5;C zowwBaMCOB2>rU5o_Bvu+Vm>;xE|Vvx`ll`HI5WLe{|vp<@fYT+Q|n%=>+F4wb>R@# z@6@`6+&a~FU>{h z9=>#Y-h0gN+WgLY8}cFS@F+$+jR~K?j89|1XK=w6G2Fp@G<9Bk%=*0IA?)xd9ybqd zzVGdkd>Ruzff=91g3sWBFXBt4ejgZ)a9^;&L)hU_JZ@^cNIs1TN2k7?o*-wOob~IN zTyS>QuUqnqxaUsp8y>eM`Z+4j0NPW27Bb*k^ky;FT84^H)oJUZ29^5j%s$g@-ZLSCKf!(E)eQ+-2jo$5Ps z?^GYjgHwGXk52WOJUP`D^6XT0RKW@2xKcF9+nkVw; zRG-O{Q+*-NPW20Ub*c|<;5wY@8*=MZ-;sN#`bZv}>JvF*!3D!_=lITge9QX2)tLJJ z&@z{r_hea*Pad50_~g;4K9eV>`a+(a>KF3rRNs8%_WV0cnDL^i=l3#(H*VKA*kSL~ zej|Bss!!z6sXmh@r}{#ko$42I^Cr$8BPPsPaKYW*vAwP%cpT4S{+-+XmM{2K+q__S zGxq^IjF>QE!P!}_gSoH=&j2BJ)xnChKXnz@X`}qYsjCj`6 z=Y&Mgc#*!4!&^f5GW&gbW9swJ5wrfiRC2_Gqf^(N$&*ukAPNCvK5y1Pm!+SaniulyRKJi{r~2?UoWE0jLvEewJ96(-AIXDL zeIk!e^_e`GdcLKeN2z%s&rbCVd3CA}znAN9s&B}xQ+-G7o$4cbaH>z_(WyR@C#U*C zo}KC!^6FH7#qy!e|9E@oxDKc04Y_ry@5sGVeIyS~^@%(>)o1eLRA0!mQ~g3-o$5o+ z`8(A&Kk(FRNs+% zr}{`9oaz&KbgIwf$*I1OXQ%p=ER{D$Id4I->x zs$a;fQ++tbc{|lN=P^LMJ>wXE+; z4Snm>{IF%cpLg`VQ}biYBmLmiJdsDI`b?gj>I->xst;egJ^uzfjF>RvMN{Wp$P0$A zV?Wqo#Dp0ym|wlQ=iWlTWa@ojA&0xS``a<=eI$1nG2wYrpCdE*BDs(+o7&GpzGCV+ zc8_mu%=&r4te+>y$H|eLFk`_5!`E{k@QA7N>d42*k$je%$mh*H_W3503odB?sAWCR z4kISaSa8AS#P;WdQrFpG#Dp1(sh>|utzXDeIlOiI^E|2CkY(LJMtZ4!aMsr`^F%*7 zH9v2;KCgA%=FZG~a%$a0))o5MsrgEl%2!N1&*9$fd2O7UH{{l-z9aWe^^rU{)sJMU zoXL|@eId_I^$U4*st@;Z-cI!mxpk`V$h}j2Bo9vYi99;hXY%A!U&yml{X$-y>g}I0 zs;`HQQ+-2jo$5Ps?^GYjgHwGXk52WOJUP`D^6XT)o1eLRA0!m zQ~g3-o$A9oIDe=5hTJ;UcjVrwK9UEg`a~X`>N9zAsxRc(seU1^PW9oPoWE0jLvEew zJ96(-AIXDLeIk!e^_e_5)fe*YRKJi{r~2?N&flrNA-7KT9l3X^kL1CrK9NVK`b?gj z>I->xs$a;fQ++ta`8(A&Bo9vYi99;hXY%A!U&yml{X$-y>chLa9;f<-+&a~F`^$C$dy7_4-azQrarfAT-LlHw@&pPxp%6MTcOrD(T3wbv6`xmME zD>Yxpt5bdW16+@(?KUoJ-jG|T`i|T?)kpH+RG-Kh3tl$$xq2aoKe#=g20M(HFymzE zd62qZspA#$>{P#ySEu^$P22~k`i9&()pz9HsXmeir}{)5o$4pDR4(M%seU1^PW2&j z-ljeuZCuv8A-7KT9l3X^kL1CrK9NVK`b;jk;1yHPOEYZGufvE5GZqYgXuH0_4kISa zI5~Abg*-deFXYv!KAh(MIn_7h)~UWD_fGYZJUG=Sa>jxSu1>8FXE-0H`i9&()pz9H zsXmeir}{)5o$51ra;h(u^*LSYeS2muHDAc9Q+@bmo=5C3V#17*vmTc`JL~bttFs>O z4|Cs~>Kk(FRNs+%r}{`9oaz&KbgIwf$*KOLN9zAsxRc(seU1^PW79IIDb>QA-7KT9l3X^ zkL1CrK9NVK`b?gj>I->xs$a;fQ@#C`^$GkJ2VFXY*& zej%?;_2FAMPpA5Z+&a~F>l3kFJi*csr_a0eDJb-SiM zugGgQ|KlAE^CR@~n$1=3?C6iz{JM8W^4XdXzcZ1~o7$hW|6cx`nSOHWxEJgE=sOGj z?9}|SWqtpb*KFSX&V~8v)VlEPT#r+ILvEewJ96(-AIXEMm z&rbCVd3CA}f0XNRs&B}xQ~hDfI?s;2cWNHVgHwGXk52UySt`$DseH-Q@fP~ksd;#W z^LMIm$gNX-NA8{KBYAMDPvp_m>ssphk(y`nWa>Pn=2G)Qo|#L{rREEHHMM`Kxzs#- z$2MI->xs$a;fQ+@bjoVQbbLvEew zJ96(-AIXDLeIk!e_2(?>zGYLNzog!eCe}%%r}~E6I@NdN-l;y42dDZ(9-Znld2*^R zr~&7d#CzH9-QhEd337Jr~&7d#CzH z9-QhEd337J z=7l^v)vsi!y!q3dzp31krE*V}%8@)c)hF`kRG-O{Q+*-NPW6jr{dY~WehzbL9=>}! zm-Ta)Q}c%0I@NdN-l;y42dDZ(&RB54@IBk(H`rk`_2)5C=a!0h= zuTITF+RkOYey8RQxpk`V$h}j2Bo9vYi99;hXY%A!U&yml{YsX~_CH^(&#$cK@6^0u zE;VnRns?;hsXmeir}{)5o$51ra;h)n*{OaZuTJ&hd$|s$`i9(L#Ea&k%^!JZAukx7 z*zRZ7)Xxe5F7&IjUe`IU%UQ3B z+&a~F`^$GkJ2VFXY*&ej%?;_2K(Cf2aC}+&a}Cv8?;t(@XV{ zJUG=S^5|5b$&*ukA`^$GkJ2VFXY*&ej%?;_2JKQ-cI!mxpk`V$h}kjG0S@WNPVu3%m=5|jby1jk)`ql zQ~QzH&&*tEeu?>F>if^iTxz~~lIt;*8&m&&MN2Q$A2xNIo?faS$Wl3xN2mI8mi0Q! z^pjKbLY|%K7xL;;8dT;85dLESM48xuisZ1Y@PKu`a+(a>KF3r zR3Dz=J~`DlJxc% zs?X%fslJeBr}~AwI@O22$oV_fH{{l-z9aWe^^u$~W5ET(U*h$JM@)S`@5sl=k(@AN z!ONz$Tgc(P+x>Q!Fk`_5!(Zk+u)~N6&ztq{1CuY33wgotSJ)qR81byB?_-IavEXG> z?`sR$z8Hf(-!<4_#Dp0OE*Rd&_Sj*>gc%nMe|5Xvu33L>YwG>Jp+7?3(Mz3Y#DoPe zoAtWLS1|kl=Z76eOqg-O@YlB6ZJhP>N^YI?^-AuY_4P^~oaz&KbgG}oQh6bV_j4WC z;oz+MC67+^nLIhw7xL^>zmlc$74uW!yWbUlko)4)eAlx6-Mxmsb!vX3&i~H4I{Ju% zQ|l6WbgIwf$*I1OXQ%pwygJo~zs~tP)i>nUslFrkPW6#IIMpZe=v1G{lT&>m&rbCV zd3CC{7kT|U*f`ZUJxc%s?X%fss5tn)0yy)zG(2&5zXiufD6J@12?-uk(GUBK_dh{A`{7^1BlK z=+ykY<@!0$tbcA|);~94-DGOrMf3FLSKn1ky^l$~U(HUfyIj}pJGHP*YTfG8x+|9T z`7iu1_rs}qLvEewJ96(-AIXDLeX^|cl{$~nsd;8DHJ_ZC7v{2FuT%4dxvbae)I9u+ zZNG7W^F2^Ca~=MCOB2>(18s&8HIm=+yjto!@aP(@###FV?xe&go~T z<_mdsstvXDb$gNX-NA8{KBYAMDAIVZVlP9P8LY|%K7xL;f1A7rboN=Yt%6 zl>3MsMoeaXKPG3g)NzVg|Nf+@ua|{Be30vO*6SpfVQ+xG?X<(ls}wUDpWeDkUBcR6qK^yb2;Bc^_CAWv_8 z;#9}{IK4c*`PZi+{aN$S=D(eir#H7ekm%2w+K)WF`N{_}{YCT8=4&62r#Fv1Q0On4 zS}#v;zVCsB{)(xuM``ExK=^x{ulcPTd%rhNZ+`lLhW-e>JiYl>4|Md$P3>Qv-u$Nr zr2d`l$b4|tuN(5{RDa&`uh`e4wEO))WN|4p zR3FKMQ+*wP2BPfpD*Ffa78Q}fG~>-!1)>eM`ZnCo(?Z^*4veMjz{>LYn@ zsy}O4|6XCDADxGa_dyzk$b25NFJQ(6M1y1&*aIezL009`h~nY)rXI8 z{!aA`xpk`V$h}j2Bo9vYi99;hXY%A!U&yml{X$-y>cdZR{!aA`xpk`V$h}j2Bo9vY zi99;hXY%A!U&yml{X$-y>cca_dyzlcjPb4^H)oJUZ29^5j%s$g@-ZLSCKf z!%uPEPW27Bb*k^ky;J>h%ZD~My*ttmPR$c}bgIwf$*I1OXQ%pwygJo~k8&MO^$odo zs_)3XQ~f}e%85KW)o1eLRA0!mQ~g3-o$A9s;=G;ecP)P^y#3t`ee2Y`Blk}Akvurn zC-Uf2pUIO`eId_I^_MN{^VCAWIyJw-Jp44*<)fe*YRKJi{r~2@ZxgMwbhTJ;UcjVrw{ zhf{q+Zk_5oa_>|h$%9jUB9Bh>nLIhw7xL^>zmQj_`tVOVf2aC}+&a~F`^$GkJ2VFXY*&ej%?;^`UV7PW27Bb*k^ky;FT84^H)oJUZ29^5j%s$g@-ZN|wr- zne#T48*=MZ-;sN#`bZv}>Jxc%s?X%fslJeBr}|5l>-P`()v0;-XPm!NeM4@Y>N|4p zR3FKMQ~epsI)0)botkIz#7o>haA~lcX zfw`STqf^^WWT{-pvs3*-UY+X0C9cD%z9F|x^&Po)s*mKssXmcMr}|8uoa$$? zR9?waIs9|Z*QvfCw@&pPxi{;5cUkjD9-QhEd337J*SzrH!es*fUkXNVrE0(og_&C?&)Vv|LPW2tRcdC!%!KprxN2mHs zo}B6nd3LH_$g5L*xV-&&yVTFyH)j30hpBl(Zk_5oa_>|h$%9jUB9Bh>=Pm0#X8Osg z`9`L8BunLqER|=nR9?udQ@!2X?R|BsZ^*4v zeMjz{>LYn@s!!z6sXmh@r}{#ko$43z>Qo;-!TCGYH{{l-z9aWe^^rU{)hF`kRG-O{ zQ~d?Y_3M^?c51$mSEu@yEZ48wf6etcHE+nRQ+-dC%EwIYXP}qrN3v8tXKLL{8V`I-R-m6M^Dd34tEu&n)L`pKzzAinhVFPTR-AGlZQK8NSFe~!E{>-Q^D>l$+FRNq_H^+~Ol z>W|glzK-do`ZM$+y;Pq~{rUAoFV$Z#>(>$eOuv$))@^=)^EH)QvQ+NLQh6XtN9zAsxRc(seU1^PW9pc;l7&nzMAS=vQ+L&-G`oDsvpQwIhp$V@S~~cRcgOd^UQo= zE;W~$UodrFi>dv{YivH7S|_z`VJyd(E@oxOfs z);y92r}{)5o$51ra;h)n*{OaZuTJ&hd9K5$z9F|x^&Po)svpQwc_d5ai7b_8vQ%El zQhD=>oR_KGkXxtvj@&!dNAloQpU9(AeI`#%^@Th;)nBr#=X;@FotlUL!1+7XH{{l- zz9aWe^^rU{)hF`kR6miWav{%7^_MKy^QT{(nuq_$`8(A&{P#ySEu^$BIoH;-;i6U z`i|T?)kpGR*5}`4%@cWas?X%fslJeBr~2>`&o6cuG2uB=UniMdaKZ3jxNfKR-;i6U z`i|T?)gQC0>y7k-Q}Z)*Za-h9ADx_5C4_xa;k60ty6tR z?oHh=PcLzPd_;|FXY*&ej%?;_2Iv9T~754xpk^PY+1+e z=p!b~Sa5dM^B}KI^)Ff0e#0j@A7?!ua_g+;V_Dlp`h@4`Gr8b`;mY(o3kmzs}G%`Z zYTlEjawHE<^=B;WeIwD2PR%oUa;m>zxxU}f&rZ!3^6FF{KEw5x+J57*<_)=JE_HvU z<{i0rs*mKssXmcMr}}KU{`X6!?%%{*YCe;t@ceNb9;f<-+&a}Cwyf*!=zFK; z(egEVzoeJy6a8pvds$z1%ro5{Y&+YsjmmA^J|$) z%{%&@UaF7ugQ@eD+OO0+F(2ur`bA-UWci^A-7KT9l3X^ zkK}|I3oaO5*&e6C)>-#Y?wxi2TcOrD(T3wd^`U&yOdefS^T7pMA$+&a~F z`^$GkJ2VFXY*&ej$hd$^FF+d#Bb%^59gT$fHwzCQnZFg*-deFXYv! zKKv^8)2Y58w@&pPxp%6MTcOrA`AUXXgdOU(;;cB)^K0U z);yCZr}{!(F#P)VJR9sVV#3i`_fMXjb^qkqseU1^PW9n`ai5&(cP#7Yt_}TRaz~DM zhCY$cku$mA?5yWQUY+%PKF|3$)i>nUslFrkPW6#IIMtuAtm{hjqf_&9%rpJu)Vz>q zr}~AwI@O2&&Gk6dH{{l-z9aWe^^rU{)hF`kRG-O{Q+*-NPW20Ub*c~lhx2!;Z^*4v zeMjz{>W^8jzmK6GoSG-{=v1G{lT&>m&rbCVd3CA}zrl4l)i>nUslFrkPW6#IIMpZe z=v1G{lT&>m&rbCVd3CA}VYB`G;#A*|Tc`St+&k4r^59gT$fHwzCQnZFg*-deFXYv! zK5RIDr}~E6I@NdN-l;y42dDZ(9-Znld2*^Rr=JUZ*~$&*ukA_4?8@cPW27Bb*k^k zy;FT84^H)oJUZ29^5j%s$g@-ZLSCKf!(PtcslFk%rrxilK1WH-J95ulYA!X8%sd8W&nXY%A!U&ynm?WB$;HDAc9Q+?RS^*PlyJxc%s?X%fslJeBr}~AwI@O1(Ie(}6hTLJqgc%DiX#dlX`g(4#!-#`Z$4TVTsXmh@ zr}{#ko$43z>Qo=D<@%iJ8*=MZ-;sN#`bZv}>Jxc%s?X%fslJeBr}~AwI@O2kIDe=5 zhTJ;UcjVrwK9UEg`a~X`>N9zAsxRc(seU1^PW9o{oWE0jLvEewJ96(-AIXDLeIk!e z^_e_5)fe*YRKJi{r~2?3&flrNA-7KT9l3X^kL1CrK9NVK`b?gj>I->xs$a;fQ+>Fe z^LMIm$gNX-NA8{KBYAMDPvp_5K9eV>`a+(a>KF3rR3C2O{GIA|EbH?}L*F_z@5sGV zeIyS~^@%(>)o1eLRA0!mQ~g3-o$AAlT!&MALvEewJ96(-AIXDLeIk!e^_e_5)fe*Y zRKJi{r+WLaQs37%PW27Bb*k^ky;FT84^H)GEPtc@y9|jwW5ET(f$e$hnEJU=LvEeg z-(lt*eecx#81qO!I5kh?(W(BNWxeh){p8fVkY}g*g}j>DUg~q7)chs-@LKM(Q}Z3m z_4Q8QlBM<|weB!|N8dX&KgK-L4^GV!d335jXSrTC{p8gA0`o#YJ2hX(t5f|;mT%hp zhkL_s;kuogH{{l-z9aWe^^rU{)t|Af<0Sggsd*+(PW6R6o4S6f`zz_(WyR@C#U*Co}KC!^6FIol4X6Jg`2q!r{)d0b*k^k zy;J=$%i3S0ADo&e^5|5b$&*ukA_53l1ooa!5LhY=HIEVy8J{dRv1b{H{X z#)1omTi6~Cn@2bQ<=&2btma?8H<2?IykzQrF63}4`@_TL(amjd?a0T-k$i@n$mhtJ zJUMlrF4Xy#-dE^nr{g%>M_4kye zzP@^=)QoJxc%sy}D>=;qh&&GeH~^Fp4T>KF3rR3C2N-v5oM`y$o1WU1VfrE(+>rrtkg zeSVlH^61odnLL?#earfMn3`WO^?E7vvs3ehygJo~hVwVI-;K+f?^r&%`O^Cu`qrs= zNA8{KBYAMDPvp_5K9eV>`a)iC#n5uz*kEhw-_`2KJvovGaw3o9Z0hSt>b@4TR9^5U zvwna6;%(nyZ{D=|xf92#|KZ+9pD<&=1y@t&8xC#v*I;Yb>mc{!NFKs2) zZq52WNZ---^iu01{Xj44dC`ybQhlbMYX5C-mFj1*R9?-SHlKa#=C^KbOuZgjQ~%wX z)PE<`(f6jdi{ykOeI`%jLY~PBc_oK0<-VBOZ$oa$9l0k*@<2}Hk(|jBxsYe_LSD(? z4vuf?_$_wy5ff%CxZrAP`*38tzXm&um@s3(1;d?ej~zxFOdThYGZtJhd>Q+}*3@U|`WCvqV#7`~kI#||S7X1x#Ok(|jB zxsYe_LSD(?E4UuBUJtn?cjTTN$q6$STyQnDzwq0*4s1>J9l0k*@<2}Hj0G1AZ{WPm zdfw!g+>v{7BoE|7&RB54@Y~tHS@%!wFk-@t1s4oo$@OE05fhH4j+4m+XZnS_lEWK0 zKeL`6xg~exo*c;oIgv+lCQsx-p2-V&#qcJMj}3MhF=57n3x?mp{lN|+Cd^oH!SFlT z9y^SfFk`_5!&k9Ac3<$#+dg8#j0G1Azl;4~hY=HIEVy9!-E5B$6J{*feKqHY2{RU4 zFuaBRV}}uwslWFs_4i&geZd98?_odKVZ?+57Ytv+cGzLWgc*xj|2s|cLYDge9DXnR z!ww@R%vf;2(6K#s7%^eSf(wS8?Xkm%2{RU4F#JBY#||SV%vf+i`*2e4LxUYgOqj9Y zg5en3V}}tFW-MlXKFAAM>iKAX|JH~JGZtJhd@b8yhY=HIEVy9!I=06SqgnrcJ~@%4 z&NE}7m+BX?tgo-T**|s|F=57n3x?xtj~zx#n6co3;p^ERJB*kxW5ETxd$!w0Oqj9Y zg5d5ff%yFx*kQzk84E5LPO?3A7%^eS zf(wSXu|0MeF=00Ae^+4Y{WX5WcDsbd)YsQyUZeN7w{PuCy&fYbQ|qMqOqR-pER`3s zR1WuVZLq_L2{SIHju+ms{krPjx!pcuGVA$}Gg;R2!3D#+I6ijf_uJ>5RJH%UjXslQ z-48ApPO%^CFk-@t1s4ntuswDdF=57n3x;>IJw{XaLF#-HSt@5NxS;(ZP@Ol}eZdE} zub0lOuNSlK7c&-IF#G}bhaE;tn6co3;SaJsb{H{X#)6Bf_g$&;4BxcPQn?{Z<&G?s zBPPsPaKRASA9ffqVaD=>`LNwCVa9?BhCjsqvBQKJ3oaN>vwzH3a5=;M`DX6RA0}fs zyM4Z;p6|x2_X#5=%vf;2@GYD_b{H{X#)1pl|GZ%Pd|`(X6J{*9V0f7AvBQW7v#GBa zsp~9csl1S-a`?9Gda2xChY=HIEVy9!cDBb3BPPsPaKZ3L*&aKLm@u35`pAVW>-AxH zg#BTM5ff%CxM27Ww#N>mS>KPyi7a*ej0G1Ae~kTMhY=HIvtA#$kY#J!i)tM4ByLk*kQzk84E5Lo?v_IFk-@N)~^e4AbQ_Sj*> zgc%Di82%F5V}}tFW-Pd1crV*yhY=HIEVy9!%WRJwMogHo;DX_=uswDdF=57n3x@A! zd+ab`!i)=s_pu#z7%^eN1;bxuJM1uG!i)tM3_rm3*kQzk84E5L{uypAOqj9Yg5htnJr-QP(C6*E!-N?N zE*K{EhaE;tn6co3;cu}$b{H{X#_%-jvBQW7GZtJhTwr@ln6co3;cv4ZJB*kxW5ET( zkFY&<7%^eSf(wQpWqa%}V#16C7YrX{d+ab`!i)tM3>VoRJB*kxW5ET(-(h>~Fk-@t z1s4oI#`f4@#Dp0OE*L(<_Sj*>gc%Di82&EXV}}tFW-Pd1_>oQ*-#?|+N3v8-n6co3;iK#i zJB*kxW5ET(KVp0AFk-@t1s4oI&Gy(~#ANFFq^>8EWxYS-g&h7dpBGHc8|*M*!i)tM z3?E~A>@Z`&1;fv<9y^SfFk`_5!#`nr>@Z@&j0G1A|CH^q!-xqp7F;kCw#N=5Cd^oH z!7#Hub{H{X#)1omf5!IMVZ?+57Yxs^9d;NoVa5f+CAPy3BPLuh{Bzc0XV$Mfa;(|@ z9EF^*(98OIB`@UgFW4`37%`dp{lBcQe{v=lTrm7B`@;?+Cd^oH!SHdm|APNo$G4v+ zV8I2$&u!-ocK>F3zVX>@AO0@Z@&j0G1A|Bmgk!-xqp7F;m=JlkW35ff%C7@pg1 z*I~kf3;ti$-UZ%<>i_>=Yt78wGy8H}PRDUL$0a1U%#W?uoYj2_lNC$VLKvh z*M+Uv8_pNDBf@rF*nS_j#l8vW3tK6!5<;|y@XAJJN4}06kNgoS8oe&MCwd}!HhLlI_?`Uz{viKx{|SGL|C)c% zmqEUuTF@+bEO;r{6?`8=V&!6$V$EV5Vl!e3V;f?zc=h-j@m2BT@xqCF6AhEAlgEBE`)U&vRqmGWlZpQ}f@NzghkjX{Xat3zRERqd>C)uN7EPV0!xO^kwM> z)2}L6qF~E{9SS~L@R@?M3N9XFqy>w~OKS>I(9EK;&a zg(5SGqzEbU2qp3gSKJ^y_SNRLQp9NA<`*JUXw$C|B0ufatA!{)`$tJ3ZsHMAI6TJV z|A_EKl*jnu1`&u_SOeaxy-g%UOOX_Xhi+!@6I4Jvz!*YQ5Sq>B@x7@DlW<4LaC7=s-6&OYLqCTMvKyF zj3}#~7T2j~L`5}DR8r51Dr&sAK|LpKQWHdd^}J}PCW@Bo1<_hf5^dCE(MwGg5383% zKQ&D}sa_US)O7KZdPU4rGsR*xTYRMEh|kpP;&U}u>{f4xZ`3^TotiIBsJFyvwLqLz zi^O^Lj<~Fr3gIjhuCrVO&if+ntQUEmk3>FaqsZ@U5*f~?qL{Nqbal3iZ09rafU`q9 z=zK1EIbVoA&bOkkvtJB$z7zS~10uuyUKDc=igNA`qK2CzZgPJVHQhs^p8Jz%?*1%> zyGO)m_ox`-9us5TU&J`~gm}*VRlMMy5{uo_VugD~eB_=LpS!<_eeOlE-~CJExR=FY zSIE<@D}Qq%()R+H@ZvJXOUk@n9(k9SS9b97%Wht(9O$LV5ncf~(o2`4y$tz`S6Ht0 zvgC(e5&5%MR37n)$)jFzdCI$5p7Bb`-@H=tckdcmE^@7`9w{ShMas&ik#h3RNO{>R zQb~4-RF*v>Rb-z?RoO36O+FH-AxA{o$#D@OYIc%he?9&c$AUuqKzqEM6o+ZMe=Ni) z+Mb>i=V<*EoLjVyZxP}z+F^G|5!4rA=6zBmX@9%g+|JK0-stIL?l-ragzZ&f`(rV4 z|3ZGbHb3*_30wUMKfN6N2|wMAZDSsPwvrTux!t|C6j#$;)5=VLlV8Bo&$A_*Z+*D@ z0^xdf<(De;{jzj$d%q(+h^TmqpF;wl_D=dv3qEfByl~z9P;2H>e~%?yuLk&R^OiWkQ5bZ7Y;D(9ra9``J-8Gp>Y1}a5*cxnEO{{nEiZp zA=BQ=_EcdxEi=vQGhm&W-kbHR!Sq+z9{su$=a=<#`vAZEq}zB>irU<7=bs*v?EdlvZb^;p9%p6cnj*Jov_ zng79X{hNl%v&YM(aJd(YnC08&eQl_DoLzsrzDM}w&StFVl5SG8`j_pr^XY$Kr5*SG z$#tV6?bsGl+)t~wSFh*Uno{)P_MzLPc$D@u%N<5LDEq&cYnRhtnYgkX`*{2OcDcFN z({7*Lj+<|i;t7`DC{2iQv~N=Y=yp>FDJIh9-fsImW0sor9Tm29Hwp0~^Ur4e_42xe z%e|NNpU!RjJofQ+x%PbjnP2YJ+dpZc5N|O5ps-!K!A#F#{q+6%@j4gm&Jiip;?YSUM_~WH}H#bcKNzJTuO*{S?(um&GZLXhwa1W zd@2z)?SvAhz07f^&##;7ORQ-k9}zrGE_+-voY5HarWv_y!!w03>I4fFqw%Vs$(!{e&#Thvv|*F0P= z`@H{eTYFux%m3dV*K)mi-ojyPk0X0rM}U+te$&V8Q07mBkJpdW`@`m+%{9ASg$tY4eRh~n?NZJB>++j+M0mYiLcOG4_uXMz zlJi%;PX1>?Ji+s&gx81dznJM4I-B)*yOwD;Z{#>KbPM z=I}btVfySXroKyrZIKG*_|w-X{rq*q`XV34-+bmjLf+`+5hD^Dkq11Lo5?Zui64a69em*r=;n&bC$Nc+8vEw3M;t{JX=nud+P- zx;(@AzlP=BQ&ozOX`c$)Q@p-2yyqsCTr>Ph9ad0i$_Z{>9bGdpuSB2Y~d--<$+U$3|zh2pE z)^~Pzy?gec+3qC!_YljOTHVyW`nImi?d{iZG`G*P|9@e=k*wb-TKjtH=hd(4`(d8i z+@5FlybBl~(8pP7csy3&b-!}_ z^1NO{Ar5>@jZABoH+h2)`M7~=G{_u(`aG-1a`kyujdogi{N-K``@E~~ zHIK_KZrY%`Y4vqf_uusX(Rr13n`yT^XpX05{L2&ic)P8XX^V&Lk}Pw(XbIE)#q#w2 zDNx?D@3Not@iBq^+Liqlwp+t`|5KK$_kY7a=Ke>xt>?4rYq!JRw*8x{!`!fSwVqF( zH#hK0?fUV>mYP=Q)6M_b??L#yzlHT(U#{PJ{%0a)KlBo&wa+Knzqj&uor6tiZ64KW zCB`=xdAEz}%Pf{}&(~3h%yv%C)o(sa|Nl+qv)ldnVj-4t+a4FTPPBFR zBKC*gzo*)BU1Gj}=ENp$+t>5k2h8zkA77IGjIMi1-N5yN`C9uXPaA}-zF#kQ0Xd@Q zOAIiNxBI8-`)2*^`Tqm|Vv3&c2*;Ct{q}Qw>D$>?o7=X3);2uP5A%BL<9Th4lnc+J z?v>4T{>8ApHN5`a8J?&2I%c_cKei<=^?7$yOY^u73Y)eExuU1r{bqAm=jTD5SGR|0 z?fqA-7p!-0u4{VzTZeVt(djf37#V zpEvh*ejVmlCHm!hdv}N1eJ978zWvz<^Sar7e1$vB@!yJ8@7FEVH~M^-9k!2!ZL6@Y z!}{c7eFlfe!#?U(z1&sQDZ2gZW5&q1e>?T9&Z$PlOxq=F+x}$sgUx~5bw;NP=Kg2N zC%rzl&a(Aa?t07CW7}Du5iuv{9`n4nhxLFxerktx zhraII&hp+`YSzP^M|S+cd(S-no^ZYO@v4_=_nUp)bMHUB+!ieN7}o>6|6d9FFSb6k zb>KZ0&FhkT|JwbTdq3x{8*LpppMJOAPwj`B{nhTYx&3C`9RD>RH`B8^@(XyZ*G|SA zy3oGB{_RcMJ3PO3hW(FgIX`qAI^Z#b>puF2u{+3U};6nUjz zZTFYmPj>$1d(3uUpr5Muk9}QU3v+0FxS#FgY-{UAns8dPV2i)oG?3 zLtf~|+4=0_f^fU%hB@9lY;)hgGR#F=ccxV~Id12>_?6iY_PS@MXNBkEgra6Wo(_)( zdwtkN|3%kVJvq+w`S;MD<~;0P#I)thnD(KPru8|m^?V1(XT3cmQ_b_<5*~N9&b4(@ z#c)4O{MgJ_?l;rsew^(eydL%w_Jz6oD#xpSeYa5O>UK5twC;Bu4BO9Fn!4xcY12Nq z-?XV=dy?(d^WT(d+WxM2yj{<;;ke?-u(j9iTX?)auKTk-GkD!kY@mNmd)519{U5nk ziuv3wcD1=ZhkmkNzvr^d?RM0a`u5TA{)}+D?g=0N(%0txH0Ia)@vD?DN5VRyEd2t# z-qTK)b|0^|zTJ}JOSgG$F}I)FYHlCq`So%Zhs(<Gjpe`C_)qj(geHu?YJ|Kks<9OFz%e3xrtCeD?L+Odjj~^#iZ3zJE*Dz7@9joj23% z`80$5r=RZ^UN_xO{F38HKi=kpJ$`Mgk8l0_1zC@EJn#KnKlOO6y{*?z=fV!wU(c5k zju%`Pj#I2<{!e(E&3#?}>-DtDPh}iiAJ-Q)3h_DfEp05tK3ZKb>-D@YY@g?Ppx1XI z`KhPd$JYp7S6d(Hywi2jQyfQnzCjyIYsb56KX4bXm+lW-B zWR8y@+#mM!YB9t-kFCphF`wQpeSP@n_>!&b>M#zZ_owX-*#7R48m2zA*O@MNN#Wi0 zpX1H;3#Mh5=WCa4_H%pogML2SkI3DB-$i|!m*v=8yA+;JcAU+QKk4IJkH6XehVHlM zah7LmoAz#AXT3eTzSOO)FE8~rugg2sQ-yh+_TlYgVZZ&`aJ;~d`#hLo9)G;2dEBJ1 ze$>}py&dDY-s`qdcs;k{I(B@{j^_=jW7f;|EA;VMoagTt=As=3{BfUIUL*2OFV~I> z>i(JDz8!1KblcCo=@Z7ZSk5-CoBDhi5w54LC+?=M(68UqVao?3t}J(XxL?|aw`Ya9 zKZks-&hi@PGux-@5xxKZw|YePCmS<=DUPeww7uD``)MCwz53GH@lZPsI*@+-P^PPJ zeLo4;w{>{?NH4P;cHFaKc>B5Vbvhc(w!qH)dWmUY3)|gc+wqXeC0jq)ev$1b*>PVxe!Y|9 zLa!emrMU9^wm)zk`}aAX*VgfNywuj41;V<_)}yxmoXK|R<;^Z+miNbHbDnphpP=7A zu{maQYw|y?2h(^yJHBmS=Np%rJpcdlevjU-rNZO#E!IchwsqpG;rWz%d^er*NFP_T zs6TXWK7O4PGg&|TK9YTWnecV9b?=X1{d@5zv)&JMHuYk$U(9vmxf{$lVOCU%xh(I` zRC9e89nNp-=CWyK`pK}LX7k>jw|X2?k8jQzWR6E$Z`m9@^RwAbd%W4>&%V#5k86D$ z)5o=L_3^A*ef;WHALqK&=YekZajsi^oaw*4wuJ*55$Z*V)U|HM*^E&^&JM z@236yF*ChrSReek!c4y=tncl3*R~(cbo>5Pi;`yl{ua)+jO(mkzRfk8BldcybMGUz zr)_)Q57yg9|3K%Peg8=JD|8O(&q;j6{f(QNsevpQk>FHYPWkFdjhr1No=(y$AE@ z@d~@Y?Rojn+xmR5w{89ZYa8=?wyxLj$6$_M07V zxAnE|XX(#B*!Rorac{@x3$VZS@pJ1VQp{$(PKVo(dpy6G&p0^u|1naEw`uM9|9%Pc zy!v1A)~}ylo^JJRz1&|ozIAKY%YLrGKA*0;^!~T|BfPaUf}R&TkI${@!r?d!I1daedhC4*T=pZ#V1z;c1g6O~U=# zWu@7UpEsCshf?8nc3`+4{BS>2XTR(9pPApZr@uDW>7wC$OSzt{W4kto*SFKmuk)iy zmTA9FG3^uK@$qJOd`u$$^y~X}*xL6Y>WBO3%sXcN?6{3RUTpu}PPgZ)9hb1nvEv|i zd_j*V=>4z95%lY0muJsE`#BJMe(E|#AD8y^w8xu$o$YaGk867z>hnw=ANu&!=Y>9= zbsML@s`rb|DV;m^^|kB&|3{tr3Cp#0>bq~5{b#SIds|VLaDRWsalWEG|1)Dkw5u7P z)a!Ssl-V!#^K;qKeC~6739~)=mx=Uz_H%SQj+x~*;rgxjr~a2UbX%J`>;TIx`6uTH zZ6A&o{kX$nUAFyNvz+17!Fv7~;cfl7nIp`9f4JN+Tu=0V6pPIB6baj^Ic7b(hV83i z`|CwMH^<}GaNL}uz4u)*i}nZ3H@!ZUPx6@n+7$XDx;?&F*wHSM;coG(1TK3;YGuRk}V_v^qghc_29%bO79X zC+T*oXKtShZ|@6lH~GulU!KPmWce5KncL4aGxPrt?%(IRuIc4`8n!2>C-v=-;qha~ zha%y5dwH#S-3qrc>;DAxuHK%)g-tuBrD@X{XVB9><@t1bS9pKZ2h8%@mN)Ifa_0Ub z9Jl&;d*wB4jj){^w)%ZYy&U~Mq;8i}pXvE)GajJZ_OyC>!~UlIIo$6>D@jq5?SJ?- zDN51WeoNUR=JERTi28U;4Y$W`$Nm;(Ipf3U>lHr#&*5!*e(Tq*Jj=Dq>0FmOSnqFg zL4UqyDCdh_zLzk^{fE5%dVL?HzSiwMWzBj#u-vp8!s#EpZ*ISS#5_Lt>oAz}UT^Qh zu>FJcP2cwUe49Rg%7$%^@H{-tIE0>FjO(;+@0)Mh%hV(Kc2UQ)w}xsoeGdS@KCg&(RU)`AU^Gtv*ilad0TtaWx>UDJ@`SKnVCX4=Z({<8fHdp_9PhYp+d(4Xsjob}Vk$7tH}9AEl%t9*-j z{pPWMo@M&j_ssme!}I;AV&-`&g*lr0{nOmUUixwN zxUl`XeOpZb*KUvPhZg7fo5X(lgzK_CzH-W#{q;~EDW)-fS01jpv|GY{Z?j=$yPgZ@ ze~tTRbN{{J?TqmLf#LM#-OX~cXiwJn#Tuc%z4swB-^ug&Mx4u(tx!+%g#MpHdw`|!8=&I5fMxI-q2l|1hERz{ELHM7#~OHJ zmdfW8pb|}3DwznCXv$KhXa<#N&Qkfz0aT(TOO@hIs6;E4${0CRq76%>KM$2?%TguZ zootM^XQ@)$4VCD?Qt9hMB|5THK9>%a=)_X_Y#UUfGfU<315oje%Qkp7sQBh(Tl{{g zM0b`d#RE`@9xPRg2cZ%@St_4>gG%&fsZu-y72nwGj6V#O=*v>2=m(YP&r+or0F@ZX zQl)qVDlv$qQfosc2D4Nt9)n5@VX2JuL&Y~g`{0j5#Wz6v;v=9EBUvirEl`P3ELDmp zq2e2&gYc)I5@T4ZD!vOl z2QFvXitohEgDY5`5-VAf;v2Gy;QKsUiM2dViFN!tNlL8e5lVc-yo%pjUIjlEtKr5g z`SA(!O1@RQmMNbyuM(dzmlEG{zY+(zNAca+&G1KZh4-7F5aomSW1o9*v zgGwaiDLe_4NRemoJdkXZ=kR<`iTv_Bo(dJ;AijX7K_$}VMZ6$XB12xn3qi#LkQ%8=-wjDNSqZ-fl5DaH zelH~1WHtOgNU}-&O@J@_ktvwtcO1Y zNjBL4e;AT%vJu`7l5DauJ^+$zvI+hOB-vzB{831<$>#WDkYtlB@u84pldbT_A;~7& z;3FW(CfnjqK$1Ah8zZ8mBZmoITFs2qu^{g8qSep zSclgkIVQ)#H{>`tPmYK4+x@)68q%_{5wbz z%8mFBP>CG53I7o)aY$~4Kgq33ISk1|xg9?O$wRpVKL(XJE_dQ5pb{tLF8o)h_~!p^ z{4`Yj0>B>pEL7s0+>8GPl{hc=;lD#AF3A1(ACNqh2k<{3c_O6iGRQz(m1-t+x57kAy5LBYDx`by!Qc+#Ti$GFQN$U7wkW^F-el;W&m4}yvq@s%A z*Fb7W72wxGYDg8w%R*{MmBhAIf=X0YsdyErL{*iBSA&XQQ%J|F zLlRYG;58tLstV&ZA&IK8@LG^WRjjqB4V9>)isN;m61S=ncs;22Wrk9C1E~0ghSGQ= zNTRAT`0bEHRpszIAc?9f;LRX)qpFCvfTXLcgx?8CS5*aX4M|s34ZjPLuBtlT4k~fC zs)2WaO5CGr;vJz9_o`ZWCrF~I+OUhN%apEAiEgSMo(&bh9nk>q3l+a1(FpGk$wSo` ze*}_;stNumBo9?n{4q!#s^<7mNFJ(|_~Vc~RITt4kUUgv@FyU7sM_LBLh?|x$De}a zq3VD?4V4(HI^xejvQc%ypM_+j>Wn`Jm3Urt#V10tQDx(kAnB*N`>G3&mp<0 zX5e2ya#hX5zl2JBrDnlBY7X41<}&>oNS3O3__vTORr7IvT?9X%7U17Qa#bzDe}Lqw zT8#e)$yK!k{|PE_SS`bUhDsb!%kiU7iDUep48jS?ry=R8 z*5YR&>8jS_zd_PfZNPtrq^sJ9{{cx?wF&RiSvLuyoq(pFT3)ToYw-vH^AJ05-` zq*v}l@tYut>I8T#NTND%yf&mpb&~k4kQ&v=gV%@Ds7^k-A*4oiQt{iM5_dRhcvGlE zGbbHy4wY!(WZ*5KV$88H-U=#lmy?CJg-Wz@^yq4PNOC&G@eYvWbV}eIA<5~K!aG4S z(p%V8y74Ytm`qQb1KM1Kmol1BwNd4)shr~mW`qQa~KMbiqo$7c$ zNd4*5zz0C`)~Sg<0?Ava7XBzCZ=KrsW01Uc>f%Eo8SB)8Bb)|I83~nm!fAw$f=WE; zG{#3mC7yDc;A5Z?PdiQVu~3O;oaXpANV+;L@#i3wr_&059#VfgZSWT$eQKvIJ{i)F zcG}}FLF!MZ1O753ft`-{E06?sI^nNE64>dCzXnNQrz<`ilE6+j{yHRqo$mM>kOX#m z;BP__*y)MC1xaA1H@*;(z)m0hZAbz;eeri73GDR8mqHTQ8Hm3NNnmFX{vITOox%7@ zNCG=U@b@7J>6Y(z~sq0L_zl2n?&J_GBNcK8Y@vk8X>`cSIfg~`$ zbVdS064;r6e+NlmXD0qVB!Qh-_z#c-cIMzeLK4`Si~j^kT4x^q3nXcs`S=M)(mD(9 zUm;2BEW%GilGa&_pM@l?vjqPQlC;h;{C7ywI?M4tAW7@2!2g8QvCb;|FGwBhtj2}A z8kg=GTtV{IU5mSrymi;(5vYXkZomVmM9kfY$07ZCcN3n3^y}TtcpgaVx?Aylkkoaz zd1RN{8`0^S6YqV7e!DI`VROL%igin^Ea zmXH*6rAvxJC0e@<-UgDQu7|gWq^KLkJ3vy@4e*YT6m{cxC#b}IZW8Yd>BYNw@cSXX zcsC#Z03=1-RQy3min?idFGz~I>G(sC6m>K3haoBI7RLKQQq;}D2S8HPEs8$^Nl~{r z{wO3x-4gg?kQ8-G;X@%+t6Lg>9FnMR8GHmJOWkttNw)%1Mnh86t%#3-q^Mg79}7uQ zw+cQE(u;Si;o~8_c(*z}0aCBJHSmd$deyCoPlEL5-CFn*NRQsFjZcO2>)pEeG)TYR zt%pyC^y}RQ_zXzD-fe`>gi5^THpXW`diQP*g(Rxm9Dfs%sBTOAEl8re zyuxB3RN`&74ZavE@s8UTUjmg_>bA$1LB=QD4)}6Nin<-~m5>y5JK^s`Qq=8?e*j5N zw=2F5lALZf{t=|_?{XsJT-2R{pM;Eyx>NB} zka1CW8h!>cF6vIl&q2mT-5L0K$hfFG6TbkJ_`{urUxehRI|u&@lArEeTzGSF>CM9x zq*C?f;~u2%?=8T6NTup6!efw1)mw}wAeE}O1W$qV{k>&)UP#~HTaM?4^!>dR_*Ia; zzqbl607+4AHC_;sqTU+35F|ytwRk2ZMZNWS5lD)98}MR~6!kXZS3@OAc$@H&kZ}NS zGky)EYW23_*FvgRZ#!NVlBnJeygVdPy`A`VkgC<&gAYKPjwR$=Dt&mF9JA^lcRI1)#{5DA6-#dce z4(a=Q$M8EKeShyb-VDFH^5S@JsKi5F67K^UJ@E42eIcURYcO{sJV8y-N5LNE&-p@TrhA_Nw92AZhGX$EQQm*sFoh zfTXck6Q2o5W3LuI3zEiOZF~+SjlH_~T*z3fR}Y^Dm3Y%@fX|0YyyZ2*7eFNzdX4c# zkYx6n;EN&2>@~%gKsd>16Ey*~JENLG7&@jZ~N_WI*{AzAGW#P>n6+8c!Lhh()k7(W1&_}&|W zAB4P<RxX&{tKk;^~T^QAa$=d7XKAe_j=>- z(~!E?8;_rb)VrKReht$2^B>WFZ-Rn)k|AgeWHx>U2lH1-iTtuefGBO=k zkh(WA19u^HZ)7GOf#h~%79NA-c4Q8ofaG>$E}jC(?Z`YlFC@1k^YQ$U+>R{3uY%-u zWD#BflG~BRctJ>RN0#7)Ah{h`hG#-X7$VE@qELxqkrjAx$OuDZ6gZtAXy#RidTnZ zb!0nU1CrH|9e7PhR!4T?wICx5kzIIgs6?H}ZoDpJ%r>$IuLr4_BYW`%keWHN4{rp? z?Z|%oc1UhV4&Zk{ayxPmZwATjNDkftlG~9(@Xp9#*fw$mwu>Bt?IXwG-I0^b*#S}^ zM^51#Ar*4u4BiP+AxF;Pogrfmk@I+0$e2Uq0-g;SbBJ8TyF(=&h+M*ZK$0zT8BU5w zJ|{I9@(xkN!C!>*(<2`K5~QCViQ+Fq`sR@Uz8ZDv}DT99o8J~=l!#{`glp_`JFCabTNJachNKZLZ34Rr+!jwIb42e|3 z_d+rxQXSt1$&g45d_N>ZA~o>?kPL~`!Vf|+BvKpCf%K6hb@87dqm+?)_|K40%18tJ zC?rE7jqqO}84_uXpMYdYqzV2jBts%i@zanDi8RO0LNX-M68{a7A(2-2?~n|Mw88&? zWJshf{wE|uBKk9Ne?c-N(g7FI4!DeV#1$k%qMdLTk|EK~cmz@hM!VuZBu}E*cnp#! z(e8Kxk|)s~cnTy>qCH{WXm6M=+6U&3_Jyg@{>*a~Bu}CP@dA)Mi4MXGLh>X!7%v3L zljsmU6H*68hv7vabzpQjEEXNfl;V(7iH^ccKvE?-8ZQOuQ%A?(r6CCu9gCNNBusQ1 zUJjBl(eZc%NWw%X;1wYW6P<`xf+S3I5?%$8FwrS^HAuolr{dKi2@{=$*MKBUbUI!W zk}%O3cr8f6L}%i)Aqf+mh1Z27Omq&c7oE$L`jGlCIuCCMsSl&`@!KFd6J3Dc4#}D5 zBK!_W&O{gE%^*1wU4plOJ+_4ckT6aBq7^{zTW} z9U%D=U5|H!F#ake*`i1A*C5FjJ%-PQj5-d?}3MyHkBweEo@IN8x8f}FC1xeRvV_f)+ap~(%t|~~n`b}{c zlCFMpJOW8qza{QN($#N;#~|tIx4{#TboJZfDUfva+v9m5>FRgD^Fz|r?}%RoNmsuU zUI3D=erLQOBwhWkcp*r-`q_9UBwhXPco9gt`aSSskY2Xm6TceL%l3QYB_X|RzYl&5 zq?hgY#jl0*vi<&eSx7J2ABdNS^s@ay_;rw8wm%rZ9@5M9hv1bVy=;FNUKR4*kUt#1 z0rK9EKN7zY^4^d?3cm^RiA{erelz3~oBkO57D$iVAB)$4^tkFQ6zTR_s)pN`)NNmqXc-Wrmw{!IKX zNV@v7@OF^u&Yy$d4e5RRbMbp1y>EXWelMi=?a#;WgY>@r1$Y-o@7rI5cZ2l4{l)nG zklwey1b+aM!~Qb-K}Zh!%kf^25mA2y{tzUS{Z;tGkWBVhh_%o3A@%`QSvygh#--AB~>52P$@#i5uaep8F0;HPt_v4cx)vSL2e-Tp6 z`UmlsAo=g-;4ee+-#>)E0?B{>F#ake|NSHQYmof+kKwZ+`R^acUx(zse-eKKlK=iG z{7p#y`)BaCAo=f~!xuvG-#?GP4atB10{#vp|NV>jQb_*$m+*HX`R`xG--G18FZnjd zN=W|u4*otQ|9ubt0FwWH6#o#C|9*h4gXF&-$3KGPzn{cEhUCAW2mb_;|9(FFQ%L^% zsrVL1{`+b8Hc0;a>G)@m{P#2P&msBm7skJU(;5_}7s9_eq zLMrE=EuIQ_$3JL~r$OF_3OeBFkazrpj(7&-9si&cUKsL@f6y7vg7n9Ou6R*Mb%UshoozcqvHb9Q4FXLn`N>H(mx(IR}04a*)b7=!;i?RL((vSTPvLlj8}zZdoTpQ0g~;(F#JYHwgqz@y3vMvVsYC6UaMR!9=_%La!Mi{*JeZ4jgJgIx z55FIh;lX_T0Z4`i3-AXa86GUcdqFZhSd2de$?#wa{xBrNgJpO>NQMW?@d1zw4_4rh zKr%d7g+B_(@L)Cm7$n1kHTY0Sh6ii$#~~RWtj9+{GCbITKLN?`U?ct{B*TME_*0M! z4>sdZLoz(ria!I%@L)UsEF{B&9r$yQ3=ekV&qFdi*oD6U$?#w|J{gkX!5;iYNQMV{ z@s}VO9_+(khGclKAAbds;lTm?RY-;h2l3Y+86M=|vmqHC9Kv6RWO#5Ge*==?!4dpT zNQMW;@V6it9vsIPLNYu!iN6iW@Zc2w4kW{aGx$@ju;TNG2e+E_XOOQ`t@h`9ODJ;mRuwvD53HcOOtOo8t-rI`R z#68HTuwu3FDCDyNvD$b5`D{R}E*^(`HXv3HPeMK$5Nm+vfsAa#8sYgM`5bGEr$X{M z)&x(36l)&s8!$>dm1{02xS z$9m&8LNYei2d@Xo*jQh@0VHE%{qaVSjExP%8$&WSHVAJ5$=KLnyeTAOV?*%fkc^ED z!&^c!HZ~k@13Cnr zJ65q7cz?({RN)mPeL*_witg3lCiNR_|uS#jV;5Ufn;oKIsPmpKVvK4ef-#Fd^zMZ{IRY03dkq< zW83jnkWcc*cHnCupXZP5#MeST&mY@`uZJXFY&X6El6bK__(n+L#rEQxAc+^-hi`@? zUTi8Z)J0OV{%fWX-5-)ZL{}PgTvBUURkXkf$1pgXRi^h)O-$2F| zV#o0xA;}gyiT?yiw%95BXGpTe&frHO$rd|@{{k6Xh@HnzK*kng7w}&pV+*m1_-V-4 zLhKTL7BaRFyNv$^8C!@+zLEPoWNabk;D10W&zOh*38_3|QT#7Rq+XZwBcv$4lcaApPZd8T?L2e>q+bZw=`$ z$1C7>LHf(_ig-Ine>q+WzZ=qDj#t6&fz(>@YWTg7S}R^1zYkJt#cSYQAhlM!Cf*HF zYsG8f_d{x}cy0UvNUasGi$4gdwc_>gUXWTV-T;3HQftK<;SWPww zAl?yw3X%iyPWaQ19Ef+upMm5+yes}Jq}GaOskJuOaCXUxR-G8Oe;V#lMA&WX9Ly-$6z);~Vhr zAtRabjrb3cw25!Re}wd2KKvr2c8c%EFF|Uj_yPPfq;^Ui#3iJ5O61@U zq;^Ui!aYdslsJq>A+=ND2p&MvCUFc;K+-0098ZCyP2wb;7m_xKQ+R&Jh-KmoeidZI zGI0(s02#4NoW~17Ml2H-@IsIjN?gPPdMQyDuLr4@5?OcyNWGLOiZ_DPONrumV@SP}D1kSD)Jus{cvDEdlqiii zhtx}nGI&c!y_6`2w}RA5i3)fdNWGM(h_{9GNfVXu_K?~sQ3dY+shtwl@Q#q$DN!Bo z1gV`8HSo@m+9^>J?+U4%61DJbNbQuUjdzFCPKmmB4@m8lsE7B2)J};8cyCDUlxT$a zfz(ck#&};y?UZPO_lML@iKh5K$ftc0&GA8yPx~ZV;)5Zd_DQtDhd@5Jw6ihX`e&~d=%uv`mb{mqXGrF&qViLXvQp+W# z;A{`->D4Bd;rk)I z+Qf4F0Hjx&Sb-me^lB5U@Eph(V`4Ra2r|Z)Sc4yiq;z5}egu-ziS_s~NJ=L*;Kv~; zo!E$FL?-0 zgY;OFhw%(Zk2QG&FAV9iCXeA+kREIDI9?ReV@;mKi$i*;$y0bKNG~;c1}_a6MNFQ< z%RrJjc^)qZN#^7QyaHqtF?kWM2zmcKc?qusdH+3m8Lt9)|2--BHJfUX_urEaULErO zds6>OQw_-b@5v}$6O!A>0Ivnf?PMIU4ax0f60Zx%?PMOj9wfJu`S1pi+)k$AjUc(5 zOv4*PayyxhH-Y4KG6Qc4$?areyg4MdlUaC6NNy*K;;kULo#YxN+CXwUSpshh$?aq* zygekhlcn(vklap|!8<~7J6R6z1j+4W1-vsPx04m|u8`bLR>HF(xt*+ncZcM5vKrn4 zlH1AZcuz=fCu`unA-SEbiT8ozcCr@U7n0k_+IW9RZYS&F10lJctcMSR+hvas$DLxXC+sWqmC`fK6TjHZ3xt(liind<`U%lcVspkW5aF#@9nKIXMR30LkR! zSbQTSlau4{O^{4Zj>k7cGC4T`-wMg(5&NPRGB7RLIF0_&1OWIXM&m7E&Q6XW`#LD&*uG{Ch}+oScjQ0O^A#=ixs=`ryg= z_|K3&cya-L6w(JzF2a9-^ud#h@e`0fcybB;E2IyeT!x>9^ud$M@w1RVcya~)8>A1O zT!sG*>4PU%<9|T<;K?=kpO8LyaxMNBqz|54kBgM`xJ=oAD@Y$aWh3rF`rs*>@CfAH zpOnqG4|(?|Wh)+oRLd#b@dTt=PT7H{K&s`Gop@eIwVbjG&kw1VQ+DH5LHgz?d+>Bf zR;TR6Gay-=vJWo|$?BB-cow8WPC0-VgH*^V2l1;R@9C%H;3XmNg*QOkXWm1m7 zvMI-4`IO_#Qvs6CDJSuYkbF)#g;#>)bIKXK3M8LX&f(P{`J8eduMWxQlnZzbNIs`r z#A`zGIpq>w3zE+%m+{(=v4s?wBxzF|*d)b+O;e)$K6Eq4s6t8rTcpHc`;;WSJ0%b7 zkdhDHladO%q@*!_SIAMCk`8yLWF%|I=QBI=dnhktc7>BOv*C-G-Qi1_J>bikJ>e^v zz2U2wec)@Eec|lP{_yq8f$)vYLGaDY!SJojA#h>lF!*-naQIH<<*Sb8F?Tw zC9*VfFft~(GI}`rfnOphA8ZS*jx~y16TdtDTf9M{Sz>$QP~t?wP1a66pL{tvC%G`W zIr&ZUwv^E+&!v2uawz4iJje5#&m-~{$y++_*u0bSev-F9zK`>5%eO1vxA}h0C-Z-o z|7iZosjsGA$A`kzOq0_l*99-YRr+;fFH!WFE*o zocU{J>8$EmFJw*6%3I{IBEN5m@_ws3g5iIW5dZn_w^PPr|CuC~7g@31-u&Q#<{idu?jn|4a{OpjlodmiF({NAt_A zb~*o<|HC4MNBrCLF`TM4!=|M7{5}qg5M}w!7mi86m{e(QCIHb z7m8xC9!GV3{u=PtkiSO!-Ns*I{%+^534eF+*Ob3z{59vV1%EC1yOY0G{I%w<4S#p> z*Op%pYR4}J=`Cm`9_H8e^nV}xZ8N2vHtTPj^S90Y+vfdk^Z&MGf7`>#E~Ve!_Riln zE^{!yzN%MYT;|vJo4qmq?`h+&OxrEe)n0xfB!}P8$Pr`to50^I{LSKTJ%3;G_XmH% z$>A3Va`;_=9DW}lhwuOAh~oS;$f)Ve1^;8_nUp&m6IizfXcvs$aY`e>seK<}jw2!X<~cU0m*YF|Jt{MGH_yLcJ(@aPZc7~{i(J)P6}hUF zy7j61r6AIYv>O;4(H1FWJ^>G~UCRnTQXXpUm1z(YdJ^J+@(7I2X zhab-Fr?l3wlHvsTs^-*dX=mF+cQ@+ zQ+bX`H|YCY_31aDX?C|Bom=%8*sp8$m0e)&$^9(hRK0dr9(iT$S`Fxz-MROFuj7?_ zb3fWVCim2;|2l8g>Uz!ovk$M_%>B@RomlzCf7|9N|2nl&jeni@%2bZUdVP97%wgW8 zN3R|O24C60dVRWOcfE3m{O4e8-LLaQ{kw9|JEJ@`gI;~ z<@91|^M2j3``tSDj?NEtAK1D3|Do+&c;i}Fs45X3qe5gGZ; zjEsoP?9ck$tY6I+tJ{?5o6UZ4KV2$6R`&%?36F8_`rUeY*e}+r)Aj0RaeF|r2&BlK ze_-beVs;x7+>}_3>i5 zSRS^0%1j{GY?hCq%26)`!RcK;`{<1o3Sx0T^vnLfU+t~(MN*&TzAA?_rkM&9(+r`S zX7F*m@kq)})tYmFPW>ITgLB4s$5(Y82o&ErYZWQfP2L?b4>&DGFuociKJXLGk+JP` zzay)ZWd%{ddfN)Cnf@O=w@-IB3|dd>o8KRa6#HJJ8gxJJ3qEkc5P3Y(_)m;ni$6$U z(7%B{Iod^8qQ?&(CaWcegci`>{*SM^?+?r6^m^Ijb8@~q-1plMQm5+YL*V&Ohw0ua z-fl5>&oE>V_hP#~Y~F9?7P^}5J_7izpU&T`mXDX4>5BYM*UKf=c8ofP0(JmBf513- zIbF?{{gy;bkCULvy>*yn6N?-uE_#gb#Z2)|wzoS*LIYzk@A&;o5(9hLpWASCf|yYcQzrSU!~A>)CRiK4>aNz4)&85W zZ9rnc;_GNr8_9T4!I*Xy`gmeYTN=$V?VK>`@YNV~PJ`7EUq?nAu=!v^FqE!3Glzz*!%-1JHglL1fW1CK(08)V9xxeT7JPr@f|6SR-h>I8b<_8 zU@2a8`3NajZSS3 z2Pa0Q;;Xt41$d>%-{v{_wmX@9tK59seb^l~8%Uo0{N-||VoA8#z21D=y}OzH?jOJX zE@l#6Pi4}Hkx6`2Ga2BOOnPKY2)}(gC6KTi;HNcMf7^Zco8SND{JY=1_|3Q9eD~r7 z_B|)3|9F0Oa(4FB*|%rkee>evK%k}oG-(Yh7 z%@3R3ce^Jk{_uJ|KVX;H{o(C)@qqPfa*r8<;+mw?vmPSka`(sX^75p++CCyvlgl^1 z{pR;yUtzMif8H&2>*vbIWOwqzsS>m=W^S^(nr`ty%xnBN*vm5~!^dl^BQLtEtJklD zyu`-!9m=w0VZMLyMuY`Wo2KX6^`~9GeTMw^%V(1}-R0vBGm*aDKYusDZT***-Q~Nh z?#J`zKU`fgr&rz84}mVNySrz;iayh#_=l@MKHJ|dcK`kVI!YSWOfHMZqljx@`M_EE z!w0L1)ogi~_bQH6Ne*CTvFNWJvB2+sTVGSPWFAvxI#eUgWqEt{J))f-@$lZOJ zPz9w}HjnIHq0{VaBWul7f!|K=@26d*-OiRPz}F88Zb`P&?&`sQ|I{y+k2j0evopwB z5NY(oRQ17b9U-sQvyTxP1EhVA{t+=TK#Yx=2ui~wf=rl;!OMQSTd!h}JYHjH%$YmJ zjsdk+43SQ4wVq9v5y}W9^aa*b>%)<7azDTBuJq>tU)x)R?hg0Ym?mcGL7KXi0sA_g zuFhAO3i_*cXlp|-BS|1vj4XKRO_qTe!3J*zylC#ty9X+-Qd((YQCe9Lt*mW326zU| zGM+(0zA{kCR|XvCD??4G3$T3c{nz&myOR~vWPb3Z$T!0EDw_$T=3dh>X-w(pC6{}#%QxorvzwwZNM^I7jYU(K(eFnGVW zI>>^|^Q-A@|Kk?QyPT!~B8>vZ*vc!mLV4sd3~|RGMn##o`#jzNKnicIlZQd$F^JZ| zUo;E;lCr&gzU)2r6C~s^nX8lFhoQ6nVKM6+76bDDC5dK2Q~NpH5R%xq&^q9jV5Fli zXSu}F*(GnF*xP9f>bpt>lI{*`D%T;&Prf~&47tA<~P-yQI8NQ#>sYHuud@1 zL2y_?5X#AhAc__l#ljM2+>_{e zYk;_=)&{@t`up_*^>*svL@-;2{T+G{H9W{ghGc3@<%qgEB z@?shu;8d&zjydEMxb^adZ!7qA(eDC;TrQy_N)Xb7Sz?GGZ5_inZ$3fSoP(?Un)S**>mj#I74gjSLxGYGljV+HC1H_zSvA$hnhOpHm3le+w@O*i> zxW&XiPv-PLda*Z$>7h+ZnGm(?!a{cLaxj;w9T=9Mr39E>< zO!6#KZgMkpGM{%9YTF4Bd47N0TNWofXb=1CaykQmc^m*1IhHvNTgohwfiEHTL=GMx z2F8>C_fJBxPk>_e=YF1{$1vlY5lm>AAv0pIvFO=RwQ!?Io^}NssE0%rA`U&DvVSh> zARRJFF`lBqM#QO=Ys{{@6q&QK2O&}SECO=-9+TS=dcj%$eJ{W}mWbxq^UpJbOm=Q1 z8-m4Tr#P3hyPo=kId$F;5WR9P?+$x3>g5J})Tjf1vbaNsgY4OH+@q{h3Kk5%T3m0j zY=)q6`QvoYbYR!EI)B&SK*3E24dvHZm|rYb3jso9LoKklS%89Fit!>qsdEhK{ua1)$rl{RnzhaTR{uUp-c$3{LeH$Dz z*fK-KAh9OPTBU?>TLo^Z5FTT_!$!9n zrGlBPzVG*t$38~(#w7+Vb1}Hs#ZR<9gb&DZ+@VG&qf61SLxWjnv*7#H7WVNeF`nD$ zA&{X=79b{*Ii1T8!roxL-Z^pB4*=yk2aqEtK&?8?FAwKkS!xAis@0C&l09vgN3LVo zzs?~DJ_b_nVgnfS@_IVEL#LKW4I|%kR6OcbD&esCaq;tXJE!1fWURgh%93j!t*bPU8he=hQZixu4S=;7CuVHD5_6P?^A|L@ecI5G}U*019bK zm9`r|72CBzL(HIualuI)!v@Q1C?> zRwoJ*QnGy2=}LoEg|4(>l|<;a(-Mm1Q3k0Jqt&Jw$Lhb056xBbEDT8{i6-b0tf`@a zv(ZhvNEy!sn}Ly}q(T>oHjWZ&R*n*$Yz!ri6GU!sC@CalKro>M4y#2;pvAI@^@71R zP{wQz5E=?f`pLY61zSLg8EF4Yv_~*1L?0>`LEVVrrV~lFEu(%Xrdbm$8B# zyTl|dc8P1Mv`f-VQC%Wy%IT6S*CW@krXwyfrsFN)Q5n-B2$g>Q+=HL)d@ISrc95-Vls6C|dKti+`rP>RVC=jy`}QPE45L{a@%Lj~ny zi8IY&35Q4?l-eaSc7mv=D``e*tCAoxd6IH6)`6AGYI?6KRjKN#kp-<)iAy@G5*HLz zB_^BUYh7DC)s<9bWOg-I9F@qb!l^;2L^|si!H(D>A>S4bN24y86`4-Ip%YViwhXA(7!>?*}^-j zWQMiL-Kp9%oLI}4|FYQB5$D_OdRs@Gt`E|+R~ZHs!ciitc9?m-h#IoQ&CQYmL!|(r zMeEor7^?24n+`UtjI&RPXu?ydmqjSL@a7Vh`8rvfAOz z+`ybHTNsQ+Nk%0%wbg4(pRj6{SZ3om1s09{Vb^3}lm1&;^r5h?CE>OOZmy0|9k%qC z(>@%TJw_UaU0Ir<>wE!en;tc-A1k;&@8C94 zfujeQ5OeYX`!=oJCEq_E;9-vyV1+Y)N64&qL+5|Euk)ej!ERAa!WHd1+Jba|&J^Hf zUfwQN+)-2ze(6A=@g1n3%6M2vUPHiScf$Ze=47Fp=}-!~6)iYrq_c-6>fO2);cdT$ zU8iK^`r{V*ipL?!SmzrY34yD89s34W@df7g2HJPm4ea;mLuG=#7oooF>cJIi-1kGw zoi<{~X}FG~JfSnq)--h@st4eVTt~WPv5us)*T3rN#)A_-VH7rKKdrxzlD)3ZBgjVP z_0c4|#GKh+V4lu(WKb=6t=EZO;4p9VAOAA*=4eS41e~UT1 zL7CP5F*?)F)p@{krjC&6u8saVWoz6WERAuwAQl!(r?#C$zGslaJ2lf zo*)FK^=<((Xamp2T2<#Yx|{}Sk3KF9vh&YK0C!7JLt9RcSn)P+DY1p)ej(rQ7UfR| zxY$rDiYqzH+Eem7S!`R;X^O<*pE~;WVkOc48fT=n3Rm*_diwcE8hR#_xzf&~j-q$l z5j6G@+i5+fEdX_#ZC>g)39WS$oW`~gDC@{@(?nT3xLlye)?@k9TSs#GtYat$s+Ftt zNxSkrPOHw3(7c2z&nH-D=tGHn6^>9QQ+quxvY6IU6Pzxs=8*b-$kuh_4~za&9do(9 z*)!8+9ZTVNzktJDiMvGCu7MBN4U9Ed18FnQ38wMI9zrXIZkgiy$tgC=Rn!S)usVh# zj|*qXj{DkK8%>2^8HtO9Im#WuV~+0Ubv(3Fbp*CFs^~hF$-l??IF!wJ@4YAlbCVeUSHbx*G{VMOC*d@*~?bC*w(wJ8|i z{O&kaZsTd#W(>8`mk=tCaMrvB<0iKkaG<8g{1*{x!fUcp#+q0p(8RGSD@{m2s)3?G zP(GVw)4=XFeSqgvjpIZvV>Qh8>rYG$RfUUj4wcO4Vw75H+`rY}8m<)#FX$`jQ9V3- zTSuP4Xwg6+-s{8XknMW(@2AUG{pxmq*FZzkc)#JSath1F%}trPmtX((+tY0w@m&>h z4ll@(k4@(_jL9A~O!C{PvNZYr38LIRgw7pRPDUhOj3!O=!)Q_@PmDH6cI2~~6Bmtg zSCcB8wu?_vQ38LG$g1&4GArHFWI9I&kFeby79Gf2@Jzvm2-km9I>qxP*3}(kq8G~= z`usTh<$U|qZ*ZD}?*45i?>2{{`15@&>7YNuKJgkOtnAOGoO6*boTRH#23B7}D}RQQ zhp%*XLzSB-=xEj^v8)AI_bEC}-9KEzFlRctR#9JmYExLIe#};;78kl&93|5Zo6f!a z-Zw01U2HMc+QccGtJzWRRy8W}7txN+ z+&%o*BCvW6G8xro)ylwd@97)xB!P^uRTkc&J_mrI1f#N1%?YB)f=lmhzg$=PJw#4Z zVwMcO2f$EvgN<>}ec>{z*Kpyv0>pCA~CG zbre=XdhS9_oYo0~jku20859^$j#K^EU)Q7S*b>~~Fo)@SEr-}3sq7Wy2Q zJ@8}x3c!}!tJGF_hXE}=NN&W0)x(fl9WXG)UfT2sN%6%1GHm6%hr z?nBL3LE32LySnRZ*&^9jDz}*N7G9zX6F5R zwyvawrKpX}CY7UfKCiSH1zA^pjROG=?qx2mKT^_y;#G$1CTU=3TYx6n`)wr|+b~p7 zFW2`t5`NoPky<*c7)+?Nf7GL8l~|3Ox@8qD#l;FvB30~UhD!!(g$!lSZ6p+6OublmCu7y$R}mNPBV9=8Xj);PmxeU zC>cX%NQ(^w$tK=)igi3M>d@^bb@a&OTc)2C{bY%&gK#HkC70Aoyk09W;7G(-+&YcKRNVQ}Zz~K;X0GF;z$()`<=X*pcq%b6?f7CQs>!M(vcC1| z{fo=X*|dhI>2$Woq`pC&Xx#744!qRDo8xG-cv|#}Bl1XQka}M(aHgY@CwEzDqIWF} z6%l0>aEEZU{#ZlV)iDj^_v zCF%$CF(g?cF!_c%T#nH+aZvj`EY^ozlfcRomad0ZK8y?{fYqIMuA;}pjFq|052^%< zbxGw5>oEfQ{Js2?o2pAT=(}pK665{Zd=cAZXNUWH$~YVjZ7M9o*>fd@N1%oSyyU3P zVDBk&^KRY3_=v@eBQsn>VCU8wOlVc9F*g?Zm{waIr5+CDr|HAS{%J~Fq%W%?-+MSl z&9Q-81CV2Dn#)Xni?{bi6K%}Vg~{oCF(!cNnG1hM@n~J$+8b(JkTl%s``y0L}S@H$EX*{T&e3?57e)CIQ4 zc>I{6d!=-c=KcDWBQ)5#%=(uN7SG=d7WNF{kB1=mDE>C^r{D5 zh}|T$*8yJiyt=YQrK{YJlc?()CkbN86I9_)NLd5!HQXqQPSL0nqFKwxLCk$}-c% zqJ%Iij9H>g5-#D~o<8sIAOhiG%c54!9(=3wdis~+_{FM* zk8=Y=FdhNpMWZ!39mK97a6ozvmov0Iwk0(J8?hK!I6-%hb3#x#)yP6e@=Z*eF0*XM zGs&-aWzFCMqUGbyec0jDNS@;WW52CoxbCkH`x;6^GD-PID8tBI<%NbN@yXi?lHUZ5t*`z>~WbA4ijPvHJMlVSTaGI(9fyhG6P$coaidT_~2e| zNQ%%L(3i7G8)o1tBk#!UAJbZfC%b=I)Zn_{tWrQM61Z-+g>{R{C8pRGiTCb)?kC$T zX<*^>Yf9~oz8Xoo#i2<96B{-zut$WB-=y@Vj9Y^yjk}`Yi7BYznp7;gsSJNyZ)^2x z4eNG*O2G_|IovD-6$%(sd6cb!v1QpG(Jkjkd$ssAkCfoNtsVNSalzStJjRR5ulXob zg}@#h=M~}IILIAhCL4T1*EQ_M3Wrj_i?eA z+-L^Ef=aJqiaWK0K^SJk-514BDT6yhjiuxg+sEO=S2>5-I#NZMalVX#jkmUxB}OKH zzuc(GlGDjC{3Y*SJxYPA8IR)a3hQX>spi5C_t#O=%~Ve+SFyZ7yi$ieuUP?WwZRn2 zbG;RGXy`UYCVjPuqV(1#G4&S({5Fk^tl&?g6T6i>52>`e;|&eIqgHkXiJF07C~So; zj542ezJOBQ>A^@r<=DjDK(SU=QTA(pYm9eH_Vutp*`-v%l#;92BP&=5QY7$=V7=6E)9GRdDPJRH7fFxx{1yB_M`+w0*#Yi4#eSS%d3v`fdTA_kOFR4JEFD0+lks7{yvZ5AK%T65?bbUuiOilF#gwWpO ztp!}Cv_HblI#jrcK&vdDXEZYsJmZ2=r>wHqQ(di6sTo)NwF%6v6Lx$^OO^PBt{{dw z_6h-x*m3#?JBd^@rzPW*^qJj6$RB2KlfNcWn+w-RgFjm_n zw(~Vjb|nvJ$R{W=G306Di{<(n?yOHTg(M=)U_0Me2fU=!M$-<6#S`=Oojk`XMH|RH z@&&69Vcz9ge7YJ{u(oTG>wg8SZB99_s9Eu31sou?$FIcHQqqVXN`>gSEXEqHK{`60 z$GbTilypaT?rB>aMWXD)I)W5_ySTP#^PD^BgkG4PO~Z>mH;F zHimp5Dy&?ASHZBi!AunI;H!}2kDz7F6BWwfcThp0&$>P82$5eVg_h4A=&3M+BEUTR z{Uzc{9Nd(x>jM=r_FT&{#$;q%)@=e!ZBCl{CM&eBzPsf3LWftrTKh`gx+XFc{F*c-e}vN?O)~S+Yoeo{M3cgGv`xHKe3*bd=R8e?mxf?0 z$3ekz7|Q!QncOQBV{3bbB+Tg0meB5Ap>Sgd4$<(KjNS@Z@SsPXIuv1oPJgqmu=A4g zJv*FM@SR?Rmicd>%!pm#?*e)gZ|T2;rJFU+Zu%AkqzufOPW>&2b zp(44_nsdg8r#w*YFp5>E!>U+8c@YD@Bb0t8^$`m5KE&L7gvP4OY`*Em%}T~Xj%=y4 za{)*An*FuH$AuxWX%bnk@F1c5FU#SfsgDm9Ht-f7C4Yj#2V-#Ip@(NPMw(okB$jO4 zi(t=p)5;;H6+Sdpsh}`zx&^aBk(y#)S3N?R+g2-NnuwoH?+eMoR=3U2T-z}{L1k8} z0?CAxe0sMyjz+7u2xzKovu$AEMI=`($d1RNTbbCQ;EML<<_%uV-8LeafnY-)1IT@J z$E{{7*%6LWnL+@YbaY}qSXpI-jC>It5~3eurH(?cr1HInANR=?on_;6S4qNJmvv@d z6FuB3Op8}e0AZx@lyr-Re!wl9#kboBTQuByws1VfeH4GtBb8;wpJUwL?V-u5RKV~^ z@G(mCN$iL!EVTYKvDj{J@Lb})N#J`D%B&ovnqQ>}UikqscR;pY!lZ1&gTzFMc(UP~KFc@C`6LfLlXFFJ#ZF zeTdG!;1C}uPMqgw@#%!ERKwW`YFl#~qokR`AJAil> zbQ#G8XbG3Q#W!aybX@E;zRT$Eu-}CqfEVnvSiHrnbr94zKa}yaV?MA_)F`5f|Lv?2 zA4&skqcDoASbw?LG)QIQeC`15v@JBszUnJ!!ZTo7gG(GhZfdxA&ajS#Lb)34WzXfL z%z5t8+oIvgl_kMnWi4bF2SbL$7a5Pcfm;yulprg4N5E(Qz$r=;;0J4 z%Fv+ILdXXI-5sTpFFYZw+wDsfd(5&{LR>_5{<)vYy}dFj#ib48N2)J5&c|_kCmKEb0^q>oA(pk5bfdk8W$;a9uzj>fWGt;f% z=D8(*hLR{4)*I;4yTuZIRxsj}QLk_)X=##7gTiw8G@WS$H+d##`$ql@u;OTt>O9grZ6`n&qLV_kaz=7EO{Tgf} z!ZmQZm(l$s>kV&P??!aZoxVG7kVq74;4bAh)IdI8f4=N-H-0r+lNDsE1(ayGNECuO z9Q<39+%+_qn9$oma?jR4O>~P?m@Ix+Y_RvMXH!Pgax`IKgwp;7vpy}2B_5lRw>{M5 ze5}1e5==C&vHUD%SZzu!!%d>}4OKcDxuH1Nwqd?q+#unSC63qn!@v_bZPOf8(r~5W zsS#=&ODy~HWM0Qby~K~aI+u5Ym+{#wb&R!U86(@llt@mAIQ1>z4MV(^V&2F6ln}c8 zM|e4x?A$o_YWi43!^rn`j|$$@;#xB#pJu!kq`OeQ`VFtJd)I%iq}Pn|bvw>gm6KMd zb`tCqi`8qK!z>GJnJ`r+w^JnrR6ZLGr)YGl)A1&khbjjcq3}3I6Ri_YWx5joS~zJS z8ptph%;M7^3hv9nUMHh)gVqdn$0(fJ(}WxWm>D#X_|Q^WY|T22jA;3!)@)IU`24ZL z3>9C4i+>Ga-GTSAyIF@@V`jSKjji0QPe%EY!29=N3rlF7MVJSVaTy+skV|%%RJ7ie zD9c4AxOjiAQ9=xhcS|+N-mY<2zfvC|qrGYCU6p{LiA5e4;2nv=!!9qTE6h4asbOO; zGyQUDn^$_qpu=NYzpYSB?x|V|_tWioWV>W#5+bxQbu<+2ybA;u723d}ovmads%#w8 zsVJ`pw{$EzMrViG1XPIR_nMcPg@DOR<4fkg9C50Mhb+3=e*a<8c%!g`>Y$BeOl(s+43&HS z8mIiZLXSTHk;+eR2pzt0R3)71==`m&fZ|Yx+(S8Cj~#YcIB{?KG6czzG$G7f=i#7p z5BQn0fg=JE?Ql`pKP~V}w-eTl0z8NZ$6CVQ@v<8HK&G=o!lZ%M6P0`aWDc^cZI55vy)GWA37>mAyj33@vR7NN)Wgt?8RcnM|?KDtZJpTy0(!6^C$q=(K z-cGO*hwBoRR17c?6aiDr=s`x2)iI1?6R0)|kr#7SgL@hSI?BWTaHBfiAf@x{t;RAR z1MDU+u@}DH?B*T12#p47JczPBdtlq6>Sw)@fh241Jc?}!F^ln`N8wV42Y)_IZoY@( z)tjy4SUvgJK}S6Xk&RAc7zHaN3tnQ0uxw9n-QA&w=vgJqDd8SMm8N{=QiZC3 zq4SZy;V61g8$~etN4h30f+1%OqsvI4Jn*~;rp`Tv%bmXQxQ2dNG5%7fauvP_j}K)E zlR~U?-Wi=Br1o`ET&)9RyS~N5jFgGT>^7ZaGdQNJ!AWo3u>O*!GIW$cyKqmPx#2sO z%0~9&W+#u39B|q1^WZK$&)LyPlbE=mF96wxK_YQRIkA+t!tIAd7g5vn&v4ljAC z)G?qITIr<5;3ZFMtQvwb%#suHkOh_NER4FyLfiNnXlGUjEdBQKM&G&YrRt3@gDM*- z#I&I%(9@uX3ISrm)1bn{!28v1dee7T5AUFH?t&UtJGm~%Gkh}uGpYf}3O(EcY?c_1 zAUPn)jUCE){*b8EA>WC0aU_QCAU)k=^G94}fvBCYEu-)b5S8x;?PQm1Arjdu&Fc@9u!K7@Y}wxQ^cg zJ`u_ai}53L+w0jf_{-tO>6nXXvx!i~E}>y}7|E77muxKRxl@(405Z4QvltD7TBcK! zEOZ3Y91?5!Lw0ua$um@3 zaC?3>!IkNI5n3Jk3$98czUN8_Zi8us6=N?tb(1;1{V<9SmcN9rc>>X0*dZ6aPK42$ z&mkOqz8a`_p$BpQB!2=E9hHX`?h+Cuk~3F2tRUUV4o*N^OFD?=u=(rLeE=|z(ZSWR z(4FdZ9o}MsgCS!~Xz$h+E5V#x?LQwP)+Z>dgE?ck|J^>41zGi)Dk zn9?i{Fflt+9?XvNN6+zkt|a=&jO7>n~)EMp816Vwox z{MUMzJCfBgoa98p$Tamv`WV>bzV%4rZ5XNYFj-(ga8?LM(jr|Au99E_8HvKH$u=&a zgo+qyq!eHrs;KgZl2y+Ikd)RZB9|;ktc+k0nL@-3n=QSCTxrt`shC;AWhjodt2&CY z{L;HHfU=-+YHunlaR@rf^VENd*N(;NXS+Tap72oXv5*6Rr#pIES&5iO<$!wQEo;eu zImdBi90O!32fG|Q09dl&*=0{I1|5r=B_eN($PgqJxe8A&D{>xIY)B<3ZU_(~)5@Gu zOT>>r;*WWq*3?Kt@h1Y5g1^ITc@F_%e5#C5^Dyyns)j9r$~EY6dn`?|0Y>s8Xr-&8 zMWe@=Lwi9{JI2g2_Kcsu+N@{;z(v0wgc$?--s~l3#TkJR>j!!ra28sz`*KFn2jjC_ zD8TL?1H_=H@kOlo(z6n%V;F~v4N~A|{sOdO4FEI`@W8Q1A!b*fgYLF11QX!7C7AMI zyh%?(BSr;CYJVbHISJp!g$L{Xg=nw79O44L%jMn0n(qvB5P9qw2<0ChnvzMJX{^%Mia{pG zor5x@4`qR>#|V~^QlTLJPOwi76uy2W02vJ4uNLnigfw7gk5~(zLXzHT2PP>`K83leLZ(TL50%5oMawe%{HIEBOsMl~o5A~t&$8x5{U%3TX05=M~#r!92^ zWm0%TaK&Ax;MsCD#iYoA7~_S9w!Q1%LIO4$6A3R#K;G^U_Uzb|0cFP1C%LFwMFuIvhjsj59gmhqdVi2y*$dxZF6bHT&Jmx_o+LkK))IV*pp&_ z3zkj4=hV)NU?1i(-F+iXw|)6zL>6EjhDX(v1lPZHfZtm0JwUTF2J#< zSPd)&HdYxp2EqpuwNa3$^6>Duw$WTbac$CuQrYP*R4lP~yg-w|Db(^Li6nob-7;8$ znU(lhyNFVVIQk(%`?A{meLmgH-gQ?p;VE~;ivdRCf=wx2m>3|&=JXsrgpdY$s0A*l zn8<^Pw?1~8yDfjDaSAd(_kOQ8;bWLPQ&WsYQ0PV+0}<#8b*7wqM&WIZ1Tf#B^6~MG zo(}jW13e<&!C7^B0E8K&OroOcgAhu^>9Kj?MxaOqj`rkyqDmlA!Sx^}5WWcy-7X>r zfcH3PgVQ+3SV&2ZeUX^iNf7ZHKSi$$LF+brpx$~E9XTT}Ibc~R!b7UzP){Ug!UG^F zGcSVlOubbpO!lz&(MX+P7$-eRFTyNHtmLW;#tC8!Bb}|fW6Xj+i(}xFny-u{qw75f zj6`ey6e14(OqerZiXMVb(3K!9B%rc31{#Cua!7`Q^BIIRI2aO>58q)9buS^CrqA#Y zY(KX}8ro+&rKyGbPdNElU^u@I5NS;x@z6Ryf^nS4I5>i15uU6vX+fV7nGDwu=9>GZ;#o7v< znLUQTgsfYMhSdYY5KoAN3|xp%*>(_=4+9Ej#Tt45zMtap;*8Ng4=|3pPe_LO9RL#7 z0a%?ZL?TU|GfkEQz(sFUT^=Kw76TY$xd%xAr>QbPrkp23KaP~@EQixwW@gx;aHJEuzX{8XA96!SO(NE{wRh!mZC5W7npMP+r@QGV7p%M#hjk6wIv{RDY^qJfkLLZvH1alD0ZwR5~6>4iK|3s z?-?bej%`D>-g)a>trISEu-9lM?Db-%S?5R#0t@7_0=(OA@np?9Ltvm?!o>wofgf;B zZi;Y)r_%cKrH)xrO`4%zEOF~*qNK@t!OI=jxU+mY{j9GHk9iv7$cBUEHbaKGb6s-c z8W8li*4+~cg%0BxOR&)2wOReVPl(Bis>D|?k9js6 zv8~)fa(2uE)kjL6Ph&oW$x@%%)B+@BKd-1iS&{;d?siVlqiMqtB6@)H-4e9E|4Z7I z-80Rgi`lbD0{-FZkIy()*CR|`L8=V+tB2RqpDn|ea8poq>7$a8MZ~IrqyF>bM7CZe zLWZ#l^6A=`Odcj)uL(tL3VGbuhtKFW>LQT{EXH6`e;;1Tj)X&qbS@IW?6nM$>0+^U z1~3s#tK&8UU+aMlMPXVt(JB}pi@+9q$I7hKVQein0^3QBuWxQ@v|islNCX0I8v^kO zM(j!}*EecIDW2o*BBi1aQk!nXp)ruEOj2NkOAL%5QkmM?b#d*mJ+Z-xdob{M)ABU79 z80lPnnLAj9)@q;_ONQuLoGOAbD6Q2Z)ZnDIwy4FZV;ILOxE805QJgK68xSWU53lAp zMq$TMccBu@v$2lHI=}^9ef&AD;KRip@Y^DU%{_!Lt@DCr2qDeO`Sz>dK-<3?v#TN) zWFzhowAA$e>eMqjNH3o~hfkQ2mAl{b#~}SvUc~7kW(fCf zte!t+04L2L%$9`RlZUV5I~@vA03#)j?3Sbhs9Hc?-obV*X z6w4op3nlPWK1C*}1V3g93^lw;`*HwIe5sBaM=<7N4C6?mvE8AYBGFLL^T#f7lpv+5 zHGy&+?I-o*nmSHN(D;0Wrhr-cAyn_K@81 z8(%@i+_)6P#B_b8D#dKD-tPtEoMGu@Kx_xV&5mkC)s`kr-|OgFhLE!{Y_v1zB;;v_ z>U)JC9r@6Uv8^>gpG6>Jt)(%`H0dNYbOfRjGtJ*OSR>|PDK z4BVe3$nu$av1j?qp($U(dm=LO5h9C0BmC8Ry}VvSUAKZ-K<_5xQ5zJAN4zl2)?uln zhxO8;NIY}~Yeq}uFy;_Wdd)-DX>#%k_@ajy2v_s+MkqueV|rKk=N*nx`R5f6F%vEC z@t)dNhOX8x<2MHO&Y;XgXu;DZ{EWQcjA5da9aEM0&OQm%PKJBH=@M)m!EsVWFvcmA zY>Qb&IRKCX7H(Xb)6X-S5r|aqjls2x;dX50YXlnQFJqTw&Y{ZLVYgr3XJqEB=m0ZD zP@v1B!0F(CClDX=SR>fhYU{@-%B^OjryaIQd)Vd(VA3{Fg9?)VaiJ;d7{htbg|!GI+Qepq zu|P2vtoB#~$#@aJDp|rbxfNBstPI}JxLO}AfyF^pO8Ne_Un0crm_mQr+;*Um7PPy3 zsFv8AFO3Z^#hJoG)7Zq&1!kIz%ts84Gu`0uepotn>{Ahs;jP>dx9<}DWS7F$*wULh z|3o+BYjDytc4ttr?-{OS@Y}u!gVhl4Lc4#vaMem`IZcvjB5G+#_L7sTrHL?re91IXb_%@etqzecB zsEj(`z;KLIMKFf8rjaa#h?9aR;!=qIVlhcNN$u>}%}6?iy~dfW6Y9~Saf}h8@D!sB zA076`TV&ALq!5CNvGrl2kA3jL( z9NW%Mi@6Wz6e8|bzq)mVe-iqFa!Q8E!^BhWhBTAn4gjPu#o_?G$s@T*=n`)bXX*My z$r-Nb95>oQj-*9&FXGQ-frbh=rnMBywy?hp`7 z9)^B>yG3S+TVMYLM$Z*Im2nUJ{LRNK0K*x=Do2vX-{QGIOLPRIR#3zy^VllkJ7Pts z!3Ue-Zm_u(FNzc1ib7(pK`NZR>KG`S@HF>fXLR&>wyy;);-0~$6Iw?DWZP8(oUeB9 zgHN`EIG{VE-e-4A75t|8O z0NMv8F#2%dE4Sf0*=2UG;h=X1Gz@>Z+9-rzamP*`U}ht3aJbdyTUX*$LP?vhobUu= z9JO+WKEriWEVg@+DJeR(!MJ4!g@A3` zE8?=^_>pO9?i4K#N7D$du3Dj=NWZ68w!-49g6pOgwE(KB;OOYpqc6hjz=9qbQ^Y)s zRoDTYb^L$&0o;`7kQU6tWWw*vQ&}1%8kmwe}v`329us zVlu!i$5y2NIk=d831+ONu0Da%Gu~{Y6d*b32{mz#0h>z#iaDWl7s4!59wr`RI;in- z6iFMXeLaSf#x5MbP%%L!5M+})6JwZV)RffX!*vVKbEt4Zhc-YMXSvTn|G?X$d9*T* zW|OG=s7Kg5HSE`PA#Iu55W_fll1>@ouQJ0AF_Wwu(54;@I3Ba1O*CNhFyl&M4#*fF z2FLGsawEpf!`JXP4k={K6!?rlN(b+M+iVkv(%ca_(dxE>r*S=LN(-T{UFE?{UjRxO%|4oq5q4 zHWrz$wy2v7?uk?q*n{83mx-N)#p5NN7!7;60y$zg3>qC=?-tOCL>jgy)}{dv+2$$u zdnk@l)QghB5+DJ{Z!rdg;M*Fv!#)FpF zflLHyE>p}pjLD2)q{}+;$?}#SqIX3PPYA~F%bPE;s`TrGVge1+)x&IUvpc6Sl~^C- zX6L)$^g^GedBWSfY&qDp)gAALyIODHWA+?&E3o64{sDka`Hp)>_c8xwYEmFV*zdQN zjXX@eX*?r33lb~$2xZ^CG((~V*C%PQ1;pbtD_rD*yBb%n?hO-}K$)Ku9jDCIQ5fclZ=3~P zDeh38_f{hnFsc1gl#Fl)5zQ_~hrl9yT;kS0OUE3h*)?~1JYDTfOS9TUADj z3XaIuonz=~O({w)%ANOHzji3WFYHPrBSL^PC!KuxGCe%~6Co3F)3cHZ--IKl(EX_N z0nC9~0Xy}GDg>vSP52~XSX}~)JjbvP59VgADze%Q+o6DAv^r+Wqx7irK&hCc6~&H) za}#_1nfDO*66eRo;n-^z6i~d+%9~{eRftpa+(2LoiS=YnC6}270c+qA6UFY%1_;$4 z^sH9QDuOY5134fb!{#tOLgyl87Ki(Qm!CK+!eQtveKpQI-qZaPdzjlbOfS0~j&#f& zn3Bm?YK^DF!1B=`NF0W1ZIwrpBykCQ<7)g0GR4Fd_&Q0*qX^a54FYoDY5?VQtg}4q zO$hI3zrV1{oaMW#`}uX+I%()c_ZG~KkJxlwWskCJRyaz)>|DZQYq_-DVra%OOmyyj zscs0Bh^`T}>8*-MmF0GwK^$x6F($>qpyMS6l{jMz;{ay2Hz+?TbWvPzhn~qZ{QW!; zLCpvA9hGj*0}EUB(mdT$9l@mV{-&Pi^)+K2!&v>}H;%a{B25es(jbo_4Zg@3s=1D_ ziA0as!}CE-L>k{F4Rk1ze_h5e7;ao2fM?LP@G%MV!9VQZ+`s~H+b2YLHk5~N64YNq z@?F&$2h{y0A07jN6)uIHk^+BVm5{6?y0C5+Rs_x;d6@X2=TD9$bsLMdF!Cjze4a?t zx^;qVH;|zi%laM-!x-aOT=#lkPq7*(AC_?fRpUcG$6T5&Gxjj|H`?sms_IZKE_9io zuXx~J2UK&%wJ`kI5taRfqTuU7q1G2X8}u9yI0UaeJi_+iL5z?h1#FEz{v z6f{?1g4LkV={sj3v&6=R9orQ&B~4wN3?o zh+(anL&7dQCt9rHUCZJV`ae67X9Y#){zYg@HuMOA{4NxI52R5+ILi7hOtt$|uFPB@ z8kTJgQ$?{6MG+DN)$F4nte+4^M&E){f}#Ml$%?`UhrR(1j7YYgZ0UiTe zi^IFp2ar&}0g&2L%qci6lErn~taTf4W2Helmd%ZvY_0$!>%Cd&drD1<1n0 z=blw#+7|BhdbRF&TO)GGPEqKR&-Uvsx%_h7tk{sy45Q*jQOESZd5M+q&8UwN}52YYGv zbh?>d^Gq|i5gHC0xz0$0wqUzoe}=Ht!mbq~AtzHR{`GwagFGB_@Mp?DGWu>@l6b$7 z^#VUW-{EWbftP?Gkq#c2o9_J_$mL?w&G_f}{l;VjQ~|sQ5YnU^L+aK%)MYawtHsFF zc~g-6#te1|wvWW`_FzmkIrQe8bmaUv!*vI?c;muRIxEcyVET9mFaZWGGn!5~5r#%Z zPe*_|Sa(*|5EgLz@qUBk_Pb5@V$Y9Fx4{2&1O}ZO?mefleLs7-2L|3(Ozgf_=tH>Y z59c#J9yZ;FKB)g30E?1gGS?-4-dtS_C5BXDpHO(&2X+E}6;MZAqyzg;_JN_Elz*BE zk+2I^uNJGHVs-I}n(OH{)>a7PIaNrnThU?8;kB~ZY5X%mzCz`o{}&<~6yw{FlYzv> zHRai<&^XjXDs;VVcfq?xSpsFn#CFYEIG3iZj6l$7&yDtb==OS}@lQ=!i>*J)>9>Ms zWVoNSieo$<2O0GcLK+B0T!d6;-J(B)9IJA7BT(8ed*I_n&$XGVGnONLjue`;SF)^^ZJ)Ue&IiP-@( zIo&>P@bY5}+g>z=^QkNXH-XwVRkDpTeQmKq$Yz`nx~BcqvkN}K!`-Bo(6>iWt1lDM zLs_y2V=s0`F&1h+BTOOUC7B(wfy&KS#4gy{P&(c7>-$9r=y9nHUg zz{?YQ?AE*25j68@E2&LOcG=j=PkHoXc*ZyOY}nF#a&3qwA;mO(bL123(5T##&rE67r(Q;m1A+c`8pV!^}3X7opdoTnxnLMGfX;XQ2({B1YMb%GHXB$NoqHd#;v zVv>SOtZ%wHU-?7u3<^Lmvm7B9x=8i!23@E9Cq+8&j^C$ z8CHC3U`$ls>TeTmsqYG_Z5{2|w^KfSo$e4EY6i9ZuOPC*{cs8z&1xy7c0{EKgP zdgg)>FF|ykAqDN?xfH&jBy5h3x``=aW|8T{G+^hSc@H641jkqS!$Q3I#4i@uzHDWG z*)QQ2gtnG@n};H255ItLgq^{A80aBlN(N9)w$7TnEpgTdQENh&DqI#`O%JQt9hPXf zG+QUAz+Kp-_01+!yN{>iCKDO}jKILsLo5su@DRjCT2#9mn5gj+Ea$I!DttRST*Xhk zbh7=(eBu~c8i`azqADmI_$NI4u|Rb@bRp8=E~G8>kNTY;pWM0AJwo7M6ODZoiNdpB zGJiW=*e7+0F`(O}6#Cdh4GoeF|FF`qcZB&+_2i#~(g){xe+M&&;|2iCKIUgLfHL0M zgNx6vr+@L7BhZj)u_~wpGHsaN;KRN;Xm~7)9%B|BNPaW85P$=jM&Si^9cow{#dd3; z7)z%(JrCh~LQ@GH*Z@DaDRMH{_o>IefVaodc!4eGN5ss?WGBxQ%%_$x^F4+=xJ4p->LnQ?! zKu4tzaT=k?W}J{}9}eFd^25%Ito=MZw5}_tc2~O&CrYiz?%Hh#E9nr#=q+)^Y?RYEPa;%){8dgCvJcsa1698BXKOtYp@sAS7azuqGTrw44q- zfg~bYZ2x5SW>EHd3YW$&g?xD8em-1`4t2I?VKO&D{;GZW!2()N;;bpBUpodIq8z6n z4=xdbI(#SIyqg`DN6?~dj>Cb}7+2AZjTuYZ>Oh`{Cn#_pc6!cm94%8XtxtLZq`dC_ zX%XteJ_*$WiB?1YNhl;$%qkgf0I-FzUwTD`Q=*Wpvlu0mjD5DC6<<%gTgoMr!Yu6a z)>4=--cILp^m$WjTci@o1T^DUh`A69!K8-2AxzAe;ls3%C(uNyAf|++ku#6uei1pC z)I24R1xBj+N5pmp@&%P&Bnb;4y%kF({JY;+|M3aa@O%8hzS`8 z!f1%f;Z^{x$TC}clbH>37goh^ZH{&QSk}KVo?xC)UgB z5sY-NV97Msdz^5}XlrneUPz==&F{Jko|5MWxoB~*MEsM`I4}Y_tR)$ZwN)TMqya!& z@?ni&KH3(*`rHGhk7TL({>+;idV_#k$*5(q-AQId}@*zYLTf~!b z7zq)`*{=Y?SEzs?;R3dEX*P0W5}6Vs!kJ19-phj<6GfyXho~=zP{uEzq)j`=0dWO9 zk9*8WNd`8nhHGeaNxRj26;Z~J>sP%I90Y7HvgQOHX|vG@&?>cD4k zUjc{l!W3N~^O%|_>hVS>#=>GZq#XdDLGk@kB4R8%H4==wR##(~*|{$FkE~2aqM+NG zo@H|RCM+kqM!nk~!70JzHQgci*l+74PEWFcUf^~YC|0}$L~mhLdln{BI0DPh*qEh| zGOO)Vf`PG_$P;KAqcg&D2=*V}tZ=zv@J=?iH8@l?i`5)XaeCv>YiD{(6RbtTm9!Qh zXZ18b2xhn}NG#0{JhPC2S=I`e)Leqk;wfQGa?p{&k76-PDLhFeP6II~i(G+|K9hJ7 zaRChP^jV$wnJVsOQk()P?k3d@DP7b{KvHt*!Tg^14FD<`FAK1`*3AIBjv}Fdk^r8O zfxtfr^?YT>Aw;aLayaBJA?t-y3TV^K;hDdru?s#TF--REeq(u$feRi+UG8xo%dWN> znqv%|JSgbhQSxxt=nx|HzFLvMCiY96;AR%u^M3|q%X?B%Sn-A~F`!~pZ| zE*%lZe2-zIqt6?(3oQq$ zM5Qh55*Z`7>8F^4WX*60xDWoVTHH?EP&sP@>Ltt-VA1cwnbGX|pD)i|cd{T6+RF#pBbYBt7r_wt20OJ#Kgt21B zFlNFgr}=g(CfCx$Pfq?H7km}EgyOee0P z8KfQcW=j#QRHj&ETc750+S~<_AJh?h`m#Jo5&NL^L98PYwDNOA0 z@Ip1oT{GlfjhV>f(D+&jbcu3HPLEI14t8%vkL=y;F?laV|Fe&Fz5Q_9JJ7rb%R9$C+zy|h3B zvss44S^WjQ(W&B3*-90b0nIlm1E{g-vGZnihU@HC^WfLUQvh>px^HltCo}J2Uz^2d zrAcc4SH%vK9jtvBPgTCT7-dkq)G-6}siZ7}TiR^|#{e;$rRfU~gCwjVc&A1kzl2f( z;fVse)ZhT)J#8kW*6cM@Nn!1cFUVUjYTVLbX*H3|9$n)oP8n$m5r+zL-}D4mKdrz? z?}9Y0amo%%c^*v09;4h=iGdD>3+3X&EWhjE3&w65wfSw6&rVh=zepe(qyq{n=yR&H zJx|RX9^!ZgkAXdJ%uya$R?NCRz2d`m`Vz;x9nC5_g3e>xa#4>u##K5(8e>@@!#rg@ z!{j7Q#~7c|72?FkK0EVn4fG{+%=wUx$3nhg<^0)w9@E+LU1u1m zYxje1fgaOK=KSTUVt&u81~<;?`LBe{_rg#+AnCDz^nrksX=G8qD_Ra~LPw@|DI%&uQD8be_-ScU4 zm1@`B;i6gpWCEeF>=3;19K%Fsmos4z!=p ztMLurgu5<1fY`N1pc6d(ns-=Tte0od0Z^xa;fsxnLwHG-x{w{uPa3suI7pzu!NOg~ zBXe3KEj~}@Sv31%Ua^w`Y^J|ZSg+t3!}T8vuQ|bZ1!7MqD5Ln(C37BLv{PKhv<4?V zTAoIqIi;;-nC{Vca2UcO9wn&A2SLKMQl*flK;Qox&Z|8nFeGgvnQ2xXrm_X-=v4uz~!kcXYNvN{jngu8M|5d)n0 zslihj<~gZlJ%UK3jt8ed9oe!(N1((DwU^Tww+xsleM%440ntiR#ymnqPH7>}qn6N= zYBVcgj=#wYWErhteba5uz}6YB>|l*mMGRa(3vW*|M-bBu*e6+gua;iWkV8nKL0>JX63p!eb_@kmYp#6`z{)(wJ+o!c zzF30^=2=Oo0f1S9%3C&t=`s+oPNo~4ClEFS~5}xFCNrU{Z4`$*8g* zvEhpEjA8^5)j@aHx~AB^eYwc(s$Qe2x#w6q?)LDwu{zCyWH@|SGefdgo5;yq%muJ) z*bEcC86|v^Hx-t7SVCL?kaz%K445c4ylp2C^`r1KOV!o(D5`GjQI(8gtYaQ)jznOf z{cHqm<<~xhF(-VwAQCaJ0{|)V`|4Q}n~)Jj$GMMff3~+epTrPxrb#tS__nK&Va`Mh zZ%;aW*sTjYo~`=rw|EN*wtVDe*Ws~K{Z8Ka`fm+^S!<7Xh;T17XfSQ107f|^e}XG( zMK1Ljqw~)u!n&|%c`bk}3=Sp?i1IM;^eD393C1K3D?Sgg!XIZkyQ4d*5h+7Ckd$yj zz~KmzFcjq`*p}0=xVe%T8nXMCZ5hUL$daMID;R_j}njr%u8&) zcaU#%WoV39MJP?0X6#MXGM4N%HKbxLa66?J50}a4n}?_71S&H)mTYc#^OJptWj+fL ze-3d9PhJ3r1IGS!%mT?hHEoYvwjX*#s}P&*F;e`?bo2FO&ts@C@+eai+>yV5(CKaN z0cJ;PtZ&Y2juv_dAx(z#Purj9vQzPo8xI4io4bn5V~~&E$%OfbZ?~Y$m0k%Yt(ieK z=oeFLeML<0Tb#)bVWyIY^}J8W;Eq?2df+C-&tAQNFQez605YX`8tv`O@;LyA0uE0) z%oZtf04d}uLurqj21xeZo9n;8Tm<(_T8(PU)SnOVZvy#>_>0j^07(^UbCfr&8q6WA zlZoBRIiOM00Zk66OvqT7Lr>%9)!JSRxWqTEw&IWJ-u!U}TxJGi<#awnf42oa^b2Tl z)XeB2`m`U`4$kFmh15^2Tc<=C3AIB>_E1Jf zQ2~>hPp4*7S?~sL#bs>GZOH*Md$Gnt7kVev1FQa177G?>4>6Z1bRXe&RtQPhok@9o z^1EAapzPqq|M+G`dA}Y&^Q#H79=xGFti&b z+7XCUww1AiLXaF`OwQ<=NXF#e7Z%f{m-6In;5RN#GLN6vus^WcMYs$|+{rkPXhd z{3hJDe8IRGP#pRV6jXT|%p-vkTOK!&2guCXhpeS7Fl4o`yH(;g(aFsmn_mrv5r|o| z@sU5Zo(-D;_*e%@eZ-s(4@mGBJ(p0vv+;%TvIjG8NZ~2wL#Ea~PsOQc=xE$LQ;E>( z)LcExqunyhHV>iMK6f z!slV){T&ruItZO9Hw=lmiBx8$+l-XT+Ww> zg2oC|g7{(~Xg{#f!1fCJz|Gp>Q2*0C%tD!p?3~Bo49Y~Y^MiKd2GXmTvk#3xq=JV0 zE$kk!h~|VP^w??_6l3r@hHbA}aU^->cr5j_0d`C7m3YT<2lrI`#U55a==ypWy@zkF zPA7C9_66wjC&Zv*wQ7wUjqdGQN)M}0Km7X|dnY^`2rSDVPC+Cn(Az2RFYI;)+_k7L zWbRQPte>G#ic-opaBH9#%cPFb0nvC6gcmnx30ooL*;T`;MQ|#BJ%O&;b}U1Y@T%n) zY)lsEh*u>w**T1j-1ju!JD z?-scII54SzNgb+>*G)p7M0cGCf|we=H(t$3!saRE-9Js4ckLl90RGKHGW&-`N(Pcn zwAnkg9!=g2IXfrOtqb;W!`Zs$71gqmSjp{dj`D()-fPcK>|{{ZH`Wzgc=qOi(X^#A zgvKK7phZ34eoZt#$0oxt8ih|5C0_yjs(G@)6@n_+5j11NQ-BXMy_!CT2tx>I(2d^i zF?Migs95G<-Q3#!`OqJF-ZNUAbF#f0HH4yLGwOp0*eFf63gSlNGfdBSU;XAKuB?7X zz7ps(T#u3+<@WWLaZ6-A*HUk;=F|ssqK}LGIY>dE8(M#g)Y?gT*28y@%tP1=z;AXq z?Xx;44XX=IREw2>spJ{Z;yD+QY1|J_$JqY9`)T*k?H_Or?58XNb7Q07Dy!NI$cl`6 z#CVV*(l=0Ms3KFwe}f4eBDSRv1H`BUM~GGgcIgOF?^u88xB~DB+74RS4*FNI)l&h= zwSAGH)NC1oj{F%`hWHGfg_RvQ%-9T@=)%g7!!Oh2LOGahTz6QD#UdU-Uqp|-T4eIp zWRWLGjs*~zD_~j93S5@00>^l42S_BE?)gAN$4Pepn47*d)wSfFtO_afcrblVaTPe; zG9t%?{$AaE*1D z7F+xhNgpvM@J|-ZKS`h*IYs!!9cu5Uk2TF;@Y4}*8@8O$-2Is*T2@~+ylPk`3-$4= zH%nBEF@}-Or^$FZRK_}sz1W>Eanl7h-{6tKRRb=KWnflo5XUkwsa+%FSM6fC_R`eg zq=!$0UBs-6rBKRywsH3vBr8J&X)$HK!hs{Y(hsB6Fti_-HyjSGF%6q>$>WClX;Wpqcxm;E=?bfFgH4?P zOAS>?*0FIqRQ1ST-1f@TqTNUQ{{e0eH%1a}{^cbOm_{I9+*+I}qOzFSTPk?PWOMh} z>DGT$nY(Pgz^&^`ByRU&CdJqecT2;7L)~uzQgui3yQ$`Ck<5C3oTkB;ReL<5F(1)E zO)!Lfmxz6YQzQ0YECCRB@5p!+NdsWMP0P_XXS_@cJKKBG6+?AxKf#CS)S5yQZ*u-7bZp!GJLUx>;<+aQd7Yh~nij z92g~-tfaNUH`#=5!vD1CZ*`hvr(okfnQt{Vu$wLCKhxJxarX+A#!(2@bx( z#DHN29>7j8gjM=dXm6!U*BNRZB9Q49K&Ez1n>yrz?fTQ?hR+wj*%}DWUs;Hxuttm6 zGYN%+7YvF#3v9wi_g`LjeK+qG-L$*J*KK!?zpDWs6j%Naq*7{Hpu9`=;xD*NXXo^yb|&@LYq#0kMDGeTDyDceteels#Xoc* zSL8+fGyN6SFB#r--QO+{Yl^z+LH}8~CHxn_-y-+j-##E^=3osxVXQg8h2M1D-_-CO za$}U;-%L>(Z0|fiW8Zf-XvtI(au@8ce%Jkcq^6liQv4cqvPO&zdJOvq4tOJ-U;J{4 z(p-1l?^`v^_{`J3yF>hK_X#0#_%&j&o{Yl`dCPN7u7HU<+VNk(owdAi?x^>F1qYV! zRvfO8>+V;_OUTlEQVCHjf2G`i*NU;}K7!h627Xzn57sWn;$G>^SoTRPcIagsDU4&I zioN#{^+_lp?8(f9)grk+RR^SLxAF{a*fmFT$`k3>Q?BtJqvPK&4{Uwp;~$~Y zN5tzf->~oAd{Md!)WlZ+AY%MNK+i7soDOd71w4$&ZBA7Wek>>ziEB3@aGQJi)vl`17dJowRwFW z)WtpOYCOjZhCFjV>fW@{N$tcrW{VWLLOmPRJ4>)duek&E0qwv(u|aFyV$I6eya@gG zmLA6fV{sg$l{7)Q`cA=zJAL^Dm9mYXZTA=TRgSpsKeuS{+%IbL*J!66vk&EkDgI)V{ar2( zkmEhzYztzI3Nzc^q?)xh_=6bZg z_04vf0!8Ta-Mq_cSu*p-=PN{TW>;qql@vCca&k$YK2rETnV^>KSR54q~2z z$T!V3A=Sp`D7~?re7|x#JC7vkP|7Sd{ zj($ezyOVqlO6{2E&3bvS{MoLE@~Y(y9F#lMQ&W;mTsdR?j8U;d>|T=4nltP#uOT!1 z7BfOEFO+H4pm!S3vX>s0NjTQIc78%ioWCd;{NmqSgA*R?M!5S=t=8czkm!Da)aGo> zW*;DZl7NibVqtdqKU=AU8rexQrOdWO3Au0j74m$I@uSu9ugQ;l!S;L}DUeg{JD!$* z*s~}lFb^};tKuR49rshs6*}bk2EFqys71;`2gGOXvK*A9@JyRplhO!Vb&0Y(Ro85v zE$G-j;hS+KH#FNRg2DkF)MWcu~j2^8JN<~?5F<|M#aA$uHLim7yovKndB?gI`IG8 z;uuOgLpiC{;ZBpflD*1EImOm!?$)fVw*Olp#|x}%c{<4X^#8APD8qkbdcT}?-*R;S zmoG_)^Xo^IjZu0$+e!jq%26;!A6zGM5(o+{^wTe>?M>F+47|P#b4Vm z=FDcCKoRqca?Um5K7PSWODWYf!M1}AT3_~<$VD8vCZQ#N*UCHTNn`z-`vRLkxLQ7{ z_6?7@skwUOJVG6EJ>^Wv_A?Hc3!3})K=W(R+Adi7#26R7>Z}dczt;I?TNBG%F7OYI zK}fS^{Rp|Fc7wAnby=VAd#yUOnkOggNt6M8jc;n++2i<4tq4ak>(2IFmMZkFUsyLL z18@(!MEV%J$n{^4LR%7FVXU!7u@=;yzF=h{-6Pt7b2DOMgc8D%v?aQ~fPxa*ukn|< z3dX@~@W0d~Ime-0muM--eXpOYbJK3lK+DsID1$`qyw zE~a?cP(=ZWUG6U0UGZRg(*50u-{DDV!2TQEf zy-Tlb$t}58Zpqv7XnRNQmH%ihXI-oH%jf#5pHUoQU{cUzu{xmA)p%g69c$RA<1ealCS7+7B;wl9(kCe{msTl|21g z)Vi;Xd?5uHUd>d0Exd6pgE1XHE7B_)SLsodbHSxXoGcyVuq5cM_X<8Yqp?PkN{MDH zCa#6=0H-}Z4BgmJd1=?8!&ubqw%PN&Ch1P8USmZZN-e02mtIy~P{I71RT^d*zS849 zIAa!VC04W+@QS-TRtTa0lI5d$Tek8CrILWsShbI` zj9v5(V}SQ15=2y%-hu{wYqrv72gYI5!p~IOOGcV(oWX;Ul|pE zO8dpiNTW-2DYgcjc=gySVsmw zh6PW6Sw1ta@)o}sB_ybhppTB$EvQlcB@1;U+{7F$0;d}<$Rfsrd zZ6r??Ol8B9;L&=@%@e_}J7XyC*u-v@VXY7@rr;$xkh%qqUu=33Auv(}~c5wY)lo{H{s6~kqNPOzeLdLS8C%At^ zZ@5QvCFr-45lM7+0vH4V2Z+h5FK86YAk1t_b9ONKeE00w?$+;)9jmwx|Ebxro%Gs} z?cyo5qFE;qbDK3gE7)O^+>otF zXY0dp_f7P=9a?ddzWXL9HEUGA05zrj!SjIUv=hiYe_oK%_l_q3t31)Iqhf-|%RweB zmM54?hNm}-X|AsWnQ$2?mv(W9huXkDWo=uKxl#(YW>Y25O z^QC$pA)<78ts4DHK*(q%4x`| zjP3Zi9rpqhqUXY~BwVz3NwrJk`?T00;%+@!yrLb+)lvc+>%134`JzhXc}5SE&z_^^ z($7B55J`PnZ>;M3sO5A>(kf-f+sa%NNw>XNYQrjRu)E|oH%Fwukjgk~gx_dOe=FxO z4lB>K)Mo=b?#=V!2r*ou0vf+c=MYhPa8q!A+_mvBlvpd}*;iDiZ6V*_WSvUs0uJ1+ z9q`4h*tT6r?oxTKB=9}i37Z!W&9Kf`sx!nfeOB;-+Kl9TkI-IQYcJ(jlpNr&Fz}BE zBdhz)uNUd}O5Mqq_b64|wOSjH%pHo-;U@#!O=Zm<%4?1DS{v6)pm0I}N<5wXkFi#( z`^Obu;*M-5NAi{{wuCtmGS3Vj{UTQk*N}OBDA4u`3h$ zE(minbY6Tc&UL+i(101`xdhTv7uA=PyGZ?Z_ny0`cJq#X>%SU?X8}}AJ%&XWp9*@F zrYfH(knmoW9}}E1&w(Nv^?Jw_>7K9k)Y8ag>^qOGGiP&aa$dSZKQfP}UF^5%CBdY7 zEsAqh+TLtc4)4Zxx*2ZS+*>joiZrpepIHU9V}X!+CV)gik8#Q_`#u^u&DK)E0f+xCwq|2i?(<|=A+W$I}8hZbD*8wh*8tBanDnr(&jxq zz15I6n(fsB-ex0}R?FdziY_8FNDL7;d`rh6jVq}WP6J~*f_G65yOglxSS;U%h4i_G zk(ykn;-Pci*ID9PD%$H_4re#qnlfHH6yw0oRn+s6E85j-#uD<>F7wSRrL|}$t&DV% zJ3i`pjVaRI%6KfTcu{}xRZ?r+;LMmbrgCo0$q0fV^qy93hAuE(6;_%^VN{R~3G1C; zEgeat#5&e|EFRgHrc~Mq->=1tfmIC3Ft_%|ZcX*GpRm9E!|Qd=^@5~Q+FUAMoF(GC z)e&hXXV84y^EEhR0PmM*pS-bB-vevuFxe_o^lO;kfPu(c@A+iN8|F@^sCtL_1;JrS z(0cg84g!zEZx1!m2O4`m-phvh-cKwUo=%(*vS*z#VUw4om3D|XZL9NkDqqO&nvI<6|g)=*hkQV1L z9MbmpfP<05=3ByXQ5dVoh@#}Dds0;1_LLN&Rw2#uqz|92vVKL}evZ^nDzHB1Yt7j_ z72es-VfCIqXf3mM%hwoJwM;N=a7ra$c5L#sHDATs^vN9 zRU)n$ntN-NHPrmSx=$?c6l&W(M>l&!9#ZH#Xk)k@c0ydND3nYLwy2dXK__gS=F zy(|NMXxV6HdGaA7CAs}1S!n@bAjTexxGKGa1|1y@iK^=S!5)JwTpoDs8L1eSIE!koEpGYn7kIpax1h z2K8&-NIkIZZbo}-wX`rxO;bnXll1APe8eKAd;H9I+%o%MH-_hlf*v@P8gSaq)gCw* z%{s3u>PFll#`xh@7fh?_SB-p?9sy9SMB|b2g$hPwG~R6Q zzO1IW;}}`-y~jX34__;N%*%$K)BE_Slw$1)&4F9bQ)A_MyIwem4THrs|9Qr(d#gr^ zUU&-QY-3hBp-5F}|3#Zc@4+8@6`O6SBy+xMo;#dJs56hcCR_caH4 z6Z^^NTa0+ZEyq<8-An3o)>_K_iyVx2M3kp`&wGD~D6Y!DaW)E7w=90&g&8Sx65{cA z)vmcn6=McA5F2D)x2e>8-vi)ZWMS@!Mj=r}8lz_ct?-jOd!Kg`Z{Ce%!D{FIM#nEn zE}a2W|4MF^g&6&AMlEC>E;0M0EiPe59_8Vi?RBdh{rcfypFMjdG!oyNjn~oUu)4!~ zE}kBg92F#EJR>kRmECB_nfFC)*fGgsl>=6voqQtGn!50zN!qL=QiBAr(AO$5=|cYc%cFT%5)>TyAEaDqaXt<+Lx zeTb)lZAEmi>ppFp#H%dHUO3u%@oN!r16zCo6V5;ib0Ch@f0w;+vCk$Z%;ugO_C z8?|@TDTxcYn#C99y2ZLQTiH>Tl^>v7YOU@eJ2h51x8P-iwR!I-N6u-}f&qm7_r=GRmt1h3> zlaD&n9@ea@<1uIltDDFuF;~io?t*0rX=)XDcWl${G}X#F4%=N@8t2OTF=}YsEKmI} zsFq|LdB-Z6v{rJ_q4};WrBdH^ly~>n%Ka(yJ%g(?Slg1HH&dk{eo6{o-DjG<*263x zI`G0+gC&v*c8@O{6=pm_c*eTA*Cv@?{LR!x+$%pvjhvxgo9$Q5QHeWZ%N*XvU3UJ_ zCQhnq#b!9><^9<-O*O%va{haMq%09U^Nare*PLYaqPQF5a)mW@$qridtm5?_-GvXv z$_8IVoH2OsyI4Ar= zjKn34d94B6*=Mg=>|5r6crE@7J-$&@v$9hG$9C_Txw3oe^Rlp7XDan=fiwu=yTf>$ z=SC5aY7x|(K-pbqzOmqNGYQYP&|$@y9lI96q5XtI*!1#|lUzI@ z;v4Qc*&ZPA&DVR&XSfj})m1CQ`c}W%=2hDf;RY_2M3(GyP^Bm6+T-gyN2MRwRy&D1 z3I@Dd*=EBgpE`G5AMe2rxH11={PGdaY@oqo>Bv!egIE?e_9^jI!F-(CVRCunq`*NN z+e__J9xApwQQr^+=c=e(9Z4>7P{8) zRzCV=GHP(@mGn$+-?P6tIPpX^h*D-Y{pU5ToDal{YZ%g{f;ImJ5^8zd1 zFgH&PDWX6=jQ9#xS;@j0LYk_!`Kc4xfKuNu!o)FrDwTPp%*)5T^7W(bkg5C_jkfE# zG!Erub6%v{ZEG&2C9*yQ&h>)btL3fC_7)=LdEJ7`wmbacXkE)@X!r-dD&~hgiQ%lN zFWsjuMthMC+wD*}OY`xLQP)rKLm&Gp*$ZK_Ghw0*dOOU^Ek*rb8ej2IhLtQ@XDcwJ zk(G>>24}UPQS{b@B<9gnD(@y(l_}#?V<7v0p zrg%ys|3v|OCnSa0l+(qY&3Vx--?+!PZLwR+SB$1~oy+^ezx9JGvp+G85aly}FXiJ1 zGjzWGgdIAfE29M5b3DxD`;Gp1u|>PWF1X@%nAufAyO|-vElIxYCUEFa(Z7K*Ka&QJ zA`E;oT~OPCrx>1mJX*qk-Qkxh&C1C(Z__aI*$jhubm2)Y4Noq=e0j1u-VK$^lYPAe zZyjF*O^;U2HJxu-mUEKPm2oDu>PERr8b#5Iws?1GoD0sne||(1p;b`8Zr3<=`zfzj zhjW!EIb6Mf9~+*;ReRz~q{#zSRy*e7Gh=&dCbC>jw4ihZ8G= zr!jizxa5;nu0|AlCsG=F#@E#xo9s@h?-hFozG5G-JF#8PMU9N5rK44F-@`|vxIffO zOT#N?r*T~s8^Y)cB`PO5d5-%oYA^bYR!XH=m+9v<;tdNz^1xlbQt4U%cFo3 zx6&+WJn?k%k4t+klVBv3)laU>m5CrSe&z5Q#_&y?%GPJ!(SeRoN^RmMZ#mOB z;LvyC7P1(kofO&PK632yQ-_OkT$8UJafJw0r9Vpy59#HrYv@L_W=@e~iTG)geH+5= zvL~fllC=$c=CeA!4M|QiLc<1+A5)8P%LJM zUo%VgW_k;DWoW5eBVv| z%-G!Oqr1!nBLxA6aM_4bs>@MV*l~nEgqFw(s2qC~t7R7+_}7;3uJMrZuw0^D*Z9f+ z*d$+-`*C(+WBg$?g>laD=&V7dobJTqCp^Jmdk}iYK4J^}1Z+)`rjf67)=H1#xyQ4G zv`~`SS0a6+F77{tCL1v;J)C^3niisE?EGWwFP{NHr|T_xWF=Ii$>d%?@5H%$`<;r) zXnC|IX#Tdc!ucXv-ZvuPFtrAIMKyD;v;=XU$e30^3cuS(4N6lU z7O6b?9`X%NefYW9&&7E_wo?GkGe#3ph_v~6)%;i4q7`I46g_r2q$8hsfAHrb+eW#@ z#>d_t%-i;0sHZrYA}zb{o4}8L7I#jfA$(Wx{pyMBtJU5U@{!-Cp2%W6j#<9&=ieVr zMNfig2U5g4BLV!8FY$%~18?MylSn-n_9%IEiO=o9>pPwyna)*(yHnj*9K0Kp8EHp}bEX zK(s{h*DA2v*w$*v*j;()s7!AMTZn5oI+?R~O%(ntP8LW%X(tnSOuj&3ca~ z>}T9FM?cy*fzp{67LWCdohO35q+^h+eUBLU)fDy}$j+9I1Voi`UznB+<%=Ndm(qA( z3L)HfUVIlLvfIP_hk@PN9u?2P;np(v69baR+<8E_gpK!z3cm`lq@4%H`owJ*{a7J0 zD1+8asB|20{ISFxhW}$4!OC~;=1Y7`)b(DkVHd%Yz91)GzI4tLDFq8Ld1BXIibyG? zm-~!jWprSZ+FE+D&y^x<$Gb- z7eFa%^VU*-C(^)b84(or)U#H}SqR=fYW4FwkjZVCExt`{hYRQdJ7PRObVPSzVLs;8 zhO^(T<4KmFRFc3J$42l1P0#bYFXg2o?S2}_q2WBGE>W^HQq!v>CA?1A*Q<86m6@{k zavJ`yAFgsOA@2I2U*j`bZ;IRBq#TUQ)PAr%Am@Yjo?Ypes_;xg<@IAR}rl7l>I4Yd2?kzj+ zyYS0U=mQwgmslEsdp8C+9gi zQ^_xZIy~i&4q9t77rV;`Djm0gW8I3?K-IU`-_c)o(3Q(=EJw{?h$U*{yz^!!Zc0bo zC}l;9lPf7}DZS~lra;Zu1=kh(VpOTUjJ4fq9LEcHK4B;L>MFj5e**vx+8359H7c%# zFjE4bf0voNWW98Zh?L}adJrk4eq!O2m!<8~U*xBA2XV4+#7qjEXIeX@heMS%K2HqAWHD&%V*26 zg}zz~w2vV?VTWWdH41=3?U}Ep$H&&4SdI!q(LZHf3hJ?ZXmT8bvR{PodS!#w|J$mH zWBwW)jMG^t-(^Pkt^V8sj7Z4Ncl`CqPL^KY*6cM|Tb zkwzJTrWI>d^z~y+nebH#MW`PJ{mUu>esc^eBOf+BCt1Q2S{SXcyoh>iK4EKG4gsM$oRN;fJlY zxVAPdmQGnCTsoYpZVMR|J{%11d`Pl92`qQnvC83=&?KLDjwQ6wUp3fI5R{gs9VnW^ z(K-*_yDMv(QYz)FtcM7rI37DhQ8_H%DN3N8-eI|&DHRh>ddwGhmo(^0JA^6Qx*V-| zG#7r94{4|8eQR;t90_(XATgJPH~BDb6%#&wqBvqA4|kN04LO`-UHw1_Jy}^T6x^HN zY8}h&o(ewojjn4%tmI67Ls_<^)`Q*z9};0=Gf?$d=gtWW&Y^@#+JvQY%9tr@+hPS3Q)j@(u{*uF`D&FHj;4GTOI3Im@X!Uvb* zyo9|G?n`Ks-R1JzUHL=ykpYEEGRZ4-?Zpxkgo&R=&i}Lz7&Uz@b?u|X1~_Y#dh>?74TS?t)%XEO;Ic(Z z4?rd=bxxZjs>h+8*M4Qf|gWM zLYT*c1uh}Jk-#_5F)o2e_tL--Jn`*U4(Uhk^CKLz*yorFA5U~?BAt9Y4pKVZ1~Z>M z_N`m7jnKx_xA)Ieg*<~1{STCRH&Lp6`w?CSM~`D&N7VN0hhW%(!<4stBg%Fj91%2Q z2-{jB-L%)HtMBo^gqLLYW?-2rUnPO55jN{WZy)-}`g>Wg!XqcG$GEddhtN(s9o7BYZN>d%8WPlxhOq zUZ0N=u|&j!6kBihtv9oQSP5SWXS8PV>^9ZlOX1w*SLPPau;tk02uo=W8I=d4(LLrv z9Oi=4gawf~#=3rUhr9>juxSei)T<4Cj!b&6FK^pIn)2+pT&0&*+zR3IHathrQ2 zyccMP2k80nM=W#AN{Ww_bE*8C9V}?P2keU-!r2Pe908)u~~(F&{(Hj(*P=1KaGnrgYw zaA~~yHE_j)?~Y6QQz=8`bm33u<|E?YIcceIR>}gOr$Krcn~tibl$%femn2}4R9TDV zfs~G@lvTdLi9@9xRMd#_*1RCzGcQLUz{f1Re32P_a2O;HNiJVv%IXFVTgGB6t>j(& zvM18ZEkGWJL54CaU1~LoWwLq{6WV1NL5@S^f~aNzwtSYCL8Ufoucu)Zt!!yDE)SQM zHm<5CN2N-S!1sxGO0cW__F?r0qOXEY{lWgwsH8~a-p~5`JQk$`}6!S02N#b?4aj4SD@i9W^ z_YywduypS4qFR)&ZALj4$|N!B!o2v#T&dSmXSQrqy^P~ENH^C4rLXe%XiAqsaj{8Jt!Ov7CClESMaXKW>JHDg=gp9aM2;cOy z(AlnN-QM=%)Smk61fktE`1e)6Z0U$nnv|&z+=ReOT0w|+yP*wfs)7AP<->dI?XoEr z`*b{T>yr=yPvx?Mx!^2V+(St11a>grNVpH7N$v~Uv3{mVcd8x8Nq{oiWh6?6=4`6r z6BdSLFTJ39q<43doeV>9vg2QbUa_D>KlhlR2K{P_uBBlJ_`^O!j6V)l7WzdmO(#m_ z*G(~taUQ7k5;_apXAoujp31w`AUP>L6A16J0F86gzn+nWA?QUW18Qw4r4b@uGyPG$ zOvOOKH11h(hvgl5*jr0*jZh-ECC{ZCj`CErURK5^uL=O5={XxAU6Y+URW(9jAF(Y+ zF~1>(#`t$}_^sLO9SO0s6P2Ob_ziszWgZnaEHJ<3j1^@%0ff>d z4@_005r^`NxTGRIsr1VFJDirOZs-N+-xfe>e2hRxC?WU~%wa4serfVmDb2W?MRCv`Bx(fqdwizO!GkDz)6Pe1J1}O-TydJjlC{NvZmccfL2hVq=WorImdb zA{m+40nK-&`8F$oOMc-yjM;`u8eKY-kCf6YKIz8eV|wpjjODxC*ayD2Nndei@sr6} zzY)aYQXLc>?D;MC1tJ~Wr9IkBxM9ooyOKGkTG2K|E9n?S^}DvSMUBf((jBKbvx|vf zKa1&jJ3tl%T{NT_uC{X zmNxDZZzd4?$Ac~T^Lv!V|73RM^%j5I zB+>$RoGR>rJU2n3OXU(4>vXv6yG?l2j7zJ!LOUA++cBmNTe7&NfIMe_4k z#S*m8=DU^tKPPbb(wdK-U}52fUMu?QjzT5;K)MpkG*-HUY08H z=2>8f8^7QkK2CC{>m>`|Kt3%PW|uy9^*Isc*gWdrg5*RdCyz85TpOb)x9N>OVnkt! zi7z%lr7fxF&YOo6%PD%r9_0u=tvHP23Zm4Hj1YMXVA~Wcy(?mP^TH3UY_@Wq6EOAu zr614@u&D<`tNA*WTX(SIZ0&F_fP)Cg8=I5iJy9kw$%m{Qf6#4o2(KI*R?14#_iGx( z?+ACvKw&mUp3+A7#y-?5OnkS?0kdi-yiM0^VZ$Q>(JHWkg#Jeopj>@znE1V9>C2J+ zn6PDRkAZ)&9X~Wck=*O&&yd`H7p2^Ivcc%UDJgS|c6QtPnZx-9ETwUnaVt zY$Wr1|Lu`vm@$PfZ(u3AWmXqb$*7PB>xi~#x^<=RNk$|kmkQ?B(M;MB5FQyR&w8dp! zGTxW-862Fq-!!U>HgJmhIn&}e*26(X8n=DNn>6ePmK6D-2K(}XEMSblWSioFz#HZW zR?J0uY$jYuQ&u{T2VRz_6F8(*M|yeTS-IjDKD?BcJ`2C55&4~!!j3qsdf#f&$aqVy zjr&=dXbU~o0d?~GE9$Xr+J;~9Qvqw^sKLs%R{Gc(T|37gXj8x5(5pSbtoz;@%q6grR^oJ+$GCZl@!jpO~JgGOrlXxAT#O?4T9)>5^FfgnAAx*6aPx27L zlRVtY5ip}03xh>RO5J|@rV($0G_%rvWVm8{kFuh|`brpviHF${kkVemTEao*L>x!p zoG>MPGc8ZGQDRTbn#9fArh{B+gXezs9DG1{#F}69riA+Bs?4|YI%7=^p}wk&Fcf{^ zj4H>VzT5U&@(zKnq|rU2Mtm!^Y*9}s3xBa8l9^K4`f-(#&}N=f&+mOPPP1(~zzEi? z!h5QXlGJA7M5WbpIQJmvalYA2nq>SCcO-5xcksybG}cMd@MARZdQXz(WuX(Vu2>hm z#E(HD$#p2^CcLXRR5!B%`38mGJxNmqXBMn-1kYLzZd=3Ig+v&f!AsWcjt5G4w)SB& zBP_Vg$*k2 zCE}?-$$Kk}>lE>F7!e&NBAe{X;!SCqTIsoWNEdeID^)exe4uobe%5D1II#^xFwjb3 zSzcbfTpEv#<)hpX<)oc<99Q?}gtOZF3UGqAxpC=u9{H246j7HQ3)J0u`=;#?kw_uG zKfvy>04L7kJE(1?y%8Z&jhrNfJw%II7yJiLOKBPQcTsbluTJ^l^9V&0j(Dtji=z>i*@r))6}`%({#hvV zJTf23_!Cjtew@FgT7gI@RjaTJ{e4j4XZ(&S5=;+WkY#1%jgov41sw7_O8Yx<-r;0V zt%O=xYPVQP20L}&$3=Q;YAxfYD6W)c_Ix-j6xx^K9&?Ia%E0V?duI9KSJLyp?B(D3 zU6XvH$-Y|dJ&13wb{lq$B-iGn8)y`@5)osRa6Zwh^1UQktG)HPJzc894)v6B%zdP6 zh88&nb@r{aQoksxm3da-_^g#x%SvY`v1d6@Oq2=PI;#3|M_3F;KM9LC@Rpga;M+rU zet!?|L}N8>luB8ID7JhzM`3o?>u?f1E??QnI0;;&1DW+0TsiF#B9`&GBwMAs4u}uC zk8?y^V^la|(#R@T_N!dfO%zz;Tqfruw$JiB`|fFG zFA_(!*bR^$#i}>+L%Gd3-vg)ewPH*AeHqQ`k;k~cS=GE>=gqw*+{t8dM&PL{8$&d#9qdJG-9)Wfksw7S;wXx z+pW+?e-SHo`xWaFe|mTq;D?*^vE$Z=Q8}X^uIbcy%WXz+ca@yDSVBMEJrriYmEv`) zZ!2T@ZnyE8{OEPIW7c;hI%lQ5;*>=o?JkQ~x~mv|5fK7D`|yXC*9aiR3#VyH{e}pU z=eSv_N?FQ#J!xsH(N1*qtr3W{j9SUsYx!uOjX;a?`SHdv2DF-Tc|44Kv^pCBZU4fK zqj>Bjq&MhGAm~k(qRY%G4tey1NRE4!x2Z0qhFo+_Fnv4_|DH_E@`zUgS5^OLd2~zbHuG{RZE( zmZ~y$$ez8Z`5@ORyWVBjkJ|NPc0DdCUQ|hOtWwKf6cmszs&9R*>e*cHhBd3wBj9mO zi@PjAWhDMZm%3qx7k#30UVp2PyK+7Z*})s&SRlS99vPaAwSz;%3kqJEeqj+mY$iD) zt`iSQw1)>-o=F~28FG^AKP7pL-{(FpTzIp-2jY~l5sOLoKB^RUxpk7e^*=dutFE6C z9G=N(VWyX63b~J2Z=c(ldmUwq^+f6d_N#$7DSSkrz8Ftd7gorWnnk*Kw&JbjMyoZhQEh82J_p|Q=sVg)Yw;{y!Y-Yb>f3<&w9O&>p@*Tg0fQ`40S_sCUX$g}l>6)Gx z-|$ECmN@gyye-I)pU!bvRkTK5TTCu)(0lhTyass+D<2zj#q8DVF)8)Ju$F|wLhZui{LHbvX7^^f_)eb^n9fq#tS zXd~yzh|be?aAWKEumD=hGu~)2>8ZZ1=_!oXtazp{!+i1#eM-i`j%}Nx{z){SXLf|* zH6;7Cr%;B`i`}O)R^~&=7e$qO0xu;WQtM7Dhu9D+pJ#Mu%#@uS%{>npcKvdie?Zqi zd6e9e=knuLi${hTrD?1lp=|`?m?BH zC-J&2DCd;Pn)jaVkQ&FUV$Nl6=7)I<1s?#JM01?OzJtcj3yRAv1H73~>3MgB4h3x-;#1`%$Oe;5@&;6md5P9Y`#~#{GBjk{Xg`oprc`n;n4?|jKA-`VUgsA zg^wPgH;UxnoA!R5L=={OyA+@ymd2hIbp8l>zcN#y3~gaJ@?qR-zl+9Sf3Hb_|9}kA zgj^Ndm~?N-SMf;!xd(zRIhthe_yZ8Un9k8}-hu4yoaje6AT3Hk6)S*^y}mm}Py*I< zG+&BZjEC5*)t&DFt^9bSH$5bzJT_V>!%g+1|a|8Yo8A?hJi(Pw)@4M z9B;nMSArhyFVld3` z%H$f)?rC6AF*-t z2QKES5t*rGNBqr~bW$)9uGmGq&Sc!7OTyW^BzfCQCD#=vR!7xQ#lUHDQ?Xlpfb6J6 zMFu9fXSC(b3T`p-N!J6&?tQZpB3#aQqD&vuNy z+ZJ}}XPJHzglyLlh(!`A$0Apk|4LA|P-oG$ zmcky&Q&H4xVNz~Z-;P{yEz3P^@`HyzBg5#H$}v2ww@bEE;}RC_m~zEa&&{TbO1(0s z=BJ5DSL+G(@P$;AcQu&nIK9P%6O?+S2=$Obv(@|}`B#G-%_u^xkau0|ErMQ5R;h_Q z6J&!B_UHpso^Xgy@`5}}!V{M0e^0rW!6_a-q<5U6VlS9f9l3GaFv2LiARIoWXM)NR z0+*fSw{H|RuAR}9qa_yt7qi~DPh~t1;7*k2_}Gn_l7Q8xBikip#U}prM*bjy%89~! zxrfbI!p#-cdWY!Y?)oq2+ki&5e6ow~`Jl=ZeYUMPZra%*_{7-uY#NFXUiA!k_^qbc zFVuoWu{l8y(zN1$e6Lv*<=kFuLB^%W#fxQY-C1ja^HL>7p$aSKHE-t?8Xsprf-s3I z>RV>*ls}*;zGQcM&!H#znT#O!7H6c%7u=(|EoUjPZSK}^$E~?d{3_P&FgP{9;IaUd z**hE}n=ws(V!O0nJ)K%r_W*KE`zZb&)>`4!A#81Oi(_@Z#o*ITg2I1rPsPK3`ZbCD zNF=+Y@@0}wJQz~r$QE%CDx-%zosc2V1a+Xn2kyfPiB*@UZ;?D-p!Sj;Hlhs->1xU6 zkbJh;c}U1T)Fq{%ZCC*xMS#X_AP3#|?ZIG)tt+-8`Momwid5m-pn3Rqkz-)WTf5}p z-Q)6OQyt*~D~k<9TpHzX$z#jc6P=ullH{h_#3M#&?gVdd(-nOtby;KQ?UF<--e?3r ztLJ2r1$lR=+&NDMG$IfDzW)EV{y!=Cc}#MU3}`uH;0FD_RsV0)|1awQOZu-Mr9M)D ztR(}}f~FP8C^a6@0^#YTHt-SoGM`j$F)2+(u|SOfg5UqJNe&h>8()*#&KR~%@@bc3YQu!P8QG7hzu zL_4zN_^AuoO!nR{s(^Dln(V)h^np|LEb zeY{~W?FXBFU;leYF{j)5YmWLLd9T&l>s#^R597nDDy|B$T=VJ=&#y5CXqe+m{S? z64f!SCsO`VcaivcLRBMv7HzuL|tMyiE6jB7fpW=EJL~X1w(B68hZtZQsvv1V*Pp-vtCDnnghDDnoXm5 zVqa~jG0>{F_Ds~0L)Rn&Bg$$}(H~3vMrxDmf2wPH{ZICI(x8&&b!p#P-_zP7j;{Y@ zYfopO)@(M18$u~xnPDEUtfG-@O2Ju$20w-J&%Fy}R~VqlN>y~i0dIj=5~eVM1i z?vPdcjy>17ZjKG^nOy&t9^0F5h`^>0S%*j(k(ruxhf;#D)b}(;EYUbmvF;mI_(5+( zeIzt+vU{j$&C-J;cCve&OX*e3vBqFsiAvGG!9DHnRVL9_4L2GsbycfgA4;Tnt-(YW zr0j@#P}O%oTx$($RGjSIRU2rHBx1ikHTNdy&0H3kWU5J z^9Lp+c7`>TCFz`G(kc>LWNl?KoXrDG6ay=8!uyXk;f+*ADP@dtbaxz zq8bZh@7gb^u9u{wVg(J*gZ_wyTu!cFzJRybwat3kn}-Tu=BFi`t@g$&V-{5~R#{cj zda1URkOtRVl2o(GdnL2<%b2%u%#G0)yp&yTh@n^)$g9`?tH#ydi76+LYvGSoZ zVrmK?!Monv?u}9RjH)S_$IIF{P3HQhM z%68?`%?B}!-aO{gJGptR}hXy?0Rsrf$f?mLH|^B z2jAptyyKHt#(_pNmM4 zFYNjQuHAJBkw!p`CqfK&W&D1;zcDsGKCbt`eI+SF3anJAlUyL^pnC<~doeWs|>H*sQp&dlCuiMBVEd-&T*_9dMl6_Ik$i z^^9Y~$FFY4*dLCij9q%?pJ*m{beali#w4*dQA@KBIV@!YATZg@4r94}=Mq^Z$xxhtK2ak>E z(i~HVODJUj+AlX%CfNP0!}Tj##Aq(73Vv@`NCy3!c?IIN3d+Hj3P-Ad?c06Y5BYJPmrv z6NL}Prg$Css~`^eyL+6nDgG*JBU$%g?1-72SEG^8LnvuNF*Qza9#Cc90$c3TsV3vK`Xo&l@r04l z#(*oQ_QzR|K;tQ(?7B{vMtIm@`Q$<6}JlUA!S$0Q)lQYLgO=O4}XgW#kG;6J9 zoKQ1P1i?x%1jcQ4Mm6Y7cE67PKxZ8pooH&1Cw2XQY~0m;xkJxbrGFZ*I*lUND@U5T z^W=fwfI!C|sfh*w=h)_)$L_|l>k!1raTHMO>TVc!x}Zd&LHFBT}q$Cu1By$MWvqC)NVkMapwE-=ZMi?1!atq z)_o+1c^{G@=#9HV+`PUTWAj5nf%??CyV~jpjbD-*dGQ*X^HO$AZ5O1}RnKmuZnQ%b zLNP$e$?xon5v6VW?P>;M{qjkLRe)%}{GdOzUw$YUIENe~*Xqz@FMXD6 z_v~O2TwHhU;paO zBaKG;;0VR`i!#yko@~6{{yR<;iqL-1U z@W=C9sO)*nBu}{`5k&XNt&_aT%KRHbL6hqi->xQ-yKdhz)zHF#O%Cr7uR>yIjw`0ePn2iw zh570>Z@CA(AfRy1zD6^(M0%AWx~G1Xgl$X4?4JFTTR*KGw6u2je-{_z-H>9jLmm!} zD?~@ALM^$gc5oDTesbfFCIl`0A%3jTQH*;yFG&e5Sdf}j=f)4H@2p!|QS$s%oj2%D z@!g;lrqtpXH4mL_T&p4kF~kSfV*KUM(4iq|ufJeJp9s&;1hhQ2nCl7gEltiIwD554 z#vkL#YoW)W_1I*R>QysIW&H@m`;rk^njyz2J=-Q54QcmF;*TtL>(CI2vHq8exD!gz zlXcPScD>YU3~3;ET{EiJMZPC)5jERd*Xk83Bkh|F@+&-Ew8y!FjZqbv@OqEA>PMKmc%YzRCIFddv^Vo7c!tfo*bQLjU4pyyFym zW=B~2dWYH4lA@N9H7gjT*DTh^?G0p#shBLGjIQj9ru~}m>j}eRH58_7*ahH6t$Ub; z9gwr(ysAIc*w=n}N@ewrDUd%oy=oYCh(D2z{?uazZ1y}MuK=H=`GaOrTlhs%00s0|p&pmtv*gGaa=<)W<`$>1?A|D->I|B=f-a(Rc#f6!%* z|0wF%iZ(*T-#t|tM+5ix#+W_+;pH(uKjkmY_@R5zSxZLlwLWFP%|w1@wklvO2UM+Zy=5;Edvqpz%O)Go*%&PtFt9&`1plDK#6#Lp0T#X^j}T3; zKf`y^vDZ~t*yzUDFU}s2Fv3nj|14mO&01`-_E*WA*m~@HvJX>SzW0e{ZSc>z-1WVE z^}$D{2Gjvf^JBF7&w~vvTFagoc5|e4>VZ9n6eM?r8`^V7Yv;OZ9eq&Oc~-LjObg2E ze>t$Heb_MkNQ>!uIj;Xt2-8FQ|70jH_a5h^{Zx1#QQo<ZgrkFK-5z}TdV2oJMn4rBCYNI0oSY}HeOf0NAzIy z<_{xy_f&k^oSR779n1t}@Ul049^{%T#*pYNxo4x~>L@Nx6j^!;b?Y2%Ve?|zwj zf1jtXr5VPe*CG=-@!?mG=i;%>Wp zPkg&IJfQRKEooZ&AVvO$%g?y{oXamjXj6;>dfgg?pITw#YPzl!HaP6c@s_2Z0IR67Nq16nk8zb=~7l_iz@t#9NyggOlGoH5kZBpp(Efe6aONQii624@QTXvQ7 z9+LA6NnhbnCE8oB0`;0M-5>EfHws^(hYaW(d4H`^ILlnWYuE2k?%Q1K>AO6A573|J z^7515`nm00N%wzAIoeyl;POk;82NeKSH`nPaiYETjwZhrST^Mu2ygyUFT4#1{N;qC zY-a{ZgIvZUTCGXNM@@#~qn7%v^?G(Xqrn%Y(=EWQZ46mFH${-tkLD1lOz)Ukbga7v zZ`vJrbC+=SPwWm~DP@zfSqk)fpzI3f7u#1d=@V(4Tw|W5xEwS4ubn1Q{s?ts3_nme zO)xLpc=y%dSR*#w6JSV&YH~BU;;m^X<(e)m;MT6atc6@QoG?6he=%k$;bn;Rq?c?* zV$*hq*4x@_nfON0c2hnyyVZPq8coth8k|VuWY}GoAHsDIn`J3_S~i zy-l9iv<-JaX$dRAy%AwG?!3y+u~+sD@;a|&u9|Lok>kUQZdMsda)U_H4N4D_-ac&Y zTgNN%U3~V~(zcKFzgA!Tq&7ae{_h+{5zVJsDx>7M`xQJ>T%OQn^2tc_I1lDY#qEOa zr}h>~wvUI}{RLrV25-F;u z6lu4r`o052xZGWsk=U&n@4K~7m)uWpmfW}QP)uBZCrw;`M^wlyrkHMl2SlQb zI!l+s>|6@Ta+@7o8>|z#&tBz0dpYJW$LwX$UvyI+bZ>S2>q=dM_I9=47PYtQ<*)D} zS6KPO{&H9gXc}a0)juWhq+EZIb-6Wm`dHfOV`&YWNmhfLb;v#8NOcoYn?H1-Hh(CF zYIlyjQUw2??iTaWo?(((O4RMpkYN~d48~6P_>FD;*rY`W4ZEsM4!RG?6a`cGklCK@ zklUWFFv<3GrLq{GZf&fi{cVUF`vMq4OWSj7{hgh2`Ou#~*2l5nda^kdag1{jprXy1gNT__CQBJ! zzU?pHPD^f%WhDb$UFi_2*nNc-Z5$W7r1pBS*Awyegthk#Z?A61PiRs14e;Aw*Ztn8 z6tyL@+?t$6(>3)m8oJ*Pjbaq?{+OIk$?6VeWTi@>sZmr4J?<4Nw3*rmneL&M%zFOa z>0+<7=22cFw|4giZGsEI#erdLYWJsFhq1=|)C>L83VqxQ=|*35LSJ?0D>JT##tq#& zvNR?+nq@`m^k|qg5kqrdH53~^cN7~xcZ`<;#!FH1HeZe9RV3xa))g5iwyub<8wXR^ z4O4D)Pnvfu%R4rSz_`USN#B@C!KTL4`erk%h!_JVodHrTb^Oh-r*F2ryFKr2y=W%L zi*6~hjP?!LJ6EO6KTHYP{KGWy%`EXv=fsdXWE3Z}?%v0i?$U*5D zN%uLaoG2WKuq_?Q6IJ4q=DaXX7-5Hm79XH7jqmGO)ig7W@GFuNXcjB-o?g)zXW0cWaffWot&h zj4&{wByT4xBeE7+G;qqhav*4R_mx&dIokT+W9D=4y}M@D%Um}Pt3p}Q!>J@}9nU0T z>-abVqUgG9OkZP+QV`v&Fi<`r7R~knvND(*eK}jv83Ad;5K$=QgnraA1X`?pY${MxtmKrXG z82MW{MR_L&BabAg?dHWSdGn&FT=x%L1G|4YtF!Jyq*i$@(viGwy|o~_B>^(KE8y1EB=(JeN$o2g{ioSyDI4slNkp?-6pMb2$Z+?0NV#Nd5*zoByS zo#b(#(BIcTCGceYFh?l7Y`tMsY~c&G585Q^;8-#=x%p%LV{i8riH|s+ z!A(t}wMS?3#~MCbikVq6e*scO%#0NtGILh=vy8aZK}I~-##a48vX3>vd>#4c=z029 z6klWy$7~EN?w{~A!mv^pJz1OQJBB*v&bHN~T?pHg@>SoEXeqmjvbxS+Wl&~DwcjP5 zSb!LB<-kRI;nhw5)}XPFo7{`718%;yq}{f>s=-D>AvrphiPOB5`0In=^+9{xeA{0) zr4M+MZ-v*l9QZ^4K0&7`$WEtiX+{$Cf(}xGPE~X?Wf_c*=1uFEgh5MWRJ7wSolerw zc>!l%2#n=>Vay^3TZdJJ%>UMyf(r5@6m(JqN^>F}I1Df$e&{&_Tc<{B$n@>#X<9R3 z=ZF|Hu0>J}LhmRbD<)hcXJcoG3#{5VvNiDmEupHEzs5bbTZtWBBpRd~vGT;2ja(c{ z&?5HUM85jggi)sVI{cQZL3Lpgcu=p63kg7)N+HF z5qiNX?fou`GX@f@4sqd6v1s~NuV2wg+w=~DgIo%6McpN)wDc$%bcT}MFV<|@2gzGw zQK`QEfkY9z9ocqPN@WPPz<~Ol3A?-uz27(A3RA*-ABX3lZ%4G9b=PI;#8#~1y%za- zX27(mfAdxKiCE5)S}kE|PN*m4o}aiP`j=Y=)Ha$c06Ban9(0>Ax6>%R3$;#U7Lsf( zrbxVt@=23xIYy`i##m}+-kr@z}_!3^2Bq|W0Z8|C; zKTvo4W%dk-BmN*7aYk(P(B6oaTzUM*yJ|zDNru)&f|nF>;}jDo^2LB(8aFl=`n8~C zFCIAAJmW8CEawS-dBR?v^p_{Ik^5~M34Dsh_^kCZgW326FIyMwg&WrGQm{~$Ebl4L z(~Z2>L*DC3)tg17w!Y*bx&g8kK(?&-lIQ70-g?MeSDqG4$g>-HUkQ0%q1@)rt=#6% z4bbS*%8FjJv_g(_~y*qY2V_QvYUQmRndz4wHMJ%JxA18 z4%^oEtfcP#`rYsjkmk6&@kPi91kGT zF35^{XfGQbKd@I#6z+N65n>gR?{G{v$+GlJD7L2TZL{Nv4_=L8$n4tg{%r?BpxLaU z!zLdIN+dg{GJQ8YU9Y-!0Rt!c;`wbOulEvBRoQWR!A)L!Q$sVJ8j__gi&Iw`-fiu5 zOCTr*)}CNZ!Wq{(H)1sUQz|3cJZODVvZ5v9Dr9CG4>&Pz7btvNdxEr{bFsQ*iAhxmg>8Zf5Nzq&4^Gjg=PNSYhEdFQ}%TSXU8lEv4vs z*pS=G39nOJp3p@rA_3Jn4;nq&PsNAh0G;7-JOYgv-fvOxAui`K;(n!SN4yr631W#l zG-*K~AioH@xfE>4@V(OT+?Kt)ArS2Zqyewn_07nb^&i{&SM2&FyMBkOqVSG@(0h1N zyj?YIawV)zs#$7FUA0mN?Rw0vgT_dO%mrx7R+t>jSJ?G%Y|U7jFI!Fi2`jhxLwm8x zt#sCx4_VhJ08Q6)Yl0)l%yqvfJ!Lo9F!-b>vTn`5Eo~A_$=RX?**31GM0KZJ}LMZ(l+1p`rb@y zQFKuh5LHZ@cfXUi$v>WEDKeuhg=8Y^#yjbwLN9PtAs22rmMXkrBwBdI zQ2#J3r1(ihrI?9<eru$BF~UEkI<4>lDGC}mQCdh|^*b&CGNaQU2?1kD!VypD$0E%DofcGDEldgU!oMCCNsv#TM~ zz7$eU+7%k)@an2akJaykdw#;MPiCxwJ@WCm%BwTNF4>Ej z5jKF6^Ci#OvKLo@t#!TNl3AIrkRu7_>&7w*4wc4ldHc5&g%#pT5pR%(K4 z*j|P!Yf1aznRBz#pCo-|`RK!o=Vs=TWPdH0_}!Vgxy$Eg7dnqFFFrGKRv**4qL%DU zQ%}zX3lli7S7EqcUCXXbRKx*vCacC3p2~pbDc-mo}QaM+j(gA?99T-jJ|eO zOX@TFde>F8J4=JkzQ zGAg3pAAIkP1_{)lNU-K5w>s~7VcJH#L^1Fj5mG<0F+OEhy(VT&){?PvGv}wpsmG`1 z)+F8^@?IJ-UW@A&W?I?f8Ht>}rRpF(C`gjKozxzAJ9s@&O0Eb)7DaSY>}R!oNQphL z?+}nAIk9_Ec6PhCMX&3FiDtW6qxa9v%uBXW&I9+Z$w(}$&Yqn{@+Ga$OE8yDos&tx z&Q0DsH@Eo0{qsw!mnB+KmX%~!v^=mjdrqG()YF2HXj{IjI5)F$c6ru}p}r0%d$}n6 ze13LDKd`E<8(MrpHpnwn*UW{*W&MH@7%mtt3Iu&tU-LFQKYd~5v1Qpzj8Mqa&aPTA zeD)%pIk$MhUstD>FU+jo`}C~8uE-Xg^^)K@dvWIMvny-*+#y9*XXjdgFU(V+I8TwRoTQ^K_Pdq*ufVpvu# zF0Rd;>pVTvQNz#8$pk)q*)S|kpM6%PI`h*Dx{19v)RIo9c;P15%$ZeLt>tA6GIN(Z z(+ij9Wx7pm_IS0XO9M}QbSg>iswI!zvUA8fdiwIhS*+L52bLGtmL6L=r`|((FmLa^ z6pHZfOJQN(eJLNY-)+0xvb@_;L+^<~H-+!EF01NY_ZODPg&z4k#V{J=Y*9TwlaBu< zr&p(s-oLOmzjD;1fxf;q^*WA{eQW3OF!TrC;OMbiJNL=(t}V~py)d)3Dre)?;BEZg z%;htS&(18|y|6YXUFOgFzgC6ouM}#0T5ikHQ}au1n#>rj0e=wmj9ZqyrfDOdR6M4#F9E;dhSz;%k$H#?{90($O`+y zg*c|z0J7{!vR5)u3>k7>c*KaWtUZ0&-xzAnF0RS-y^PD7Bp;|HlfgG!IUT@)=js^s zQre-9N{$y7es6Z+-22PGixEhNPJVyydy+vl^Amf&a|f?Ad2E9a&hgsSQK?s`*-UDemam zFoTZUu?p~xXA!w>h~OYZ_EjJ6WAkBh{~~ z56vuGSiR_@{>;Mk({nQqFU?$7U3vJ9Gb@hpPN~|5dyK6o=N6`qroQ9pnVDx#sVCe@ zBG)pc?!sqTcr9l&D?Ae&8HxApLVr^k`ui8ebm^KAdr4jke{iW__Y4V|(_ZCtOMg~p zSLbF{PAxn_V{1N1{OGbecKPxte9tq}7hD-u zJ8PO#Yue|3{?*@n$s_+_{qO(%Kl}H$|JUHS|F@o$KTd#P<;kTBE6>dxc_su7p4`cv zCl{Z7=E;*YPp@5ga$#nb*>(@0qf6(WPEJ2~?;Ur2Gzm5SKYK%swCdl!@mG&t_YeQ~ zkG|3U?{4^WQ6B&N4bPqUR=ocoIk<$G{qo7Vxre3L$-LR`nWN|8xS#yf4Z>p0hj(`3 zRCmsx%19K^{%857*pS+-liBOV<}())pL(PN_n`hi@zaLlRlND1gM;$u_4)YI$rp6J zUq94vT0chdY5lV=BEevbJ+Sa`>_aqx`&U*+lS%};+uoNFOR+^nm7pWKbWu+(-Q`B zOzrl+{0g;rkbF=jYxZLr^E%J$KguDSVt+oFOs0AK!~s7Y@QCif@#lAS=U09&i(3C7 z1V4BEjM6z~&7Vi4y|uJuCzX@`rRc03{D?;U87hA5ieE71%=JC-nJ&u(NvOhiEt-&kwTEqaRVr z@@;de12;b$v1~tjBQX2(xbgMVq22U8HAK1N&86hs^7kHTZB29{1M#?if0^Sa6!_&= zt{SjRK8oeHOUZT_IUzl*>8DTlWC3l3Lzl&${^eZ00z3Z8?f(xP_+CRcH%We>pQ!vV KfBy61!2buXb-;hyyG$SxQ4*S7p==@b1japbKLPxa44!$VU$>)OEsue@}K z`l`z_kw5+S$g|Ii&(eIG<_>3{-ZuTW`xTj(-!q-J&E;3=gI&^NV&_F8)}QgQ{XlNTI)$PvM%nwPv+`kYT467hMlh%)KF71OqF(zXY(A`Y#Rv+n-1 zO`o?w`nMweyT4$>$n*u(O!IB&pT0urvGNA|7N0lVpiPCJcjvG=Jm`K)4EL5Ow5YD%oj6HWuC*lk$D?) zt@O2IqCsL-T*iDI^DO51%s(*iU_L&d*0)K_iZRTOGp}Rbz+5(cLo!h{F)Mm8_h%l< z`~>q_=I@wGr*B>+sw8H`nasVJA7-A!{0Z|{%*E38I1`5_W<@vVbC@4yp2WPG`D^Af z>6@L2BNDUXEar2W$1_i1{)G7}=8}cAzEWaZ&wMWPW6V>T*D`;{TryoZ()z@7d6>^( z9?Sd$^9ttAn2V(AZYIhmW<^Kl?#y>FKg9el^D5^2MYO(HVpg&)*nXQf}p^zjqZ_lLOy^R>*kGS6XN!2ARA4(20E>%7M% zW<@{d%b2G!&tYEA{3CO@GFo3PF?nX%xjnrt)%s364UjHxhwO%%nvhvz`TaJSY@q0JTa|j?#euxc|7wc%wI7d#%+AL z#B{sF+?#nc^LXYDnb$HGZU77D-9?iU%`5orJnG2-5g{)|sn29r(?`9su zypnkxbKz=QQz|hlx-j=)zL)u7<`0?IG8e6`_2m<@;tb{<%y%=7VP4MsDRYq;T34;{{3i20=0Y{KzHMUqdYNx!zK8i0 z<~NylFz;nqnG4s|`cjEmaWZp9=9`&E zGQYz7CiAb%`5(|KDbX2o^P!f{_V-vIDJmvw+)0m%U{+aoA=3|f3`sRu0wvPE4<{8W{GXKcD zi@8=4t#6Q+6&EpI$vlnudFGAG+nA4R%H>H+>zS`)p2|Fj`3L45%nh4qeT&4b7|1+? zc`EZ9<_*k0GgoS^^|cby^_lqs=JCu^m_K3uin+w`T3<0SeSeq-Fh9xsEc1HiADPRa zp!L-gv!Xxq<;>48zrg$>^DgF^EwsLVV!DnoU&TC?c@Fb8%v+eNpQ!amC#K(D=F6C$ zVxGnPCG+>phqu)F8i`ramANnTeaw$CuVDU+`H)sxUpg_}Z!&jc9?E0 zoOv$uV&)ype={F7 zyT{y*`AOzE%wIEaWv-H~^+zYB=Yz}xnV)4|z`TQbA9JJ5T7ObvR$R$^3-j~LuQ1m> zLu)!GX2p}t^O=LwlDOfih$V3=90~7F{69S{iHCE~)jTsP&CN5drig9f`S3BgCGogS znWohmXw1e63EZ8TpY35S+)6<%F!aeX`SYVpA9|lXqim*DY z0~^3*uoY|zJHc+SH@pB|3a^CM!CT-Ra1wa6Ft0XTZ7e75D~x4}J{S z!EfP@a0lE2_rpTZaQR_*SQXZW4PbM466^raggxQ;@KSgcya5h}cPG}*JP60ZNpKpR z4d=mya4CEbegxORui+-RH8JPZAhRpY4KioW5PQIL;YIK=I2hgpZ-aNk2jHXd3HUUe z1z&`(CN|8x0pEoy;b-tGxDo!8*eJ6T7JpWAIameOgh#{1@C0}=>;TVzXTx*gg>VqO z2HpsVC;tDZTABOO_u;6_3it!umRKkAE7UcuPDaST0HtCJ}+Q>+AQz`C#@ zYz|w)b}$>B1^d8$Z~(jtUJr*Q*3H}r?@P=%)ys@cbG^(2_!OK0pNB8QC2$#B0Y8DC z!*Ahc_zV0E{+*a}Iwq4fE8>{UA+Q82508Mg;4$zx*aDuCm~*O-IW5f}@~^E2EH_riEi+Y7;B zuq><$kA(GLBX~SK3ATrwVfVzG)Bfn2=KXOO91V4Azds&fempUMW-5FQzMWVg^8wrp ze@Vh z6wAzmA14-PE}mJN<`S9paC>6O%4rWmZ6SUPhQ)S5DxZ6t8T;(!4SNY5kcxU3_nfu@~@VUf)V?JCA--3Ds_-`y{UIo{|ZxVA(TSB*KTSB*K zTjGbbeM@YEzrw$ASN;^47b1R&GvL|q9C#rd1h0WN!r|~PI2t|zABR)n%*3tn0(=wd zwtZ`?WBvyI0JkM>i(lbiF!Q3e6o$oNxx}2)_Ryo0?NKFd*&e#@*d8^R^%!G&=rP9j z&|{VDp~ouQ<7jGQcmg~bc7SKVv!U)swuc^RY>#u;av>Z9b&c8{*D&7*hr_$zX!rU&0M=3)}(!fcp~tv@`SwXJ_P}C+ePbC*O^odFf?YhTI+F*{;j8JD!BPRJ%i$YIjVBbKpyG5quNA4?l)$6LU_# z#rib=7T?34;cmDW#!ISt)c0EyVlD>DLf!NJ7P{yCEh@9+NLUXxO3XR^5yz+bk2ndo zhn-<}*f-Hnd!m2ZvL^<@tKkiK*7*AW-MlAm%{|v&aZj56iU;91s7Dt$r+;En+VW3K zgR`L?;rtWxm>0sOQ1`k2gzo$P30-skiTBw45nKbmhMVA4xC{OX_rrqobzVIZ`zQ2B z?4KygmNKvstdW>=+Q;SJ$K~G_b<_5J(J;3jT=jqd-|wS&TKRok18;=G;azYvd;~rY zr^1==1^5bl9lirUgrCAM;Rd(`?tp*5eK7yax(r2NDOdqkgSBCO*c7&er^1e~E9?#X z!GZ7^coV!G-V4XT32+LW315T@;hS(d`~-dhH^86ZF1QzF7U-)u1eSyq5`T#5unp8T zWOJOJ=FOqo+s)kCY>v@vc?3QVb*sBMrZVdp;^vsi`~rLhz7F4kdgiz}K4ktBehD`~ z-2!Y5-2!ZmEo|8V|A6~o{#R6sz*4XRtOjet`miZ%2~UL`Vb{b>(F@)WABMW-Z;FY` zQ{b~upK(*ng$v+oiC@Os@O$_(+zt1_cvWi(C9aQRP>*}phaUH?4?P-RAGfjnZukIv z6zci%`gnp_k3ZMP)6BEri||$W27DK;grC8$;70fp+?n`I?17CIYCayG1lz;TusiGv z`@@0oYIp;@6^?}WL;X&D6Z)O{CLU(XL^uULoA_0_$nF4jMw;^<|w=tegTQ
-`IFEy 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 RG7yb@WHPH>8;^8N{{Oj0Fna(1 literal 0 HcmV?d00001 diff --git a/MediaBrowser.Model/obj/Debug/net10.0/MediaBrowser.Model.xml b/MediaBrowser.Model/obj/Debug/net10.0/MediaBrowser.Model.xml index 2ce3a2ff..31749655 100644 --- a/MediaBrowser.Model/obj/Debug/net10.0/MediaBrowser.Model.xml +++ b/MediaBrowser.Model/obj/Debug/net10.0/MediaBrowser.Model.xml @@ -1208,32 +1208,23 @@ Gets or sets the sub-container(s) which this profile will be applied to.
- - - Checks to see whether the codecs and containers contain the given parameters. - - The codecs to match. - The container to match. - Consider sub-containers. - True if both conditions are met. - Checks to see whether the codecs and containers contain the given parameters. - The codec to match. + The codec to match (single codec or comma-separated list). The container to match. - Consider sub-containers. - True if both conditions are met. + When true and Container is "hls", uses SubContainer instead of Container for matching. + True if both the codec and container conditions are met. - + Checks to see whether the codecs and containers contain the given parameters. - The codec to match. + The list of codecs to match. The container to match. - Consider sub-containers. - True if both conditions are met. + When true and Container is "hls", uses SubContainer instead of Container for matching. + True if both the codec and container conditions are met. @@ -1552,6 +1543,26 @@ Whether or not this is audio. System.Nullable<System.Int32>. + + + Initializes a new instance of the class. + + The maximum width. + The maximum bitrate. + + + + Normalizes resolution options based on bitrate and dimensions. + + The input bitrate. + The output bitrate. + The H264 equivalent output bitrate. + The maximum width. + The maximum height. + The target frames per second. + Whether the content is HDR. + The normalized resolution options. + Class StreamBuilder. @@ -4633,6 +4644,11 @@ Class MediaStream. + + + Special ISO 639-2 language codes that should not be displayed in the UI. + + Gets or sets the codec. @@ -4753,6 +4769,12 @@ The title. + + + Gets or sets a value indicating whether the HDR10+ present flag. + + The HDR10+ present flag. + Gets the video range. @@ -4777,12 +4799,66 @@ The audio spatial format. + + + Gets or sets the localized text for undefined language. + + The localized text for undefined language. + + + + Gets or sets the localized text for default stream indicator. + + The localized text for default stream indicator. + + + + Gets or sets the localized text for forced stream indicator. + + The localized text for forced stream indicator. + + + + Gets or sets the localized text for external stream indicator. + + The localized text for external stream indicator. + + + + Gets or sets the localized text for hearing impaired indicator. + + The localized text for hearing impaired indicator. + + + + Gets or sets the localized language name. + + The localized language name. + + + + Gets the display title for the media stream. + + The display title. + + + + Gets or sets the NAL length size. + + The NAL length size. + Gets or sets a value indicating whether this instance is interlaced. true if this instance is interlaced; otherwise, false. + + + Gets or sets a value indicating whether this instance is AVC. + + true if this instance is AVC; otherwise, false. + Gets or sets the channel layout. @@ -4929,6 +5005,18 @@ null if [is external URL] contains no value, true if [is external URL]; otherwise, false. + + + Gets a value indicating whether this instance is a text subtitle stream. + + true if this instance is a text subtitle stream; otherwise, false. + + + + Gets a value indicating whether this instance is a PGS subtitle stream. + + true if this instance is a PGS subtitle stream; otherwise, false. + Gets a value indicating whether this is a subtitle steam that is extractable by ffmpeg. @@ -4966,6 +5054,39 @@ true if this instance is anamorphic; otherwise, false. + + + Determines whether the specified format is a text-based subtitle format. + + The subtitle format/codec to check. + true if the format is text-based; otherwise, false. + + + + Determines whether the specified format is a PGS (Presentation Graphic Stream) subtitle format. + + The subtitle format/codec to check. + true if the format is PGS; otherwise, false. + + + + Determines whether this subtitle stream can be converted to the specified codec. + + The target codec to convert to. + true if the subtitle stream can be converted to the specified codec; otherwise, false. + + + + Gets the video color range information based on codec tags, Dolby Vision properties, and color transfer characteristics. + + A tuple containing the video range (SDR/HDR) and the specific video range type. + + + + Gets the resolution text based on width and height. + + The resolution text (e.g., "1080p", "4K") or null if width/height are not available. + Enum MediaStreamType. @@ -7404,6 +7525,12 @@ Gets or sets a value indicating whether the playlist is public. + + + Initializes a new instance of the class. + + The playlist identifier. + A playlist update request. @@ -7464,6 +7591,12 @@ Class BasePluginConfiguration. + + + Gets the plugin pages. + + The plugin pages. + This is a serializable stub class that is used by the api to provide information about installed plugins. @@ -7829,6 +7962,12 @@ The type of the rating. + + + Initializes a new instance of the class. + + The name of the image provider. + Class RemoteImageResult. @@ -7877,6 +8016,11 @@ Gets the lyrics. + + + Initializes a new instance of the class. + + Gets or sets the name. @@ -7895,6 +8039,16 @@ The year. + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + Used to control the data that gets attached to DtoBaseItems. @@ -8195,6 +8349,11 @@ The is favorite or likes. + + + Initializes a new instance of the class. + + Gets or sets the user to localize search results for. @@ -8262,6 +8421,11 @@ The enable image types. + + + Initializes a new instance of the class. + + Gets or sets the user. @@ -8313,6 +8477,16 @@ Gets or sets a value indicating whether getting rewatching next up list. + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + Query result container. @@ -8632,6 +8806,11 @@ The total record count. + + + Initializes a new instance of the class. + + Gets or sets the user to localize search results for. @@ -8717,6 +8896,22 @@ The name of the item. + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The command arguments. + This exists simply to identify a set of known commands. diff --git a/MediaBrowser.Model/obj/Debug/net10.0/ref/MediaBrowser.Model.dll b/MediaBrowser.Model/obj/Debug/net10.0/ref/MediaBrowser.Model.dll new file mode 100644 index 0000000000000000000000000000000000000000..a7d6ea1f98435cc4ef0d5be567e556a1bb5e33a0 GIT binary patch literal 226304 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 RhyOds%m2v2|K~OE{{mdO?Un!l literal 0 HcmV?d00001 diff --git a/MediaBrowser.Model/obj/Debug/net10.0/refint/MediaBrowser.Model.dll b/MediaBrowser.Model/obj/Debug/net10.0/refint/MediaBrowser.Model.dll new file mode 100644 index 0000000000000000000000000000000000000000..a7d6ea1f98435cc4ef0d5be567e556a1bb5e33a0 GIT binary patch literal 226304 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 RhyOds%m2v2|K~OE{{mdO?Un!l literal 0 HcmV?d00001 diff --git a/MediaBrowser.Providers/Books/AudioBookMetadataService.cs b/MediaBrowser.Providers/Books/AudioBookMetadataService.cs index 57b33670..b2eb6b29 100644 --- a/MediaBrowser.Providers/Books/AudioBookMetadataService.cs +++ b/MediaBrowser.Providers/Books/AudioBookMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Books; + using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; @@ -13,8 +15,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Books; - /// /// Service to manage audiobook metadata. /// diff --git a/MediaBrowser.Providers/Books/BookMetadataService.cs b/MediaBrowser.Providers/Books/BookMetadataService.cs index f4e7e7dc..95d1ba31 100644 --- a/MediaBrowser.Providers/Books/BookMetadataService.cs +++ b/MediaBrowser.Providers/Books/BookMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Books; + using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; @@ -13,8 +15,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Books; - /// /// Service to manage book metadata. /// diff --git a/MediaBrowser.Providers/Books/OpenPackagingFormat/EpubImageProvider.cs b/MediaBrowser.Providers/Books/OpenPackagingFormat/EpubImageProvider.cs index f240e64a..943152e8 100644 --- a/MediaBrowser.Providers/Books/OpenPackagingFormat/EpubImageProvider.cs +++ b/MediaBrowser.Providers/Books/OpenPackagingFormat/EpubImageProvider.cs @@ -2,20 +2,20 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.IO; -using System.IO.Compression; -using System.Threading; -using System.Threading.Tasks; -using System.Xml; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.Providers.Books.OpenPackagingFormat { + using System; + using System.Collections.Generic; + using System.IO; + using System.IO.Compression; + using System.Threading; + using System.Threading.Tasks; + using System.Xml; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using Microsoft.Extensions.Logging; + /// /// Provides the primary image for EPUB items that have embedded covers. /// diff --git a/MediaBrowser.Providers/Books/OpenPackagingFormat/EpubProvider.cs b/MediaBrowser.Providers/Books/OpenPackagingFormat/EpubProvider.cs index 0d280770..268d8f8e 100644 --- a/MediaBrowser.Providers/Books/OpenPackagingFormat/EpubProvider.cs +++ b/MediaBrowser.Providers/Books/OpenPackagingFormat/EpubProvider.cs @@ -2,19 +2,19 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.IO; -using System.IO.Compression; -using System.Threading; -using System.Threading.Tasks; -using System.Xml; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.Providers.Books.OpenPackagingFormat { + using System; + using System.IO; + using System.IO.Compression; + using System.Threading; + using System.Threading.Tasks; + using System.Xml; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// Provides book metadata from OPF content in an EPUB item. /// diff --git a/MediaBrowser.Providers/Books/OpenPackagingFormat/EpubUtils.cs b/MediaBrowser.Providers/Books/OpenPackagingFormat/EpubUtils.cs index b07b55d3..405d1c78 100644 --- a/MediaBrowser.Providers/Books/OpenPackagingFormat/EpubUtils.cs +++ b/MediaBrowser.Providers/Books/OpenPackagingFormat/EpubUtils.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; -using System.IO.Compression; -using System.Linq; -using System.Xml.Linq; - namespace MediaBrowser.Providers.Books.OpenPackagingFormat { + using System.IO; + using System.IO.Compression; + using System.Linq; + using System.Xml.Linq; + /// /// Utilities for EPUB files. /// diff --git a/MediaBrowser.Providers/Books/OpenPackagingFormat/OpfProvider.cs b/MediaBrowser.Providers/Books/OpenPackagingFormat/OpfProvider.cs index c997cf9e..fcfe772b 100644 --- a/MediaBrowser.Providers/Books/OpenPackagingFormat/OpfProvider.cs +++ b/MediaBrowser.Providers/Books/OpenPackagingFormat/OpfProvider.cs @@ -2,17 +2,17 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; -using System.Threading; -using System.Threading.Tasks; -using System.Xml; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.Providers.Books.OpenPackagingFormat { + using System.IO; + using System.Threading; + using System.Threading.Tasks; + using System.Xml; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// Provides metadata for book items that have an OPF file in the same directory. Supports the standard /// content.opf filename, bespoke metadata.opf name from Calibre libraries, and OPF files that have the diff --git a/MediaBrowser.Providers/Books/OpenPackagingFormat/OpfReader.cs b/MediaBrowser.Providers/Books/OpenPackagingFormat/OpfReader.cs index a5edfd34..79a82755 100644 --- a/MediaBrowser.Providers/Books/OpenPackagingFormat/OpfReader.cs +++ b/MediaBrowser.Providers/Books/OpenPackagingFormat/OpfReader.cs @@ -2,21 +2,21 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Threading; -using System.Xml; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Net; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.Providers.Books.OpenPackagingFormat { + using System; + using System.Globalization; + using System.IO; + using System.Linq; + using System.Threading; + using System.Xml; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Net; + using Microsoft.Extensions.Logging; + /// /// Methods used to pull metadata and other information from Open Packaging Format in XML objects. /// diff --git a/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs b/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs index 70bd799e..ff17d6fa 100644 --- a/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs +++ b/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.BoxSets; + using System.Collections.Generic; using System.Linq; using MediaBrowser.Controller.Configuration; @@ -16,8 +18,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.BoxSets; - /// /// Service to manage boxset metadata. /// diff --git a/MediaBrowser.Providers/Channels/ChannelMetadataService.cs b/MediaBrowser.Providers/Channels/ChannelMetadataService.cs index dad5e1d0..f05102a6 100644 --- a/MediaBrowser.Providers/Channels/ChannelMetadataService.cs +++ b/MediaBrowser.Providers/Channels/ChannelMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Channels; + using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.IO; @@ -12,8 +14,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Channels; - /// /// Service to manage channel metadata. /// diff --git a/MediaBrowser.Providers/Folders/CollectionFolderMetadataService.cs b/MediaBrowser.Providers/Folders/CollectionFolderMetadataService.cs index 69551793..dd63962f 100644 --- a/MediaBrowser.Providers/Folders/CollectionFolderMetadataService.cs +++ b/MediaBrowser.Providers/Folders/CollectionFolderMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Folders; + using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; @@ -12,8 +14,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Folders; - /// /// Service to manage collection folder metadata. /// diff --git a/MediaBrowser.Providers/Folders/FolderMetadataService.cs b/MediaBrowser.Providers/Folders/FolderMetadataService.cs index b054b504..ee196018 100644 --- a/MediaBrowser.Providers/Folders/FolderMetadataService.cs +++ b/MediaBrowser.Providers/Folders/FolderMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Folders; + using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; @@ -12,8 +14,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Folders; - /// /// Service to manage folder metadata. /// diff --git a/MediaBrowser.Providers/Folders/UserViewMetadataService.cs b/MediaBrowser.Providers/Folders/UserViewMetadataService.cs index 3252005e..5784004b 100644 --- a/MediaBrowser.Providers/Folders/UserViewMetadataService.cs +++ b/MediaBrowser.Providers/Folders/UserViewMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Folders; + using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; @@ -12,8 +14,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Folders; - /// /// Service to manage user view metadata. /// diff --git a/MediaBrowser.Providers/Genres/GenreMetadataService.cs b/MediaBrowser.Providers/Genres/GenreMetadataService.cs index 7455be54..73c50777 100644 --- a/MediaBrowser.Providers/Genres/GenreMetadataService.cs +++ b/MediaBrowser.Providers/Genres/GenreMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Genres; + using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; @@ -12,8 +14,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Genres; - /// /// Service to manage genre metadata. /// diff --git a/MediaBrowser.Providers/LiveTv/LiveTvMetadataService.cs b/MediaBrowser.Providers/LiveTv/LiveTvMetadataService.cs index dd51baf3..04904706 100644 --- a/MediaBrowser.Providers/LiveTv/LiveTvMetadataService.cs +++ b/MediaBrowser.Providers/LiveTv/LiveTvMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.LiveTv; + using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; @@ -12,8 +14,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.LiveTv; - /// /// Service to manage live TV metadata. /// diff --git a/MediaBrowser.Providers/Lyric/LrcLyricParser.cs b/MediaBrowser.Providers/Lyric/LrcLyricParser.cs index a55b965a..9a6d9baa 100644 --- a/MediaBrowser.Providers/Lyric/LrcLyricParser.cs +++ b/MediaBrowser.Providers/Lyric/LrcLyricParser.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Lyric; + using System; using System.Collections.Generic; using System.IO; @@ -15,8 +17,6 @@ using MediaBrowser.Controller.Lyrics; using MediaBrowser.Controller.Resolvers; using MediaBrowser.Model.Lyrics; -namespace MediaBrowser.Providers.Lyric; - /// /// LRC Lyric Parser. /// diff --git a/MediaBrowser.Providers/Lyric/LyricManager.cs b/MediaBrowser.Providers/Lyric/LyricManager.cs index 07e53ee2..e0a6e611 100644 --- a/MediaBrowser.Providers/Lyric/LyricManager.cs +++ b/MediaBrowser.Providers/Lyric/LyricManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Lyric; + using System; using System.Collections.Generic; using System.Globalization; @@ -25,8 +27,6 @@ using MediaBrowser.Model.Lyrics; using MediaBrowser.Model.Providers; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Lyric; - /// /// Lyric Manager. /// diff --git a/MediaBrowser.Providers/Lyric/LyricScheduledTask.cs b/MediaBrowser.Providers/Lyric/LyricScheduledTask.cs index 7391a3e6..b1a9e47a 100644 --- a/MediaBrowser.Providers/Lyric/LyricScheduledTask.cs +++ b/MediaBrowser.Providers/Lyric/LyricScheduledTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Lyric; + using System; using System.Collections.Generic; using System.Linq; @@ -19,8 +21,6 @@ using MediaBrowser.Model.Lyrics; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Lyric; - /// /// Task to download lyrics. /// diff --git a/MediaBrowser.Providers/Lyric/TxtLyricParser.cs b/MediaBrowser.Providers/Lyric/TxtLyricParser.cs index b00ad6c7..ecafa2d4 100644 --- a/MediaBrowser.Providers/Lyric/TxtLyricParser.cs +++ b/MediaBrowser.Providers/Lyric/TxtLyricParser.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Lyric; + using System; using System.IO; using Jellyfin.Extensions; @@ -9,8 +11,6 @@ using MediaBrowser.Controller.Lyrics; using MediaBrowser.Controller.Resolvers; using MediaBrowser.Model.Lyrics; -namespace MediaBrowser.Providers.Lyric; - /// /// TXT Lyric Parser. /// diff --git a/MediaBrowser.Providers/Manager/ItemImageProvider.cs b/MediaBrowser.Providers/Manager/ItemImageProvider.cs index 946ba3b2..80c81315 100644 --- a/MediaBrowser.Providers/Manager/ItemImageProvider.cs +++ b/MediaBrowser.Providers/Manager/ItemImageProvider.cs @@ -2,34 +2,34 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net; -using System.Net.Http; -using System.Net.Mime; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.LiveTv; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Configuration; -using MediaBrowser.Model.Drawing; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.IO; -using MediaBrowser.Model.MediaInfo; -using MediaBrowser.Model.Net; -using MediaBrowser.Model.Providers; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.Providers.Manager { +#nullable disable + + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Net; + using System.Net.Http; + using System.Net.Mime; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.LiveTv; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Configuration; + using MediaBrowser.Model.Drawing; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.IO; + using MediaBrowser.Model.MediaInfo; + using MediaBrowser.Model.Net; + using MediaBrowser.Model.Providers; + using Microsoft.Extensions.Logging; + /// /// Utilities for managing images attached to items. /// diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index 77aea0c0..2b1aa539 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -2,50 +2,50 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net; -using System.Net.Http; -using System.Net.Mime; -using System.Threading; -using System.Threading.Tasks; -using AsyncKeyedLock; -using Jellyfin.Data.Enums; -using Jellyfin.Data.Events; -using Jellyfin.Extensions; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller; -using MediaBrowser.Controller.BaseItemManager; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Dto; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Lyrics; -using MediaBrowser.Controller.MediaSegments; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Controller.Subtitles; -using MediaBrowser.Model.Configuration; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Extensions; -using MediaBrowser.Model.IO; -using MediaBrowser.Model.Net; -using MediaBrowser.Model.Providers; -using Microsoft.Extensions.Caching.Memory; -using Microsoft.Extensions.Logging; -using Book = MediaBrowser.Controller.Entities.Book; -using Episode = MediaBrowser.Controller.Entities.TV.Episode; -using Movie = MediaBrowser.Controller.Entities.Movies.Movie; -using MusicAlbum = MediaBrowser.Controller.Entities.Audio.MusicAlbum; -using Season = MediaBrowser.Controller.Entities.TV.Season; -using Series = MediaBrowser.Controller.Entities.TV.Series; - namespace MediaBrowser.Providers.Manager { + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Net; + using System.Net.Http; + using System.Net.Mime; + using System.Threading; + using System.Threading.Tasks; + using AsyncKeyedLock; + using Jellyfin.Data.Enums; + using Jellyfin.Data.Events; + using Jellyfin.Extensions; + using MediaBrowser.Common.Net; + using MediaBrowser.Controller; + using MediaBrowser.Controller.BaseItemManager; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Dto; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Lyrics; + using MediaBrowser.Controller.MediaSegments; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Controller.Subtitles; + using MediaBrowser.Model.Configuration; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Extensions; + using MediaBrowser.Model.IO; + using MediaBrowser.Model.Net; + using MediaBrowser.Model.Providers; + using Microsoft.Extensions.Caching.Memory; + using Microsoft.Extensions.Logging; + using Book = MediaBrowser.Controller.Entities.Book; + using Episode = MediaBrowser.Controller.Entities.TV.Episode; + using Movie = MediaBrowser.Controller.Entities.Movies.Movie; + using MusicAlbum = MediaBrowser.Controller.Entities.Audio.MusicAlbum; + using Season = MediaBrowser.Controller.Entities.TV.Season; + using Series = MediaBrowser.Controller.Entities.TV.Series; + /// /// Class ProviderManager. /// diff --git a/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs b/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs index 6e085040..79aee081 100644 --- a/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs +++ b/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs @@ -2,32 +2,32 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using ATL; -using Jellyfin.Data.Enums; -using Jellyfin.Extensions; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Lyrics; -using MediaBrowser.Controller.MediaEncoding; -using MediaBrowser.Controller.Persistence; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Dlna; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Extensions; -using MediaBrowser.Model.MediaInfo; -using Microsoft.Extensions.Logging; -using static Jellyfin.Extensions.StringExtensions; - namespace MediaBrowser.Providers.MediaInfo { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using ATL; + using Jellyfin.Data.Enums; + using Jellyfin.Extensions; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Lyrics; + using MediaBrowser.Controller.MediaEncoding; + using MediaBrowser.Controller.Persistence; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Dlna; + using MediaBrowser.Model.Dto; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Extensions; + using MediaBrowser.Model.MediaInfo; + using Microsoft.Extensions.Logging; + using static Jellyfin.Extensions.StringExtensions; + /// /// Probes audio files for metadata. /// diff --git a/MediaBrowser.Providers/MediaInfo/AudioResolver.cs b/MediaBrowser.Providers/MediaInfo/AudioResolver.cs index f2f2c971..87803b83 100644 --- a/MediaBrowser.Providers/MediaInfo/AudioResolver.cs +++ b/MediaBrowser.Providers/MediaInfo/AudioResolver.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Emby.Naming.Common; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.MediaEncoding; -using MediaBrowser.Model.Dlna; -using MediaBrowser.Model.Globalization; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.Providers.MediaInfo { + using Emby.Naming.Common; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.MediaEncoding; + using MediaBrowser.Model.Dlna; + using MediaBrowser.Model.Globalization; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// Resolves external audio files for . /// diff --git a/MediaBrowser.Providers/MediaInfo/EmbeddedImageProvider.cs b/MediaBrowser.Providers/MediaInfo/EmbeddedImageProvider.cs index def85344..215f7288 100644 --- a/MediaBrowser.Providers/MediaInfo/EmbeddedImageProvider.cs +++ b/MediaBrowser.Providers/MediaInfo/EmbeddedImageProvider.cs @@ -2,29 +2,29 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.MediaEncoding; -using MediaBrowser.Controller.Persistence; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Drawing; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.MediaInfo; -using MediaBrowser.Model.Net; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.Providers.MediaInfo { +#nullable disable + + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.MediaEncoding; + using MediaBrowser.Controller.Persistence; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Drawing; + using MediaBrowser.Model.Dto; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.MediaInfo; + using MediaBrowser.Model.Net; + using Microsoft.Extensions.Logging; + /// /// Uses to extract embedded images. /// diff --git a/MediaBrowser.Providers/MediaInfo/LyricResolver.cs b/MediaBrowser.Providers/MediaInfo/LyricResolver.cs index 847df7e4..5e114fb1 100644 --- a/MediaBrowser.Providers/MediaInfo/LyricResolver.cs +++ b/MediaBrowser.Providers/MediaInfo/LyricResolver.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.MediaInfo; + using Emby.Naming.Common; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.MediaEncoding; @@ -10,8 +12,6 @@ using MediaBrowser.Model.Globalization; using MediaBrowser.Model.IO; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.MediaInfo; - /// /// Resolves external lyric files for . /// diff --git a/MediaBrowser.Providers/MediaInfo/MediaInfoResolver.cs b/MediaBrowser.Providers/MediaInfo/MediaInfoResolver.cs index 45cdfc63..2b049dbb 100644 --- a/MediaBrowser.Providers/MediaInfo/MediaInfoResolver.cs +++ b/MediaBrowser.Providers/MediaInfo/MediaInfoResolver.cs @@ -2,28 +2,28 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Emby.Naming.Common; -using Emby.Naming.ExternalFiles; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.MediaEncoding; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Dlna; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Globalization; -using MediaBrowser.Model.IO; -using MediaBrowser.Model.MediaInfo; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.Providers.MediaInfo { + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using Emby.Naming.Common; + using Emby.Naming.ExternalFiles; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.MediaEncoding; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Dlna; + using MediaBrowser.Model.Dto; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Globalization; + using MediaBrowser.Model.IO; + using MediaBrowser.Model.MediaInfo; + using Microsoft.Extensions.Logging; + /// /// Resolves external files for . /// diff --git a/MediaBrowser.Providers/MediaInfo/ProbeProvider.cs b/MediaBrowser.Providers/MediaInfo/ProbeProvider.cs index 2033f37f..b0185407 100644 --- a/MediaBrowser.Providers/MediaInfo/ProbeProvider.cs +++ b/MediaBrowser.Providers/MediaInfo/ProbeProvider.cs @@ -2,35 +2,35 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Emby.Naming.Common; -using MediaBrowser.Controller.Chapters; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Lyrics; -using MediaBrowser.Controller.MediaEncoding; -using MediaBrowser.Controller.Persistence; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Controller.Subtitles; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Globalization; -using MediaBrowser.Model.IO; -using MediaBrowser.Model.MediaInfo; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.Providers.MediaInfo { +#nullable disable + + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using Emby.Naming.Common; + using MediaBrowser.Controller.Chapters; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Lyrics; + using MediaBrowser.Controller.MediaEncoding; + using MediaBrowser.Controller.Persistence; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Controller.Subtitles; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Globalization; + using MediaBrowser.Model.IO; + using MediaBrowser.Model.MediaInfo; + using Microsoft.Extensions.Logging; + /// /// The probe provider. /// diff --git a/MediaBrowser.Providers/MediaInfo/SubtitleResolver.cs b/MediaBrowser.Providers/MediaInfo/SubtitleResolver.cs index 6aafdcbc..77c982ab 100644 --- a/MediaBrowser.Providers/MediaInfo/SubtitleResolver.cs +++ b/MediaBrowser.Providers/MediaInfo/SubtitleResolver.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Emby.Naming.Common; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.MediaEncoding; -using MediaBrowser.Model.Dlna; -using MediaBrowser.Model.Globalization; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.Providers.MediaInfo { + using Emby.Naming.Common; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.MediaEncoding; + using MediaBrowser.Model.Dlna; + using MediaBrowser.Model.Globalization; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// Resolves external subtitle files for . /// diff --git a/MediaBrowser.Providers/Movies/ImdbExternalUrlProvider.cs b/MediaBrowser.Providers/Movies/ImdbExternalUrlProvider.cs index 16d5af3b..8c14a1ca 100644 --- a/MediaBrowser.Providers/Movies/ImdbExternalUrlProvider.cs +++ b/MediaBrowser.Providers/Movies/ImdbExternalUrlProvider.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Movies; + using System.Collections.Generic; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Providers.Movies; - /// /// External URLs for IMDb. /// diff --git a/MediaBrowser.Providers/Movies/MovieMetadataService.cs b/MediaBrowser.Providers/Movies/MovieMetadataService.cs index f684f8b7..d0f209a1 100644 --- a/MediaBrowser.Providers/Movies/MovieMetadataService.cs +++ b/MediaBrowser.Providers/Movies/MovieMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Movies; + using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.IO; @@ -13,8 +15,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Movies; - /// /// Service to manage movie metadata. /// diff --git a/MediaBrowser.Providers/Movies/TrailerMetadataService.cs b/MediaBrowser.Providers/Movies/TrailerMetadataService.cs index a75b12d1..5bf83542 100644 --- a/MediaBrowser.Providers/Movies/TrailerMetadataService.cs +++ b/MediaBrowser.Providers/Movies/TrailerMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Movies; + using System.Linq; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; @@ -14,8 +16,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Movies; - /// /// Service to manage trailer metadata. /// diff --git a/MediaBrowser.Providers/Music/AlbumMetadataService.cs b/MediaBrowser.Providers/Music/AlbumMetadataService.cs index 8e996cd7..6c379d01 100644 --- a/MediaBrowser.Providers/Music/AlbumMetadataService.cs +++ b/MediaBrowser.Providers/Music/AlbumMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Music; + using System; using System.Collections.Generic; using System.Linq; @@ -20,8 +22,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Music; - /// /// The album metadata service. /// diff --git a/MediaBrowser.Providers/Music/ArtistMetadataService.cs b/MediaBrowser.Providers/Music/ArtistMetadataService.cs index 516bd0fb..dd3373fa 100644 --- a/MediaBrowser.Providers/Music/ArtistMetadataService.cs +++ b/MediaBrowser.Providers/Music/ArtistMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Music; + using System.Collections.Generic; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; @@ -14,8 +16,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Music; - /// /// Service to manage artist metadata. /// diff --git a/MediaBrowser.Providers/Music/AudioMetadataService.cs b/MediaBrowser.Providers/Music/AudioMetadataService.cs index d40f870c..a08ed1c0 100644 --- a/MediaBrowser.Providers/Music/AudioMetadataService.cs +++ b/MediaBrowser.Providers/Music/AudioMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Music; + using System; using System.Linq; using MediaBrowser.Controller.Configuration; @@ -15,8 +17,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Music; - /// /// The audio metadata service. /// diff --git a/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs b/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs index ca7931a9..06a27583 100644 --- a/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs +++ b/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Music; + using System; using System.Linq; using MediaBrowser.Controller.Configuration; @@ -15,8 +17,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Music; - /// /// Service to manage music video metadata. /// diff --git a/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs b/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs index 329973ad..589be658 100644 --- a/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs +++ b/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.MusicGenres; + using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.IO; @@ -12,8 +14,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.MusicGenres; - /// /// Service to manage music genre metadata. /// diff --git a/MediaBrowser.Providers/People/PersonMetadataService.cs b/MediaBrowser.Providers/People/PersonMetadataService.cs index 002862ea..0ddf5133 100644 --- a/MediaBrowser.Providers/People/PersonMetadataService.cs +++ b/MediaBrowser.Providers/People/PersonMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.People; + using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; @@ -12,8 +14,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.People; - /// /// Service to manage person metadata. /// diff --git a/MediaBrowser.Providers/Photos/PhotoAlbumMetadataService.cs b/MediaBrowser.Providers/Photos/PhotoAlbumMetadataService.cs index 5b237add..11117aa4 100644 --- a/MediaBrowser.Providers/Photos/PhotoAlbumMetadataService.cs +++ b/MediaBrowser.Providers/Photos/PhotoAlbumMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Photos; + using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; @@ -12,8 +14,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Photos; - /// /// Service to manage photo album metadata. /// diff --git a/MediaBrowser.Providers/Photos/PhotoMetadataService.cs b/MediaBrowser.Providers/Photos/PhotoMetadataService.cs index c50ca61a..0d4cc5c3 100644 --- a/MediaBrowser.Providers/Photos/PhotoMetadataService.cs +++ b/MediaBrowser.Providers/Photos/PhotoMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Photos; + using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; @@ -12,8 +14,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Photos; - /// /// Service to manage photo metadata. /// diff --git a/MediaBrowser.Providers/Playlists/PlaylistItemsProvider.cs b/MediaBrowser.Providers/Playlists/PlaylistItemsProvider.cs index 6144dcaf..b2ed355d 100644 --- a/MediaBrowser.Providers/Playlists/PlaylistItemsProvider.cs +++ b/MediaBrowser.Providers/Playlists/PlaylistItemsProvider.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Playlists; + #nullable disable using System; @@ -20,8 +22,6 @@ using MediaBrowser.Model.IO; using Microsoft.Extensions.Logging; using PlaylistsNET.Content; -namespace MediaBrowser.Providers.Playlists; - /// /// Local playlist provider. /// diff --git a/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs b/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs index ded27300..bcc6d11a 100644 --- a/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs +++ b/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Playlists; + using System.Collections.Generic; using System.Linq; using MediaBrowser.Controller.Configuration; @@ -16,8 +18,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Playlists; - /// /// Service to manage playlist metadata. /// diff --git a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbAlbumExternalUrlProvider.cs b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbAlbumExternalUrlProvider.cs index 49189c91..44b78afe 100644 --- a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbAlbumExternalUrlProvider.cs +++ b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbAlbumExternalUrlProvider.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Plugins.AudioDb; + using System.Collections.Generic; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Providers.Plugins.AudioDb; - /// /// External artist URLs for AudioDb. /// diff --git a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistExternalUrlProvider.cs b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistExternalUrlProvider.cs index ce18d71e..11c30fa4 100644 --- a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistExternalUrlProvider.cs +++ b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistExternalUrlProvider.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Plugins.AudioDb; + using System.Collections.Generic; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Providers.Plugins.AudioDb; - /// /// External artist URLs for AudioDb. /// diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/Configuration/PluginConfiguration.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/Configuration/PluginConfiguration.cs index 3ed4d3e9..a5f74935 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/Configuration/PluginConfiguration.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/Configuration/PluginConfiguration.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Model.Plugins; - namespace MediaBrowser.Providers.Plugins.MusicBrainz.Configuration; +using MediaBrowser.Model.Plugins; + /// /// MusicBrainz plugin configuration. /// diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumArtistExternalId.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumArtistExternalId.cs index 52c56789..2fd01142 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumArtistExternalId.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumArtistExternalId.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Plugins.MusicBrainz; + using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Providers; -namespace MediaBrowser.Providers.Plugins.MusicBrainz; - /// /// MusicBrainz album artist external id. /// diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumArtistExternalUrlProvider.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumArtistExternalUrlProvider.cs index b62099e5..84d88570 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumArtistExternalUrlProvider.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumArtistExternalUrlProvider.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Plugins.MusicBrainz; + using System.Collections.Generic; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Providers.Plugins.MusicBrainz; - /// /// External album artist URLs for MusicBrainz. /// diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumExternalId.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumExternalId.cs index 480fea40..c223a9df 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumExternalId.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumExternalId.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Plugins.MusicBrainz; + using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Providers; -namespace MediaBrowser.Providers.Plugins.MusicBrainz; - /// /// MusicBrainz album external id. /// diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumExternalUrlProvider.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumExternalUrlProvider.cs index c44093aa..585662e6 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumExternalUrlProvider.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumExternalUrlProvider.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Plugins.MusicBrainz; + using System.Collections.Generic; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Providers.Plugins.MusicBrainz; - /// /// External album URLs for MusicBrainz. /// diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumProvider.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumProvider.cs index 4d309460..1d30ff97 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumProvider.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumProvider.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Plugins.MusicBrainz; + using System; using System.Collections.Generic; using System.Linq; @@ -22,8 +24,6 @@ using MetaBrainz.MusicBrainz.Interfaces.Entities; using MetaBrainz.MusicBrainz.Interfaces.Searches; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Plugins.MusicBrainz; - /// /// Music album metadata provider for MusicBrainz. /// diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalId.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalId.cs index 72562828..8113939b 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalId.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalId.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Plugins.MusicBrainz; + using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Providers; -namespace MediaBrowser.Providers.Plugins.MusicBrainz; - /// /// MusicBrainz artist external id. /// diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalUrlProvider.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalUrlProvider.cs index 0bbd28ea..450d311b 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalUrlProvider.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalUrlProvider.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Plugins.MusicBrainz; + using System.Collections.Generic; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Providers.Plugins.MusicBrainz; - /// /// External artist URLs for MusicBrainz. /// diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistProvider.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistProvider.cs index 0021330b..2052fee9 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistProvider.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistProvider.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Plugins.MusicBrainz; + using System; using System.Collections.Generic; using System.Linq; @@ -21,8 +23,6 @@ using MetaBrainz.MusicBrainz.Interfaces.Entities; using MetaBrainz.MusicBrainz.Interfaces.Searches; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Plugins.MusicBrainz; - /// /// MusicBrainz artist provider. /// diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzOtherArtistExternalId.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzOtherArtistExternalId.cs index 2ca3a4ae..2815da4e 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzOtherArtistExternalId.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzOtherArtistExternalId.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Plugins.MusicBrainz; + using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Providers; -namespace MediaBrowser.Providers.Plugins.MusicBrainz; - /// /// MusicBrainz other artist external id. /// diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzRecordingId.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzRecordingId.cs index 0180c715..dfc8a85b 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzRecordingId.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzRecordingId.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Plugins.MusicBrainz; + using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Providers; -namespace MediaBrowser.Providers.Plugins.MusicBrainz; - /// /// MusicBrainz recording id. /// diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzReleaseGroupExternalId.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzReleaseGroupExternalId.cs index 6a4c2cec..634f01dd 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzReleaseGroupExternalId.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzReleaseGroupExternalId.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Plugins.MusicBrainz; + using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Providers; -namespace MediaBrowser.Providers.Plugins.MusicBrainz; - /// /// MusicBrainz release group external id. /// diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzReleaseGroupExternalUrlProvider.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzReleaseGroupExternalUrlProvider.cs index a9561d22..1bac6942 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzReleaseGroupExternalUrlProvider.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzReleaseGroupExternalUrlProvider.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Plugins.MusicBrainz; + using System.Collections.Generic; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Providers.Plugins.MusicBrainz; - /// /// External release group URLs for MusicBrainz. /// diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzTrackExternalUrlProvider.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzTrackExternalUrlProvider.cs index 7e2f263a..9da53e2f 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzTrackExternalUrlProvider.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzTrackExternalUrlProvider.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Plugins.MusicBrainz; + using System.Collections.Generic; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Providers.Plugins.MusicBrainz; - /// /// External track URLs for MusicBrainz. /// diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzTrackId.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzTrackId.cs index ad980cf8..f47cd118 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzTrackId.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzTrackId.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Plugins.MusicBrainz; + using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Providers; -namespace MediaBrowser.Providers.Plugins.MusicBrainz; - /// /// MusicBrainz track id. /// diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/Plugin.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/Plugin.cs index 8c87918d..041e1ccd 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/Plugin.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/Plugin.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Plugins.MusicBrainz; + using System; using System.Collections.Generic; using System.Net.Http.Headers; @@ -13,8 +15,6 @@ using MediaBrowser.Model.Serialization; using MediaBrowser.Providers.Plugins.MusicBrainz.Configuration; using MetaBrainz.MusicBrainz; -namespace MediaBrowser.Providers.Plugins.MusicBrainz; - /// /// Plugin instance. /// diff --git a/MediaBrowser.Providers/Plugins/Omdb/JsonOmdbNotAvailableInt32Converter.cs b/MediaBrowser.Providers/Plugins/Omdb/JsonOmdbNotAvailableInt32Converter.cs index 76d956dd..e126fb12 100644 --- a/MediaBrowser.Providers/Plugins/Omdb/JsonOmdbNotAvailableInt32Converter.cs +++ b/MediaBrowser.Providers/Plugins/Omdb/JsonOmdbNotAvailableInt32Converter.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.ComponentModel; -using System.Text.Json; -using System.Text.Json.Serialization; - namespace MediaBrowser.Providers.Plugins.Omdb { + using System; + using System.ComponentModel; + using System.Text.Json; + using System.Text.Json.Serialization; + /// /// Converts a string N/A to string.Empty. /// diff --git a/MediaBrowser.Providers/Plugins/Omdb/JsonOmdbNotAvailableStringConverter.cs b/MediaBrowser.Providers/Plugins/Omdb/JsonOmdbNotAvailableStringConverter.cs index a0b0e2ed..a8ffe0a1 100644 --- a/MediaBrowser.Providers/Plugins/Omdb/JsonOmdbNotAvailableStringConverter.cs +++ b/MediaBrowser.Providers/Plugins/Omdb/JsonOmdbNotAvailableStringConverter.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using Jellyfin.Extensions.Json; - namespace MediaBrowser.Providers.Plugins.Omdb { + using System; + using System.Text.Json; + using System.Text.Json.Serialization; + using Jellyfin.Extensions.Json; + /// /// Converts a string N/A to string.Empty. /// diff --git a/MediaBrowser.Providers/Plugins/StudioImages/Configuration/PluginConfiguration.cs b/MediaBrowser.Providers/Plugins/StudioImages/Configuration/PluginConfiguration.cs index 161f42f5..d19eebcc 100644 --- a/MediaBrowser.Providers/Plugins/StudioImages/Configuration/PluginConfiguration.cs +++ b/MediaBrowser.Providers/Plugins/StudioImages/Configuration/PluginConfiguration.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Model.Plugins; - namespace MediaBrowser.Providers.Plugins.StudioImages.Configuration { + using MediaBrowser.Model.Plugins; + /// /// Plugin configuration class for the studio image provider. /// diff --git a/MediaBrowser.Providers/Plugins/StudioImages/Plugin.cs b/MediaBrowser.Providers/Plugins/StudioImages/Plugin.cs index 85991baf..3a8e7876 100644 --- a/MediaBrowser.Providers/Plugins/StudioImages/Plugin.cs +++ b/MediaBrowser.Providers/Plugins/StudioImages/Plugin.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Collections.Generic; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Plugins; -using MediaBrowser.Model.Plugins; -using MediaBrowser.Model.Serialization; -using MediaBrowser.Providers.Plugins.StudioImages.Configuration; - namespace MediaBrowser.Providers.Plugins.StudioImages { +#nullable disable + + using System; + using System.Collections.Generic; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Common.Plugins; + using MediaBrowser.Model.Plugins; + using MediaBrowser.Model.Serialization; + using MediaBrowser.Providers.Plugins.StudioImages.Configuration; + /// /// Artwork Plugin class. /// diff --git a/MediaBrowser.Providers/Plugins/StudioImages/StudiosImageProvider.cs b/MediaBrowser.Providers/Plugins/StudioImages/StudiosImageProvider.cs index b047d322..327262f6 100644 --- a/MediaBrowser.Providers/Plugins/StudioImages/StudiosImageProvider.cs +++ b/MediaBrowser.Providers/Plugins/StudioImages/StudiosImageProvider.cs @@ -2,27 +2,27 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using Jellyfin.Extensions; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.IO; -using MediaBrowser.Model.Providers; - namespace MediaBrowser.Providers.Plugins.StudioImages { +#nullable disable + + using System; + using System.Collections.Generic; + using System.Globalization; + using System.IO; + using System.Linq; + using System.Net.Http; + using System.Threading; + using System.Threading.Tasks; + using Jellyfin.Extensions; + using MediaBrowser.Common.Net; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.IO; + using MediaBrowser.Model.Providers; + /// /// Studio image provider. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/Api/TmdbController.cs b/MediaBrowser.Providers/Plugins/Tmdb/Api/TmdbController.cs index 108a159b..34f3f390 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/Api/TmdbController.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/Api/TmdbController.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Net.Mime; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using TMDbLib.Objects.General; - namespace MediaBrowser.Providers.Plugins.Tmdb.Api { + using System.Net.Mime; + using System.Threading.Tasks; + using Microsoft.AspNetCore.Authorization; + using Microsoft.AspNetCore.Http; + using Microsoft.AspNetCore.Mvc; + using TMDbLib.Objects.General; + /// /// The TMDb API controller. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetExternalId.cs b/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetExternalId.cs index 274bfd12..391c8a22 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetExternalId.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetExternalId.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Providers; - namespace MediaBrowser.Providers.Plugins.Tmdb.BoxSets { + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Providers; + /// /// External id for a TMDb box set. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetImageProvider.cs b/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetImageProvider.cs index 0ec8ff2e..c54a3f8c 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetImageProvider.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetImageProvider.cs @@ -2,22 +2,22 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Providers; - namespace MediaBrowser.Providers.Plugins.Tmdb.BoxSets { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Linq; + using System.Net.Http; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Common.Net; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Providers; + /// /// BoxSet image provider powered by TMDb. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetProvider.cs b/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetProvider.cs index 8ff01cc4..a91fe722 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetProvider.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetProvider.cs @@ -2,22 +2,22 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Providers; - namespace MediaBrowser.Providers.Plugins.Tmdb.BoxSets { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Linq; + using System.Net.Http; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Common.Net; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Providers; + /// /// BoxSet provider powered by TMDb. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/Configuration/PluginConfiguration.cs b/MediaBrowser.Providers/Plugins/Tmdb/Configuration/PluginConfiguration.cs index 1fc7e50e..578e22ea 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/Configuration/PluginConfiguration.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/Configuration/PluginConfiguration.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Model.Plugins; - namespace MediaBrowser.Providers.Plugins.Tmdb { + using MediaBrowser.Model.Plugins; + /// /// Plugin configuration class for TMDb library. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieExternalId.cs b/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieExternalId.cs index 33d16679..ca1ba94e 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieExternalId.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieExternalId.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.LiveTv; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Providers; - namespace MediaBrowser.Providers.Plugins.Tmdb.Movies { + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.LiveTv; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Providers; + /// /// External id for a TMDb movie. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieImageProvider.cs b/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieImageProvider.cs index c18547ce..1013726d 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieImageProvider.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieImageProvider.cs @@ -2,23 +2,23 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Providers; -using TMDbLib.Objects.Find; - namespace MediaBrowser.Providers.Plugins.Tmdb.Movies { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Linq; + using System.Net.Http; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Common.Net; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Providers; + using TMDbLib.Objects.Find; + /// /// Movie image provider powered by TMDb. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieProvider.cs b/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieProvider.cs index 598bde9a..aac8add4 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieProvider.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieProvider.cs @@ -2,27 +2,27 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using Jellyfin.Data.Enums; -using Jellyfin.Extensions; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Providers; -using TMDbLib.Objects.Find; -using TMDbLib.Objects.Search; - namespace MediaBrowser.Providers.Plugins.Tmdb.Movies { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Linq; + using System.Net.Http; + using System.Threading; + using System.Threading.Tasks; + using Jellyfin.Data.Enums; + using Jellyfin.Extensions; + using MediaBrowser.Common.Net; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Providers; + using TMDbLib.Objects.Find; + using TMDbLib.Objects.Search; + /// /// Movie provider powered by TMDb. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/People/TmdbPersonExternalId.cs b/MediaBrowser.Providers/Plugins/Tmdb/People/TmdbPersonExternalId.cs index 977a3226..2857951f 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/People/TmdbPersonExternalId.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/People/TmdbPersonExternalId.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Providers; - namespace MediaBrowser.Providers.Plugins.Tmdb.People { + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Providers; + /// /// External id for a TMDb person. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/People/TmdbPersonImageProvider.cs b/MediaBrowser.Providers/Plugins/Tmdb/People/TmdbPersonImageProvider.cs index 9d8e8db1..5c11d264 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/People/TmdbPersonImageProvider.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/People/TmdbPersonImageProvider.cs @@ -2,20 +2,20 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Providers; - namespace MediaBrowser.Providers.Plugins.Tmdb.People { + using System.Collections.Generic; + using System.Globalization; + using System.Linq; + using System.Net.Http; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Common.Net; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Providers; + /// /// Person image provider powered by TMDb. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/People/TmdbPersonProvider.cs b/MediaBrowser.Providers/Plugins/Tmdb/People/TmdbPersonProvider.cs index fc05cbce..0bef3f75 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/People/TmdbPersonProvider.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/People/TmdbPersonProvider.cs @@ -2,20 +2,20 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Providers; - namespace MediaBrowser.Providers.Plugins.Tmdb.People { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Net.Http; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Common.Net; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Providers; + /// /// Person image provider powered by TMDb. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/Plugin.cs b/MediaBrowser.Providers/Plugins/Tmdb/Plugin.cs index 6c1e9e77..af78cb92 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/Plugin.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/Plugin.cs @@ -2,17 +2,17 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Collections.Generic; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Plugins; -using MediaBrowser.Model.Plugins; -using MediaBrowser.Model.Serialization; - namespace MediaBrowser.Providers.Plugins.Tmdb { +#nullable disable + + using System; + using System.Collections.Generic; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Common.Plugins; + using MediaBrowser.Model.Plugins; + using MediaBrowser.Model.Serialization; + /// /// Plugin class for the TMDb library. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbEpisodeImageProvider.cs b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbEpisodeImageProvider.cs index da31ddb6..8eedf288 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbEpisodeImageProvider.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbEpisodeImageProvider.cs @@ -2,21 +2,21 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Providers; - namespace MediaBrowser.Providers.Plugins.Tmdb.TV { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Linq; + using System.Net.Http; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Common.Net; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Providers; + /// /// TV episode image provider powered by TheMovieDb. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbEpisodeProvider.cs b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbEpisodeProvider.cs index f3a98556..7b656e97 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbEpisodeProvider.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbEpisodeProvider.cs @@ -2,26 +2,26 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Net.Http; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using Jellyfin.Data.Enums; -using Jellyfin.Extensions; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Providers; -using TMDbLib.Objects.TvShows; - namespace MediaBrowser.Providers.Plugins.Tmdb.TV { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Linq; + using System.Net.Http; + using System.Text; + using System.Threading; + using System.Threading.Tasks; + using Jellyfin.Data.Enums; + using Jellyfin.Extensions; + using MediaBrowser.Common.Net; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Providers; + using TMDbLib.Objects.TvShows; + /// /// TV episode provider powered by TheMovieDb. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeasonImageProvider.cs b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeasonImageProvider.cs index b7a8c506..86629697 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeasonImageProvider.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeasonImageProvider.cs @@ -2,22 +2,22 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Providers; - namespace MediaBrowser.Providers.Plugins.Tmdb.TV { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Linq; + using System.Net.Http; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Common.Net; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Providers; + /// /// TV season image provider powered by TheMovieDb. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeasonProvider.cs b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeasonProvider.cs index fb2d346b..d38b7af9 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeasonProvider.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeasonProvider.cs @@ -2,24 +2,24 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using Jellyfin.Data.Enums; -using Jellyfin.Extensions; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Providers; - namespace MediaBrowser.Providers.Plugins.Tmdb.TV { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Linq; + using System.Net.Http; + using System.Threading; + using System.Threading.Tasks; + using Jellyfin.Data.Enums; + using Jellyfin.Extensions; + using MediaBrowser.Common.Net; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Providers; + /// /// TV season provider powered by TheMovieDb. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesExternalId.cs b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesExternalId.cs index 1322374e..555e81ab 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesExternalId.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesExternalId.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Providers; - namespace MediaBrowser.Providers.Plugins.Tmdb.TV { + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Providers; + /// /// External id for a TMDb series. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesImageProvider.cs b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesImageProvider.cs index d162edc5..7f766204 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesImageProvider.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesImageProvider.cs @@ -2,22 +2,22 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Providers; - namespace MediaBrowser.Providers.Plugins.Tmdb.TV { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Linq; + using System.Net.Http; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Common.Net; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Providers; + /// /// TV series image provider powered by TheMovieDb. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesProvider.cs b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesProvider.cs index 99c1ee54..99f8503e 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesProvider.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesProvider.cs @@ -2,28 +2,28 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using Jellyfin.Data.Enums; -using Jellyfin.Extensions; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Providers; -using TMDbLib.Objects.Find; -using TMDbLib.Objects.Search; -using TMDbLib.Objects.TvShows; - namespace MediaBrowser.Providers.Plugins.Tmdb.TV { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Linq; + using System.Net.Http; + using System.Threading; + using System.Threading.Tasks; + using Jellyfin.Data.Enums; + using Jellyfin.Extensions; + using MediaBrowser.Common.Net; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Providers; + using TMDbLib.Objects.Find; + using TMDbLib.Objects.Search; + using TMDbLib.Objects.TvShows; + /// /// TV series provider powered by TheMovieDb. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/TmdbClientManager.cs b/MediaBrowser.Providers/Plugins/Tmdb/TmdbClientManager.cs index 91ada55f..6c06572a 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/TmdbClientManager.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/TmdbClientManager.cs @@ -2,27 +2,27 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Threading; -using System.Threading.Tasks; -using Jellyfin.Data.Enums; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Providers; -using Microsoft.Extensions.Caching.Memory; -using TMDbLib.Client; -using TMDbLib.Objects.Collections; -using TMDbLib.Objects.Find; -using TMDbLib.Objects.General; -using TMDbLib.Objects.Movies; -using TMDbLib.Objects.People; -using TMDbLib.Objects.Search; -using TMDbLib.Objects.TvShows; - namespace MediaBrowser.Providers.Plugins.Tmdb { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading; + using System.Threading.Tasks; + using Jellyfin.Data.Enums; + using MediaBrowser.Model.Dto; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Providers; + using Microsoft.Extensions.Caching.Memory; + using TMDbLib.Client; + using TMDbLib.Objects.Collections; + using TMDbLib.Objects.Find; + using TMDbLib.Objects.General; + using TMDbLib.Objects.Movies; + using TMDbLib.Objects.People; + using TMDbLib.Objects.Search; + using TMDbLib.Objects.TvShows; + /// /// Manager class for abstracting the TMDb API client library. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/TmdbExternalUrlProvider.cs b/MediaBrowser.Providers/Plugins/Tmdb/TmdbExternalUrlProvider.cs index b2fcce61..31b918f4 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/TmdbExternalUrlProvider.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/TmdbExternalUrlProvider.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Plugins.Tmdb; + using System; using System.Collections.Generic; using MediaBrowser.Controller.Entities; @@ -11,8 +13,6 @@ using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using TMDbLib.Objects.TvShows; -namespace MediaBrowser.Providers.Plugins.Tmdb; - /// /// External URLs for TMDb. /// diff --git a/MediaBrowser.Providers/Plugins/Tmdb/TmdbUtils.cs b/MediaBrowser.Providers/Plugins/Tmdb/TmdbUtils.cs index 02e8526e..fb09d376 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/TmdbUtils.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/TmdbUtils.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.RegularExpressions; -using Jellyfin.Data.Enums; -using MediaBrowser.Model.Entities; -using TMDbLib.Objects.General; - namespace MediaBrowser.Providers.Plugins.Tmdb { + using System; + using System.Collections.Generic; + using System.Diagnostics.CodeAnalysis; + using System.Text.RegularExpressions; + using Jellyfin.Data.Enums; + using MediaBrowser.Model.Entities; + using TMDbLib.Objects.General; + /// /// Utilities for the TMDb provider. /// diff --git a/MediaBrowser.Providers/Studios/StudioMetadataService.cs b/MediaBrowser.Providers/Studios/StudioMetadataService.cs index 04a6b8e3..dd35ff94 100644 --- a/MediaBrowser.Providers/Studios/StudioMetadataService.cs +++ b/MediaBrowser.Providers/Studios/StudioMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Studios; + using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; @@ -12,8 +14,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Studios; - /// /// Service to manage studio metadata. /// diff --git a/MediaBrowser.Providers/TV/EpisodeMetadataService.cs b/MediaBrowser.Providers/TV/EpisodeMetadataService.cs index 2b9e0ed4..10813f9c 100644 --- a/MediaBrowser.Providers/TV/EpisodeMetadataService.cs +++ b/MediaBrowser.Providers/TV/EpisodeMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.TV; + using System; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities.TV; @@ -14,8 +16,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.TV; - /// /// Service to manage episode metadata. /// diff --git a/MediaBrowser.Providers/TV/SeasonMetadataService.cs b/MediaBrowser.Providers/TV/SeasonMetadataService.cs index fd766941..0a5e9cd8 100644 --- a/MediaBrowser.Providers/TV/SeasonMetadataService.cs +++ b/MediaBrowser.Providers/TV/SeasonMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.TV; + using System; using System.Collections.Generic; using System.Linq; @@ -17,8 +19,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.TV; - /// /// Service to manage season metadata. /// diff --git a/MediaBrowser.Providers/TV/SeriesMetadataService.cs b/MediaBrowser.Providers/TV/SeriesMetadataService.cs index db16d6a1..4e29d9ee 100644 --- a/MediaBrowser.Providers/TV/SeriesMetadataService.cs +++ b/MediaBrowser.Providers/TV/SeriesMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.TV; + using System; using System.Collections.Generic; using System.Globalization; @@ -23,8 +25,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.TV; - /// /// Service to manage series metadata. /// diff --git a/MediaBrowser.Providers/TV/Zap2ItExternalUrlProvider.cs b/MediaBrowser.Providers/TV/Zap2ItExternalUrlProvider.cs index 1f772e0d..ded69aee 100644 --- a/MediaBrowser.Providers/TV/Zap2ItExternalUrlProvider.cs +++ b/MediaBrowser.Providers/TV/Zap2ItExternalUrlProvider.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.TV; + using System.Collections.Generic; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; -namespace MediaBrowser.Providers.TV; - /// /// External URLs for TMDb. /// diff --git a/MediaBrowser.Providers/Trickplay/TrickplayImagesTask.cs b/MediaBrowser.Providers/Trickplay/TrickplayImagesTask.cs index aa9521c7..e615153c 100644 --- a/MediaBrowser.Providers/Trickplay/TrickplayImagesTask.cs +++ b/MediaBrowser.Providers/Trickplay/TrickplayImagesTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Trickplay; + using System; using System.Collections.Generic; using System.Linq; @@ -15,8 +17,6 @@ using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Trickplay; - /// /// Class TrickplayImagesTask. /// diff --git a/MediaBrowser.Providers/Trickplay/TrickplayMoveImagesTask.cs b/MediaBrowser.Providers/Trickplay/TrickplayMoveImagesTask.cs index face78bf..ac1d6e07 100644 --- a/MediaBrowser.Providers/Trickplay/TrickplayMoveImagesTask.cs +++ b/MediaBrowser.Providers/Trickplay/TrickplayMoveImagesTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Trickplay; + using System; using System.Collections.Generic; using System.Linq; @@ -15,8 +17,6 @@ using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Trickplay; - /// /// Class TrickplayMoveImagesTask. /// diff --git a/MediaBrowser.Providers/Trickplay/TrickplayProvider.cs b/MediaBrowser.Providers/Trickplay/TrickplayProvider.cs index 3ea00583..763a4c13 100644 --- a/MediaBrowser.Providers/Trickplay/TrickplayProvider.cs +++ b/MediaBrowser.Providers/Trickplay/TrickplayProvider.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Trickplay; + using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Configuration; @@ -13,8 +15,6 @@ using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Trickplay; using MediaBrowser.Model.Configuration; -namespace MediaBrowser.Providers.Trickplay; - /// /// Class TrickplayProvider. Provides images and metadata for trickplay /// scrubbing previews. diff --git a/MediaBrowser.Providers/Videos/VideoMetadataService.cs b/MediaBrowser.Providers/Videos/VideoMetadataService.cs index aa28e619..66fa2fb0 100644 --- a/MediaBrowser.Providers/Videos/VideoMetadataService.cs +++ b/MediaBrowser.Providers/Videos/VideoMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Videos; + using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; @@ -12,8 +14,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Videos; - /// /// Service to manage video metadata. /// diff --git a/MediaBrowser.Providers/Years/YearMetadataService.cs b/MediaBrowser.Providers/Years/YearMetadataService.cs index 5e87c9b8..ed2ac43a 100644 --- a/MediaBrowser.Providers/Years/YearMetadataService.cs +++ b/MediaBrowser.Providers/Years/YearMetadataService.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace MediaBrowser.Providers.Years; + using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; @@ -12,8 +14,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Years; - /// /// Service to manage year metadata. /// diff --git a/MediaBrowser.Providers/obj/Debug/net10.0/MediaBrowser.Providers.csproj.AssemblyReference.cache b/MediaBrowser.Providers/obj/Debug/net10.0/MediaBrowser.Providers.csproj.AssemblyReference.cache index 2c0a98554edd3515a6152b85e103a02261d25a19..199e74936fe4342a0ee9cda7731fa7dfd4e19cd8 100644 GIT binary patch delta 3394 zcmb_eO>7%Q6!thtn>ewXI(7qX94B$o#?+nI*g~Nq5~-7@ElFvUs1&fOY@CU^WxcbR zU8glgq!r>)q)1^dRiq*)Qg5JwPeo9WxFFOMh#MfzTtMPdaVayK_1bIi+KI$m{4?+W zeeZj7?|ty?ebBNG3~jZn?Tfwnfq%fp#p#oo z^8{Z-SxwC-Idx4saTQ5YaaEKvb7(~rP7!=fMFh^_6(nVr+22!Wxsc1qNK3?F+(rnl zND|;KgvYm2Un{@20|5N>wt$C;fG(Qw2I$|DUT}Hqo5*Ut*cfv;rn?+7T#nTXahE$; zfmiBpV*?ivQAI3Iu!s}S!#D-wv1fsw`v<_cP*gRPhw}wl6Y~go=mqy7`Tzv!4R;{u zH*V8dl30zH5!EU&I(XKo7n~9_VOdZSJd;->lt;2A7z)f&7c<*KJKWvF?1z5zF0cT+ z76W=&OyTEhg?o*7F6AXSkAxLOUL&H0h&8C;K{M>Uf@Kzo-aa@f%h(L6I?tYNLtznJ z*Wg(d%cj9-C^{!*30Co{2B)uUNam$f;VjPOL^(%43Lm1E+y{8YVxK)Mjz@p{e2GV0 zPA_O!K8G}To``u-6W38q5zR7lp#_|M3u!eHG~wYDZtqdTXa+?toM8e)WmbZVOQ!X~LAJZ87jh(_kHN(apQp7#CssLAZzZ zh7MBT?n~HpVb?sEveOQkpfNWIWN6722x0te8P&kyGRWQd)a2+ z&$&1F!>3QbfAVDHaWzm!>8)@-?TUCj=5)8ve?cT_7hrkSab&Q_^7*PIpfhe|Nn9ap z^)T|chGRzkKQAY9J2)<3pW}c8o+zRrXsGjG8Rf_R`r@6auo{9&i8E?(e0SM@rir zcl1|otqQxN+Z~&9t?Oqe)$hF6PPKIRKsM;0^I?3mG;wssPK`2;{Q8&Cbc1W!mkgI~ l9Uo{SLgOb|OFkHL68kd#lhYNCp)Yx@!y$vxv56aP{{e^5F5GfAe`1xv80dPaN6dgsFC&Qk zmP+}IAfH3LV4RhjlT(?NnWtBrlC5uKU}UOiXrO0g2-9f+(g{-%oRSR+gw4B@lSRSS zl>@Canmo-yNLb%c&j=U{$l4~qv5)~fFy6Xv^CL?)h_AaRe=s(l+-xO-Rm(eTHEM&6W!ea+4p}a87PBQJD<1Y4T5dc_5!FU)G0+|rzq%!0(C672Ttfb8B}?|2E-J`wSf)CwG0 +namespace MediaBrowser.XbmcMetadata; + using System; using System.Threading; using System.Threading.Tasks; @@ -14,8 +16,6 @@ using MediaBrowser.XbmcMetadata.Savers; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -namespace MediaBrowser.XbmcMetadata; - /// /// responsible for updating NFO files' user data. /// diff --git a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs index 29580e57..6eba5d2d 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs @@ -2,31 +2,31 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading; -using System.Xml; -using Jellyfin.Data.Enums; -using Jellyfin.Extensions; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Providers; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Extensions; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.XbmcMetadata.Configuration; -using MediaBrowser.XbmcMetadata.Savers; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Parsers { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.IO; + using System.Linq; + using System.Text; + using System.Threading; + using System.Xml; + using Jellyfin.Data.Enums; + using Jellyfin.Extensions; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Common.Providers; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Extensions; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.XbmcMetadata.Configuration; + using MediaBrowser.XbmcMetadata.Savers; + using Microsoft.Extensions.Logging; + /// /// The BaseNfoParser class. /// diff --git a/MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs index 294599a5..13c1f761 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs @@ -2,20 +2,20 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.IO; -using System.Text; -using System.Threading; -using System.Xml; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Extensions; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Parsers { + using System; + using System.IO; + using System.Text; + using System.Threading; + using System.Xml; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Extensions; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using Microsoft.Extensions.Logging; + /// /// Nfo parser for episodes. /// diff --git a/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs index d1b1909c..2b238ff9 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs @@ -2,21 +2,21 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.IO; -using System.Linq; -using System.Xml; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Extensions; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Parsers { + using System; + using System.IO; + using System.Linq; + using System.Xml; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Extensions; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using Microsoft.Extensions.Logging; + /// /// Nfo parser for movies. /// diff --git a/MediaBrowser.XbmcMetadata/Parsers/SeasonNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/SeasonNfoParser.cs index 4e49e6e3..b4f25887 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/SeasonNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/SeasonNfoParser.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Xml; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Extensions; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Parsers { + using System.Xml; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Extensions; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using Microsoft.Extensions.Logging; + /// /// Nfo parser for seasons. /// diff --git a/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs index 372b0590..0fb8342c 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs @@ -2,20 +2,20 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.Xml; -using Emby.Naming.TV; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Extensions; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Parsers { + using System; + using System.Globalization; + using System.Xml; + using Emby.Naming.TV; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Extensions; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using Microsoft.Extensions.Logging; + /// /// Nfo parser for series. /// diff --git a/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoSeasonParser.cs b/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoSeasonParser.cs index 32bd522c..020732b0 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoSeasonParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoSeasonParser.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Globalization; -using System.Xml; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Parsers { + using System.Globalization; + using System.Xml; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using Microsoft.Extensions.Logging; + /// /// NFO parser for seasons based on series NFO. /// diff --git a/MediaBrowser.XbmcMetadata/Providers/AlbumNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/AlbumNfoProvider.cs index 23ec1bdd..9c173253 100644 --- a/MediaBrowser.XbmcMetadata/Providers/AlbumNfoProvider.cs +++ b/MediaBrowser.XbmcMetadata/Providers/AlbumNfoProvider.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; -using System.Threading; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.IO; -using MediaBrowser.XbmcMetadata.Parsers; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Providers { + using System.IO; + using System.Threading; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.IO; + using MediaBrowser.XbmcMetadata.Parsers; + using Microsoft.Extensions.Logging; + /// /// Nfo provider for albums. /// diff --git a/MediaBrowser.XbmcMetadata/Providers/ArtistNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/ArtistNfoProvider.cs index e5d94dad..6e3badc6 100644 --- a/MediaBrowser.XbmcMetadata/Providers/ArtistNfoProvider.cs +++ b/MediaBrowser.XbmcMetadata/Providers/ArtistNfoProvider.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; -using System.Threading; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.IO; -using MediaBrowser.XbmcMetadata.Parsers; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Providers { + using System.IO; + using System.Threading; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.IO; + using MediaBrowser.XbmcMetadata.Parsers; + using Microsoft.Extensions.Logging; + /// /// Nfo provider for artists. /// diff --git a/MediaBrowser.XbmcMetadata/Providers/EpisodeNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/EpisodeNfoProvider.cs index 1bee6c96..734233ea 100644 --- a/MediaBrowser.XbmcMetadata/Providers/EpisodeNfoProvider.cs +++ b/MediaBrowser.XbmcMetadata/Providers/EpisodeNfoProvider.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; -using System.Threading; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.IO; -using MediaBrowser.XbmcMetadata.Parsers; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Providers { + using System.IO; + using System.Threading; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.IO; + using MediaBrowser.XbmcMetadata.Parsers; + using Microsoft.Extensions.Logging; + /// /// Nfo provider for episodes. /// diff --git a/MediaBrowser.XbmcMetadata/Providers/MovieNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/MovieNfoProvider.cs index e8b6fa8b..f06594dd 100644 --- a/MediaBrowser.XbmcMetadata/Providers/MovieNfoProvider.cs +++ b/MediaBrowser.XbmcMetadata/Providers/MovieNfoProvider.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Providers { + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// Nfo provider for movies. /// diff --git a/MediaBrowser.XbmcMetadata/Providers/MusicVideoNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/MusicVideoNfoProvider.cs index 756d10d4..16728be1 100644 --- a/MediaBrowser.XbmcMetadata/Providers/MusicVideoNfoProvider.cs +++ b/MediaBrowser.XbmcMetadata/Providers/MusicVideoNfoProvider.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Providers { + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// Nfo provider for music videos. /// diff --git a/MediaBrowser.XbmcMetadata/Providers/SeasonNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/SeasonNfoProvider.cs index a5905c2b..da756edc 100644 --- a/MediaBrowser.XbmcMetadata/Providers/SeasonNfoProvider.cs +++ b/MediaBrowser.XbmcMetadata/Providers/SeasonNfoProvider.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; -using System.Threading; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.IO; -using MediaBrowser.XbmcMetadata.Parsers; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Providers { + using System.IO; + using System.Threading; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.IO; + using MediaBrowser.XbmcMetadata.Parsers; + using Microsoft.Extensions.Logging; + /// /// Nfo provider for seasons. /// diff --git a/MediaBrowser.XbmcMetadata/Providers/SeriesNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/SeriesNfoProvider.cs index 415b6944..f0b61060 100644 --- a/MediaBrowser.XbmcMetadata/Providers/SeriesNfoProvider.cs +++ b/MediaBrowser.XbmcMetadata/Providers/SeriesNfoProvider.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; -using System.Threading; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.IO; -using MediaBrowser.XbmcMetadata.Parsers; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Providers { + using System.IO; + using System.Threading; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.IO; + using MediaBrowser.XbmcMetadata.Parsers; + using Microsoft.Extensions.Logging; + /// /// Nfo provider for series. /// diff --git a/MediaBrowser.XbmcMetadata/Providers/SeriesNfoSeasonProvider.cs b/MediaBrowser.XbmcMetadata/Providers/SeriesNfoSeasonProvider.cs index 2ddb4fd4..b30dec15 100644 --- a/MediaBrowser.XbmcMetadata/Providers/SeriesNfoSeasonProvider.cs +++ b/MediaBrowser.XbmcMetadata/Providers/SeriesNfoSeasonProvider.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; -using System.Threading; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.IO; -using MediaBrowser.XbmcMetadata.Parsers; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Providers { + using System.IO; + using System.Threading; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.IO; + using MediaBrowser.XbmcMetadata.Parsers; + using Microsoft.Extensions.Logging; + /// /// NFO provider for seasons based on series NFO. /// diff --git a/MediaBrowser.XbmcMetadata/Providers/VideoNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/VideoNfoProvider.cs index bb814131..5a76f964 100644 --- a/MediaBrowser.XbmcMetadata/Providers/VideoNfoProvider.cs +++ b/MediaBrowser.XbmcMetadata/Providers/VideoNfoProvider.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Providers { + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// Nfo provider for videos. /// diff --git a/MediaBrowser.XbmcMetadata/Savers/AlbumNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/AlbumNfoSaver.cs index ee0975ca..24cf24f2 100644 --- a/MediaBrowser.XbmcMetadata/Savers/AlbumNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/AlbumNfoSaver.cs @@ -2,22 +2,22 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Xml; -using Jellyfin.Extensions; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Savers { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.IO; + using System.Linq; + using System.Xml; + using Jellyfin.Extensions; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.Library; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// Nfo saver for albums. /// diff --git a/MediaBrowser.XbmcMetadata/Savers/ArtistNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/ArtistNfoSaver.cs index c7534f76..76c0d9d8 100644 --- a/MediaBrowser.XbmcMetadata/Savers/ArtistNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/ArtistNfoSaver.cs @@ -2,21 +2,21 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Xml; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.IO; -using MediaBrowser.XbmcMetadata.Configuration; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Savers { + using System.Collections.Generic; + using System.Globalization; + using System.IO; + using System.Linq; + using System.Xml; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.Library; + using MediaBrowser.Model.IO; + using MediaBrowser.XbmcMetadata.Configuration; + using Microsoft.Extensions.Logging; + /// /// Nfo saver for artist. /// diff --git a/MediaBrowser.XbmcMetadata/Savers/EpisodeNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/EpisodeNfoSaver.cs index cfe17a0b..93a598a0 100644 --- a/MediaBrowser.XbmcMetadata/Savers/EpisodeNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/EpisodeNfoSaver.cs @@ -2,20 +2,20 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Xml; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.IO; -using MediaBrowser.XbmcMetadata.Configuration; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Savers { + using System.Collections.Generic; + using System.Globalization; + using System.IO; + using System.Xml; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Library; + using MediaBrowser.Model.IO; + using MediaBrowser.XbmcMetadata.Configuration; + using Microsoft.Extensions.Logging; + /// /// Nfo saver for episodes. /// diff --git a/MediaBrowser.XbmcMetadata/Savers/MovieNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/MovieNfoSaver.cs index 55d71d2a..1af1ce54 100644 --- a/MediaBrowser.XbmcMetadata/Savers/MovieNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/MovieNfoSaver.cs @@ -2,23 +2,23 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Xml; -using Jellyfin.Extensions; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Savers { + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Xml; + using Jellyfin.Extensions; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// Nfo saver for movies. /// diff --git a/MediaBrowser.XbmcMetadata/Savers/SeasonNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/SeasonNfoSaver.cs index 08ff4d61..bce5f3f3 100644 --- a/MediaBrowser.XbmcMetadata/Savers/SeasonNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/SeasonNfoSaver.cs @@ -2,19 +2,19 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Xml; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Savers { + using System.Collections.Generic; + using System.Globalization; + using System.IO; + using System.Xml; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Library; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// Nfo saver for seasons. /// diff --git a/MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs index 5c8649a4..f6d0d9c4 100644 --- a/MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs @@ -2,20 +2,20 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Xml; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.IO; -using Microsoft.Extensions.Logging; - namespace MediaBrowser.XbmcMetadata.Savers { + using System.Collections.Generic; + using System.Globalization; + using System.IO; + using System.Xml; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Library; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.IO; + using Microsoft.Extensions.Logging; + /// /// Nfo saver for series. /// diff --git a/MediaBrowser.XbmcMetadata/obj/Debug/net10.0/MediaBrowser.XbmcMetadata.csproj.AssemblyReference.cache b/MediaBrowser.XbmcMetadata/obj/Debug/net10.0/MediaBrowser.XbmcMetadata.csproj.AssemblyReference.cache index d6f262c93ebdc7ae2c7a246189751a03039b5828..8c622db6a74af30c097229fe3450aacf4cd3290d 100644 GIT binary patch delta 3210 zcmb_e&u<$=6!vVClBP}M`Uj1gHcgr|#8EnSNQ3|hiPT9&OH$e-lmb@OwLNvW?Cxx4 z$DxLb95^85fMiA-03q>19E)1@)QVO}Tu{}20ea`cwGxLivl)-Q_U@Wg?8)-HnfJ|m z@B6;Fck%IOpl1&ls`qT{nR)-=w-21#AN{0lU08axaE{<>s6^d@Q*k%U6W5Sw)~*jBM79`svvYN3^a3KTf$i5g*x46Zwr`T% z0DFfLA|8OjwVF$j1y`#!H7o@B*?H}Gb_=B0$66|#kgIuYn!G;z6xSayHFieU3NGqY zFX}FWr!B`s7P6@>H}FjR`LRj1SBp;woZ{O748VZz0Iwt}czP$a8GKOUxoDYi73pO} z-XR7>#1Cp>Ou@DsY;z=D>)?WIV+E@9p2@h}u#T=%c*e!HIxsVnSusikyZ8!)OV=r~ zMJ-*pj4KtxuE2$&ONriInwgt-YcFU1`1x|{P17>TSw!JEVps+>Hc?wWRmDZn8ZLc+ zXj=rE)kYLLuS>^|H4!ej4&Rx_1i?2bb>Jza(<*7r0)wC>RTG+5^tWQ9y%qc9ZI%st z!;k04A-S|@=oK5g)F`?9!nlOow!6d!WaJ96FsZ3yGUKCiA&-3>3@h8%h>VwG3{Ts9 zDzLML$fm*bs*^>*5?fwZ`Zwoc4$kG~W?undA3VFXF3PsxINrrY$W!@&7+8)F2~|76 zfB=2)tqZbFc-nC5>vw;6u%it@91yCo&Q;-U-}V4O@U6FK!71NDm<;stdv=q7U6cGJ zQ9bcBNIo9i&h?su^4Q))q=UoHM7v`_vmH99iFps=uI6AH)cdBk8d6vAl{iTJx{X87 z9_1b)}9lNn*ROAr@uXUa{N&%Gp5+D@e#J2>SvFW-W4-J$QnK@29HCstQLpzJfP`d zR|)q;?o56h3hw{xoXW34UkHPt{7Vfr9MP-c`6?ncy=b<*LBKSx&@{^&@TxNxRGq`J zZ)=FR%AhrvCpCxS3elabO;hote{T1bFL1_RYT9BHqnlBR!|6}|`c85<++>B;mpNx! z(nN96pGLB9S+TIW97a3u-5E{0l(JOsO|*(CRZ}OSbKZRp*gyQ?DVgxX-?wjk{?=e- wxRnVJZ?MpJ!sPCa<>-H(mQ=*-vafnaS+ACY;tJy1u{!TpgrnRU=sA)37h=fS`2YX_ delta 41 xcmccL&bTXrgN;#yfq{WBeX;_x^kj2B-iZb-Y_qm5+;TU6W7Sfo%}1o9H39Wv4P5{L diff --git a/build_warnings.txt b/build_warnings.txt new file mode 100644 index 0000000000000000000000000000000000000000..cfd0be54ee5b1656f8c14823e1c214b9f94fce69 GIT binary patch literal 1608 zcmcJPO;3YB5QgV$;(y?%2M9KvdN64%2ThuIF!92L7D{R=MZlBS-TQT#4165VcvFqZ~We)rJg_0RE(b7Vi9vXVi%dDM4~8Nx#1hgP(pcV za0rQ>qVd)58n``Jf849`v1@wieoA{g+{zuO{0mykb~IGPd{rZZDyrKBm82LVHr5zR)E? zH-=q2)%oemAJbKqyyzGfCF?mOG0w`{+ja--z&`VdOcdO-cFI&Pu({mP3DD5~Uex3o c>k%vM8`?ov_{lAo8rf$Ix8G~x4%n&94gg)!7_c*oaGyPVnhYzsmSpEPLTFo^GnFK%!_5q<{zSam^4gG5|b=b4O7fg zQY@29jZ>3Njg2gm5>w30ERD>Q&5V%W{h z?!S0duhE?swWX8aNERzV1=qs_L8>(~9GVMt_1Vz6XL zWiVt&VK4*Y6d*5&!IZ%mD3%PSjld#_KpAtO3QGnfAe{_k83WZN0Ywvms!SOS7|b^> Imycuu0BBH89smFU delta 235 zcmZp0X>gg)!LqmI#GH*iF`@#ykH)7yiumO{lgXfT{*u{In}3MzVbVx3O-o5iO|~>K zPBAl1Ha9jgPcgGJx3EYvNi{M~GfGM{OH58NO-Y-4M`8_2>+Xk3C-+DO2!zi(nMV_7fMzUA|Dj1Us6$GkQZD*3O{`B%EOG{I4!RC6Yn=Jk*45kce3@Hpr z45JoD_z% J&CBH@nE>jBPAUKZ diff --git a/src/Jellyfin.CodeAnalysis/bin/Debug/netstandard2.0/Jellyfin.CodeAnalysis.pdb b/src/Jellyfin.CodeAnalysis/bin/Debug/netstandard2.0/Jellyfin.CodeAnalysis.pdb index 2c5d95b7f05f7db882318ee0ce9beb4a2e418001..93049873b0aacca0f8125c40e1e357e6c7ccee2e 100644 GIT binary patch delta 69 zcmV-L0J{IQOSDUnd=xQH0k8DP$4{fGjWXQmeRa`CpSQ7)m;)f028ulp(Yu=J4{+<} bj{0T0q+lwuvzMp1B}y|Lb1%lTNCa#l&Tt|L delta 69 zcmV-L0J{IQOSDUnd=yui%ucj94@|9)*b=XvS // This code was generated by a tool. -// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -14,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Jellyfin.CodeAnalysis")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+d5fdbec943d63c7347d69788f4e23f2ba6acd5df")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+44ab9e1d6dd9b53ec5329bad76927c63bbda5507")] [assembly: System.Reflection.AssemblyProductAttribute("Jellyfin.CodeAnalysis")] [assembly: System.Reflection.AssemblyTitleAttribute("Jellyfin.CodeAnalysis")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.AssemblyInfoInputs.cache b/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.AssemblyInfoInputs.cache index 41db9c84..190e5080 100644 --- a/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.AssemblyInfoInputs.cache +++ b/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.AssemblyInfoInputs.cache @@ -1 +1 @@ -01be5b7a7d11c265e3c9319eedb944305ba9c03e308798d4520f783c5e3126c5 +60f37a3971178c12f2b146129f13c97be898798f5096dc88d8c9ad4a8265fea2 diff --git a/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.csproj.AssemblyReference.cache b/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.csproj.AssemblyReference.cache index 1fd0093cd50c1774e41b9fd1e906e0d9df4ad3e1..4c5b9dad125aa15daf88e64fe764ad598803c2cc 100644 GIT binary patch delta 2230 zcmZ8ie@xV680XCszsIjTj~`;l0pT$OmD5ha9}LLh)X>o~Ygz^p>8M86n$u+_4d-&@ zV9)e4ZQMzl=B}DO+Sm9dGDTKV3~&K6b+)uDf52r<9pmhMzu)(J?~C`x-F=?-`Sm`} z=Xu_qVN2)mgr*>g@-;gNVmC=9%?BrwDDajbW>_2&+8CWB5RBN8@QPyLk_NAaS+Qvx zRd3SZfh`Ww<6`ho{A6K;BQ~c%5In75rDK+m;15ZQ1%iqr3JfGqg;9)y_@&SK=FcWs zaMigG?1?tWPhBfA?U^d&4gN8u)j3T#!WW#G9QCczus!ohjzX6;OwZ1jG@D#A1%gsf z68Li_VM?xzOX=0HKCe{h;G>yt3B6g6ClD=?0?Ryh49&3%DVBPk;)umRIzLgILFFz5 z!$so@tzg}vBuR&r?MyM(L2pSvKMO3$#@l5s17ToEuCT%T<&y-0TlET-ER$M+{uOg0 z=NdX!nqK-=4RSfl_0DtY95r-l`21?qXP`#IeQV72drLGNduc+%AEJAmSwBiEc1Jkz zvK?N77vUFe9W+%zj&*jHwGKL9g=*@yVC_?ZN$Gen-WH$)mtBL$g%g#Vz5~l zd0&c)Gj?QfZ)J^Lc<93^2Eww&3nB_u?vf^fa^H&GABmE(vN@n-cQh{iI9phOJE%bJ zCz;T{CnO3;2LQuO30#d8No{t(f{r+N8}3Ea(7#urh)&j_15+?>f06Ky-+ekyAew^} zpZ-ix1zCJ-Ybg{uSai5tAU(gfmK0du8pGxo!=GElDOMaYM}ZN8_2>8(l6Q0mi-k7Z z2iW$NoL%wp<_k_ho{V5us&964q=bM(=!Cpx6je`R9w&@ z>F8Y8cUIyi4tDaPz=p0~$)3{OH#Cpfu=Phl7LAGQu((^nw4Wu8=tFV7*N*S>#Bv`j zzw^B*l1Ek_=Y?oPVl3>nzsie`P1dymJDeLFi*#9^9dc0~K zh=Vt-nhTP3rPQOq@;@FJ4%v>ma?RYP44wQlo|{qx+iogQcjJ0Q8UFeEUjeq=l=5OE zJ#pJy)6CV*VQDs@Jrs^uV%1%9^DxEP_sk5uB`#kBF56l zNgYy%cnx&f0pCR{NmMt+67ed!RC<9+k@9ofT05zbWVU4TCG@sf)SN`ZcQbvWT`HAd zm(*A()XG${Qj#%KUqTwWV-~=r?w>{)4Gon(`~6&*5>EX(i!3srajoL%gzq&2*X0nI zNtAG^mP;O^i<+KKo{40D>Zw^o9%J?@=6;{x+g?Dd>MQQ?0S?a{j|V(tj+BsZO(EIx EKavnI82|tP literal 79822 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 Imycuu0BBH89smFU delta 235 zcmZp0X>gg)!LqmI#GH*iF`@#ykH)7yiumO{lgXfT{*u{In}3MzVbVx3O-o5iO|~>K zPBAl1Ha9jgPcgGJx3EYvNi{M~GfGM{OH58NO-Y-4M`8_2>+Xk3C-+DO2!zi(nMV_7fMzUA|Dj1Us6$GkQZD*3O{`B%EOG{I4!RC6Yn=Jk*45kce3@Hpr z45JoD_z% J&CBH@nE>jBPAUKZ diff --git a/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.pdb b/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.pdb index 2c5d95b7f05f7db882318ee0ce9beb4a2e418001..93049873b0aacca0f8125c40e1e357e6c7ccee2e 100644 GIT binary patch delta 69 zcmV-L0J{IQOSDUnd=xQH0k8DP$4{fGjWXQmeRa`CpSQ7)m;)f028ulp(Yu=J4{+<} bj{0T0q+lwuvzMp1B}y|Lb1%lTNCa#l&Tt|L delta 69 zcmV-L0J{IQOSDUnd=yui%ucj94@|9)*b=XvSgg)!7_c*oaGyPVnhYzsmSpEPLTFo^GnFK%!_5q<{zSam^4gG5|b=b4O7fg zQY@29jZ>3Njg2gm5>w30ERD>Q&5V%W{h z?!S0duhE?swWX8aNERzV1=qs_L8>(~9GVMt_1Vz6XL zWiVt&VK4*Y6d*5&!IZ%mD3%PSjld#_KpAtO3QGnfAe{_k83WZN0Ywvms!SOS7|b^> Imycuu0BBH89smFU delta 235 zcmZp0X>gg)!LqmI#GH*iF`@#ykH)7yiumO{lgXfT{*u{In}3MzVbVx3O-o5iO|~>K zPBAl1Ha9jgPcgGJx3EYvNi{M~GfGM{OH58NO-Y-4M`8_2>+Xk3C-+DO2!zi(nMV_7fMzUA|Dj1Us6$GkQZD*3O{`B%EOG{I4!RC6Yn=Jk*45kce3@Hpr z45JoD_z% J&CBH@nE>jBPAUKZ diff --git a/src/Jellyfin.Database/Jellyfin.Database.Implementations/bin/Debug/net10.0/Jellyfin.CodeAnalysis.pdb b/src/Jellyfin.Database/Jellyfin.Database.Implementations/bin/Debug/net10.0/Jellyfin.CodeAnalysis.pdb index 2c5d95b7f05f7db882318ee0ce9beb4a2e418001..93049873b0aacca0f8125c40e1e357e6c7ccee2e 100644 GIT binary patch delta 69 zcmV-L0J{IQOSDUnd=xQH0k8DP$4{fGjWXQmeRa`CpSQ7)m;)f028ulp(Yu=J4{+<} bj{0T0q+lwuvzMp1B}y|Lb1%lTNCa#l&Tt|L delta 69 zcmV-L0J{IQOSDUnd=yui%ucj94@|9)*b=XvS$a9C}_8;GvD#BRG zH&vdSUgFCfARwOR++X|G&Tp|nk5>6-=7i~2e3_>yKt=78p`sx5%W_wSS^6!TaWX0H L@b)f0<}!8wfCDlm delta 117 zcmZoz!`rZicR~lt#yv)#8hcuM7`OH?#e5UEuTg(%t;=Gk{ymF24_^~JwEf37riw5Y zCq0FY(@T7r0|X+hQ>IQn(d#->NxQ#xJFDpQE56Lr6riG8VWJ@QM{Y$uT{$oC;v3N| LtlPW%n9JA!XTda@ diff --git a/src/Jellyfin.Database/Jellyfin.Database.Implementations/bin/Debug/net10.0/Jellyfin.Database.Implementations.pdb b/src/Jellyfin.Database/Jellyfin.Database.Implementations/bin/Debug/net10.0/Jellyfin.Database.Implementations.pdb index be223314d7ea34112d78e718dbcb3ab668b63d3c..4d92ee9fe713dbafdafdddcf49be641675b9a2d6 100644 GIT binary patch delta 63 zcmV-F0Kos~i3I401dx0b7iL3`ef>U8qcDsrck=^acd~iTv5=*l7?-k~rvQKe0G=cq V5Bp#nNv!%3J$6b2w6jf}n`eLE8-xG= delta 63 zcmV-F0Kos~i3I401dx0bSUY5ulgN!lnIbEXeYXV_LM|Y&v5=*l7`=qZoB)6T0K3Is VW#U-+OPK;Nb)Tf0TC+`^n`d>m9AN+e diff --git a/src/Jellyfin.Database/Jellyfin.Database.Implementations/obj/Debug/net10.0/Jellyfin.Database.Implementations.csproj.AssemblyReference.cache b/src/Jellyfin.Database/Jellyfin.Database.Implementations/obj/Debug/net10.0/Jellyfin.Database.Implementations.csproj.AssemblyReference.cache index 4fbcd017989bc249562d101a7e99a325b7f9d7ec..6555b71c947dc627d82bc6903c7c1638dc9fdce8 100644 GIT binary patch delta 677 zcmdmAv^9D{3G1&<@(f2NRvJ!DU}E88tY=_gU}<1rUf zlP~aY-ki%8f>Tb0Ga8rNHWCVn?yHy~`^RM5nR;(M5n2wA_;jGL^GF)B~ z1xAKI$gzw9v++ba&f;^O1adMBBcaG32!}u<40&!*BZo0HaXcz8olI+FA%=w-Ke?{X zRobXa#zCx^9RzxB^)x{YhrmT$*3KXrsirG2i8j1F2-a_@z1A7(vQc_Ul|lJSQT{?j zPpm7|F_N`ijz!ZF!^ag)6yiKFU`I_5ZF;*4;TCN3B=CuOu%fn~9B#wjUmPxPpCDNe z%v)WKu2PlUNidSY(=|Ht5!-C)*q6nGTs~8&{v9bpQUJ4}FoKL* zR0h1rvYfyYJC$nj=(*Kh*AG(OGCK93xkRT@EkK_TC~t38=gwdF|2f61HYH_Z&JDW@ z`CA=@LF~F-s8en2lwd6My;BuBD{&c4;qKrSn6&I^W4PH~TRep#Za-<2T{b%q^x5rh zgkcZ~fui*t1w3wDQdKW~o%CuSns4Q|bT5%Pq64_7Z`6T~QIc@qyzr%yZb^w!h7^YK z`qWMD(W!+_Vg|}f*G$NwpzVWrqxh!Y>JE{pM`eX^XL7v4W#f`UPDG<%kF!v_8@*#B zuFTpgc*>WOMtn9beMKX_Dzwsf5HoiExY>rwiuiK|4uc^usPF1ScvGL$E*}@L2Q>t? z5as{Q7@euI9FPztrWn&cUVdYv_?|AR4S_XEG;;H1Iax`9oWv$a9C}_8;GvD#BRG zH&vdSUgFCfARwOR++X|G&Tp|nk5>6-=7i~2e3_>yKt=78p`sx5%W_wSS^6!TaWX0H L@b)f0<}!8wfCDlm delta 117 zcmZoz!`rZicR~lt#yv)#8hcuM7`OH?#e5UEuTg(%t;=Gk{ymF24_^~JwEf37riw5Y zCq0FY(@T7r0|X+hQ>IQn(d#->NxQ#xJFDpQE56Lr6riG8VWJ@QM{Y$uT{$oC;v3N| LtlPW%n9JA!XTda@ diff --git a/src/Jellyfin.Database/Jellyfin.Database.Implementations/obj/Debug/net10.0/Jellyfin.Database.Implementations.pdb b/src/Jellyfin.Database/Jellyfin.Database.Implementations/obj/Debug/net10.0/Jellyfin.Database.Implementations.pdb index be223314d7ea34112d78e718dbcb3ab668b63d3c..4d92ee9fe713dbafdafdddcf49be641675b9a2d6 100644 GIT binary patch delta 63 zcmV-F0Kos~i3I401dx0b7iL3`ef>U8qcDsrck=^acd~iTv5=*l7?-k~rvQKe0G=cq V5Bp#nNv!%3J$6b2w6jf}n`eLE8-xG= delta 63 zcmV-F0Kos~i3I401dx0bSUY5ulgN!lnIbEXeYXV_LM|Y&v5=*l7`=qZoB)6T0K3Is VW#U-+OPK;Nb)Tf0TC+`^n`d>m9AN+e diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/DoNotUseReturningClauseConvention.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/DoNotUseReturningClauseConvention.cs index ebdf7ec5..e1be50e4 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/DoNotUseReturningClauseConvention.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/DoNotUseReturningClauseConvention.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Database.Providers.Sqlite; + using System; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using Microsoft.EntityFrameworkCore.Metadata.Conventions; -namespace Jellyfin.Database.Providers.Sqlite; - internal class DoNotUseReturningClauseConvention : IModelFinalizingConvention { /// diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20230526173516_RemoveEasyPassword.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20230526173516_RemoveEasyPassword.cs index d38e1213..0153640f 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20230526173516_RemoveEasyPassword.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20230526173516_RemoveEasyPassword.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class RemoveEasyPassword : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20230626233818_AddTrickplayInfos.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20230626233818_AddTrickplayInfos.cs index f259f72c..f0d5a738 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20230626233818_AddTrickplayInfos.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20230626233818_AddTrickplayInfos.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using System; + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class AddTrickplayInfos : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20230923170422_UserCastReceiver.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20230923170422_UserCastReceiver.cs index 88a787ea..c5a8169f 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20230923170422_UserCastReceiver.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20230923170422_UserCastReceiver.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class UserCastReceiver : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20240729140605_AddMediaSegments.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20240729140605_AddMediaSegments.cs index 353dbb11..13f8dc60 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20240729140605_AddMediaSegments.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20240729140605_AddMediaSegments.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using System; + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class AddMediaSegments : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20240928082930_MarkSegmentProviderIdNonNullable.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20240928082930_MarkSegmentProviderIdNonNullable.cs index 65ec8acd..6b75fed0 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20240928082930_MarkSegmentProviderIdNonNullable.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20240928082930_MarkSegmentProviderIdNonNullable.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class MarkSegmentProviderIdNonNullable : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241020103111_LibraryDbMigration.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241020103111_LibraryDbMigration.cs index 7afe4190..c1149d5f 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241020103111_LibraryDbMigration.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241020103111_LibraryDbMigration.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using System; + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class LibraryDbMigration : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241111131257_AddedCustomDataKey.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241111131257_AddedCustomDataKey.cs index cbdebbf2..b2b6e701 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241111131257_AddedCustomDataKey.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241111131257_AddedCustomDataKey.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class AddedCustomDataKey : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241111135439_AddedCustomDataKeyKey.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241111135439_AddedCustomDataKeyKey.cs index 6db8bf5b..c5c7703e 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241111135439_AddedCustomDataKeyKey.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241111135439_AddedCustomDataKeyKey.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class AddedCustomDataKeyKey : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241112152323_FixAncestorIdConfig.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241112152323_FixAncestorIdConfig.cs index 9d2f78d0..466c32f2 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241112152323_FixAncestorIdConfig.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241112152323_FixAncestorIdConfig.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using System; + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class FixAncestorIdConfig : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241112232041_fixMediaStreams.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241112232041_fixMediaStreams.cs index 917031d7..4cfef8b5 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241112232041_fixMediaStreams.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241112232041_fixMediaStreams.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class FixMediaStreams : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241112234144_FixMediaStreams2.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241112234144_FixMediaStreams2.cs index 84a608eb..1e022fe5 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241112234144_FixMediaStreams2.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241112234144_FixMediaStreams2.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class FixMediaStreams2 : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241113133548_EnforceUniqueItemValue.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241113133548_EnforceUniqueItemValue.cs index 8281a307..e1b68518 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241113133548_EnforceUniqueItemValue.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20241113133548_EnforceUniqueItemValue.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class EnforceUniqueItemValue : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250202021306_FixedCollation.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250202021306_FixedCollation.cs index f75a6b66..6bff0926 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250202021306_FixedCollation.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250202021306_FixedCollation.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class FixedCollation : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250204092455_MakeStartEndDateNullable.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250204092455_MakeStartEndDateNullable.cs index 20a516cf..c9eb82ae 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250204092455_MakeStartEndDateNullable.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250204092455_MakeStartEndDateNullable.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using System; + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class MakeStartEndDateNullable : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250214031148_ChannelIdGuid.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250214031148_ChannelIdGuid.cs index ab2e27ae..b7466d0d 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250214031148_ChannelIdGuid.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250214031148_ChannelIdGuid.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class ChannelIdGuid : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250326065026_AddInheritedParentalRatingSubValue.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250326065026_AddInheritedParentalRatingSubValue.cs index da3dfc2c..73f534d0 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250326065026_AddInheritedParentalRatingSubValue.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250326065026_AddInheritedParentalRatingSubValue.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class AddInheritedParentalRatingSubValue : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250327101120_AddKeyframeData.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250327101120_AddKeyframeData.cs index 376b4c63..0b802955 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250327101120_AddKeyframeData.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250327101120_AddKeyframeData.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using System; + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class AddKeyframeData : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250327171413_AddHdr10PlusFlag.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250327171413_AddHdr10PlusFlag.cs index 3ca95424..3febfc66 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250327171413_AddHdr10PlusFlag.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250327171413_AddHdr10PlusFlag.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class AddHdr10PlusFlag : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250331182844_FixAttachmentMigration.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250331182844_FixAttachmentMigration.cs index 904b805a..61ec3b6a 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250331182844_FixAttachmentMigration.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250331182844_FixAttachmentMigration.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class FixAttachmentMigration : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250401142247_FixAncestors.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250401142247_FixAncestors.cs index 5a8dde86..df212e57 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250401142247_FixAncestors.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250401142247_FixAncestors.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class FixAncestors : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250405075612_FixItemValuesIndices.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250405075612_FixItemValuesIndices.cs index e145a431..800a56ba 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250405075612_FixItemValuesIndices.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250405075612_FixItemValuesIndices.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class FixItemValuesIndices : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250609115616_DetachUserDataInsteadOfDelete.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250609115616_DetachUserDataInsteadOfDelete.cs index 2abe032b..82eb4cf4 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250609115616_DetachUserDataInsteadOfDelete.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250609115616_DetachUserDataInsteadOfDelete.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using System; + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class DetachUserDataInsteadOfDelete : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250622170802_BaseItemImageInfoDateModifiedNullable.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250622170802_BaseItemImageInfoDateModifiedNullable.cs index c4811224..a282492c 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250622170802_BaseItemImageInfoDateModifiedNullable.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250622170802_BaseItemImageInfoDateModifiedNullable.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using System; + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class BaseItemImageInfoDateModifiedNullable : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250714044826_ResetJournalMode.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250714044826_ResetJournalMode.cs index ff1cb912..b90620e0 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250714044826_ResetJournalMode.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250714044826_ResetJournalMode.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class ResetJournalMode : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250913211637_AddProperParentChildRelationBaseItemWithCascade.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250913211637_AddProperParentChildRelationBaseItemWithCascade.cs index 2321605c..3fabed21 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250913211637_AddProperParentChildRelationBaseItemWithCascade.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250913211637_AddProperParentChildRelationBaseItemWithCascade.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class AddProperParentChildRelationBaseItemWithCascade : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250925203415_ExtendPeopleMapKey.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250925203415_ExtendPeopleMapKey.cs index c277a7ef..f99291a4 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250925203415_ExtendPeopleMapKey.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/20250925203415_ExtendPeopleMapKey.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Microsoft.EntityFrameworkCore.Migrations; - #nullable disable namespace Jellyfin.Server.Implementations.Migrations { + using Microsoft.EntityFrameworkCore.Migrations; + /// public partial class ExtendPeopleMapKey : Migration { diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/SqliteDesignTimeJellyfinDbFactory.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/SqliteDesignTimeJellyfinDbFactory.cs index f4943bb1..87c6d6ae 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/SqliteDesignTimeJellyfinDbFactory.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Migrations/SqliteDesignTimeJellyfinDbFactory.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Jellyfin.Database.Implementations; -using Jellyfin.Database.Implementations.Locking; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Design; -using Microsoft.Extensions.Logging.Abstractions; - namespace Jellyfin.Database.Providers.Sqlite.Migrations { + using Jellyfin.Database.Implementations; + using Jellyfin.Database.Implementations.Locking; + using Microsoft.EntityFrameworkCore; + using Microsoft.EntityFrameworkCore.Design; + using Microsoft.Extensions.Logging.Abstractions; + /// /// The design time factory for . /// This is only used for the creation of migrations and not during runtime. diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/ModelBuilderExtensions.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/ModelBuilderExtensions.cs index 895e988b..d898536e 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/ModelBuilderExtensions.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/ModelBuilderExtensions.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Database.Providers.Sqlite; + using System; using Jellyfin.Database.Providers.Sqlite.ValueConverters; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -namespace Jellyfin.Database.Providers.Sqlite; - /// /// Model builder extensions. /// diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/PragmaConnectionInterceptor.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/PragmaConnectionInterceptor.cs index 43200111..4fb29c3a 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/PragmaConnectionInterceptor.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/PragmaConnectionInterceptor.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Database.Providers.Sqlite; + using System.Collections.Generic; using System.Data.Common; using System.Globalization; @@ -11,8 +13,6 @@ using System.Threading.Tasks; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.Extensions.Logging; -namespace Jellyfin.Database.Providers.Sqlite; - /// /// Injects a series of PRAGMA on each connection starts. /// diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/ValueConverters/DateTimeKindValueConverter.cs b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/ValueConverters/DateTimeKindValueConverter.cs index f562f63a..ee8c54a7 100644 --- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/ValueConverters/DateTimeKindValueConverter.cs +++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/ValueConverters/DateTimeKindValueConverter.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - namespace Jellyfin.Database.Providers.Sqlite.ValueConverters { + using System; + using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + /// /// ValueConverter to specify kind. /// diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/obj/Debug/net10.0/Jellyfin.Database.Providers.Sqlite.csproj.AssemblyReference.cache b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/obj/Debug/net10.0/Jellyfin.Database.Providers.Sqlite.csproj.AssemblyReference.cache index ce83dffbb812e17f85c02433c8c8027d9f70cb45..06d1e6013e5b142668f3013a4bf9c4c3bdfa32b3 100644 GIT binary patch delta 1512 zcmb7E-%C?b9N%$wb9XwiIU!Wm<}4emyIDd$l+`w+%w_otq#@0D92d8HF87|9i?BgG ziHz*Lh!AMelL^J8mq?+9AR>tfqKCBidZ>r~fX=pU?Szzn{!fdTOo3TWmzUqF^Zd%0Jv9G8=iZ)x+(71003UH z!g$HHxp5zFiRrO|ep;=0qz|UkxhY=Yq6wUcPw+xK3MaCuxBziShzrHbaBec425PHk z%VUr99*!~wuv4^_Tw@QrnY=z$aX8RhMkKG9ZeV#}87&*q)k(K&OA|yT_=a*ah8Zq` zG9nV7fMaM9rn%vq2qQ?Cff9xi`DQsmKCmwG!ZJVC^SA zY{O)^?il%HX|er$e!DPG=Wiw-s~c@9u}?;VCgTlo)j9MMF_=M8uJpO>zpNOr$H`fC zfOOS($WyC}QB5VQ_A_8qJ@)Y!oa7T>3Eh;T#A%lPqmgR| z%=MoPU}f+S0_BaAU_-jzfKHIVpnPfTHSDJ1Vtd30SCD_p2&1*v cl_!DF0eC_22crkz>&oYjts0}*Pj~KR77=_~`NXtz$>_MYJFx zB$z-74S$7zjin1yW!OM47co$zPOvg{pc3rdT?xXS*sQzvfB$>${BT8hb$4G(NQFWn zVIJ1Qqg}Zgd-3Mw>u*l?whXHoQE=e0{ z&NcEWfOm!cJTfK2R%zJZ(K5lY z!2o@uoQT#u$7a2AH(RAETn{^A8qg*E&9+6%7Iw+rO&`x3dE{C47?MYHsZIYbquH`BG5Et2d-WD+z0*`M +namespace Jellyfin.Drawing.Skia; + using System; using MediaBrowser.Model.Drawing; using SkiaSharp; -namespace Jellyfin.Drawing.Skia; - /// /// Static helper class used to draw percentage-played indicators on images. /// diff --git a/src/Jellyfin.Drawing.Skia/SkiaEncoder.cs b/src/Jellyfin.Drawing.Skia/SkiaEncoder.cs index 8a656cef..2266883b 100644 --- a/src/Jellyfin.Drawing.Skia/SkiaEncoder.cs +++ b/src/Jellyfin.Drawing.Skia/SkiaEncoder.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Drawing.Skia; + using System; using System.Collections.Generic; using System.Globalization; @@ -17,8 +19,6 @@ using Microsoft.Extensions.Logging; using SkiaSharp; using Svg.Skia; -namespace Jellyfin.Drawing.Skia; - /// /// Image encoder that uses to manipulate images. /// diff --git a/src/Jellyfin.Drawing.Skia/SkiaExtensions.cs b/src/Jellyfin.Drawing.Skia/SkiaExtensions.cs index c94164fc..4c752317 100644 --- a/src/Jellyfin.Drawing.Skia/SkiaExtensions.cs +++ b/src/Jellyfin.Drawing.Skia/SkiaExtensions.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using SkiaSharp; - namespace Jellyfin.Drawing.Skia; +using SkiaSharp; + /// /// The SkiaSharp extensions. /// diff --git a/src/Jellyfin.Drawing.Skia/SkiaHelper.cs b/src/Jellyfin.Drawing.Skia/SkiaHelper.cs index 6832ced3..fe3c7097 100644 --- a/src/Jellyfin.Drawing.Skia/SkiaHelper.cs +++ b/src/Jellyfin.Drawing.Skia/SkiaHelper.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Drawing.Skia; + using System.Collections.Generic; using System.IO; using SkiaSharp; -namespace Jellyfin.Drawing.Skia; - /// /// Class containing helper methods for working with SkiaSharp. /// diff --git a/src/Jellyfin.Drawing.Skia/SplashscreenBuilder.cs b/src/Jellyfin.Drawing.Skia/SplashscreenBuilder.cs index 6c70bd53..77c583d7 100644 --- a/src/Jellyfin.Drawing.Skia/SplashscreenBuilder.cs +++ b/src/Jellyfin.Drawing.Skia/SplashscreenBuilder.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Drawing.Skia; + using System; using System.Collections.Generic; using Microsoft.Extensions.Logging; using SkiaSharp; -namespace Jellyfin.Drawing.Skia; - /// /// Used to build the splashscreen. /// diff --git a/src/Jellyfin.Drawing.Skia/StripCollageBuilder.cs b/src/Jellyfin.Drawing.Skia/StripCollageBuilder.cs index 69b58bec..9c92927e 100644 --- a/src/Jellyfin.Drawing.Skia/StripCollageBuilder.cs +++ b/src/Jellyfin.Drawing.Skia/StripCollageBuilder.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Drawing.Skia; + using System; using System.Collections.Generic; using System.Globalization; @@ -10,8 +12,6 @@ using System.Text.RegularExpressions; using SkiaSharp; using SkiaSharp.HarfBuzz; -namespace Jellyfin.Drawing.Skia; - /// /// Used to build collages of multiple images arranged in vertical strips. /// diff --git a/src/Jellyfin.Drawing.Skia/UnplayedCountIndicator.cs b/src/Jellyfin.Drawing.Skia/UnplayedCountIndicator.cs index a663231e..3c158d25 100644 --- a/src/Jellyfin.Drawing.Skia/UnplayedCountIndicator.cs +++ b/src/Jellyfin.Drawing.Skia/UnplayedCountIndicator.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Drawing.Skia; + using System.Globalization; using MediaBrowser.Model.Drawing; using SkiaSharp; -namespace Jellyfin.Drawing.Skia; - /// /// Static helper class for drawing unplayed count indicators. /// diff --git a/src/Jellyfin.Drawing.Skia/obj/Debug/net10.0/Jellyfin.Drawing.Skia.csproj.AssemblyReference.cache b/src/Jellyfin.Drawing.Skia/obj/Debug/net10.0/Jellyfin.Drawing.Skia.csproj.AssemblyReference.cache index 19882220ceae74a1f8f45381ad3a98190261cc88..69970fd2a11ea4b18fb061c37b80db13b0f84941 100644 GIT binary patch delta 3119 zcmb_eO>Y}T81^_#anmLZj@>}gr1@x5yGkcEu@IjUsgsC?q_jy|N^4bJ+f#ST?#^a* z9BM!fh+B}5thrS}DsZeoK{>Uey>LOO5)ya#0bD@h(hDjxll89G-nA2nJtR@)o%em- zujiS~JNNH{j{RV)+Of8O^6D>NJvOT!rP%fGz8*38LPb?ML-2yO{ZYW#|RcR z4TuoRlg-SJ<{uFNK(yHx=;9`whXfRMFERwKRUeHPo6V+p$SE0e$__czY$QVNWCh-7 zKAjx7goveL<4uk@{Sw>COt7t3KgakcrNQ2Tt-R}k@tv75%GdLKI*{MO>A%^vVm~MFt7uvKF_{h`@$-^ zP2qxt4aZ?}D7mB-2)6JI3g>Q9WQbx~a1obEs!?Kp_a9-G!-qx1Cck@7c_sP#_t)#w zi`$;hAqvkERadFHjv9*Slvx<9;KB!pHdwH9c-Vm?TXSN}g*9WD{ALyt1mC9Ag!4$D zWl|pn`a$b+D(~jyt^aUi{SVsNEULzu7thdueKe~oB?DVjEm%BZTtHSsF1_8hR(Y@hl1!75g6oUF#W`g43z#^s4|I zgy-f~McHOdQzkA~b&c%u*BrR;+egB)sJG9_8_yT|=gjG%m z7d<|FxWIE>M+5VogFpu8FbAqemKY#n|r>9R(JgFbm1bb^R!L|ovPDwvhH9Zsq!Qtq7ol;0z zc9rBN;rhfC!i&Ly`adg}BO!rG-4nPMu@`D0CF^&gj7UYvYYlG!_FMlOqSw=YbvbHx zYX$KJsk8#Kq+(KBB8qv_Wq8TM(|cdS9N)pbt5L0X%(Zg1D*pMO_w20-Ry+Yp5^u5k zD0R*C(u#Fmt2*vobhget4%{>G3T(4yF-PU(+hiG)%9=s~XT1F!uwM^P)VAQ{Uq5{E z<-0w}LD>`e1ArE9p+M=L*gMM~+x^VMTFfr{A~M1{!!an(i*HAFG D-rKF( delta 100 zcmV-q0Gt1-s{x9B2nGQj00001XOpl38 +namespace Jellyfin.Drawing; + using System; using System.Collections.Generic; using System.Globalization; @@ -27,8 +29,6 @@ using MediaBrowser.Model.Net; using Microsoft.Extensions.Logging; using Photo = MediaBrowser.Controller.Entities.Photo; -namespace Jellyfin.Drawing; - /// /// Class ImageProcessor. /// diff --git a/src/Jellyfin.Drawing/NullImageEncoder.cs b/src/Jellyfin.Drawing/NullImageEncoder.cs index 1da08932..d583481d 100644 --- a/src/Jellyfin.Drawing/NullImageEncoder.cs +++ b/src/Jellyfin.Drawing/NullImageEncoder.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Drawing; + using System; using System.Collections.Generic; using MediaBrowser.Controller.Drawing; using MediaBrowser.Model.Drawing; -namespace Jellyfin.Drawing; - /// /// A fallback implementation of . /// diff --git a/src/Jellyfin.Drawing/obj/Debug/net10.0/Jellyfin.Drawing.csproj.AssemblyReference.cache b/src/Jellyfin.Drawing/obj/Debug/net10.0/Jellyfin.Drawing.csproj.AssemblyReference.cache index dcc71631903f9c773f17db386bb7ba42db015b44..5ffcc8d126efc761822f6328135b1116a79eb1f2 100644 GIT binary patch delta 3225 zcmb_e&u<$=6!thuYmz#0oHfv8J02QX3U6;neHH-F~T!Oz?tsV*@+8?*cvvEGr+m$owtS# zJ60^V7bN)x0EX6UHbn+ptD00Z5EyXIN1t?Vf|T=KR7oYpY98x4D-t`#_C_3;JS_?a z7geejRU5%mhNU9|nN$@USf)Mf*b(Q6XkwZJ6Bcf$7=widG`n#+NBv zx<--7i)q7UT&ZYg1uhhAO4QEM%zpP{?S=I3H!ii`G$oRpMHH?Q&CsZ}g*xgfE6#(~ zap`SDJ0hH1bX=lyyL9Ma3*mxov7LEL5PX?Z3!X$Ot&;XE&=1;(Y(ndb-d2ovwqj7+ zW?3^gy?Dm*qVn~IG3Hvy$HY{JiD~P%eG)y?!|e?Bk_R_k5W^*dP!G}9AkugMAmDq8%8Z-UWwGYA~P1Rs=e zJ38Qel9+ZtbpK0!9ex~{p7%RwOpdAaJjmv=R3(HtiAPD4eN98+D#+}?Vp8k+gEuVJ zzsd}>24YRq8NUDZqhB6AJoG^F!}&RNoZl_&2dQbpeB>Aw!)P-o*8*Awc7-roWX9wL zAaVZB#wqP8@PRNC$UNogrXjk;J6}blrWW;%CkU8veoM|cM@NQvb>{r4vtKl99kCv1 zvH)rs&%F1DX#L*?VRid#`TLWR}ABFD@w9A_2FM%2=<0}tdROLV{2QgFgAKq z3H~ih{Yp7DyRT4Pmy@vrP&YuH{Gd4KvT#D}Iugquux%K|X z=Z4awk_b!$LSAEmFNVWAcb5bIeQ=bJF?PP)J>m36709o^zlPtrzd~%~hj`zyXa5BX Chug*g delta 41 xcmaFU&3HV9gN;#?fq{WBeX;_x^kj2B-iZb-Y_qm5+;TU6W7Sfo%}1m(v;q3o4UYf- diff --git a/src/Jellyfin.Extensions/bin/Debug/net10.0/Jellyfin.CodeAnalysis.dll b/src/Jellyfin.Extensions/bin/Debug/net10.0/Jellyfin.CodeAnalysis.dll index e023a8bc7acbdf8f2105452bff18b8c4ff43a90d..c9e705a97cbdda8d6e529aa7e5537a4d248a52f3 100644 GIT binary patch delta 235 zcmZp0X>gg)!7_c*oaGyPVnhYzsmSpEPLTFo^GnFK%!_5q<{zSam^4gG5|b=b4O7fg zQY@29jZ>3Njg2gm5>w30ERD>Q&5V%W{h z?!S0duhE?swWX8aNERzV1=qs_L8>(~9GVMt_1Vz6XL zWiVt&VK4*Y6d*5&!IZ%mD3%PSjld#_KpAtO3QGnfAe{_k83WZN0Ywvms!SOS7|b^> Imycuu0BBH89smFU delta 235 zcmZp0X>gg)!LqmI#GH*iF`@#ykH)7yiumO{lgXfT{*u{In}3MzVbVx3O-o5iO|~>K zPBAl1Ha9jgPcgGJx3EYvNi{M~GfGM{OH58NO-Y-4M`8_2>+Xk3C-+DO2!zi(nMV_7fMzUA|Dj1Us6$GkQZD*3O{`B%EOG{I4!RC6Yn=Jk*45kce3@Hpr z45JoD_z% J&CBH@nE>jBPAUKZ diff --git a/src/Jellyfin.Extensions/bin/Debug/net10.0/Jellyfin.CodeAnalysis.pdb b/src/Jellyfin.Extensions/bin/Debug/net10.0/Jellyfin.CodeAnalysis.pdb index 2c5d95b7f05f7db882318ee0ce9beb4a2e418001..93049873b0aacca0f8125c40e1e357e6c7ccee2e 100644 GIT binary patch delta 69 zcmV-L0J{IQOSDUnd=xQH0k8DP$4{fGjWXQmeRa`CpSQ7)m;)f028ulp(Yu=J4{+<} bj{0T0q+lwuvzMp1B}y|Lb1%lTNCa#l&Tt|L delta 69 zcmV-L0J{IQOSDUnd=yui%ucj94@|9)*b=XvSU#M`Y=GxGZ5jXgD)0%00DD~`_>b?ThE-S_a^kLx!}WUb+2(cBbxck+pf z0D*A!>k}7j{ouZ$=aWlplJ@Dz8kHFeP{HLHP(hIDr^UI+|Fo56`OKf}xOqcm00#iN CC^L2d diff --git a/src/Jellyfin.Extensions/bin/Debug/net10.0/Jellyfin.Extensions.pdb b/src/Jellyfin.Extensions/bin/Debug/net10.0/Jellyfin.Extensions.pdb index d22d7d8b0154c1a54fbbc97efcc42142c2f3ab88..b879446fea39640411517fc16331bedf629ff770 100644 GIT binary patch delta 63 zcmV-F0Kot3%K_}m0g!wY|6rZF%cGA)jG6L>xjF_K2H^nlv5-uUg!R`ad4?ksD-9quIYmJMm;7c2rMtM~z;+j^ Vy5NytJ6TTS8J1`O2kQ*YF973USz`bI delta 2056 zcmbuA&rj1}9EVq(B5nl*1`1&xuu+S&JAa50f3 zdJ~ZOdLYq@7fv2D4L3RXC-~#&$%Fp@-t}!|bEE~jcv*j?dEV#q{p{_|$jbCOIkxq9 ziholsMw6V!}= zI^jIK7)A4i3{(-pL{ueFmjnVb_u@rgfRfX$)f^3Sv-^=S|iiV~kdxnIt-V^t);&-FHip(}kD{6A?y<42Vkp zfe5a~6BS;q+xWa#RWtcRjkMa=_1keI+k(Qe37rd zSy>iMdDrN><6md&D;ssYvaFy&HcOWDZs-YiIw4rJ%^-s4M7$oKA%JAC|L(Ey!k>NSA|-~5dm zvZwmQb*ST~f`_ntsXUQ26<6zO=DK-0;UxLYz2s0!&mmyC-Ewm8G~c%NJJ~L|wjFE> zw!$b7*v?VgUb-F#{v-K2){GZ{TTXt@-TU>m_c@~G+Amv^^LKo9B0P0ZxZWA+SkUyG zqfjVBSI;zBrDQ&Iv#ZDWbT<6o#Pg0$>!Hwz39PBrikJ~@cBPzft91zma|MOSc~K|( zS-uW7S$SUR{^EqIGf#pZ?L)d)nU#M`Y=GxGZ5jXgD)0%00DD~`_>b?ThE-S_a^kLx!}WUb+2(cBbxck+pf z0D*A!>k}7j{ouZ$=aWlplJ@Dz8kHFeP{HLHP(hIDr^UI+|Fo56`OKf}xOqcm00#iN CC^L2d diff --git a/src/Jellyfin.Extensions/obj/Debug/net10.0/Jellyfin.Extensions.pdb b/src/Jellyfin.Extensions/obj/Debug/net10.0/Jellyfin.Extensions.pdb index d22d7d8b0154c1a54fbbc97efcc42142c2f3ab88..b879446fea39640411517fc16331bedf629ff770 100644 GIT binary patch delta 63 zcmV-F0Kot3%K_}m0g!wY|6rZF%cGA)jG6L>xjF_K2H^nlv5- -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Controller.Channels; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.Dto; - namespace Jellyfin.LiveTv.Channels { + using System; + using System.Collections.Generic; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Controller.Channels; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Library; + using MediaBrowser.Model.Dto; + /// /// A media source provider for channels. /// diff --git a/src/Jellyfin.LiveTv/Channels/ChannelImageProvider.cs b/src/Jellyfin.LiveTv/Channels/ChannelImageProvider.cs index a1448834..6925a316 100644 --- a/src/Jellyfin.LiveTv/Channels/ChannelImageProvider.cs +++ b/src/Jellyfin.LiveTv/Channels/ChannelImageProvider.cs @@ -2,17 +2,17 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Controller.Channels; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; - namespace Jellyfin.LiveTv.Channels { + using System.Collections.Generic; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Controller.Channels; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + /// /// An image provider for channels. /// diff --git a/src/Jellyfin.LiveTv/Channels/ChannelManager.cs b/src/Jellyfin.LiveTv/Channels/ChannelManager.cs index 3016b524..f840b20c 100644 --- a/src/Jellyfin.LiveTv/Channels/ChannelManager.cs +++ b/src/Jellyfin.LiveTv/Channels/ChannelManager.cs @@ -2,45 +2,45 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text.Json; -using System.Threading; -using System.Threading.Tasks; -using AsyncKeyedLock; -using Jellyfin.Data.Enums; -using Jellyfin.Database.Implementations.Entities; -using Jellyfin.Database.Implementations.Enums; -using Jellyfin.Extensions; -using Jellyfin.Extensions.Json; -using MediaBrowser.Common.Extensions; -using MediaBrowser.Controller.Channels; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Dto; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Channels; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.IO; -using MediaBrowser.Model.Querying; -using Microsoft.Extensions.Caching.Memory; -using Microsoft.Extensions.Logging; -using Episode = MediaBrowser.Controller.Entities.TV.Episode; -using Movie = MediaBrowser.Controller.Entities.Movies.Movie; -using MusicAlbum = MediaBrowser.Controller.Entities.Audio.MusicAlbum; -using Season = MediaBrowser.Controller.Entities.TV.Season; -using Series = MediaBrowser.Controller.Entities.TV.Series; - namespace Jellyfin.LiveTv.Channels { +#nullable disable + + using System; + using System.Collections.Generic; + using System.Globalization; + using System.IO; + using System.Linq; + using System.Text.Json; + using System.Threading; + using System.Threading.Tasks; + using AsyncKeyedLock; + using Jellyfin.Data.Enums; + using Jellyfin.Database.Implementations.Entities; + using Jellyfin.Database.Implementations.Enums; + using Jellyfin.Extensions; + using Jellyfin.Extensions.Json; + using MediaBrowser.Common.Extensions; + using MediaBrowser.Controller.Channels; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Dto; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Channels; + using MediaBrowser.Model.Dto; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.IO; + using MediaBrowser.Model.Querying; + using Microsoft.Extensions.Caching.Memory; + using Microsoft.Extensions.Logging; + using Episode = MediaBrowser.Controller.Entities.TV.Episode; + using Movie = MediaBrowser.Controller.Entities.Movies.Movie; + using MusicAlbum = MediaBrowser.Controller.Entities.Audio.MusicAlbum; + using Season = MediaBrowser.Controller.Entities.TV.Season; + using Series = MediaBrowser.Controller.Entities.TV.Series; + /// /// The LiveTV channel manager. /// diff --git a/src/Jellyfin.LiveTv/Channels/ChannelPostScanTask.cs b/src/Jellyfin.LiveTv/Channels/ChannelPostScanTask.cs index 9a376c7c..6860f42f 100644 --- a/src/Jellyfin.LiveTv/Channels/ChannelPostScanTask.cs +++ b/src/Jellyfin.LiveTv/Channels/ChannelPostScanTask.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Jellyfin.Data.Enums; -using MediaBrowser.Controller.Channels; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using Microsoft.Extensions.Logging; - namespace Jellyfin.LiveTv.Channels { + using System; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using Jellyfin.Data.Enums; + using MediaBrowser.Controller.Channels; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Library; + using Microsoft.Extensions.Logging; + /// /// A task to remove all non-installed channels from the database. /// diff --git a/src/Jellyfin.LiveTv/Channels/RefreshChannelsScheduledTask.cs b/src/Jellyfin.LiveTv/Channels/RefreshChannelsScheduledTask.cs index c7d97659..716024d5 100644 --- a/src/Jellyfin.LiveTv/Channels/RefreshChannelsScheduledTask.cs +++ b/src/Jellyfin.LiveTv/Channels/RefreshChannelsScheduledTask.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Controller.Channels; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.Globalization; -using MediaBrowser.Model.Tasks; -using Microsoft.Extensions.Logging; - namespace Jellyfin.LiveTv.Channels { + using System; + using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Controller.Channels; + using MediaBrowser.Controller.Library; + using MediaBrowser.Model.Globalization; + using MediaBrowser.Model.Tasks; + using Microsoft.Extensions.Logging; + /// /// The "Refresh Channels" scheduled task. /// diff --git a/src/Jellyfin.LiveTv/Configuration/LiveTvConfigurationExtensions.cs b/src/Jellyfin.LiveTv/Configuration/LiveTvConfigurationExtensions.cs index d970fcb1..5518207d 100644 --- a/src/Jellyfin.LiveTv/Configuration/LiveTvConfigurationExtensions.cs +++ b/src/Jellyfin.LiveTv/Configuration/LiveTvConfigurationExtensions.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.LiveTv.Configuration; + using MediaBrowser.Common.Configuration; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.LiveTv; -namespace Jellyfin.LiveTv.Configuration; - /// /// extensions for Live TV. /// diff --git a/src/Jellyfin.LiveTv/Configuration/LiveTvConfigurationFactory.cs b/src/Jellyfin.LiveTv/Configuration/LiveTvConfigurationFactory.cs index a46afb77..e1c6d693 100644 --- a/src/Jellyfin.LiveTv/Configuration/LiveTvConfigurationFactory.cs +++ b/src/Jellyfin.LiveTv/Configuration/LiveTvConfigurationFactory.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.LiveTv.Configuration; + using System.Collections.Generic; using MediaBrowser.Common.Configuration; using MediaBrowser.Model.LiveTv; -namespace Jellyfin.LiveTv.Configuration; - /// /// implementation for . /// diff --git a/src/Jellyfin.LiveTv/Extensions/LiveTvServiceCollectionExtensions.cs b/src/Jellyfin.LiveTv/Extensions/LiveTvServiceCollectionExtensions.cs index db0ed729..5b27fdf2 100644 --- a/src/Jellyfin.LiveTv/Extensions/LiveTvServiceCollectionExtensions.cs +++ b/src/Jellyfin.LiveTv/Extensions/LiveTvServiceCollectionExtensions.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.LiveTv.Extensions; + using Jellyfin.LiveTv.Channels; using Jellyfin.LiveTv.Guide; using Jellyfin.LiveTv.IO; @@ -15,8 +17,6 @@ using MediaBrowser.Controller.LiveTv; using MediaBrowser.Model.IO; using Microsoft.Extensions.DependencyInjection; -namespace Jellyfin.LiveTv.Extensions; - /// /// Live TV extensions for . /// diff --git a/src/Jellyfin.LiveTv/Guide/GuideManager.cs b/src/Jellyfin.LiveTv/Guide/GuideManager.cs index 6c7cde8c..d2c21dbc 100644 --- a/src/Jellyfin.LiveTv/Guide/GuideManager.cs +++ b/src/Jellyfin.LiveTv/Guide/GuideManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.LiveTv.Guide; + using System; using System.Collections.Generic; using System.Linq; @@ -22,8 +24,6 @@ using MediaBrowser.Model.IO; using MediaBrowser.Model.LiveTv; using Microsoft.Extensions.Logging; -namespace Jellyfin.LiveTv.Guide; - /// public class GuideManager : IGuideManager { diff --git a/src/Jellyfin.LiveTv/Guide/RefreshGuideScheduledTask.cs b/src/Jellyfin.LiveTv/Guide/RefreshGuideScheduledTask.cs index 07199d05..5e27e8ce 100644 --- a/src/Jellyfin.LiveTv/Guide/RefreshGuideScheduledTask.cs +++ b/src/Jellyfin.LiveTv/Guide/RefreshGuideScheduledTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.LiveTv.Guide; + using System; using System.Collections.Generic; using System.Threading; @@ -11,8 +13,6 @@ using MediaBrowser.Common.Configuration; using MediaBrowser.Controller.LiveTv; using MediaBrowser.Model.Tasks; -namespace Jellyfin.LiveTv.Guide; - /// /// The "Refresh Guide" scheduled task. /// diff --git a/src/Jellyfin.LiveTv/Listings/ListingsManager.cs b/src/Jellyfin.LiveTv/Listings/ListingsManager.cs index aa767c24..193cca34 100644 --- a/src/Jellyfin.LiveTv/Listings/ListingsManager.cs +++ b/src/Jellyfin.LiveTv/Listings/ListingsManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.LiveTv.Listings; + using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -19,8 +21,6 @@ using MediaBrowser.Model.LiveTv; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; -namespace Jellyfin.LiveTv.Listings; - /// public class ListingsManager : IListingsManager { diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/BroadcasterDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/BroadcasterDto.cs index 597dc3ff..eec11275 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/BroadcasterDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/BroadcasterDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System.Text.Json.Serialization; + /// /// Broadcaster dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/CaptionDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/CaptionDto.cs index 1849d1a5..00fa7e62 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/CaptionDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/CaptionDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System.Text.Json.Serialization; + /// /// Caption dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/CastDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/CastDto.cs index 6baa8e81..917c0433 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/CastDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/CastDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System.Text.Json.Serialization; + /// /// Cast dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ChannelDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ChannelDto.cs index c34af52f..4355c31d 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ChannelDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ChannelDto.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + /// /// Channel dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ContentRatingDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ContentRatingDto.cs index 5b307e66..16e4a6a3 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ContentRatingDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ContentRatingDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System.Text.Json.Serialization; + /// /// Content rating dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/CrewDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/CrewDto.cs index 6617be36..99e3fbc3 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/CrewDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/CrewDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System.Text.Json.Serialization; + /// /// Crew dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/DayDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/DayDto.cs index 3c62c74c..5317f859 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/DayDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/DayDto.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + /// /// Day dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/Description1000Dto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/Description1000Dto.cs index 37718bc3..879ff0db 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/Description1000Dto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/Description1000Dto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System.Text.Json.Serialization; + /// /// Description 1_000 dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/Description100Dto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/Description100Dto.cs index d4df97f5..f0a64b2e 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/Description100Dto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/Description100Dto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System.Text.Json.Serialization; + /// /// Description 100 dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/DescriptionsProgramDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/DescriptionsProgramDto.cs index 6a7abf96..3a616882 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/DescriptionsProgramDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/DescriptionsProgramDto.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + /// /// Descriptions program dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/EventDetailsDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/EventDetailsDto.cs index 05f20839..c6bfd2c8 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/EventDetailsDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/EventDetailsDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System.Text.Json.Serialization; + /// /// Event details dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/GracenoteDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/GracenoteDto.cs index 123ff95a..6baebd6d 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/GracenoteDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/GracenoteDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System.Text.Json.Serialization; + /// /// Gracenote dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/HeadendsDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/HeadendsDto.cs index 532d347e..4832eec4 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/HeadendsDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/HeadendsDto.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + /// /// Headends dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ImageDataDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ImageDataDto.cs index 63dbb175..7f7f0d8f 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ImageDataDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ImageDataDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System.Text.Json.Serialization; + /// /// Image data dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/LineupDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/LineupDto.cs index e2af4db1..4e80369b 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/LineupDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/LineupDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System.Text.Json.Serialization; + /// /// The lineup dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/LineupsDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/LineupsDto.cs index cabb227f..efd4931e 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/LineupsDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/LineupsDto.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + /// /// Lineups dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/LogoDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/LogoDto.cs index e51d8c24..9b940818 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/LogoDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/LogoDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System.Text.Json.Serialization; + /// /// Logo dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MapDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MapDto.cs index b4781da6..2d08b79a 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MapDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MapDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System.Text.Json.Serialization; + /// /// Map dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MetadataDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MetadataDto.cs index d5a77997..ed547294 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MetadataDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MetadataDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System.Text.Json.Serialization; + /// /// Metadata dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MetadataProgramsDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MetadataProgramsDto.cs index 2eaa0b44..7f7d93b0 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MetadataProgramsDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MetadataProgramsDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System.Text.Json.Serialization; + /// /// Metadata programs dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MetadataScheduleDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MetadataScheduleDto.cs index 55b22ac2..57e043d9 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MetadataScheduleDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MetadataScheduleDto.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System; + using System.Text.Json.Serialization; + /// /// Metadata schedule dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MovieDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MovieDto.cs index e32ae3b6..64f52d79 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MovieDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MovieDto.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + /// /// Movie dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MultipartDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MultipartDto.cs index c8e8d39c..2d492aad 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MultipartDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/MultipartDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System.Text.Json.Serialization; + /// /// Multipart dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ProgramDetailsDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ProgramDetailsDto.cs index 6071ee24..c19b0e0a 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ProgramDetailsDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ProgramDetailsDto.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + /// /// Program details dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ProgramDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ProgramDto.cs index c1b4e645..9e29d3ac 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ProgramDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ProgramDto.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + /// /// Program dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/QualityRatingDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/QualityRatingDto.cs index d8434f54..21d22d4f 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/QualityRatingDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/QualityRatingDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System.Text.Json.Serialization; + /// /// Quality rating dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/RatingDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/RatingDto.cs index ed26349f..719a3866 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/RatingDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/RatingDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System.Text.Json.Serialization; + /// /// Rating dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/RecommendationDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/RecommendationDto.cs index 32ff7222..337b306d 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/RecommendationDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/RecommendationDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System.Text.Json.Serialization; + /// /// Recommendation dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/RequestScheduleForChannelDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/RequestScheduleForChannelDto.cs index 3f7abe0f..6c559088 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/RequestScheduleForChannelDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/RequestScheduleForChannelDto.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + /// /// Request schedule for channel dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ShowImagesDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ShowImagesDto.cs index 19e39212..838312a0 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ShowImagesDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/ShowImagesDto.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + /// /// Show image dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/StationDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/StationDto.cs index 318bc333..6d6347a2 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/StationDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/StationDto.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + /// /// Station dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/TitleDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/TitleDto.cs index 5c98164e..37bded8c 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/TitleDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/TitleDto.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System.Text.Json.Serialization; + /// /// Title dto. /// diff --git a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/TokenDto.cs b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/TokenDto.cs index 6ec42ea2..d9124019 100644 --- a/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/TokenDto.cs +++ b/src/Jellyfin.LiveTv/Listings/SchedulesDirectDtos/TokenDto.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Text.Json.Serialization; - namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos { + using System; + using System.Text.Json.Serialization; + /// /// The token dto. /// diff --git a/src/Jellyfin.LiveTv/Recordings/RecordingHelper.cs b/src/Jellyfin.LiveTv/Recordings/RecordingHelper.cs index 47dc0498..9a4708e2 100644 --- a/src/Jellyfin.LiveTv/Recordings/RecordingHelper.cs +++ b/src/Jellyfin.LiveTv/Recordings/RecordingHelper.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.Text; -using MediaBrowser.Controller.LiveTv; - namespace Jellyfin.LiveTv.Recordings { + using System; + using System.Globalization; + using System.Text; + using MediaBrowser.Controller.LiveTv; + internal static class RecordingHelper { public static string GetRecordingName(TimerInfo info) diff --git a/src/Jellyfin.LiveTv/Recordings/RecordingNotifier.cs b/src/Jellyfin.LiveTv/Recordings/RecordingNotifier.cs index 3b19a0df..ab1873a1 100644 --- a/src/Jellyfin.LiveTv/Recordings/RecordingNotifier.cs +++ b/src/Jellyfin.LiveTv/Recordings/RecordingNotifier.cs @@ -2,22 +2,22 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Jellyfin.Data; -using Jellyfin.Data.Events; -using Jellyfin.Database.Implementations.Enums; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.LiveTv; -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.Session; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; - namespace Jellyfin.LiveTv.Recordings { + using System; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using Jellyfin.Data; + using Jellyfin.Data.Events; + using Jellyfin.Database.Implementations.Enums; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.LiveTv; + using MediaBrowser.Controller.Session; + using MediaBrowser.Model.Session; + using Microsoft.Extensions.Hosting; + using Microsoft.Extensions.Logging; + /// /// responsible for notifying users when a LiveTV recording is completed. /// diff --git a/src/Jellyfin.LiveTv/Recordings/RecordingsHost.cs b/src/Jellyfin.LiveTv/Recordings/RecordingsHost.cs index 1c30c36e..a65aa288 100644 --- a/src/Jellyfin.LiveTv/Recordings/RecordingsHost.cs +++ b/src/Jellyfin.LiveTv/Recordings/RecordingsHost.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.LiveTv.Recordings; + using System.Threading; using System.Threading.Tasks; using Jellyfin.LiveTv.Timers; using MediaBrowser.Controller.LiveTv; using Microsoft.Extensions.Hosting; -namespace Jellyfin.LiveTv.Recordings; - /// /// responsible for Live TV recordings. /// diff --git a/src/Jellyfin.LiveTv/Recordings/RecordingsManager.cs b/src/Jellyfin.LiveTv/Recordings/RecordingsManager.cs index 150d4aa6..771eb0fe 100644 --- a/src/Jellyfin.LiveTv/Recordings/RecordingsManager.cs +++ b/src/Jellyfin.LiveTv/Recordings/RecordingsManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.LiveTv.Recordings; + using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -36,8 +38,6 @@ using MediaBrowser.Model.MediaInfo; using MediaBrowser.Model.Providers; using Microsoft.Extensions.Logging; -namespace Jellyfin.LiveTv.Recordings; - /// public sealed class RecordingsManager : IRecordingsManager, IDisposable { diff --git a/src/Jellyfin.LiveTv/Recordings/RecordingsMetadataManager.cs b/src/Jellyfin.LiveTv/Recordings/RecordingsMetadataManager.cs index 7f08aa46..1b02a237 100644 --- a/src/Jellyfin.LiveTv/Recordings/RecordingsMetadataManager.cs +++ b/src/Jellyfin.LiveTv/Recordings/RecordingsMetadataManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.LiveTv.Recordings; + using System; using System.Collections.Generic; using System.Globalization; @@ -22,8 +24,6 @@ using MediaBrowser.Controller.LiveTv; using MediaBrowser.Model.Entities; using Microsoft.Extensions.Logging; -namespace Jellyfin.LiveTv.Recordings; - /// /// A service responsible for saving recording metadata. /// diff --git a/src/Jellyfin.LiveTv/TunerHosts/HdHomerun/DiscoverResponse.cs b/src/Jellyfin.LiveTv/TunerHosts/HdHomerun/DiscoverResponse.cs index b9a424a6..66f6fd13 100644 --- a/src/Jellyfin.LiveTv/TunerHosts/HdHomerun/DiscoverResponse.cs +++ b/src/Jellyfin.LiveTv/TunerHosts/HdHomerun/DiscoverResponse.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -#nullable disable - -using System; - namespace Jellyfin.LiveTv.TunerHosts.HdHomerun { +#nullable disable + + using System; + internal class DiscoverResponse { public string FriendlyName { get; set; } diff --git a/src/Jellyfin.LiveTv/TunerHosts/TunerHostManager.cs b/src/Jellyfin.LiveTv/TunerHosts/TunerHostManager.cs index 6d1c1afa..98c2c06d 100644 --- a/src/Jellyfin.LiveTv/TunerHosts/TunerHostManager.cs +++ b/src/Jellyfin.LiveTv/TunerHosts/TunerHostManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.LiveTv.TunerHosts; + using System; using System.Collections.Generic; using System.Globalization; @@ -19,8 +21,6 @@ using MediaBrowser.Model.LiveTv; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; -namespace Jellyfin.LiveTv.TunerHosts; - /// public class TunerHostManager : ITunerHostManager { diff --git a/src/Jellyfin.LiveTv/obj/Debug/net10.0/Jellyfin.LiveTv.AssemblyInfo.cs b/src/Jellyfin.LiveTv/obj/Debug/net10.0/Jellyfin.LiveTv.AssemblyInfo.cs index 29d80a6d..92fc2520 100644 --- a/src/Jellyfin.LiveTv/obj/Debug/net10.0/Jellyfin.LiveTv.AssemblyInfo.cs +++ b/src/Jellyfin.LiveTv/obj/Debug/net10.0/Jellyfin.LiveTv.AssemblyInfo.cs @@ -15,7 +15,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Jellyfin.LiveTv")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f47555f2aa4eff7dcc5c5ef5bbda374f292f0638")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+44ab9e1d6dd9b53ec5329bad76927c63bbda5507")] [assembly: System.Reflection.AssemblyProductAttribute("Jellyfin.LiveTv")] [assembly: System.Reflection.AssemblyTitleAttribute("Jellyfin.LiveTv")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/src/Jellyfin.LiveTv/obj/Debug/net10.0/Jellyfin.LiveTv.AssemblyInfoInputs.cache b/src/Jellyfin.LiveTv/obj/Debug/net10.0/Jellyfin.LiveTv.AssemblyInfoInputs.cache index 511d791a..8d428422 100644 --- a/src/Jellyfin.LiveTv/obj/Debug/net10.0/Jellyfin.LiveTv.AssemblyInfoInputs.cache +++ b/src/Jellyfin.LiveTv/obj/Debug/net10.0/Jellyfin.LiveTv.AssemblyInfoInputs.cache @@ -1 +1 @@ -1216c964da3cdc54e22a95db0afcf02a151eb29c3c42fe725511a60771ca2e91 +05c52fbe59d1a17d6d92624641574d934b50a8859e9515e71765cb030b475eec diff --git a/src/Jellyfin.LiveTv/obj/Debug/net10.0/Jellyfin.LiveTv.csproj.AssemblyReference.cache b/src/Jellyfin.LiveTv/obj/Debug/net10.0/Jellyfin.LiveTv.csproj.AssemblyReference.cache index b83721fff3504d85a0009adc708603b1513d5981..53c2eb0bef35d888675ef51150452f9d78e67524 100644 GIT binary patch delta 3193 zcmb_eO>7%Q6!vV?HY9aOoOKOJlO|1C;wp@75+OivNS#!)B&AJ4DPXl-+f#ST?#^a* z9BM!WiCYhq%-oPb{0MG9D^4KVOD_oZz!?d|nG4r)Dl_Zx+H3Ew6Nx=po;UNp_vU@y zH=kX;e+%^O2V?cVt^M1PQSLfT4|=Ly-yBs}|Kw1P0i7uyJ(?NdhD0@s9o)tjF*FX$F+;@Q67cclkBeWHql6Wqf23$v4 z8IjkCP7(2gnw|Dwn>MyM68HY#l4W5JRC}GH!*atWx5253ULx4RS1DY% zL6Iez>A+Q7spwXPeW)H{7nR3F$L7ENvG!d0kMFLumzR_$pG6d&Bf6+KOI%*k?%g8lkVp8*tNzY8lg*^6MTUgtsCuO{x zU3l8!qk!!VM7DLF*E?A>EV1L>%E0y_%)*82LhgA02I1M2P0_X`+ja{VA&=w-Vqi5w z9=zU(u@6uN-@2gatg8yQKY8QJdks|x9DJzRyx3j> zuxENdD_SVNCcS5Z?{u?fqdc~@5$R&@?g@7^XsSa;G_mO7+S3Hw1oi&8ou;xCe2op# zx?Y12w8wLdlOO!_g`5qas*Xp=YGYuOk3s!z)&rX93AEQZg#nfK`etB)@pjn{ox5Q% z9nr>fg#DfxW&e(hFrXaH1>N$lMR_r3_k=f;o~=PXjio9f+$?;$p^h~@M`#{*0GkV| zYXSZ+HgY1xt|$kD5hQ>4>e2m&505=)C&C>2Ej7pTDYvF{5UQrxigDv`OtZ~~T+MIU z)HTA*kK2zQg9r70wnxvOLZ1Ocp{!G%XgZ+Vzw=c@YFg3gcxbSq`l7h&g`mD1mbbNm z_yy^-2J@t5Q(PgMeXV65uE;O!o#F+~@JlTNjAC#r%HwSEqrX3woQ<$ksp@6U(Y91k z9Q3D>tXuV1*IEvxnft(urkUzFsQd0&N0q9fk +namespace Jellyfin.MediaEncoding.Hls.Extensions; + using System; using Jellyfin.MediaEncoding.Hls.Cache; using Jellyfin.MediaEncoding.Hls.Extractors; using Jellyfin.MediaEncoding.Hls.Playlist; using Microsoft.Extensions.DependencyInjection; -namespace Jellyfin.MediaEncoding.Hls.Extensions; - /// /// Extensions for the interface. /// diff --git a/src/Jellyfin.MediaEncoding.Hls/Extractors/FfProbeKeyframeExtractor.cs b/src/Jellyfin.MediaEncoding.Hls/Extractors/FfProbeKeyframeExtractor.cs index aecfaa1e..47cef8d2 100644 --- a/src/Jellyfin.MediaEncoding.Hls/Extractors/FfProbeKeyframeExtractor.cs +++ b/src/Jellyfin.MediaEncoding.Hls/Extractors/FfProbeKeyframeExtractor.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.MediaEncoding.Hls.Extractors; + using System; using System.Diagnostics.CodeAnalysis; using System.IO; @@ -12,8 +14,6 @@ using MediaBrowser.Controller.MediaEncoding; using Microsoft.Extensions.Logging; using Extractor = Jellyfin.MediaEncoding.Keyframes.FfProbe.FfProbeKeyframeExtractor; -namespace Jellyfin.MediaEncoding.Hls.Extractors; - /// public class FfProbeKeyframeExtractor : IKeyframeExtractor { diff --git a/src/Jellyfin.MediaEncoding.Hls/Extractors/IKeyframeExtractor.cs b/src/Jellyfin.MediaEncoding.Hls/Extractors/IKeyframeExtractor.cs index 009f0c01..b05d5883 100644 --- a/src/Jellyfin.MediaEncoding.Hls/Extractors/IKeyframeExtractor.cs +++ b/src/Jellyfin.MediaEncoding.Hls/Extractors/IKeyframeExtractor.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.MediaEncoding.Hls.Extractors; + using System; using System.Diagnostics.CodeAnalysis; using Jellyfin.MediaEncoding.Keyframes; -namespace Jellyfin.MediaEncoding.Hls.Extractors; - /// /// Keyframe extractor. /// diff --git a/src/Jellyfin.MediaEncoding.Hls/Extractors/MatroskaKeyframeExtractor.cs b/src/Jellyfin.MediaEncoding.Hls/Extractors/MatroskaKeyframeExtractor.cs index 22782313..0726aa99 100644 --- a/src/Jellyfin.MediaEncoding.Hls/Extractors/MatroskaKeyframeExtractor.cs +++ b/src/Jellyfin.MediaEncoding.Hls/Extractors/MatroskaKeyframeExtractor.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.MediaEncoding.Hls.Extractors; + using System; using System.Diagnostics.CodeAnalysis; using Jellyfin.MediaEncoding.Keyframes; using Microsoft.Extensions.Logging; using Extractor = Jellyfin.MediaEncoding.Keyframes.Matroska.MatroskaKeyframeExtractor; -namespace Jellyfin.MediaEncoding.Hls.Extractors; - /// public class MatroskaKeyframeExtractor : IKeyframeExtractor { diff --git a/src/Jellyfin.MediaEncoding.Hls/Playlist/CreateMainPlaylistRequest.cs b/src/Jellyfin.MediaEncoding.Hls/Playlist/CreateMainPlaylistRequest.cs index 57392fbe..cd8150d0 100644 --- a/src/Jellyfin.MediaEncoding.Hls/Playlist/CreateMainPlaylistRequest.cs +++ b/src/Jellyfin.MediaEncoding.Hls/Playlist/CreateMainPlaylistRequest.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace Jellyfin.MediaEncoding.Hls.Playlist; +using System; + /// /// Request class for the method. /// diff --git a/src/Jellyfin.MediaEncoding.Hls/Playlist/DynamicHlsPlaylistGenerator.cs b/src/Jellyfin.MediaEncoding.Hls/Playlist/DynamicHlsPlaylistGenerator.cs index bcd542ea..67ab3cd6 100644 --- a/src/Jellyfin.MediaEncoding.Hls/Playlist/DynamicHlsPlaylistGenerator.cs +++ b/src/Jellyfin.MediaEncoding.Hls/Playlist/DynamicHlsPlaylistGenerator.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.MediaEncoding.Hls.Playlist; + using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; @@ -15,8 +17,6 @@ using MediaBrowser.Common.Configuration; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.MediaEncoding; -namespace Jellyfin.MediaEncoding.Hls.Playlist; - /// public class DynamicHlsPlaylistGenerator : IDynamicHlsPlaylistGenerator { diff --git a/src/Jellyfin.MediaEncoding.Hls/ScheduledTasks/KeyframeExtractionScheduledTask.cs b/src/Jellyfin.MediaEncoding.Hls/ScheduledTasks/KeyframeExtractionScheduledTask.cs index 3faac2b2..68fab1da 100644 --- a/src/Jellyfin.MediaEncoding.Hls/ScheduledTasks/KeyframeExtractionScheduledTask.cs +++ b/src/Jellyfin.MediaEncoding.Hls/ScheduledTasks/KeyframeExtractionScheduledTask.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.MediaEncoding.Hls.ScheduledTasks; + using System; using System.Collections.Generic; using System.IO; @@ -16,8 +18,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Tasks; -namespace Jellyfin.MediaEncoding.Hls.ScheduledTasks; - /// public class KeyframeExtractionScheduledTask : IScheduledTask { diff --git a/src/Jellyfin.MediaEncoding.Hls/obj/Debug/net10.0/Jellyfin.MediaEncoding.Hls.AssemblyInfo.cs b/src/Jellyfin.MediaEncoding.Hls/obj/Debug/net10.0/Jellyfin.MediaEncoding.Hls.AssemblyInfo.cs index e071c971..1828d361 100644 --- a/src/Jellyfin.MediaEncoding.Hls/obj/Debug/net10.0/Jellyfin.MediaEncoding.Hls.AssemblyInfo.cs +++ b/src/Jellyfin.MediaEncoding.Hls/obj/Debug/net10.0/Jellyfin.MediaEncoding.Hls.AssemblyInfo.cs @@ -15,7 +15,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Jellyfin.MediaEncoding.Hls")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f47555f2aa4eff7dcc5c5ef5bbda374f292f0638")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+44ab9e1d6dd9b53ec5329bad76927c63bbda5507")] [assembly: System.Reflection.AssemblyProductAttribute("Jellyfin.MediaEncoding.Hls")] [assembly: System.Reflection.AssemblyTitleAttribute("Jellyfin.MediaEncoding.Hls")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/src/Jellyfin.MediaEncoding.Hls/obj/Debug/net10.0/Jellyfin.MediaEncoding.Hls.AssemblyInfoInputs.cache b/src/Jellyfin.MediaEncoding.Hls/obj/Debug/net10.0/Jellyfin.MediaEncoding.Hls.AssemblyInfoInputs.cache index 2eede6b2..e4f6c3bc 100644 --- a/src/Jellyfin.MediaEncoding.Hls/obj/Debug/net10.0/Jellyfin.MediaEncoding.Hls.AssemblyInfoInputs.cache +++ b/src/Jellyfin.MediaEncoding.Hls/obj/Debug/net10.0/Jellyfin.MediaEncoding.Hls.AssemblyInfoInputs.cache @@ -1 +1 @@ -a2c416f72d02677170491759548f6e8ea44ba6f97a3e44ee7ed0c032dc1c0a8b +ca583f365a5d00e9c0e76313156f5ba5232d8b63753bcae4082518486feff6c3 diff --git a/src/Jellyfin.MediaEncoding.Hls/obj/Debug/net10.0/Jellyfin.MediaEncoding.Hls.csproj.AssemblyReference.cache b/src/Jellyfin.MediaEncoding.Hls/obj/Debug/net10.0/Jellyfin.MediaEncoding.Hls.csproj.AssemblyReference.cache index d6f262c93ebdc7ae2c7a246189751a03039b5828..5b96fa2ce6b4caf8bd77701f6798627529c0a717 100644 GIT binary patch delta 3411 zcmb_eOKclO81^_1VyCg(*d`%Kow#`r2QzV+2o)p*sgsD7q_jy?3RqP)&eYwqyR(^H zhZ?E`2??PbD#EA-KuA2U6gAotg;q#hP}LI`E!Ji# zB?)jB!riT@Z`EJh005nhwm_JvfCJkfr@*=GTZ5~O8sp5{xan=&@;2V6#J%k%1YT^E zW(Lk6qKQ~}mIXU;gpRk3&?_L+-N}6e5Lqf~I+EdHNzp|afiOKCe3ae*3Hnwrp6Ils zIV?%6KFo^d)EG^juxbTo1YKAWGz5>!s)S^u=z?{Dc{;$%#%L%Q9b!MsV|IWA(BUv( zmc&*bt5@!_;yEiza1jZsh`dZh9T8_xLn%9KS;Y#A#B3d$RupUpRhwrlYF$`HmvwkT z!-{P%ok=f<1%fqvL5H)Kb)@iGYH%JGi=tA5(<_=zg!&g|0g;cA4_n#ykGFhTGIU02~867&+O z^#a{Oi`h-6rs!-%vc47VRyOmZvgVBEP>&^=5rv|HHC-%dEMZ(gT3s&D4ohm9+G&F^0z#HWgT1LS$WJer?OVV4a)<0wBCT1+#E6J2~+*0PXPP z>@qLgw5pnkbCn0y0Rb@YLlSoFI09Vw!6D~h9WuG$#z(JwetVZ2yfARY$ye4S%{dHu z;k$+BxCg%XjozntS@@~U^q_m6mdh&2VPzeW25>$Uo({VWt>*-GPMIO@tHE1fyKQu{ z!eMzwiQQOjuRgoovDd<}jhmlYt#|Ne?;Zp?=Qmyxk@jt>B zTH=Q<9(;fQ{_x$}`5mR-MU!+Z9;Uy=%oNjZkyX|p9}gCiEY~aulY*-Y^Ww7Ch3A5fc%mfUU0FzG4NsR4DGMu7-4g(eu?mgR^g**alWx`Nv--A#SgS<6 z40EKc>bOV*^jp`LMas(e!1Izh?u^Cemc<&u*W0LWa@X76vXdV<+^k z+jqJX8a9k}>?Skb@A#w5#TLIqH&R!PZ@T8(?%DFCo}91zUf*+ma(b_?-*~S->!o9C cq<-|0@%Z@t4+fi!TSI@hxTImEo_GxW3qEJdz5oCK delta 812 zcmca!xhsN$jZuVwfq^l7a)XG*L<1MLSz8xwxtl++%3!h`vk+tcN7bEt{mi=9ZJ3yiG%8@==+-$x8B80dPaN6dgsFC&QkItuxW zAfH3LV4RhjlT(?NnWtBrlC5uKU}UOiXrO0g2-9f+(g{-%oRSR+gw1Oe-*JGgD+gL< zG+9JTNLb%c&j=U{$l4|+YRiCpJo&Cp-{u5uH;AvhC+DdePiEAS!K%eTM;qj)&3AP! zLX4b-yo&Sl;I1q; z^oQu{g;^_;TbfgnS&&#%g3In4BR;T`{~BFFwNpgAB((yEHgy!|ZZ`eN3J%X0Q1lrT qm!#;G0@Gt^Zb43BNh&xhO<^Hx3XG6opn}k%%n+you=5{Ve*pjy>Isqn diff --git a/src/Jellyfin.MediaEncoding.Keyframes/FfProbe/FfProbeKeyframeExtractor.cs b/src/Jellyfin.MediaEncoding.Keyframes/FfProbe/FfProbeKeyframeExtractor.cs index 29551f8c..31771ec1 100644 --- a/src/Jellyfin.MediaEncoding.Keyframes/FfProbe/FfProbeKeyframeExtractor.cs +++ b/src/Jellyfin.MediaEncoding.Keyframes/FfProbe/FfProbeKeyframeExtractor.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.MediaEncoding.Keyframes.FfProbe; + using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; -namespace Jellyfin.MediaEncoding.Keyframes.FfProbe; - /// /// FfProbe based keyframe extractor. /// diff --git a/src/Jellyfin.MediaEncoding.Keyframes/FfTool/FfToolKeyframeExtractor.cs b/src/Jellyfin.MediaEncoding.Keyframes/FfTool/FfToolKeyframeExtractor.cs index fc070dba..edd65532 100644 --- a/src/Jellyfin.MediaEncoding.Keyframes/FfTool/FfToolKeyframeExtractor.cs +++ b/src/Jellyfin.MediaEncoding.Keyframes/FfTool/FfToolKeyframeExtractor.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; - namespace Jellyfin.MediaEncoding.Keyframes.FfTool; +using System; + /// /// FfTool based keyframe extractor. /// diff --git a/src/Jellyfin.MediaEncoding.Keyframes/KeyframeData.cs b/src/Jellyfin.MediaEncoding.Keyframes/KeyframeData.cs index e2d4175d..70b7269a 100644 --- a/src/Jellyfin.MediaEncoding.Keyframes/KeyframeData.cs +++ b/src/Jellyfin.MediaEncoding.Keyframes/KeyframeData.cs @@ -2,10 +2,10 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; - namespace Jellyfin.MediaEncoding.Keyframes; +using System.Collections.Generic; + /// /// Keyframe information for a specific file. /// diff --git a/src/Jellyfin.MediaEncoding.Keyframes/Matroska/Extensions/EbmlReaderExtensions.cs b/src/Jellyfin.MediaEncoding.Keyframes/Matroska/Extensions/EbmlReaderExtensions.cs index 80231492..69f89158 100644 --- a/src/Jellyfin.MediaEncoding.Keyframes/Matroska/Extensions/EbmlReaderExtensions.cs +++ b/src/Jellyfin.MediaEncoding.Keyframes/Matroska/Extensions/EbmlReaderExtensions.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.MediaEncoding.Keyframes.Matroska.Extensions; + using System; using System.Buffers.Binary; using Jellyfin.MediaEncoding.Keyframes.Matroska.Models; using NEbml.Core; -namespace Jellyfin.MediaEncoding.Keyframes.Matroska.Extensions; - /// /// Extension methods for the class. /// diff --git a/src/Jellyfin.MediaEncoding.Keyframes/Matroska/MatroskaKeyframeExtractor.cs b/src/Jellyfin.MediaEncoding.Keyframes/Matroska/MatroskaKeyframeExtractor.cs index 1857562b..cb6aa3b2 100644 --- a/src/Jellyfin.MediaEncoding.Keyframes/Matroska/MatroskaKeyframeExtractor.cs +++ b/src/Jellyfin.MediaEncoding.Keyframes/Matroska/MatroskaKeyframeExtractor.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.MediaEncoding.Keyframes.Matroska; + using System; using System.Collections.Generic; using System.IO; @@ -9,8 +11,6 @@ using Jellyfin.MediaEncoding.Keyframes.Matroska.Extensions; using Jellyfin.MediaEncoding.Keyframes.Matroska.Models; using NEbml.Core; -namespace Jellyfin.MediaEncoding.Keyframes.Matroska; - /// /// The keyframe extractor for the matroska container. /// diff --git a/src/Jellyfin.MediaEncoding.Keyframes/obj/Debug/net10.0/Jellyfin.MediaEncoding.Keyframes.AssemblyInfo.cs b/src/Jellyfin.MediaEncoding.Keyframes/obj/Debug/net10.0/Jellyfin.MediaEncoding.Keyframes.AssemblyInfo.cs index aa3be254..5e16b6de 100644 --- a/src/Jellyfin.MediaEncoding.Keyframes/obj/Debug/net10.0/Jellyfin.MediaEncoding.Keyframes.AssemblyInfo.cs +++ b/src/Jellyfin.MediaEncoding.Keyframes/obj/Debug/net10.0/Jellyfin.MediaEncoding.Keyframes.AssemblyInfo.cs @@ -15,7 +15,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Jellyfin Contributors")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("10.11.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("10.11.0+f47555f2aa4eff7dcc5c5ef5bbda374f292f0638")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("10.11.0+44ab9e1d6dd9b53ec5329bad76927c63bbda5507")] [assembly: System.Reflection.AssemblyProductAttribute("Jellyfin.MediaEncoding.Keyframes")] [assembly: System.Reflection.AssemblyTitleAttribute("Jellyfin.MediaEncoding.Keyframes")] [assembly: System.Reflection.AssemblyVersionAttribute("10.11.0.0")] diff --git a/src/Jellyfin.MediaEncoding.Keyframes/obj/Debug/net10.0/Jellyfin.MediaEncoding.Keyframes.AssemblyInfoInputs.cache b/src/Jellyfin.MediaEncoding.Keyframes/obj/Debug/net10.0/Jellyfin.MediaEncoding.Keyframes.AssemblyInfoInputs.cache index 8cd2d5d5..a5dc12d0 100644 --- a/src/Jellyfin.MediaEncoding.Keyframes/obj/Debug/net10.0/Jellyfin.MediaEncoding.Keyframes.AssemblyInfoInputs.cache +++ b/src/Jellyfin.MediaEncoding.Keyframes/obj/Debug/net10.0/Jellyfin.MediaEncoding.Keyframes.AssemblyInfoInputs.cache @@ -1 +1 @@ -abb2fe4187eeebf84d95e9edeca15d6f6becdeb624f84741a7a412739075017c +1eb470b954b163b48e93e723057949c05f69b4f150c7b0f2bc0233bf1cf0b2cf diff --git a/src/Jellyfin.MediaEncoding.Keyframes/obj/Debug/net10.0/Jellyfin.MediaEncoding.Keyframes.csproj.AssemblyReference.cache b/src/Jellyfin.MediaEncoding.Keyframes/obj/Debug/net10.0/Jellyfin.MediaEncoding.Keyframes.csproj.AssemblyReference.cache index 2a3ba2acc1f2387c108b34d3323336ad97c759bd..880f95caf46dc87225994e9fd6cf96838f51ed96 100644 GIT binary patch delta 40 vcmbQKw^DaP37byzsk!?KCRQ0tPGDl;W2|RjU|?xrU|b>KSic~>xG+aI zD>WylGA%Ptzqlw_e`15ElztMB +namespace Jellyfin.Networking; + using System; using System.Net; using System.Net.Sockets; @@ -16,8 +18,6 @@ using MediaBrowser.Model.ApiClient; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -namespace Jellyfin.Networking; - /// /// responsible for responding to auto-discovery messages. /// diff --git a/src/Jellyfin.Networking/HappyEyeballs/HttpClientExtension.cs b/src/Jellyfin.Networking/HappyEyeballs/HttpClientExtension.cs index 4e2dd7f1..d7cc531d 100644 --- a/src/Jellyfin.Networking/HappyEyeballs/HttpClientExtension.cs +++ b/src/Jellyfin.Networking/HappyEyeballs/HttpClientExtension.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Networking.HappyEyeballs; + /* The MIT License (MIT) @@ -34,8 +36,6 @@ using System.Net.Sockets; using System.Threading; using System.Threading.Tasks; -namespace Jellyfin.Networking.HappyEyeballs; - /// /// Defines the class. /// diff --git a/src/Jellyfin.Networking/Manager/NetworkManager.cs b/src/Jellyfin.Networking/Manager/NetworkManager.cs index a37e378a..e8bb1fcc 100644 --- a/src/Jellyfin.Networking/Manager/NetworkManager.cs +++ b/src/Jellyfin.Networking/Manager/NetworkManager.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Networking.Manager; + using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; @@ -21,8 +23,6 @@ using Microsoft.Extensions.Logging; using static MediaBrowser.Controller.Extensions.ConfigurationExtensions; using IConfigurationManager = MediaBrowser.Common.Configuration.IConfigurationManager; -namespace Jellyfin.Networking.Manager; - /// /// Class to take care of network interface management. /// diff --git a/src/Jellyfin.Networking/Udp/SocketFactory.cs b/src/Jellyfin.Networking/Udp/SocketFactory.cs index 5773117a..ad4b06dc 100644 --- a/src/Jellyfin.Networking/Udp/SocketFactory.cs +++ b/src/Jellyfin.Networking/Udp/SocketFactory.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Networking.Udp; + using System; using System.Net; using System.Net.Sockets; using MediaBrowser.Model.Net; -namespace Jellyfin.Networking.Udp; - /// /// Factory class to create different kinds of sockets. /// diff --git a/src/Jellyfin.Networking/obj/Debug/net10.0/Jellyfin.Networking.csproj.AssemblyReference.cache b/src/Jellyfin.Networking/obj/Debug/net10.0/Jellyfin.Networking.csproj.AssemblyReference.cache index d6f262c93ebdc7ae2c7a246189751a03039b5828..cf734d8dd292f029bea2f3080457e050242c55e2 100644 GIT binary patch delta 3156 zcmb_e&u<$=6!thxNmF9E{z0SuNRy@wapaC25+OiB!gUhSl9aXyrGQm+V^7^J>z&Q) zIMh%PB*Y~LBx}S05K@5?hoV+JwW1Xg7gY5>K){^~2QHO3l$rJHuE*YWnu+eDzSaCN&n`xH#K1-*64~)dBm(&V$n7ln2W%|P zzfw9)@D)_1cFC&RYsRrF$S@k0bhC6)zQ8$+YNb{F%N$y*S4$?M(|MRzzr%`Q0O9!N zSMPjx-}++!05GI@0E7JNvjW^*}6&f8UlmtO!PT+6QtQk(bVLa;%Zg1 z5j;_|3{*oV)hKsrw{E}>CE2cM{6+T~PCB{!ap}H@YZf;7sU=)N23%=asEEyVL?|LE zW;U~=mkGAe+z?e4Sy1a7l$Wiz z5p>4m%khuzek=K+RA9dY9$tb4mCiB~?`~PdFpk7UHhXjA5PJ|$vM*wL7>FKtEvO7n zQ_tBTM+ZGF83yl7hZdYflg<@0L6IdSn4kybRIg!E#Yx7c#mZ%ZvgV*_jE-&H?FW8Szr-v;m8xVNqNqnsvFMM3b0t(!Q<6Eb+d);0r~s zzVofTPD_9K*LB%xNv}OXfc?wog6xFn|GstY^EYFe{q3FLF<9W8wA&b-i4VzGmQW27zoeOo z?aTk6Cud8l2Y1<*{iCcuniAvPd0In3yn=1f>s*gzUx|38bUFW%kMf2wUI8>Eu1*q%ZZo+f%tr}{eL>s6qf3!`ORejm{e z3pO1cQO_Jb?C()Pf60qjf$R{Sz=Kv~Xo~OEJ<}itwp&aGw;5IbExo z*rs~f<`>3gKA`N}SC4^?HiHUIzs delta 96 zcmccJ%D5|ngN;#yfq{WBeewn->B)M$yb}#v*k)~AxaDsC#43Zy`piO%`I8q2DNnu! zl(of3F(|1WtDoxkVOD!obNz6-0EJ`ubGti&dAj+bbl9RJ>&u7NX2PCC60o~^y Avj6}9 diff --git a/tests/Jellyfin.Api.Tests/Auth/CustomAuthenticationHandlerTests.cs b/tests/Jellyfin.Api.Tests/Auth/CustomAuthenticationHandlerTests.cs index d3c72baf..262a85ae 100644 --- a/tests/Jellyfin.Api.Tests/Auth/CustomAuthenticationHandlerTests.cs +++ b/tests/Jellyfin.Api.Tests/Auth/CustomAuthenticationHandlerTests.cs @@ -2,29 +2,29 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Linq; -using System.Security.Claims; -using System.Threading.Tasks; -using AutoFixture; -using AutoFixture.AutoMoq; -using Jellyfin.Api.Auth; -using Jellyfin.Api.Constants; -using Jellyfin.Data; -using Jellyfin.Database.Implementations.Entities; -using Jellyfin.Database.Implementations.Enums; -using MediaBrowser.Controller.Authentication; -using MediaBrowser.Controller.Net; -using Microsoft.AspNetCore.Authentication; -using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Logging.Abstractions; -using Microsoft.Extensions.Options; -using Moq; -using Xunit; - namespace Jellyfin.Api.Tests.Auth { + using System; + using System.Linq; + using System.Security.Claims; + using System.Threading.Tasks; + using AutoFixture; + using AutoFixture.AutoMoq; + using Jellyfin.Api.Auth; + using Jellyfin.Api.Constants; + using Jellyfin.Data; + using Jellyfin.Database.Implementations.Entities; + using Jellyfin.Database.Implementations.Enums; + using MediaBrowser.Controller.Authentication; + using MediaBrowser.Controller.Net; + using Microsoft.AspNetCore.Authentication; + using Microsoft.AspNetCore.Http; + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Logging.Abstractions; + using Microsoft.Extensions.Options; + using Moq; + using Xunit; + public class CustomAuthenticationHandlerTests { private readonly IFixture _fixture; diff --git a/tests/Jellyfin.Api.Tests/Auth/DefaultAuthorizationPolicy/DefaultAuthorizationHandlerTests.cs b/tests/Jellyfin.Api.Tests/Auth/DefaultAuthorizationPolicy/DefaultAuthorizationHandlerTests.cs index 30f7a513..131acba4 100644 --- a/tests/Jellyfin.Api.Tests/Auth/DefaultAuthorizationPolicy/DefaultAuthorizationHandlerTests.cs +++ b/tests/Jellyfin.Api.Tests/Auth/DefaultAuthorizationPolicy/DefaultAuthorizationHandlerTests.cs @@ -2,26 +2,26 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Net; -using System.Security.Claims; -using System.Threading.Tasks; -using AutoFixture; -using AutoFixture.AutoMoq; -using Jellyfin.Api.Auth.DefaultAuthorizationPolicy; -using Jellyfin.Api.Constants; -using Jellyfin.Database.Implementations.Entities; -using Jellyfin.Server.Implementations.Security; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Library; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Http; -using Moq; -using Xunit; - namespace Jellyfin.Api.Tests.Auth.DefaultAuthorizationPolicy { + using System; + using System.Collections.Generic; + using System.Net; + using System.Security.Claims; + using System.Threading.Tasks; + using AutoFixture; + using AutoFixture.AutoMoq; + using Jellyfin.Api.Auth.DefaultAuthorizationPolicy; + using Jellyfin.Api.Constants; + using Jellyfin.Database.Implementations.Entities; + using Jellyfin.Server.Implementations.Security; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Library; + using Microsoft.AspNetCore.Authorization; + using Microsoft.AspNetCore.Http; + using Moq; + using Xunit; + public class DefaultAuthorizationHandlerTests { private readonly Mock _configurationManagerMock; diff --git a/tests/Jellyfin.Api.Tests/Auth/FirstTimeSetupPolicy/FirstTimeSetupHandlerTests.cs b/tests/Jellyfin.Api.Tests/Auth/FirstTimeSetupPolicy/FirstTimeSetupHandlerTests.cs index 3445aee2..d86245c9 100644 --- a/tests/Jellyfin.Api.Tests/Auth/FirstTimeSetupPolicy/FirstTimeSetupHandlerTests.cs +++ b/tests/Jellyfin.Api.Tests/Auth/FirstTimeSetupPolicy/FirstTimeSetupHandlerTests.cs @@ -2,27 +2,27 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Security.Claims; -using System.Threading.Tasks; -using AutoFixture; -using AutoFixture.AutoMoq; -using Jellyfin.Api.Auth.DefaultAuthorizationPolicy; -using Jellyfin.Api.Auth.FirstTimeSetupPolicy; -using Jellyfin.Api.Constants; -using Jellyfin.Database.Implementations.Entities; -using Jellyfin.Database.Implementations.Enums; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Library; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.DependencyInjection; -using Moq; -using Xunit; - namespace Jellyfin.Api.Tests.Auth.FirstTimeSetupPolicy { + using System; + using System.Collections.Generic; + using System.Security.Claims; + using System.Threading.Tasks; + using AutoFixture; + using AutoFixture.AutoMoq; + using Jellyfin.Api.Auth.DefaultAuthorizationPolicy; + using Jellyfin.Api.Auth.FirstTimeSetupPolicy; + using Jellyfin.Api.Constants; + using Jellyfin.Database.Implementations.Entities; + using Jellyfin.Database.Implementations.Enums; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Library; + using Microsoft.AspNetCore.Authorization; + using Microsoft.AspNetCore.Http; + using Microsoft.Extensions.DependencyInjection; + using Moq; + using Xunit; + public class FirstTimeSetupHandlerTests { private readonly Mock _configurationManagerMock; diff --git a/tests/Jellyfin.Api.Tests/Auth/IgnoreSchedulePolicy/IgnoreScheduleHandlerTests.cs b/tests/Jellyfin.Api.Tests/Auth/IgnoreSchedulePolicy/IgnoreScheduleHandlerTests.cs index 118395a7..ef1d1b34 100644 --- a/tests/Jellyfin.Api.Tests/Auth/IgnoreSchedulePolicy/IgnoreScheduleHandlerTests.cs +++ b/tests/Jellyfin.Api.Tests/Auth/IgnoreSchedulePolicy/IgnoreScheduleHandlerTests.cs @@ -2,24 +2,24 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using AutoFixture; -using AutoFixture.AutoMoq; -using Jellyfin.Api.Auth.DefaultAuthorizationPolicy; -using Jellyfin.Api.Constants; -using Jellyfin.Database.Implementations.Entities; -using Jellyfin.Database.Implementations.Enums; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Library; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Http; -using Moq; -using Xunit; - namespace Jellyfin.Api.Tests.Auth.IgnoreSchedulePolicy { + using System; + using System.Collections.Generic; + using System.Threading.Tasks; + using AutoFixture; + using AutoFixture.AutoMoq; + using Jellyfin.Api.Auth.DefaultAuthorizationPolicy; + using Jellyfin.Api.Constants; + using Jellyfin.Database.Implementations.Entities; + using Jellyfin.Database.Implementations.Enums; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Library; + using Microsoft.AspNetCore.Authorization; + using Microsoft.AspNetCore.Http; + using Moq; + using Xunit; + public class IgnoreScheduleHandlerTests { private readonly Mock _configurationManagerMock; diff --git a/tests/Jellyfin.Api.Tests/Controllers/DynamicHlsControllerTests.cs b/tests/Jellyfin.Api.Tests/Controllers/DynamicHlsControllerTests.cs index 3605d4a8..a16f6d2b 100644 --- a/tests/Jellyfin.Api.Tests/Controllers/DynamicHlsControllerTests.cs +++ b/tests/Jellyfin.Api.Tests/Controllers/DynamicHlsControllerTests.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Jellyfin.Api.Controllers; -using Xunit; - namespace Jellyfin.Api.Tests.Controllers { + using System; + using Jellyfin.Api.Controllers; + using Xunit; + public class DynamicHlsControllerTests { [Theory] diff --git a/tests/Jellyfin.Api.Tests/Controllers/ImageControllerTests.cs b/tests/Jellyfin.Api.Tests/Controllers/ImageControllerTests.cs index ab014d45..c505a839 100644 --- a/tests/Jellyfin.Api.Tests/Controllers/ImageControllerTests.cs +++ b/tests/Jellyfin.Api.Tests/Controllers/ImageControllerTests.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Tests.Controllers; + using Jellyfin.Api.Controllers; using Xunit; -namespace Jellyfin.Api.Tests.Controllers; - public static class ImageControllerTests { [Theory] diff --git a/tests/Jellyfin.Api.Tests/Controllers/SystemControllerTests.cs b/tests/Jellyfin.Api.Tests/Controllers/SystemControllerTests.cs index 28be4ea2..21eac3da 100644 --- a/tests/Jellyfin.Api.Tests/Controllers/SystemControllerTests.cs +++ b/tests/Jellyfin.Api.Tests/Controllers/SystemControllerTests.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Jellyfin.Api.Controllers; -using Jellyfin.Server.Implementations.SystemBackupService; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller; -using MediaBrowser.Model.IO; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Logging; -using Moq; -using Xunit; - namespace Jellyfin.Api.Tests.Controllers { + using Jellyfin.Api.Controllers; + using Jellyfin.Server.Implementations.SystemBackupService; + using MediaBrowser.Common.Net; + using MediaBrowser.Controller; + using MediaBrowser.Model.IO; + using Microsoft.AspNetCore.Mvc; + using Microsoft.Extensions.Logging; + using Moq; + using Xunit; + public class SystemControllerTests { [Fact] diff --git a/tests/Jellyfin.Api.Tests/Controllers/UserControllerTests.cs b/tests/Jellyfin.Api.Tests/Controllers/UserControllerTests.cs index 410368d9..eafd62dc 100644 --- a/tests/Jellyfin.Api.Tests/Controllers/UserControllerTests.cs +++ b/tests/Jellyfin.Api.Tests/Controllers/UserControllerTests.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Api.Tests.Controllers; + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -25,8 +27,6 @@ using Moq; using Nikse.SubtitleEdit.Core.Common; using Xunit; -namespace Jellyfin.Api.Tests.Controllers; - public class UserControllerTests { private readonly UserController _subject; diff --git a/tests/Jellyfin.Api.Tests/Helpers/RequestHelpersTests.cs b/tests/Jellyfin.Api.Tests/Helpers/RequestHelpersTests.cs index 27e2aa37..2824286a 100644 --- a/tests/Jellyfin.Api.Tests/Helpers/RequestHelpersTests.cs +++ b/tests/Jellyfin.Api.Tests/Helpers/RequestHelpersTests.cs @@ -2,19 +2,19 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Security.Claims; -using Jellyfin.Api.Constants; -using Jellyfin.Api.Helpers; -using Jellyfin.Data.Enums; -using Jellyfin.Database.Implementations.Enums; -using MediaBrowser.Controller.Net; -using Xunit; - namespace Jellyfin.Api.Tests.Helpers { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Security.Claims; + using Jellyfin.Api.Constants; + using Jellyfin.Api.Helpers; + using Jellyfin.Data.Enums; + using Jellyfin.Database.Implementations.Enums; + using MediaBrowser.Controller.Net; + using Xunit; + public static class RequestHelpersTests { [Theory] diff --git a/tests/Jellyfin.Api.Tests/Middleware/UrlDecodeQueryFeatureTests.cs b/tests/Jellyfin.Api.Tests/Middleware/UrlDecodeQueryFeatureTests.cs index 52a9f773..ca9afa56 100644 --- a/tests/Jellyfin.Api.Tests/Middleware/UrlDecodeQueryFeatureTests.cs +++ b/tests/Jellyfin.Api.Tests/Middleware/UrlDecodeQueryFeatureTests.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Http.Features; -using Microsoft.Extensions.Primitives; -using Xunit; - namespace Jellyfin.Api.Middleware.Tests { + using System.Collections.Generic; + using System.Linq; + using Microsoft.AspNetCore.Http; + using Microsoft.AspNetCore.Http.Features; + using Microsoft.Extensions.Primitives; + using Xunit; + public static class UrlDecodeQueryFeatureTests { [Theory] diff --git a/tests/Jellyfin.Api.Tests/ModelBinders/CommaDelimitedCollectionModelBinderTests.cs b/tests/Jellyfin.Api.Tests/ModelBinders/CommaDelimitedCollectionModelBinderTests.cs index 19d87d07..74eba1a8 100644 --- a/tests/Jellyfin.Api.Tests/ModelBinders/CommaDelimitedCollectionModelBinderTests.cs +++ b/tests/Jellyfin.Api.Tests/ModelBinders/CommaDelimitedCollectionModelBinderTests.cs @@ -2,20 +2,20 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Threading.Tasks; -using Jellyfin.Api.ModelBinders; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc.ModelBinding; -using Microsoft.Extensions.Logging.Abstractions; -using Microsoft.Extensions.Primitives; -using Moq; -using Xunit; - namespace Jellyfin.Api.Tests.ModelBinders { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using Jellyfin.Api.ModelBinders; + using Microsoft.AspNetCore.Http; + using Microsoft.AspNetCore.Mvc.ModelBinding; + using Microsoft.Extensions.Logging.Abstractions; + using Microsoft.Extensions.Primitives; + using Moq; + using Xunit; + public sealed class CommaDelimitedCollectionModelBinderTests { [Fact] diff --git a/tests/Jellyfin.Api.Tests/ModelBinders/PipeDelimitedCollectionModelBinderTests.cs b/tests/Jellyfin.Api.Tests/ModelBinders/PipeDelimitedCollectionModelBinderTests.cs index 84ed75c6..89e1c734 100644 --- a/tests/Jellyfin.Api.Tests/ModelBinders/PipeDelimitedCollectionModelBinderTests.cs +++ b/tests/Jellyfin.Api.Tests/ModelBinders/PipeDelimitedCollectionModelBinderTests.cs @@ -2,20 +2,20 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Threading.Tasks; -using Jellyfin.Api.ModelBinders; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc.ModelBinding; -using Microsoft.Extensions.Logging.Abstractions; -using Microsoft.Extensions.Primitives; -using Moq; -using Xunit; - namespace Jellyfin.Api.Tests.ModelBinders { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Threading.Tasks; + using Jellyfin.Api.ModelBinders; + using Microsoft.AspNetCore.Http; + using Microsoft.AspNetCore.Mvc.ModelBinding; + using Microsoft.Extensions.Logging.Abstractions; + using Microsoft.Extensions.Primitives; + using Moq; + using Xunit; + public sealed class PipeDelimitedCollectionModelBinderTests { [Fact] diff --git a/tests/Jellyfin.Api.Tests/TestHelpers.cs b/tests/Jellyfin.Api.Tests/TestHelpers.cs index 0851d99b..b7691c4f 100644 --- a/tests/Jellyfin.Api.Tests/TestHelpers.cs +++ b/tests/Jellyfin.Api.Tests/TestHelpers.cs @@ -2,25 +2,25 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Net; -using System.Security.Claims; -using Jellyfin.Api.Constants; -using Jellyfin.Data; -using Jellyfin.Database.Implementations.Entities; -using Jellyfin.Database.Implementations.Enums; -using Jellyfin.Server.Implementations.Users; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.Configuration; -using Microsoft.AspNetCore.Http; -using Moq; -using AccessSchedule = Jellyfin.Database.Implementations.Entities.AccessSchedule; - namespace Jellyfin.Api.Tests { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Net; + using System.Security.Claims; + using Jellyfin.Api.Constants; + using Jellyfin.Data; + using Jellyfin.Database.Implementations.Entities; + using Jellyfin.Database.Implementations.Enums; + using Jellyfin.Server.Implementations.Users; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Controller.Library; + using MediaBrowser.Model.Configuration; + using Microsoft.AspNetCore.Http; + using Moq; + using AccessSchedule = Jellyfin.Database.Implementations.Entities.AccessSchedule; + public static class TestHelpers { public static ClaimsPrincipal SetupUser( diff --git a/tests/Jellyfin.Api.Tests/obj/Debug/net10.0/Jellyfin.Api.Tests.AssemblyInfo.cs b/tests/Jellyfin.Api.Tests/obj/Debug/net10.0/Jellyfin.Api.Tests.AssemblyInfo.cs index 693dd636..18f4d5b6 100644 --- a/tests/Jellyfin.Api.Tests/obj/Debug/net10.0/Jellyfin.Api.Tests.AssemblyInfo.cs +++ b/tests/Jellyfin.Api.Tests/obj/Debug/net10.0/Jellyfin.Api.Tests.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Jellyfin.Api.Tests")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f47555f2aa4eff7dcc5c5ef5bbda374f292f0638")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+44ab9e1d6dd9b53ec5329bad76927c63bbda5507")] [assembly: System.Reflection.AssemblyProductAttribute("Jellyfin.Api.Tests")] [assembly: System.Reflection.AssemblyTitleAttribute("Jellyfin.Api.Tests")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/tests/Jellyfin.Api.Tests/obj/Debug/net10.0/Jellyfin.Api.Tests.AssemblyInfoInputs.cache b/tests/Jellyfin.Api.Tests/obj/Debug/net10.0/Jellyfin.Api.Tests.AssemblyInfoInputs.cache index b32954c7..2bf52f95 100644 --- a/tests/Jellyfin.Api.Tests/obj/Debug/net10.0/Jellyfin.Api.Tests.AssemblyInfoInputs.cache +++ b/tests/Jellyfin.Api.Tests/obj/Debug/net10.0/Jellyfin.Api.Tests.AssemblyInfoInputs.cache @@ -1 +1 @@ -a5b1bcb0d3bfaf6dfb8a15e410ec204c35bab867904000f9de7db6eeae6798ad +85f51892bf691a51b652c19ec132b222cda9f5b5b5640bdc3fd668f9e494802d diff --git a/tests/Jellyfin.Api.Tests/obj/Debug/net10.0/Jellyfin.Api.Tests.csproj.AssemblyReference.cache b/tests/Jellyfin.Api.Tests/obj/Debug/net10.0/Jellyfin.Api.Tests.csproj.AssemblyReference.cache index 0073fe34fb9b2d275e097c264f533611213df67a..c2f7a0562e6ead909aec23aad23c0a8d3e56f1cd 100644 GIT binary patch delta 3407 zcmb_e&2Jk;6!&bJ64E9lj@^)t=DVSe%*1H|3RNpe97k=iJs?3ZsLX73*V%a2X)5+$ulBup z@6CI^_j~X6&!vCXq^jLuqFA-KJO0)$U);k z`?Iq*@9KZl008Pd7C}4|_+dKIDySBRVkYIUDafgNUJE?I`y=bcn4-``PvO znif#aZE;Wavju~q96X)ZsFFjVmYtIJvD+ZZK9C{@yFIq%Wdp(EIbB6Lq*0l2tHwrb z{7@5nT55RF3D8OuH{WZUPvV@8HGXOaFCZ1p6?Bxu+7coZ5wFj9Y(~itY~TwNrY=*Y ziQo-5jk8%r%fhjFgAzGo`*wouS^cgs8oU41dEwvjy~p-Ft!RrLAK?*8t#)YyCg5;l zc<3bn_P`UVxg;iNOxLYD36)3o147^mDApWY7WEWa@K(?-FWXh!?~IFt@sGa0VI#p) zfi}x|a0w=T0rBRxMGOQ+F$Xj!IKno#Lv)v7f7ngTh77+M^GkD z2uGEtyph)CO_k>$(g`vw6nWLygKRTz@23RX8-Kp_=%l~#1j!2=xn8*&;u|>?p5_{eyiSy|X6Wm7ukGodF-^m613FD0 zIyUM=mc(wJyq@a=+amI8baUQLUo0>(u zL<%jyBq`_=XNjy|EO;Uc4_i6kQ8%V}GoCB4L#1XbX}Rqc{p8Q8nSs+CV{ZszQpX)ef5~3Ql(=3JE!u_#|J^A0xa27V;8HIB4P+z&j!JZSFj`0oT)If zXV8Koj}!c!fe5sQR2ito66ta+7gX}SDha7H8f?bc+TXk~+L+Ko9$|Bl^rS zN_9AiWSZyGt)v0{LaEGhVsY!(n)=`=vA@-3hzUi`YS^Gk#^4vk89ro7afo3Q$R)j9 zwuvokVNjY}g0#0(cwFP766>>wEGgWt$8ESv+@%sTm~~Ze*NcV-dHLP^wQ)`I`Of5l z17>IR8VHcF&gcsJyZN^Ov6*VYen-uow#Jr#GwkY-6;pp<((jxI$CB5KCM(ES&2J8O h1n4~9fVC9`?;KDX*>%uK}^CwmrOl~k^oh)m>%a}j; znV>RDaZ$4V#0F6*{iMu1eV5dv(scd2)RN+o#JrTmq7)-N1CT6>UP?~R#yy`IH?v84 z^G%j85Ssj_N>eK(Gcma+vm`UQSl>j?P|rj^Co>78+Y+eD1uh5DyE$2XFVo}$vO%h-D_1n&j!5831(|=qBbAWF+bto0?7D5F*0r=^Sd}H(9`3b91=X3`UTiNpmz+ z!5Z{RiW2jRb23X(ixNxni?HgSJXc$CvZ%SrcEqnjS)vtL!u<&-3fsEb8gT2vR%w zZk);FZJsg+RodP%Am4*kDR?`BRWUYCz8Gda`E{TOM_PVSF5E=#KoMrQ{G!SH=2}4Y zYd5?5Dxj;+D$dVCR?p%E6aWYBJiogTC(Ow;0U6DkTbfgnS&&#%f}~y+?iPnY7gVz) z5N-y#gC!)jq6DgV?dFW&g$CfDhyewKVsS}|UMVo8q~;dnB$lLtW5E;_mZre4oP4lZ OWb$=qmCX(<+ob>$$?o$2 diff --git a/tests/Jellyfin.Api.Tests/obj/Debug/net10.0/MvcTestingAppManifest.json b/tests/Jellyfin.Api.Tests/obj/Debug/net10.0/MvcTestingAppManifest.json index e9639252..b8742cc8 100644 --- a/tests/Jellyfin.Api.Tests/obj/Debug/net10.0/MvcTestingAppManifest.json +++ b/tests/Jellyfin.Api.Tests/obj/Debug/net10.0/MvcTestingAppManifest.json @@ -1,10 +1,10 @@ { "Emby.Naming": "E:\\Projects\\pgsql-jellyfin\\Emby.Naming", "Jellyfin.Api": "E:\\Projects\\pgsql-jellyfin\\Jellyfin.Api", - "Jellyfin.Data": "E:\\Projects\\pgsql-jellyfin\\Jellyfin.Data", - "Jellyfin.Database.Implementations": "E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.Database\\Jellyfin.Database.Implementations", + "Jellyfin.Data, Version=10.12.0.0, Culture=neutral, PublicKeyToken=null": "E:\\Projects\\pgsql-jellyfin\\Jellyfin.Data", + "Jellyfin.Database.Implementations, Version=10.12.0.0, Culture=neutral, PublicKeyToken=null": "E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.Database\\Jellyfin.Database.Implementations", "Jellyfin.Database.Providers.Sqlite": "E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.Database\\Jellyfin.Database.Providers.Sqlite", - "Jellyfin.Extensions": "E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.Extensions", + "Jellyfin.Extensions, Version=10.12.0.0, Culture=neutral, PublicKeyToken=null": "E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.Extensions", "Jellyfin.MediaEncoding.Hls": "E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.MediaEncoding.Hls", "Jellyfin.MediaEncoding.Keyframes": "E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.MediaEncoding.Keyframes", "Jellyfin.Networking": "E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.Networking", @@ -12,5 +12,5 @@ "MediaBrowser.Common": "E:\\Projects\\pgsql-jellyfin\\MediaBrowser.Common", "MediaBrowser.Controller": "E:\\Projects\\pgsql-jellyfin\\MediaBrowser.Controller", "MediaBrowser.MediaEncoding": "E:\\Projects\\pgsql-jellyfin\\MediaBrowser.MediaEncoding", - "MediaBrowser.Model": "E:\\Projects\\pgsql-jellyfin\\MediaBrowser.Model" + "MediaBrowser.Model, Version=10.12.0.0, Culture=neutral, PublicKeyToken=null": "E:\\Projects\\pgsql-jellyfin\\MediaBrowser.Model" } \ No newline at end of file diff --git a/tests/Jellyfin.Common.Tests/Crc32Tests.cs b/tests/Jellyfin.Common.Tests/Crc32Tests.cs index 44a040d5..0a5a4cde 100644 --- a/tests/Jellyfin.Common.Tests/Crc32Tests.cs +++ b/tests/Jellyfin.Common.Tests/Crc32Tests.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Text; -using MediaBrowser.Common; -using Xunit; - namespace Jellyfin.Common.Tests { + using System; + using System.Text; + using MediaBrowser.Common; + using Xunit; + public static class Crc32Tests { [Fact] diff --git a/tests/Jellyfin.Common.Tests/Providers/ProviderIdParserTests.cs b/tests/Jellyfin.Common.Tests/Providers/ProviderIdParserTests.cs index f7442f20..f678e2fa 100644 --- a/tests/Jellyfin.Common.Tests/Providers/ProviderIdParserTests.cs +++ b/tests/Jellyfin.Common.Tests/Providers/ProviderIdParserTests.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using MediaBrowser.Common.Providers; -using Xunit; - namespace Jellyfin.Common.Tests.Providers { + using System; + using MediaBrowser.Common.Providers; + using Xunit; + public class ProviderIdParserTests { [Theory] diff --git a/tests/Jellyfin.Common.Tests/obj/Debug/net10.0/Jellyfin.Common.Tests.AssemblyInfo.cs b/tests/Jellyfin.Common.Tests/obj/Debug/net10.0/Jellyfin.Common.Tests.AssemblyInfo.cs index 9837ea61..873d6d0c 100644 --- a/tests/Jellyfin.Common.Tests/obj/Debug/net10.0/Jellyfin.Common.Tests.AssemblyInfo.cs +++ b/tests/Jellyfin.Common.Tests/obj/Debug/net10.0/Jellyfin.Common.Tests.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Jellyfin.Common.Tests")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f47555f2aa4eff7dcc5c5ef5bbda374f292f0638")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+44ab9e1d6dd9b53ec5329bad76927c63bbda5507")] [assembly: System.Reflection.AssemblyProductAttribute("Jellyfin.Common.Tests")] [assembly: System.Reflection.AssemblyTitleAttribute("Jellyfin.Common.Tests")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/tests/Jellyfin.Common.Tests/obj/Debug/net10.0/Jellyfin.Common.Tests.AssemblyInfoInputs.cache b/tests/Jellyfin.Common.Tests/obj/Debug/net10.0/Jellyfin.Common.Tests.AssemblyInfoInputs.cache index 4a6b4153..91049680 100644 --- a/tests/Jellyfin.Common.Tests/obj/Debug/net10.0/Jellyfin.Common.Tests.AssemblyInfoInputs.cache +++ b/tests/Jellyfin.Common.Tests/obj/Debug/net10.0/Jellyfin.Common.Tests.AssemblyInfoInputs.cache @@ -1 +1 @@ -442213f8c3d97cf9176f32dcccdc4bacd497966fdcced068ec5319cffcbba943 +e859de8b13b4445122c4121f6f377e0d61a6d875ba288f8916aced68034c21fd diff --git a/tests/Jellyfin.Common.Tests/obj/Debug/net10.0/Jellyfin.Common.Tests.csproj.AssemblyReference.cache b/tests/Jellyfin.Common.Tests/obj/Debug/net10.0/Jellyfin.Common.Tests.csproj.AssemblyReference.cache index 1540310a17f117a6012de7481feedc1b7a224b12..d0741e78ed132916ca92dfc85fdfffd54d35d37c 100644 GIT binary patch delta 3228 zcmb_e&2Jk;6!&b@Hcd&C`h!B!xJlDAb`&O#5)dFE;X0|>lJqN4Db!S5Z>H|H>z&Q) zIMjfM5C^16Aep%#AyE*VplSsd5bXsaA=H1N?HMjydZ@URne~26yz4X-BiXV%Z|3*r zz2EP>_sMNNy<*eT^%b`xaS`${@DB3)HcZ3K_jECbb$Nma@(wOfzi zhf-{((*Kh8l$Iv|jJnsCaLvLdKedQgkO7w)7Aj$L4H1fnj5(QK)HQ-_e38QWs}z~S zcN;F?YE?I@uvoDvQ8gFab9Vm^KQ~^^-@9=^;CtA+TrzAVCOPATd`o&SbGe@n>Q5&* z2Ufm-Gavu`l`G(suaUscEt*`h?1si`eeRuLuahJLtB?p6A^_r4Cpyk1s!NY#JyM~o zl(VK*5Jwwc3sIYfB6}(_zwBL@T;_h~Rf^M4;0$+Xz@Jl-sR* z0;+ef&HmaNI+E>X0sp}H=Iv3f-6Dd8?M5LIzR|uL$HAnCS?9|C1O;Zxqsal0A+fyi zAZi%%=9r0=X<+Qt{QtR-1_ivG`%g6pO-5Bpuizd>6rLn{O{e-A;*(osNf$;-Si6Gg z1`9T=WaTqs`-4%fXj}ZG7@*)0N-cO8skF{JV{igSxz?dNx+7(FV=Cf1%g}&ZE#`E! zYGRw}n#~`KHQt~DKSTqItt+F$?iCvb*0`|w#nPRh;Zc*fS8OdIvZixf2{t(_-U2#Q Li648r{=M=aK)2o0 delta 38 ucmZ3}%hZ04k%NuVkb!}LF@3TEv-CveK(<+17jC(mzp-j5)8->mFR}sM=MBsN diff --git a/tests/Jellyfin.Controller.Tests/BaseItemManagerTests.cs b/tests/Jellyfin.Controller.Tests/BaseItemManagerTests.cs index f2629f2b..0e1e1c63 100644 --- a/tests/Jellyfin.Controller.Tests/BaseItemManagerTests.cs +++ b/tests/Jellyfin.Controller.Tests/BaseItemManagerTests.cs @@ -2,17 +2,17 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using MediaBrowser.Controller.BaseItemManager; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Model.Configuration; -using Moq; -using Xunit; - namespace Jellyfin.Controller.Tests { + using System; + using MediaBrowser.Controller.BaseItemManager; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Model.Configuration; + using Moq; + using Xunit; + public class BaseItemManagerTests { [Theory] diff --git a/tests/Jellyfin.Controller.Tests/DirectoryServiceTests.cs b/tests/Jellyfin.Controller.Tests/DirectoryServiceTests.cs index 059dcc52..319dcec2 100644 --- a/tests/Jellyfin.Controller.Tests/DirectoryServiceTests.cs +++ b/tests/Jellyfin.Controller.Tests/DirectoryServiceTests.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Linq; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.IO; -using Moq; -using Xunit; - namespace Jellyfin.Controller.Tests { + using System.Linq; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.IO; + using Moq; + using Xunit; + public class DirectoryServiceTests { private const string LowerCasePath = "/music/someartist"; diff --git a/tests/Jellyfin.Controller.Tests/Entities/BaseItemTests.cs b/tests/Jellyfin.Controller.Tests/Entities/BaseItemTests.cs index 902def1f..8cb83f17 100644 --- a/tests/Jellyfin.Controller.Tests/Entities/BaseItemTests.cs +++ b/tests/Jellyfin.Controller.Tests/Entities/BaseItemTests.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Controller.Tests.Entities; + using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Model.MediaInfo; using Moq; using Xunit; -namespace Jellyfin.Controller.Tests.Entities; - public class BaseItemTests { [Theory] diff --git a/tests/Jellyfin.Controller.Tests/obj/Debug/net10.0/Jellyfin.Controller.Tests.AssemblyInfo.cs b/tests/Jellyfin.Controller.Tests/obj/Debug/net10.0/Jellyfin.Controller.Tests.AssemblyInfo.cs index 4969d9a7..32d55849 100644 --- a/tests/Jellyfin.Controller.Tests/obj/Debug/net10.0/Jellyfin.Controller.Tests.AssemblyInfo.cs +++ b/tests/Jellyfin.Controller.Tests/obj/Debug/net10.0/Jellyfin.Controller.Tests.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Jellyfin.Controller.Tests")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f47555f2aa4eff7dcc5c5ef5bbda374f292f0638")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+44ab9e1d6dd9b53ec5329bad76927c63bbda5507")] [assembly: System.Reflection.AssemblyProductAttribute("Jellyfin.Controller.Tests")] [assembly: System.Reflection.AssemblyTitleAttribute("Jellyfin.Controller.Tests")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/tests/Jellyfin.Controller.Tests/obj/Debug/net10.0/Jellyfin.Controller.Tests.AssemblyInfoInputs.cache b/tests/Jellyfin.Controller.Tests/obj/Debug/net10.0/Jellyfin.Controller.Tests.AssemblyInfoInputs.cache index 33229dc6..5b2e63e4 100644 --- a/tests/Jellyfin.Controller.Tests/obj/Debug/net10.0/Jellyfin.Controller.Tests.AssemblyInfoInputs.cache +++ b/tests/Jellyfin.Controller.Tests/obj/Debug/net10.0/Jellyfin.Controller.Tests.AssemblyInfoInputs.cache @@ -1 +1 @@ -119c147167464e03b2f7153dee81ccf7467be460ac0f51d70881504fb8c6e839 +f13fc7bc8e4f1e09ead0f34611dcfc3d3d9220be52df372535798fabbe7990f9 diff --git a/tests/Jellyfin.Controller.Tests/obj/Debug/net10.0/Jellyfin.Controller.Tests.csproj.AssemblyReference.cache b/tests/Jellyfin.Controller.Tests/obj/Debug/net10.0/Jellyfin.Controller.Tests.csproj.AssemblyReference.cache index 16e69a80df98f0471ea9c14e3c99baddd240fc28..2977e42cb99c85c78f98a1ce4cd1cc3397f17773 100644 GIT binary patch delta 3221 zcmb`J&u<$=6vsUqC3TY~xc*T>)1*n$mKegsCJ`zK4yluhwn<5wv=p$SZ0xDKWxcbR z9fuka5#rWEB{Q6mPz#77Z7NP6+6zKLsNz2WafM5-g-e-P@2`n>okU`#L{a9=yf<$? z-}l~Mo8ac3prZ>s-{@HD8h_{4FCLip-v36~n45j2xIpkVRH9bVtXOOM3)hgY*RN0nL94Y&(LgkxgE@H}mUSI~SS+^r`CDH-F#m`H0D7epKsR6A$A1DJ zyOZc@-0fw*b?$BaJaAF6pWq%RY>yL;#|dd&c#H{;F>p#+7$3fbh^1lUH6CXEMYeh3 zI9ra#p8=i17J$CRxZpngs#1Qc z)w~Gblwy08#7pjVnxOzN>KtFdRTCS0*E}vG9WK>PRKUhMA`}tX=U{eTD-mqrD-_ON zr^pb&TW}6nDwtGJDkGy1Q2^W6pMi%7m?g0#ACJR?lAkOKgIe} z`x#IU<-=Zi$Bayc?H=@?)OD_Pn=ejdsYVDVRH7z*@aX_h97vNO%O+Abi+3(yUMWD_ zl~3lEub=$%`0=raHg)zd0LIv({;_V4v<~(!7|n)7m~@;9^dQ$x6&td@RKl@Xx=N5* z=E{)Qy|6D=b$EeWAo3>BTEupA#7l*w&uPQJp1|EJiHeYMBP;OhI=PcQ_eCl&-Jc2O z@_Y@Ey1J@wsX6T9%&X$vC&Th`$T?sU@yF6=9TrI4q_{#<^J-m+BROg3d{=TWaBF~k3T0EUpv?6eaMeza{t*EM&V_i0l$_`_+ej`wGUNh< zu2W7-rKYPS68G&f0BN?eFU@*-_Olgbk0{sAKDzhe%{Th813^W27z?jwtN`ZOM6VOk zJgQ>izi#&U?wiWtor9BZ12Fq+&oJv$(i`Fm;%jyt`>$P*cB##zF^|fcdXnJxEJUE) zE?YpH&J|m&JP_4~H>Q4U4jsu>GnvEX#{JQ9t5FD#twsSH&$g~c(wG!^Yu^BNP-b>L znj96cBtCai2ph=UIp(>hsc-Cdf&aOj`enS8|D6v)<6))Jt+nS6g$qQhYE)ZCd|V5y z=E7(Zm)=Emiv`OoL-L+uNBsG0+A{f0F+joBDK+6Kq|zF1kp2!B7FwI~=**ErTk{{? zR0a<^WnxBCD+acxRUafS7W_a4*ofVslh^%Ye UujDp4Ebao@l!xznJBk -using System; -using System.Collections.Generic; -using Xunit; - namespace Jellyfin.Extensions.Tests { + using System; + using System.Collections.Generic; + using Xunit; + public static class CopyToExtensionsTests { public static TheoryData, IList, int, IList> CopyTo_Valid_Correct_TestData() diff --git a/tests/Jellyfin.Extensions.Tests/FileHelperTests.cs b/tests/Jellyfin.Extensions.Tests/FileHelperTests.cs index de47244a..e9fa456a 100644 --- a/tests/Jellyfin.Extensions.Tests/FileHelperTests.cs +++ b/tests/Jellyfin.Extensions.Tests/FileHelperTests.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Extensions.Tests; + using System.IO; using Xunit; -namespace Jellyfin.Extensions.Tests; - public static class FileHelperTests { [Fact] diff --git a/tests/Jellyfin.Extensions.Tests/FormattingStreamWriterTests.cs b/tests/Jellyfin.Extensions.Tests/FormattingStreamWriterTests.cs index 9302acef..916b8213 100644 --- a/tests/Jellyfin.Extensions.Tests/FormattingStreamWriterTests.cs +++ b/tests/Jellyfin.Extensions.Tests/FormattingStreamWriterTests.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Extensions.Tests; + using System.Globalization; using System.IO; using System.Text; using System.Threading; using Xunit; -namespace Jellyfin.Extensions.Tests; - public static class FormattingStreamWriterTests { [Fact] diff --git a/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonBoolNumberTests.cs b/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonBoolNumberTests.cs index 560d1d97..ff39d866 100644 --- a/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonBoolNumberTests.cs +++ b/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonBoolNumberTests.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json; -using FsCheck; -using FsCheck.Fluent; -using FsCheck.Xunit; -using Jellyfin.Extensions.Json.Converters; -using Xunit; - namespace Jellyfin.Extensions.Tests.Json.Converters { + using System.Text.Json; + using FsCheck; + using FsCheck.Fluent; + using FsCheck.Xunit; + using Jellyfin.Extensions.Json.Converters; + using Xunit; + public class JsonBoolNumberTests { private readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions() diff --git a/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonBoolStringTests.cs b/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonBoolStringTests.cs index 05552a03..918db3a1 100644 --- a/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonBoolStringTests.cs +++ b/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonBoolStringTests.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json; -using Jellyfin.Extensions.Json.Converters; -using Xunit; - namespace Jellyfin.Extensions.Tests.Json.Converters { + using System.Text.Json; + using Jellyfin.Extensions.Json.Converters; + using Xunit; + public class JsonBoolStringTests { private readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions() diff --git a/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonCommaDelimitedCollectionTests.cs b/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonCommaDelimitedCollectionTests.cs index 50475228..4b2b2e7d 100644 --- a/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonCommaDelimitedCollectionTests.cs +++ b/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonCommaDelimitedCollectionTests.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Text.Json; -using System.Text.Json.Serialization; -using Jellyfin.Extensions.Tests.Json.Models; -using MediaBrowser.Model.Session; -using Xunit; - namespace Jellyfin.Extensions.Tests.Json.Converters { + using System; + using System.Collections.Generic; + using System.Collections.Immutable; + using System.Linq; + using System.Text.Json; + using System.Text.Json.Serialization; + using Jellyfin.Extensions.Tests.Json.Models; + using MediaBrowser.Model.Session; + using Xunit; + public class JsonCommaDelimitedCollectionTests { private readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions() diff --git a/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonCommaDelimitedIReadOnlyListTests.cs b/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonCommaDelimitedIReadOnlyListTests.cs index 45ed6138..69f9dded 100644 --- a/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonCommaDelimitedIReadOnlyListTests.cs +++ b/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonCommaDelimitedIReadOnlyListTests.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Text.Json; -using System.Text.Json.Serialization; -using Jellyfin.Extensions.Tests.Json.Models; -using MediaBrowser.Model.Session; -using Xunit; - namespace Jellyfin.Extensions.Tests.Json.Converters { + using System.Collections.Generic; + using System.Text.Json; + using System.Text.Json.Serialization; + using Jellyfin.Extensions.Tests.Json.Models; + using MediaBrowser.Model.Session; + using Xunit; + public class JsonCommaDelimitedIReadOnlyListTests { private readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions() diff --git a/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonDefaultStringEnumConverterTests.cs b/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonDefaultStringEnumConverterTests.cs index b393d059..1cfd8825 100644 --- a/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonDefaultStringEnumConverterTests.cs +++ b/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonDefaultStringEnumConverterTests.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Extensions.Tests.Json.Converters; + using System.Text.Json; using Jellyfin.Data.Enums; using Jellyfin.Extensions.Json.Converters; using Xunit; -namespace Jellyfin.Extensions.Tests.Json.Converters; - public class JsonDefaultStringEnumConverterTests { private readonly JsonSerializerOptions _jsonOptions = new() { Converters = { new JsonDefaultStringEnumConverterFactory() } }; diff --git a/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonFlagEnumTests.cs b/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonFlagEnumTests.cs index 497c322e..df54a73b 100644 --- a/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonFlagEnumTests.cs +++ b/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonFlagEnumTests.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Extensions.Tests.Json.Converters; + using System.Text.Json; using Jellyfin.Extensions.Json.Converters; using MediaBrowser.Model.Session; using Xunit; -namespace Jellyfin.Extensions.Tests.Json.Converters; - public class JsonFlagEnumTests { private readonly JsonSerializerOptions _jsonOptions = new() diff --git a/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonGuidConverterTests.cs b/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonGuidConverterTests.cs index 511ed0cd..8b0b21bf 100644 --- a/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonGuidConverterTests.cs +++ b/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonGuidConverterTests.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Text.Json; -using Jellyfin.Extensions.Json.Converters; -using Xunit; - namespace Jellyfin.Extensions.Tests.Json.Converters { + using System; + using System.Text.Json; + using Jellyfin.Extensions.Json.Converters; + using Xunit; + public class JsonGuidConverterTests { private readonly JsonSerializerOptions _options; diff --git a/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonNullableGuidConverterTests.cs b/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonNullableGuidConverterTests.cs index 247a4e8c..5aa64406 100644 --- a/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonNullableGuidConverterTests.cs +++ b/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonNullableGuidConverterTests.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Text.Json; -using Jellyfin.Extensions.Json.Converters; -using Xunit; - namespace Jellyfin.Extensions.Tests.Json.Converters { + using System; + using System.Text.Json; + using Jellyfin.Extensions.Json.Converters; + using Xunit; + public class JsonNullableGuidConverterTests { private readonly JsonSerializerOptions _options; diff --git a/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonStringConverterTests.cs b/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonStringConverterTests.cs index a20e10d6..6db04781 100644 --- a/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonStringConverterTests.cs +++ b/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonStringConverterTests.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Text.Json; -using Jellyfin.Extensions.Json.Converters; -using Xunit; - namespace Jellyfin.Extensions.Tests.Json.Converters { + using System.Text.Json; + using Jellyfin.Extensions.Json.Converters; + using Xunit; + public class JsonStringConverterTests { private readonly JsonSerializerOptions _jsonSerializerOptions = new() diff --git a/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonVersionConverterTests.cs b/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonVersionConverterTests.cs index 8b0e6c18..d8686c47 100644 --- a/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonVersionConverterTests.cs +++ b/tests/Jellyfin.Extensions.Tests/Json/Converters/JsonVersionConverterTests.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Text.Json; -using Jellyfin.Extensions.Json.Converters; -using Xunit; - namespace Jellyfin.Extensions.Tests.Json.Converters { + using System; + using System.Text.Json; + using Jellyfin.Extensions.Json.Converters; + using Xunit; + public class JsonVersionConverterTests { private readonly JsonSerializerOptions _options; diff --git a/tests/Jellyfin.Extensions.Tests/Json/Models/GenericBodyArrayModel.cs b/tests/Jellyfin.Extensions.Tests/Json/Models/GenericBodyArrayModel.cs index c3faf4c3..532933ea 100644 --- a/tests/Jellyfin.Extensions.Tests/Json/Models/GenericBodyArrayModel.cs +++ b/tests/Jellyfin.Extensions.Tests/Json/Models/GenericBodyArrayModel.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Diagnostics.CodeAnalysis; -using System.Text.Json.Serialization; -using Jellyfin.Extensions.Json.Converters; - namespace Jellyfin.Extensions.Tests.Json.Models { + using System.Diagnostics.CodeAnalysis; + using System.Text.Json.Serialization; + using Jellyfin.Extensions.Json.Converters; + /// /// The generic body model. /// diff --git a/tests/Jellyfin.Extensions.Tests/Json/Models/GenericBodyIReadOnlyCollectionModel.cs b/tests/Jellyfin.Extensions.Tests/Json/Models/GenericBodyIReadOnlyCollectionModel.cs index 9f29caaf..100a5113 100644 --- a/tests/Jellyfin.Extensions.Tests/Json/Models/GenericBodyIReadOnlyCollectionModel.cs +++ b/tests/Jellyfin.Extensions.Tests/Json/Models/GenericBodyIReadOnlyCollectionModel.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Text.Json.Serialization; -using Jellyfin.Extensions.Json.Converters; - namespace Jellyfin.Extensions.Tests.Json.Models { + using System.Collections.Generic; + using System.Text.Json.Serialization; + using Jellyfin.Extensions.Json.Converters; + /// /// The generic body IReadOnlyCollection model. /// diff --git a/tests/Jellyfin.Extensions.Tests/Json/Models/GenericBodyIReadOnlyListModel.cs b/tests/Jellyfin.Extensions.Tests/Json/Models/GenericBodyIReadOnlyListModel.cs index 0345c351..b8411417 100644 --- a/tests/Jellyfin.Extensions.Tests/Json/Models/GenericBodyIReadOnlyListModel.cs +++ b/tests/Jellyfin.Extensions.Tests/Json/Models/GenericBodyIReadOnlyListModel.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Text.Json.Serialization; -using Jellyfin.Extensions.Json.Converters; - namespace Jellyfin.Extensions.Tests.Json.Models { + using System.Collections.Generic; + using System.Text.Json.Serialization; + using Jellyfin.Extensions.Json.Converters; + /// /// The generic body IReadOnlyList model. /// diff --git a/tests/Jellyfin.Extensions.Tests/ShuffleExtensionsTests.cs b/tests/Jellyfin.Extensions.Tests/ShuffleExtensionsTests.cs index 88c0fd81..a161aa20 100644 --- a/tests/Jellyfin.Extensions.Tests/ShuffleExtensionsTests.cs +++ b/tests/Jellyfin.Extensions.Tests/ShuffleExtensionsTests.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Xunit; - namespace Jellyfin.Extensions.Tests { + using System; + using Xunit; + public static class ShuffleExtensionsTests { [Fact] diff --git a/tests/Jellyfin.Extensions.Tests/StringExtensionsTests.cs b/tests/Jellyfin.Extensions.Tests/StringExtensionsTests.cs index e8296cc9..58ae200f 100644 --- a/tests/Jellyfin.Extensions.Tests/StringExtensionsTests.cs +++ b/tests/Jellyfin.Extensions.Tests/StringExtensionsTests.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Xunit; - namespace Jellyfin.Extensions.Tests { + using System; + using Xunit; + public class StringExtensionsTests { [Theory] diff --git a/tests/Jellyfin.Extensions.Tests/obj/Debug/net10.0/Jellyfin.Extensions.Tests.AssemblyInfo.cs b/tests/Jellyfin.Extensions.Tests/obj/Debug/net10.0/Jellyfin.Extensions.Tests.AssemblyInfo.cs index f571da85..ad5680ca 100644 --- a/tests/Jellyfin.Extensions.Tests/obj/Debug/net10.0/Jellyfin.Extensions.Tests.AssemblyInfo.cs +++ b/tests/Jellyfin.Extensions.Tests/obj/Debug/net10.0/Jellyfin.Extensions.Tests.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Jellyfin.Extensions.Tests")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f47555f2aa4eff7dcc5c5ef5bbda374f292f0638")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+44ab9e1d6dd9b53ec5329bad76927c63bbda5507")] [assembly: System.Reflection.AssemblyProductAttribute("Jellyfin.Extensions.Tests")] [assembly: System.Reflection.AssemblyTitleAttribute("Jellyfin.Extensions.Tests")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/tests/Jellyfin.Extensions.Tests/obj/Debug/net10.0/Jellyfin.Extensions.Tests.AssemblyInfoInputs.cache b/tests/Jellyfin.Extensions.Tests/obj/Debug/net10.0/Jellyfin.Extensions.Tests.AssemblyInfoInputs.cache index 7d60558a..ccfb560d 100644 --- a/tests/Jellyfin.Extensions.Tests/obj/Debug/net10.0/Jellyfin.Extensions.Tests.AssemblyInfoInputs.cache +++ b/tests/Jellyfin.Extensions.Tests/obj/Debug/net10.0/Jellyfin.Extensions.Tests.AssemblyInfoInputs.cache @@ -1 +1 @@ -d8ee6b54a510f933427793369440ecc372fdf4facb3bcf1bac2d2a679eb52863 +e984ed11332efea4b6485e610e7029c1418cec64e76ad582cf38f05b3e828a76 diff --git a/tests/Jellyfin.Extensions.Tests/obj/Debug/net10.0/Jellyfin.Extensions.Tests.csproj.AssemblyReference.cache b/tests/Jellyfin.Extensions.Tests/obj/Debug/net10.0/Jellyfin.Extensions.Tests.csproj.AssemblyReference.cache index 712da4a28105a2c150eb52cb3a5a8b62139811f7..f86f5ab23dd5d98a6a555e317532c415a0592cf8 100644 GIT binary patch delta 3406 zcmb_e%}*Og6!+K(4Iidp<2oVe!Fk!$Sao&~96xiK&1V+WmUR`nN%FY5k|(+-|L5=5bhf9JV|T?^fa- zx03>I?3ND2E+V4KSUt@GPL5D8(NAxH#={}*AAr_$SvODt&KFffE+EiEFZiFMcR_@H z=&qGpG~YcGv|Ct1J@HJ~*zb*bZuEp5Zp@ zzyew};8`83w!!#Nd``|1tm7*NoLV-J%4?~^S)9+yY95X+>IRW&OEa|befebkk2{xn z0+mc7mXmYHfai%^kPW$nYU*iMoGYbq_I+g3Xwam;%Z^TTsjsIR;kd4`lPOFPJYyId zoJNvSBs;x8x6s0N6RIgXThUe9ie@XDSy^3j#&fLG5>3idUd6g0XLXh^&LX`gm$sm# zIfn|Elx;Kd-k2pwVMhnO%GTXw>02;{Gb%#`*3yWSWaihl%nKG86)szfY8^?VY?1Lo8Ky{CGjN_r+SMw$#HDHV#xK1d zh|z=o4n8l$vwea2E7%ukX6sBByQQ2q-QhGM=8)i38%cLRf9GopNnXS`;)UG!duU8Vx331T0!9lfmBE*Bl-O+)y7#%- zX16nT>nA??;VY~4j-h*GkEuKDiidai4Au)HZQD((w>TW9XQE*mjRsnD(qP~-zQX#P=r*?kj~ZP5r+=pV=w@)u zY;S1-9&&RtD0#|mKa1UD=BMqYW)FMxLC>0bs%zTqoQQ|Ze~+cS&Q3EmtT0;?Gd|qd+uiAe|z}QYybcN delta 770 zcmaEJp7H!TMh-ScH3kL-#`MV>n4~B7a`8?yaABLZb>Wt~`4g)QCO`0Fo&3^|moa~G zAhR+{aZ$4V#0F6*{iMu1eV5dv(scd2)RN+o#JrTmq7)-N1CT6>UP?~R#yy`IC$mXb zPk!PjG+8!AQ!6DiF}WzSBr~~K-$c()&qO~bGYO>G5~#@qE(g-Od9vh3w#on9g&3nJ zJ4R^eXC{}Ld_PjgV2yj!7fvV`(wu%lc+j*`eS%F_q>7wCAX zKg@tkFC&QUN-Ft`Adf>lV4RhjlT(?NnWtBrlC5uKU}UOiXrO0g2-9f+(g{-%oRSR= zgT<<4+>=kM2{D#~tef1R$u)VBfe?$np`Ov?gRYX3Um6NcuGP`p9AJ2b5u|Q%iL1%v zdLtQxiXBFZV7CVt_HBM?>{%S72 zS-?yIi)IOgO)r5OADD5%G;RKB?hkR3afr!epf!^>Sa71Mer3T2SIueVg2i|dj*`@h z5+t|D!Zd*0WN33w5$x?ra+(IkB`JEPz_gW`Tac4jk_wI&Q&{Ml0z)?#s35c`GX$yt LoI>2|AlaLCh diff --git a/tests/Jellyfin.LiveTv.Tests/HdHomerunHostTests.cs b/tests/Jellyfin.LiveTv.Tests/HdHomerunHostTests.cs index 72d7965b..70ed23ca 100644 --- a/tests/Jellyfin.LiveTv.Tests/HdHomerunHostTests.cs +++ b/tests/Jellyfin.LiveTv.Tests/HdHomerunHostTests.cs @@ -2,22 +2,22 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.IO; -using System.Net.Http; -using System.Text.Json; -using System.Threading; -using System.Threading.Tasks; -using AutoFixture; -using AutoFixture.AutoMoq; -using Jellyfin.LiveTv.TunerHosts.HdHomerun; -using MediaBrowser.Model.LiveTv; -using Moq; -using Moq.Protected; -using Xunit; - namespace Jellyfin.LiveTv.Tests { + using System; + using System.IO; + using System.Net.Http; + using System.Text.Json; + using System.Threading; + using System.Threading.Tasks; + using AutoFixture; + using AutoFixture.AutoMoq; + using Jellyfin.LiveTv.TunerHosts.HdHomerun; + using MediaBrowser.Model.LiveTv; + using Moq; + using Moq.Protected; + using Xunit; + public class HdHomerunHostTests { private readonly Fixture _fixture; diff --git a/tests/Jellyfin.LiveTv.Tests/HdHomerunManagerTests.cs b/tests/Jellyfin.LiveTv.Tests/HdHomerunManagerTests.cs index 0d5cea9f..8882e7f7 100644 --- a/tests/Jellyfin.LiveTv.Tests/HdHomerunManagerTests.cs +++ b/tests/Jellyfin.LiveTv.Tests/HdHomerunManagerTests.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Text; -using Jellyfin.LiveTv.TunerHosts.HdHomerun; -using Xunit; - namespace Jellyfin.LiveTv.Tests { + using System; + using System.Text; + using Jellyfin.LiveTv.TunerHosts.HdHomerun; + using Xunit; + public class HdHomerunManagerTests { [Fact] diff --git a/tests/Jellyfin.LiveTv.Tests/Listings/ListingsManagerTests.cs b/tests/Jellyfin.LiveTv.Tests/Listings/ListingsManagerTests.cs index 391e2035..db990a50 100644 --- a/tests/Jellyfin.LiveTv.Tests/Listings/ListingsManagerTests.cs +++ b/tests/Jellyfin.LiveTv.Tests/Listings/ListingsManagerTests.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.LiveTv.Tests.Listings; + using System; using Jellyfin.LiveTv.Configuration; using Jellyfin.LiveTv.Listings; @@ -13,8 +15,6 @@ using Microsoft.Extensions.Logging; using Moq; using Xunit; -namespace Jellyfin.LiveTv.Tests.Listings; - public class ListingsManagerTests { private readonly IConfigurationManager _config; diff --git a/tests/Jellyfin.LiveTv.Tests/Listings/XmlTvListingsProviderTests.cs b/tests/Jellyfin.LiveTv.Tests/Listings/XmlTvListingsProviderTests.cs index c373c063..899f1a66 100644 --- a/tests/Jellyfin.LiveTv.Tests/Listings/XmlTvListingsProviderTests.cs +++ b/tests/Jellyfin.LiveTv.Tests/Listings/XmlTvListingsProviderTests.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.LiveTv.Tests.Listings; + using System; using System.IO; using System.Linq; @@ -16,8 +18,6 @@ using Moq; using Moq.Protected; using Xunit; -namespace Jellyfin.LiveTv.Tests.Listings; - public class XmlTvListingsProviderTests { private readonly Fixture _fixture; diff --git a/tests/Jellyfin.LiveTv.Tests/RecordingHelperTests.cs b/tests/Jellyfin.LiveTv.Tests/RecordingHelperTests.cs index 4357ce8b..6aa1b8ea 100644 --- a/tests/Jellyfin.LiveTv.Tests/RecordingHelperTests.cs +++ b/tests/Jellyfin.LiveTv.Tests/RecordingHelperTests.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Jellyfin.LiveTv.Recordings; -using MediaBrowser.Controller.LiveTv; -using Xunit; - namespace Jellyfin.LiveTv.Tests { + using System; + using Jellyfin.LiveTv.Recordings; + using MediaBrowser.Controller.LiveTv; + using Xunit; + public static class RecordingHelperTests { public static TheoryData GetRecordingName_Success_TestData() diff --git a/tests/Jellyfin.LiveTv.Tests/SchedulesDirect/SchedulesDirectDeserializeTests.cs b/tests/Jellyfin.LiveTv.Tests/SchedulesDirect/SchedulesDirectDeserializeTests.cs index 40bcf532..745fa74d 100644 --- a/tests/Jellyfin.LiveTv.Tests/SchedulesDirect/SchedulesDirectDeserializeTests.cs +++ b/tests/Jellyfin.LiveTv.Tests/SchedulesDirect/SchedulesDirectDeserializeTests.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.IO; -using System.Text.Json; -using Jellyfin.Extensions.Json; -using Jellyfin.LiveTv.Listings.SchedulesDirectDtos; -using Xunit; - namespace Jellyfin.LiveTv.Tests.SchedulesDirect { + using System; + using System.Collections.Generic; + using System.IO; + using System.Text.Json; + using Jellyfin.Extensions.Json; + using Jellyfin.LiveTv.Listings.SchedulesDirectDtos; + using Xunit; + public class SchedulesDirectDeserializeTests { private readonly JsonSerializerOptions _jsonOptions; diff --git a/tests/Jellyfin.LiveTv.Tests/obj/Debug/net10.0/Jellyfin.LiveTv.Tests.AssemblyInfo.cs b/tests/Jellyfin.LiveTv.Tests/obj/Debug/net10.0/Jellyfin.LiveTv.Tests.AssemblyInfo.cs index 73fa593a..58f84c0f 100644 --- a/tests/Jellyfin.LiveTv.Tests/obj/Debug/net10.0/Jellyfin.LiveTv.Tests.AssemblyInfo.cs +++ b/tests/Jellyfin.LiveTv.Tests/obj/Debug/net10.0/Jellyfin.LiveTv.Tests.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Jellyfin.LiveTv.Tests")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f47555f2aa4eff7dcc5c5ef5bbda374f292f0638")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+44ab9e1d6dd9b53ec5329bad76927c63bbda5507")] [assembly: System.Reflection.AssemblyProductAttribute("Jellyfin.LiveTv.Tests")] [assembly: System.Reflection.AssemblyTitleAttribute("Jellyfin.LiveTv.Tests")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/tests/Jellyfin.LiveTv.Tests/obj/Debug/net10.0/Jellyfin.LiveTv.Tests.AssemblyInfoInputs.cache b/tests/Jellyfin.LiveTv.Tests/obj/Debug/net10.0/Jellyfin.LiveTv.Tests.AssemblyInfoInputs.cache index 61e40be4..ca0b2b79 100644 --- a/tests/Jellyfin.LiveTv.Tests/obj/Debug/net10.0/Jellyfin.LiveTv.Tests.AssemblyInfoInputs.cache +++ b/tests/Jellyfin.LiveTv.Tests/obj/Debug/net10.0/Jellyfin.LiveTv.Tests.AssemblyInfoInputs.cache @@ -1 +1 @@ -a7e99fd460f02a16245a93ff0faed25e61cab5e9f2ea0402e42c3b9f9b837a70 +466e3b61b47ffbda40ae24a5b8480cd8893267c77eb0776a7022d2792f80df37 diff --git a/tests/Jellyfin.LiveTv.Tests/obj/Debug/net10.0/Jellyfin.LiveTv.Tests.csproj.AssemblyReference.cache b/tests/Jellyfin.LiveTv.Tests/obj/Debug/net10.0/Jellyfin.LiveTv.Tests.csproj.AssemblyReference.cache index 3aeb60239d909800cf49c60a18a7d71b9e9bc058..479e6a9b4cee908deea13057b55ba07ef75c6b6b 100644 GIT binary patch delta 3131 zcmb_e&2Jk;6!$nyNK+hwKT4J6J8g)oFjW+Z{F|C zd%yR4@7H_a!4uHY1#v?}(7{>l}k>$OXoSv=*wz%M>u3!D7ZGA<(>uGK75z~&|* z6cHJ7FuSak2)6Mh3KyWbkA9cW^^S&ta*v-VpyH+lW7=0p}?TInWw#QQJr-2t4h!5n# z%CP4m&W4>H^jV|pyb~P)aJrPLgm4N;Wli_L)KGEG7>gj=p^R+S-MNB!AA@d>-p48lX#|zNKIYW zo78|Mhu;zfp9#y$fa_ot@hWMw1`DKSQCuOab-5vxm}sCK#=xM)z{r4WRuRudComsU%U4tab+S1Bh< zrK+nWlIFX!fGMd7KK`B)3i|S+Ti3pRzc+idu?Kwq3cOQx1HZF<2{)EyWMC4MH9N6? zogdyiW72Jy%l=J_u+Df|%yQ@183f`L?2BUO+D!gsRMylvfHu}EKW2Vd$RvO%V;3qt@PjfYBCijk)Fn$Mij0P&CsZ}iTDB)s^Y?E6_-9mw8?_y z;zRP8<72_bl(#K@Qmi!aT}myuh*VnT6EQde!$NB#i|%GO)SUn5VKUh7s>HmeR!nSD ztz`2H;}RdtK^$UcMe51;i0h(hZ;VQtFOu#W3s0JSqGD?mkxh-`O0dZhahG=La68d) GLj4aa_pKBF delta 97 zcmV-n0G|KY^#QlY0SE>GEdT%j0cVr20vnSq4GobnLFGz!?}} DIs+lx diff --git a/tests/Jellyfin.MediaEncoding.Hls.Tests/Playlist/DynamicHlsPlaylistGeneratorTests.cs b/tests/Jellyfin.MediaEncoding.Hls.Tests/Playlist/DynamicHlsPlaylistGeneratorTests.cs index b8c761f8..ecdc2096 100644 --- a/tests/Jellyfin.MediaEncoding.Hls.Tests/Playlist/DynamicHlsPlaylistGeneratorTests.cs +++ b/tests/Jellyfin.MediaEncoding.Hls.Tests/Playlist/DynamicHlsPlaylistGeneratorTests.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using Jellyfin.MediaEncoding.Hls.Playlist; -using Jellyfin.MediaEncoding.Keyframes; -using Xunit; - namespace Jellyfin.MediaEncoding.Hls.Tests.Playlist { + using System; + using Jellyfin.MediaEncoding.Hls.Playlist; + using Jellyfin.MediaEncoding.Keyframes; + using Xunit; + public class DynamicHlsPlaylistGeneratorTests { [Theory] diff --git a/tests/Jellyfin.MediaEncoding.Hls.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Hls.Tests.AssemblyInfo.cs b/tests/Jellyfin.MediaEncoding.Hls.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Hls.Tests.AssemblyInfo.cs index 5bf572c0..974ad541 100644 --- a/tests/Jellyfin.MediaEncoding.Hls.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Hls.Tests.AssemblyInfo.cs +++ b/tests/Jellyfin.MediaEncoding.Hls.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Hls.Tests.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Jellyfin.MediaEncoding.Hls.Tests")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f47555f2aa4eff7dcc5c5ef5bbda374f292f0638")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+44ab9e1d6dd9b53ec5329bad76927c63bbda5507")] [assembly: System.Reflection.AssemblyProductAttribute("Jellyfin.MediaEncoding.Hls.Tests")] [assembly: System.Reflection.AssemblyTitleAttribute("Jellyfin.MediaEncoding.Hls.Tests")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/tests/Jellyfin.MediaEncoding.Hls.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Hls.Tests.AssemblyInfoInputs.cache b/tests/Jellyfin.MediaEncoding.Hls.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Hls.Tests.AssemblyInfoInputs.cache index e5f1762b..9bc5c4c7 100644 --- a/tests/Jellyfin.MediaEncoding.Hls.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Hls.Tests.AssemblyInfoInputs.cache +++ b/tests/Jellyfin.MediaEncoding.Hls.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Hls.Tests.AssemblyInfoInputs.cache @@ -1 +1 @@ -cedcded6867a9f29bfd4a4b374c92a79a8b348dc5f887ebd669db4dba0fe740e +1e265c116f637c5adb224a0b5b83456d69c8be1567e9087c2625a55e6e4d6252 diff --git a/tests/Jellyfin.MediaEncoding.Hls.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Hls.Tests.csproj.AssemblyReference.cache b/tests/Jellyfin.MediaEncoding.Hls.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Hls.Tests.csproj.AssemblyReference.cache index 5bdeb4b0c3a889db353f554b83b84c298432e7f8..4e2543caaabd6f9b5959092a7b26cccec9b38b43 100644 GIT binary patch delta 3243 zcmb_e&u<$=6!thuNL>=8j-6Ibn>tMz;wX$A5+QWavfwV1D>myR5K7ru(kLQy9Lthqj+j^RJy9H*a)6BEFBrhqzdJi+Raz+ zLxXHzeBfp8Elp1V7;~>LV#C5FKed9ZNQWDB3l*`sg$PAN#+=TsXcdBOe3`<i&-GWb_kXw~@ICDPF7~o!Zb}%*ImaxqH3#!>Ha|Nv z55RtSc5$PK2`X5Y^Cn^P*j*q7Zh%Jb@UBS`Cr9 zQr34AA27uuG?nnh*v0+@W3y2~I^y28j(Em2T8Bkaw4qg@?DVfBI&Bb~r2wpUeX9j2$9-cA(GoWd#|S1ZmAq z?7hbvdwRyCI?$MX-ko9H@zl0>f>_PYpJUng+&R3;3UFYEa8t>Hkb)(R5U`^lI-}MBysY42^1Ah|h76)m<2^9FUWM?YcH<_b{-GZ^8 zDXNKWs#R?MU|iw-I`BjEvbLpVEaP6WV|;BFHosoF(=0NMY=*a4ua0SE>GB>(^b0cVpS0~?VeQ3jf|p|ss^v3jKfv&0&KQRZz8h5!Hn diff --git a/tests/Jellyfin.MediaEncoding.Keyframes.Tests/FfProbe/FfProbeKeyframeExtractorTests.cs b/tests/Jellyfin.MediaEncoding.Keyframes.Tests/FfProbe/FfProbeKeyframeExtractorTests.cs index 8653b8af..8f1188b8 100644 --- a/tests/Jellyfin.MediaEncoding.Keyframes.Tests/FfProbe/FfProbeKeyframeExtractorTests.cs +++ b/tests/Jellyfin.MediaEncoding.Keyframes.Tests/FfProbe/FfProbeKeyframeExtractorTests.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; -using System.Text.Json; -using Xunit; - namespace Jellyfin.MediaEncoding.Keyframes.FfProbe { + using System.IO; + using System.Text.Json; + using Xunit; + public class FfProbeKeyframeExtractorTests { [Theory] diff --git a/tests/Jellyfin.MediaEncoding.Keyframes.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Keyframes.Tests.AssemblyInfo.cs b/tests/Jellyfin.MediaEncoding.Keyframes.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Keyframes.Tests.AssemblyInfo.cs index 5cf726f8..7521b760 100644 --- a/tests/Jellyfin.MediaEncoding.Keyframes.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Keyframes.Tests.AssemblyInfo.cs +++ b/tests/Jellyfin.MediaEncoding.Keyframes.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Keyframes.Tests.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Jellyfin.MediaEncoding.Keyframes.Tests")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f47555f2aa4eff7dcc5c5ef5bbda374f292f0638")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+44ab9e1d6dd9b53ec5329bad76927c63bbda5507")] [assembly: System.Reflection.AssemblyProductAttribute("Jellyfin.MediaEncoding.Keyframes.Tests")] [assembly: System.Reflection.AssemblyTitleAttribute("Jellyfin.MediaEncoding.Keyframes.Tests")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/tests/Jellyfin.MediaEncoding.Keyframes.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Keyframes.Tests.AssemblyInfoInputs.cache b/tests/Jellyfin.MediaEncoding.Keyframes.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Keyframes.Tests.AssemblyInfoInputs.cache index 2c2dbce8..3ce9da1a 100644 --- a/tests/Jellyfin.MediaEncoding.Keyframes.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Keyframes.Tests.AssemblyInfoInputs.cache +++ b/tests/Jellyfin.MediaEncoding.Keyframes.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Keyframes.Tests.AssemblyInfoInputs.cache @@ -1 +1 @@ -0533c6fcc1d872bc073c7598b502504afe0909b97f4a8f3f38d4a7cc7b142a56 +37b170af3dcf594d65279afed8c9cb67992ca1462b359cb93fbd2f11d6311f02 diff --git a/tests/Jellyfin.MediaEncoding.Keyframes.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Keyframes.Tests.csproj.AssemblyReference.cache b/tests/Jellyfin.MediaEncoding.Keyframes.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Keyframes.Tests.csproj.AssemblyReference.cache index 454e45b46d38cc039b28a7f90a76d6d106dc5bb5..f215c9250a09cb6817d3e64b967f2b0a017f3a4e 100644 GIT binary patch delta 17 Zcmexg_rGpJ37byzsk!?KHde9P0{~WB2#^2( delta 17 Zcmexg_rGpJ3EQl#3%A_O-&n -using System; -using MediaBrowser.MediaEncoding.Encoder; -using Microsoft.Extensions.Logging.Abstractions; -using Xunit; - namespace Jellyfin.MediaEncoding.Tests { + using System; + using MediaBrowser.MediaEncoding.Encoder; + using Microsoft.Extensions.Logging.Abstractions; + using Xunit; + public class EncoderValidatorTests { private readonly EncoderValidator _encoderValidator = new EncoderValidator(new NullLogger(), "ffmpeg"); diff --git a/tests/Jellyfin.MediaEncoding.Tests/Probing/ProbeExternalSourcesTests.cs b/tests/Jellyfin.MediaEncoding.Tests/Probing/ProbeExternalSourcesTests.cs index db67cfa5..1fb2498c 100644 --- a/tests/Jellyfin.MediaEncoding.Tests/Probing/ProbeExternalSourcesTests.cs +++ b/tests/Jellyfin.MediaEncoding.Tests/Probing/ProbeExternalSourcesTests.cs @@ -2,20 +2,20 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.MediaEncoding.Encoder; -using MediaBrowser.Model.Globalization; -using MediaBrowser.Model.IO; -using MediaBrowser.Model.MediaInfo; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Logging; -using Moq; -using Xunit; - namespace Jellyfin.MediaEncoding.Tests.Probing { + using System; + using System.Collections.Generic; + using MediaBrowser.Controller.Configuration; + using MediaBrowser.MediaEncoding.Encoder; + using MediaBrowser.Model.Globalization; + using MediaBrowser.Model.IO; + using MediaBrowser.Model.MediaInfo; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.Logging; + using Moq; + using Xunit; + public class ProbeExternalSourcesTests { [Fact] diff --git a/tests/Jellyfin.MediaEncoding.Tests/Probing/ProbeResultNormalizerTests.cs b/tests/Jellyfin.MediaEncoding.Tests/Probing/ProbeResultNormalizerTests.cs index 140bdac5..ccad2be9 100644 --- a/tests/Jellyfin.MediaEncoding.Tests/Probing/ProbeResultNormalizerTests.cs +++ b/tests/Jellyfin.MediaEncoding.Tests/Probing/ProbeResultNormalizerTests.cs @@ -2,23 +2,23 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.IO; -using System.Text.Json; -using Jellyfin.Data.Enums; -using Jellyfin.Extensions.Json; -using Jellyfin.Extensions.Json.Converters; -using MediaBrowser.MediaEncoding.Probing; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Globalization; -using MediaBrowser.Model.MediaInfo; -using Microsoft.Extensions.Logging.Abstractions; -using Moq; -using Xunit; - namespace Jellyfin.MediaEncoding.Tests.Probing { + using System; + using System.Globalization; + using System.IO; + using System.Text.Json; + using Jellyfin.Data.Enums; + using Jellyfin.Extensions.Json; + using Jellyfin.Extensions.Json.Converters; + using MediaBrowser.MediaEncoding.Probing; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Globalization; + using MediaBrowser.Model.MediaInfo; + using Microsoft.Extensions.Logging.Abstractions; + using Moq; + using Xunit; + public class ProbeResultNormalizerTests { private readonly JsonSerializerOptions _jsonOptions; diff --git a/tests/Jellyfin.MediaEncoding.Tests/Subtitles/AssParserTests.cs b/tests/Jellyfin.MediaEncoding.Tests/Subtitles/AssParserTests.cs index 22e83a64..21291f55 100644 --- a/tests/Jellyfin.MediaEncoding.Tests/Subtitles/AssParserTests.cs +++ b/tests/Jellyfin.MediaEncoding.Tests/Subtitles/AssParserTests.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.IO; -using MediaBrowser.MediaEncoding.Subtitles; -using Microsoft.Extensions.Logging.Abstractions; -using Xunit; - namespace Jellyfin.MediaEncoding.Subtitles.Tests { + using System; + using System.Globalization; + using System.IO; + using MediaBrowser.MediaEncoding.Subtitles; + using Microsoft.Extensions.Logging.Abstractions; + using Xunit; + public class AssParserTests { [Fact] diff --git a/tests/Jellyfin.MediaEncoding.Tests/Subtitles/SrtParserTests.cs b/tests/Jellyfin.MediaEncoding.Tests/Subtitles/SrtParserTests.cs index 4dd5b377..596b8d96 100644 --- a/tests/Jellyfin.MediaEncoding.Tests/Subtitles/SrtParserTests.cs +++ b/tests/Jellyfin.MediaEncoding.Tests/Subtitles/SrtParserTests.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Globalization; -using System.IO; -using MediaBrowser.MediaEncoding.Subtitles; -using Microsoft.Extensions.Logging.Abstractions; -using Xunit; - namespace Jellyfin.MediaEncoding.Subtitles.Tests { + using System; + using System.Globalization; + using System.IO; + using MediaBrowser.MediaEncoding.Subtitles; + using Microsoft.Extensions.Logging.Abstractions; + using Xunit; + public class SrtParserTests { [Fact] diff --git a/tests/Jellyfin.MediaEncoding.Tests/Subtitles/SsaParserTests.cs b/tests/Jellyfin.MediaEncoding.Tests/Subtitles/SsaParserTests.cs index 35399ea3..a756e973 100644 --- a/tests/Jellyfin.MediaEncoding.Tests/Subtitles/SsaParserTests.cs +++ b/tests/Jellyfin.MediaEncoding.Tests/Subtitles/SsaParserTests.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Text; -using MediaBrowser.MediaEncoding.Subtitles; -using MediaBrowser.Model.MediaInfo; -using Microsoft.Extensions.Logging.Abstractions; -using Xunit; - namespace Jellyfin.MediaEncoding.Subtitles.Tests { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.IO; + using System.Text; + using MediaBrowser.MediaEncoding.Subtitles; + using MediaBrowser.Model.MediaInfo; + using Microsoft.Extensions.Logging.Abstractions; + using Xunit; + public class SsaParserTests { private readonly SubtitleEditParser _parser = new SubtitleEditParser(new NullLogger()); diff --git a/tests/Jellyfin.MediaEncoding.Tests/Subtitles/SubtitleEncoderTests.cs b/tests/Jellyfin.MediaEncoding.Tests/Subtitles/SubtitleEncoderTests.cs index a9e3be70..9f8e51a6 100644 --- a/tests/Jellyfin.MediaEncoding.Tests/Subtitles/SubtitleEncoderTests.cs +++ b/tests/Jellyfin.MediaEncoding.Tests/Subtitles/SubtitleEncoderTests.cs @@ -2,18 +2,18 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Threading; -using System.Threading.Tasks; -using AutoFixture; -using AutoFixture.AutoMoq; -using MediaBrowser.MediaEncoding.Subtitles; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.MediaInfo; -using Xunit; - namespace Jellyfin.MediaEncoding.Subtitles.Tests { + using System.Threading; + using System.Threading.Tasks; + using AutoFixture; + using AutoFixture.AutoMoq; + using MediaBrowser.MediaEncoding.Subtitles; + using MediaBrowser.Model.Dto; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.MediaInfo; + using Xunit; + public class SubtitleEncoderTests { public static TheoryData GetReadableFile_Valid_TestData() diff --git a/tests/Jellyfin.MediaEncoding.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Tests.AssemblyInfo.cs b/tests/Jellyfin.MediaEncoding.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Tests.AssemblyInfo.cs index 5c13a0c9..7075faf3 100644 --- a/tests/Jellyfin.MediaEncoding.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Tests.AssemblyInfo.cs +++ b/tests/Jellyfin.MediaEncoding.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Tests.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Jellyfin.MediaEncoding.Tests")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f47555f2aa4eff7dcc5c5ef5bbda374f292f0638")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+44ab9e1d6dd9b53ec5329bad76927c63bbda5507")] [assembly: System.Reflection.AssemblyProductAttribute("Jellyfin.MediaEncoding.Tests")] [assembly: System.Reflection.AssemblyTitleAttribute("Jellyfin.MediaEncoding.Tests")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/tests/Jellyfin.MediaEncoding.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Tests.AssemblyInfoInputs.cache b/tests/Jellyfin.MediaEncoding.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Tests.AssemblyInfoInputs.cache index 151e2f14..1930ec4c 100644 --- a/tests/Jellyfin.MediaEncoding.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Tests.AssemblyInfoInputs.cache +++ b/tests/Jellyfin.MediaEncoding.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Tests.AssemblyInfoInputs.cache @@ -1 +1 @@ -434979860bea90ba353529f90a6f38f606f71a9dec0474dd1c47b91fd632298f +229dcff69375fcdb5b79446bf90c6fe0af0ef768381cf96ac778093e9f132bac diff --git a/tests/Jellyfin.MediaEncoding.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Tests.csproj.AssemblyReference.cache b/tests/Jellyfin.MediaEncoding.Tests/obj/Debug/net10.0/Jellyfin.MediaEncoding.Tests.csproj.AssemblyReference.cache index fa348d51371eda41de558f68567a98dd25bc8b32..66aeb7e4969db2346a15ddd16eb779258fe51352 100644 GIT binary patch delta 3159 zcmb_eTW=dh6!ti6NYf@t9J_@!&Ap+H%)}uPH>nb?lZb|-x0ph~s=8iJ-EDVwHnZbU z10qPgMFPp1HzcGMo`F_WS7^~!VRd}q%2 z&NpXk3;eqo@8|?C*E`laGw=QOp(cZ`^Dw2 z9$J5P0RVa=51^Z`9um;O!_KLl_3wH>q5k9eTaxuO$D4NWrd_;gX&<3`<7_GO0qjS9|9eeA56s5bt}*JByQ3?ta{LpT~xUO}=Xdmyr$&H4EjjxsC`$ zM8?ddS2UGi8(*Vv;TA=v2;PRvxKh!~3e1&kN)*+__JSSz=0WY1^wzgm1-^%U(8XTX z%ryxkG3S_dug}3OoXyV8yb8cUcy^(X#{}gp%Q=%U*>)cg1Dl}Ub#ga6IxL!m3n2IaIkydL%DxBsT#LeWf|N36uDtGt_>Q5&i`)W{w~5x$ z3=^aNv8DdWnI`rd&}#zGu_-UIJofV>BlkwOMe^BHW8N-Q5veI9y-5?m6gxCF#j0cd zB0IBT*%@@*tRh|>jn-hE)GUfCM6s^dq-YYePQLfliACOsR{~{d*Jy#2-&(0p|GMqA z)_~s^ft@R7IW@_3m<^c+>c2FCwUgn%NrM9*wPkVhCG-z+18#h@S52absCQ1|~se)02Cb{oyAk zO|lJz*;4-q+aFJgyWM$qE(7ri_QbMFZ6<*gRMwQ!1ix=10-X!3g@n0mvDL~aq4H>R z?uVVBAkk_jaS&YLvp~7kD1?cvMh!%KvvoC+hY69b_NxB`LbK=LVZtexz!o1ofUtqd zn>41HjXll(p9M7#@>c#o)u@sQQ%p~I&ms!X6V1@5wvPC06)Nq*XcenB5pA+yGw~sL z&xx^Mn9A7}-zi2M_y(mGTto`3@|!W(0mDLTqmu5>H`H8;=o{wvQCBhMHKk%=n`)}f z4~$iQK?iY&i!4%G#z$NiO(SJg+I+!uCtP^OlI{vu% EA3fE)Z2$lO delta 97 zcmV-n0G|K;iUQr;0SE>GGXMYp0cVr20vnSq4GobnLZFGz!|=4 DV#Fgk diff --git a/tests/Jellyfin.Model.Tests/Cryptography/PasswordHashTests.cs b/tests/Jellyfin.Model.Tests/Cryptography/PasswordHashTests.cs index bc21ba32..9767f398 100644 --- a/tests/Jellyfin.Model.Tests/Cryptography/PasswordHashTests.cs +++ b/tests/Jellyfin.Model.Tests/Cryptography/PasswordHashTests.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using MediaBrowser.Model.Cryptography; -using Xunit; - namespace Jellyfin.Model.Tests.Cryptography { + using System; + using System.Collections.Generic; + using MediaBrowser.Model.Cryptography; + using Xunit; + public static class PasswordHashTests { [Fact] diff --git a/tests/Jellyfin.Model.Tests/Dlna/ContainerHelperTests.cs b/tests/Jellyfin.Model.Tests/Dlna/ContainerHelperTests.cs index 37d60613..be16c04a 100644 --- a/tests/Jellyfin.Model.Tests/Dlna/ContainerHelperTests.cs +++ b/tests/Jellyfin.Model.Tests/Dlna/ContainerHelperTests.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Model.Tests.Dlna; + using System; using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Extensions; using Xunit; -namespace Jellyfin.Model.Tests.Dlna; - public class ContainerHelperTests { private readonly ContainerProfile _emptyContainerProfile = new ContainerProfile(); diff --git a/tests/Jellyfin.Model.Tests/Dlna/LegacyStreamInfo.cs b/tests/Jellyfin.Model.Tests/Dlna/LegacyStreamInfo.cs index fd648140..bdb9965f 100644 --- a/tests/Jellyfin.Model.Tests/Dlna/LegacyStreamInfo.cs +++ b/tests/Jellyfin.Model.Tests/Dlna/LegacyStreamInfo.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Model.Tests.Dlna; + using System; using System.Collections.Generic; using System.Globalization; @@ -11,8 +13,6 @@ using Jellyfin.Extensions; using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Dto; -namespace Jellyfin.Model.Tests.Dlna; - public class LegacyStreamInfo : StreamInfo { public LegacyStreamInfo(Guid itemId, DlnaProfileType mediaType) diff --git a/tests/Jellyfin.Model.Tests/Dlna/StreamBuilderTests.cs b/tests/Jellyfin.Model.Tests/Dlna/StreamBuilderTests.cs index e37f2b2d..a7e0fe49 100644 --- a/tests/Jellyfin.Model.Tests/Dlna/StreamBuilderTests.cs +++ b/tests/Jellyfin.Model.Tests/Dlna/StreamBuilderTests.cs @@ -2,25 +2,25 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Specialized; -using System.IO; -using System.Linq; -using System.Runtime.Serialization; -using System.Text.Json; -using System.Threading.Tasks; -using Jellyfin.Data.Enums; -using Jellyfin.Extensions.Json; -using MediaBrowser.Model.Dlna; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Session; -using Microsoft.Extensions.Logging.Abstractions; -using Moq; -using Xunit; - namespace Jellyfin.Model.Tests { + using System; + using System.Collections.Specialized; + using System.IO; + using System.Linq; + using System.Runtime.Serialization; + using System.Text.Json; + using System.Threading.Tasks; + using Jellyfin.Data.Enums; + using Jellyfin.Extensions.Json; + using MediaBrowser.Model.Dlna; + using MediaBrowser.Model.Dto; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.Session; + using Microsoft.Extensions.Logging.Abstractions; + using Moq; + using Xunit; + public class StreamBuilderTests { [Theory] diff --git a/tests/Jellyfin.Model.Tests/Dlna/StreamInfoTests.cs b/tests/Jellyfin.Model.Tests/Dlna/StreamInfoTests.cs index 7cbd34a7..fd1760d8 100644 --- a/tests/Jellyfin.Model.Tests/Dlna/StreamInfoTests.cs +++ b/tests/Jellyfin.Model.Tests/Dlna/StreamInfoTests.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Model.Tests.Dlna; + using System; using System.Collections.Generic; using System.Text; using MediaBrowser.Model.Dlna; using Xunit; -namespace Jellyfin.Model.Tests.Dlna; - public class StreamInfoTests { private const string BaseUrl = "/test/"; diff --git a/tests/Jellyfin.Model.Tests/Drawing/ImageFormatExtensionsTests.cs b/tests/Jellyfin.Model.Tests/Drawing/ImageFormatExtensionsTests.cs index 7ab89580..f6d9b18f 100644 --- a/tests/Jellyfin.Model.Tests/Drawing/ImageFormatExtensionsTests.cs +++ b/tests/Jellyfin.Model.Tests/Drawing/ImageFormatExtensionsTests.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Model.Drawing; + using System; using System.ComponentModel; using MediaBrowser.Model.Drawing; using Xunit; -namespace Jellyfin.Model.Drawing; - public static class ImageFormatExtensionsTests { public static TheoryData GetAllImageFormats() diff --git a/tests/Jellyfin.Model.Tests/Entities/MediaStreamTests.cs b/tests/Jellyfin.Model.Tests/Entities/MediaStreamTests.cs index e951cf67..c7f76d8c 100644 --- a/tests/Jellyfin.Model.Tests/Entities/MediaStreamTests.cs +++ b/tests/Jellyfin.Model.Tests/Entities/MediaStreamTests.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Model.Entities; -using Xunit; - namespace Jellyfin.Model.Tests.Entities { + using MediaBrowser.Model.Entities; + using Xunit; + public class MediaStreamTests { public static TheoryData Get_DisplayTitle_TestData() diff --git a/tests/Jellyfin.Model.Tests/Entities/ProviderIdsExtensionsTests.cs b/tests/Jellyfin.Model.Tests/Entities/ProviderIdsExtensionsTests.cs index b1b6c3bd..cc4157f2 100644 --- a/tests/Jellyfin.Model.Tests/Entities/ProviderIdsExtensionsTests.cs +++ b/tests/Jellyfin.Model.Tests/Entities/ProviderIdsExtensionsTests.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using MediaBrowser.Model.Entities; -using Xunit; - namespace Jellyfin.Model.Tests.Entities { + using System; + using System.Collections.Generic; + using MediaBrowser.Model.Entities; + using Xunit; + public class ProviderIdsExtensionsTests { private const string ExampleImdbId = "tt0113375"; diff --git a/tests/Jellyfin.Model.Tests/Extensions/StringHelperTests.cs b/tests/Jellyfin.Model.Tests/Extensions/StringHelperTests.cs index e1e8df0a..47d67624 100644 --- a/tests/Jellyfin.Model.Tests/Extensions/StringHelperTests.cs +++ b/tests/Jellyfin.Model.Tests/Extensions/StringHelperTests.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using FsCheck; -using FsCheck.Fluent; -using FsCheck.Xunit; -using MediaBrowser.Model.Extensions; -using Xunit; - namespace Jellyfin.Model.Tests.Extensions { + using System; + using FsCheck; + using FsCheck.Fluent; + using FsCheck.Xunit; + using MediaBrowser.Model.Extensions; + using Xunit; + public class StringHelperTests { [Theory] diff --git a/tests/Jellyfin.Model.Tests/Net/MimeTypesTests.cs b/tests/Jellyfin.Model.Tests/Net/MimeTypesTests.cs index 3976b0f3..c485c0ed 100644 --- a/tests/Jellyfin.Model.Tests/Net/MimeTypesTests.cs +++ b/tests/Jellyfin.Model.Tests/Net/MimeTypesTests.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using MediaBrowser.Model.Net; -using Xunit; - namespace Jellyfin.Model.Tests.Net { + using MediaBrowser.Model.Net; + using Xunit; + public class MimeTypesTests { [Theory] diff --git a/tests/Jellyfin.Model.Tests/obj/Debug/net10.0/Jellyfin.Model.Tests.AssemblyInfo.cs b/tests/Jellyfin.Model.Tests/obj/Debug/net10.0/Jellyfin.Model.Tests.AssemblyInfo.cs index 029c1d50..56fe450c 100644 --- a/tests/Jellyfin.Model.Tests/obj/Debug/net10.0/Jellyfin.Model.Tests.AssemblyInfo.cs +++ b/tests/Jellyfin.Model.Tests/obj/Debug/net10.0/Jellyfin.Model.Tests.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Jellyfin.Model.Tests")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f47555f2aa4eff7dcc5c5ef5bbda374f292f0638")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+44ab9e1d6dd9b53ec5329bad76927c63bbda5507")] [assembly: System.Reflection.AssemblyProductAttribute("Jellyfin.Model.Tests")] [assembly: System.Reflection.AssemblyTitleAttribute("Jellyfin.Model.Tests")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/tests/Jellyfin.Model.Tests/obj/Debug/net10.0/Jellyfin.Model.Tests.AssemblyInfoInputs.cache b/tests/Jellyfin.Model.Tests/obj/Debug/net10.0/Jellyfin.Model.Tests.AssemblyInfoInputs.cache index d239aa94..966ba39c 100644 --- a/tests/Jellyfin.Model.Tests/obj/Debug/net10.0/Jellyfin.Model.Tests.AssemblyInfoInputs.cache +++ b/tests/Jellyfin.Model.Tests/obj/Debug/net10.0/Jellyfin.Model.Tests.AssemblyInfoInputs.cache @@ -1 +1 @@ -a97a1d9884a4a0dbceea3a6f0a7689e6ec6a76fdcf6c754811a7953a387171b0 +6e38456d851a5610a9da994ad3dbd7f1b7b46d96de137ba1263d7248619617a0 diff --git a/tests/Jellyfin.Model.Tests/obj/Debug/net10.0/Jellyfin.Model.Tests.csproj.AssemblyReference.cache b/tests/Jellyfin.Model.Tests/obj/Debug/net10.0/Jellyfin.Model.Tests.csproj.AssemblyReference.cache index c065652fadfa178a7ca1ec3b4b1cd27be4bda7cd..8c6efd8c2efb42bae99aef1d60d862a40561a180 100644 GIT binary patch delta 3237 zcmb_e&u<$=6!zFkaFZsA9J@fArb&~AI5K0K1O!MGxK1isl8`2$6tJpp?5VqDcV{y@ z4mBWh;MN0@*$YBKf+CL4Mo35?(hEXDsQ&`oxF9616&%XUdOY^pyK7RhC(HBZz3=__ z-ZvkA3l4qU334PFT;Bmm!B`L6MP+&s8uv8){ge%b);#vtEy34 zMP*evL-5-cB5)O#kyhMhe=ni!YNco(n#;nhhY>7m8UUeCNV#`&@dxv_C;%YV?F$Sr z6L8etKOL{%9s-x^2h-(ls|<^naUy0!#7wslj~L<+L*V7^)AZy;L@X5>ry1bfQ+EF8 zS^I_l=;I*9F90ySS+gk8;YQVbeIb0zz5^2WyWw~uCQb`j(^!$18_R7mH+5bV z3@#~D*;XtB&*`RybYxIPTwsxoGPk4lk?_b22g<(&VgQC*4xGA3rv3&N8Fjn!b^jvT4~lzi3Y#A7eG&f8YPS=WK@Ht1vN z_Sy!A=K3?di2Q4EecHRLTQw6Eu(69s7nL81eJ8y}+;?7Miw?v?jl)e)kIwBiH(t?I zW3L_9Ybw0%NF_P*{`a4YL2+%{WYD^8Oi%bDP(R2@pqZXPdrg)fP|@NyJOd=#<-m6Y zNBE!w3(^VupJOvN2#>$$)!~O()Qet@j>|EXst4J8ma2p>EphFV_*het_#R{eVX|fG zD1_TA+PBUmv<9M0*-8BT#e*O3-#>M)ogZ^{ZfwF{8&C2aQ(n-Tg3L#cVbb+BsdB`i zC1uwL6G$deZXgox|16ZBQ=2>;-2jq5+*nflR z1+OBFi~emQ)-sjWV1d+3iYr7hueC(Rk%EQ8bHB)_f4L=-LDX(pNirus_~SD{<^a(Z z&%!bzZ(FD!a=JqaI<81MwvK)I=e$UR`4^Wu>pYY;P^GFV#CPa>&xHNw@T`3${0M(= zKJnN7dmp|soJzJcBH&@>`*@f=yv&^V?;{frm}9%zH);2UGC;$Ke0cVpS0~?b!4h@koL -using Emby.Naming.AudioBook; -using Xunit; - namespace Jellyfin.Naming.Tests.AudioBook { + using Emby.Naming.AudioBook; + using Xunit; + public class AudioBookFileInfoTests { [Fact] diff --git a/tests/Jellyfin.Naming.Tests/AudioBook/AudioBookListResolverTests.cs b/tests/Jellyfin.Naming.Tests/AudioBook/AudioBookListResolverTests.cs index 0d7431fd..edc924b9 100644 --- a/tests/Jellyfin.Naming.Tests/AudioBook/AudioBookListResolverTests.cs +++ b/tests/Jellyfin.Naming.Tests/AudioBook/AudioBookListResolverTests.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Linq; -using Emby.Naming.AudioBook; -using Emby.Naming.Common; -using MediaBrowser.Model.IO; -using Xunit; - namespace Jellyfin.Naming.Tests.AudioBook { + using System; + using System.Linq; + using Emby.Naming.AudioBook; + using Emby.Naming.Common; + using MediaBrowser.Model.IO; + using Xunit; + public class AudioBookListResolverTests { private readonly NamingOptions _namingOptions = new NamingOptions(); diff --git a/tests/Jellyfin.Naming.Tests/AudioBook/AudioBookResolverTests.cs b/tests/Jellyfin.Naming.Tests/AudioBook/AudioBookResolverTests.cs index 875f0910..e732f384 100644 --- a/tests/Jellyfin.Naming.Tests/AudioBook/AudioBookResolverTests.cs +++ b/tests/Jellyfin.Naming.Tests/AudioBook/AudioBookResolverTests.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Emby.Naming.AudioBook; -using Emby.Naming.Common; -using Xunit; - namespace Jellyfin.Naming.Tests.AudioBook { + using Emby.Naming.AudioBook; + using Emby.Naming.Common; + using Xunit; + public class AudioBookResolverTests { private readonly NamingOptions _namingOptions = new NamingOptions(); diff --git a/tests/Jellyfin.Naming.Tests/Common/NamingOptionsTest.cs b/tests/Jellyfin.Naming.Tests/Common/NamingOptionsTest.cs index 0d5b2fff..c9d31a4b 100644 --- a/tests/Jellyfin.Naming.Tests/Common/NamingOptionsTest.cs +++ b/tests/Jellyfin.Naming.Tests/Common/NamingOptionsTest.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Emby.Naming.Common; -using Xunit; - namespace Jellyfin.Naming.Tests.Common { + using Emby.Naming.Common; + using Xunit; + public class NamingOptionsTest { [Fact] diff --git a/tests/Jellyfin.Naming.Tests/ExternalFiles/ExternalPathParserTests.cs b/tests/Jellyfin.Naming.Tests/ExternalFiles/ExternalPathParserTests.cs index 560aa0b1..3989f8bb 100644 --- a/tests/Jellyfin.Naming.Tests/ExternalFiles/ExternalPathParserTests.cs +++ b/tests/Jellyfin.Naming.Tests/ExternalFiles/ExternalPathParserTests.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Naming.Tests.ExternalFiles; + using System.Text.RegularExpressions; using Emby.Naming.Common; using Emby.Naming.ExternalFiles; @@ -10,8 +12,6 @@ using MediaBrowser.Model.Globalization; using Moq; using Xunit; -namespace Jellyfin.Naming.Tests.ExternalFiles; - public class ExternalPathParserTests { private readonly ExternalPathParser _audioPathParser; diff --git a/tests/Jellyfin.Naming.Tests/Music/MultiDiscAlbumTests.cs b/tests/Jellyfin.Naming.Tests/Music/MultiDiscAlbumTests.cs index a96ab73c..b7866675 100644 --- a/tests/Jellyfin.Naming.Tests/Music/MultiDiscAlbumTests.cs +++ b/tests/Jellyfin.Naming.Tests/Music/MultiDiscAlbumTests.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Emby.Naming.Audio; -using Emby.Naming.Common; -using Xunit; - namespace Jellyfin.Naming.Tests.Music { + using Emby.Naming.Audio; + using Emby.Naming.Common; + using Xunit; + public class MultiDiscAlbumTests { private readonly NamingOptions _namingOptions = new NamingOptions(); diff --git a/tests/Jellyfin.Naming.Tests/TV/AbsoluteEpisodeNumberTests.cs b/tests/Jellyfin.Naming.Tests/TV/AbsoluteEpisodeNumberTests.cs index 32339a84..2fcc77cf 100644 --- a/tests/Jellyfin.Naming.Tests/TV/AbsoluteEpisodeNumberTests.cs +++ b/tests/Jellyfin.Naming.Tests/TV/AbsoluteEpisodeNumberTests.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Emby.Naming.Common; -using Emby.Naming.TV; -using Xunit; - namespace Jellyfin.Naming.Tests.TV { + using Emby.Naming.Common; + using Emby.Naming.TV; + using Xunit; + public class AbsoluteEpisodeNumberTests { private readonly EpisodeResolver _resolver = new EpisodeResolver(new NamingOptions()); diff --git a/tests/Jellyfin.Naming.Tests/TV/DailyEpisodeTests.cs b/tests/Jellyfin.Naming.Tests/TV/DailyEpisodeTests.cs index ffa5ff63..cf238076 100644 --- a/tests/Jellyfin.Naming.Tests/TV/DailyEpisodeTests.cs +++ b/tests/Jellyfin.Naming.Tests/TV/DailyEpisodeTests.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Emby.Naming.Common; -using Emby.Naming.TV; -using Xunit; - namespace Jellyfin.Naming.Tests.TV { + using Emby.Naming.Common; + using Emby.Naming.TV; + using Xunit; + public class DailyEpisodeTests { private readonly EpisodeResolver _resolver = new EpisodeResolver(new NamingOptions()); diff --git a/tests/Jellyfin.Naming.Tests/TV/EpisodeNumberTests.cs b/tests/Jellyfin.Naming.Tests/TV/EpisodeNumberTests.cs index ea22cd87..dcca11b3 100644 --- a/tests/Jellyfin.Naming.Tests/TV/EpisodeNumberTests.cs +++ b/tests/Jellyfin.Naming.Tests/TV/EpisodeNumberTests.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Emby.Naming.Common; -using Emby.Naming.TV; -using Xunit; - namespace Jellyfin.Naming.Tests.TV { + using Emby.Naming.Common; + using Emby.Naming.TV; + using Xunit; + public class EpisodeNumberTests { private readonly NamingOptions _namingOptions = new NamingOptions(); diff --git a/tests/Jellyfin.Naming.Tests/TV/EpisodeNumberWithoutSeasonTests.cs b/tests/Jellyfin.Naming.Tests/TV/EpisodeNumberWithoutSeasonTests.cs index c23b8aa0..3f172298 100644 --- a/tests/Jellyfin.Naming.Tests/TV/EpisodeNumberWithoutSeasonTests.cs +++ b/tests/Jellyfin.Naming.Tests/TV/EpisodeNumberWithoutSeasonTests.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Emby.Naming.Common; -using Emby.Naming.TV; -using Xunit; - namespace Jellyfin.Naming.Tests.TV { + using Emby.Naming.Common; + using Emby.Naming.TV; + using Xunit; + public class EpisodeNumberWithoutSeasonTests { private readonly EpisodeResolver _resolver = new EpisodeResolver(new NamingOptions()); diff --git a/tests/Jellyfin.Naming.Tests/TV/EpisodePathParserTest.cs b/tests/Jellyfin.Naming.Tests/TV/EpisodePathParserTest.cs index 7ea32d2a..ee3176f6 100644 --- a/tests/Jellyfin.Naming.Tests/TV/EpisodePathParserTest.cs +++ b/tests/Jellyfin.Naming.Tests/TV/EpisodePathParserTest.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Emby.Naming.Common; -using Emby.Naming.TV; -using Xunit; - namespace Jellyfin.Naming.Tests.TV { + using Emby.Naming.Common; + using Emby.Naming.TV; + using Xunit; + public class EpisodePathParserTest { private readonly NamingOptions _namingOptions = new NamingOptions(); diff --git a/tests/Jellyfin.Naming.Tests/TV/MultiEpisodeTests.cs b/tests/Jellyfin.Naming.Tests/TV/MultiEpisodeTests.cs index 6e4f248c..5d900458 100644 --- a/tests/Jellyfin.Naming.Tests/TV/MultiEpisodeTests.cs +++ b/tests/Jellyfin.Naming.Tests/TV/MultiEpisodeTests.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Emby.Naming.Common; -using Emby.Naming.TV; -using Xunit; - namespace Jellyfin.Naming.Tests.TV { + using Emby.Naming.Common; + using Emby.Naming.TV; + using Xunit; + public class MultiEpisodeTests { private readonly EpisodePathParser _episodePathParser = new EpisodePathParser(new NamingOptions()); diff --git a/tests/Jellyfin.Naming.Tests/TV/SeasonNumberTests.cs b/tests/Jellyfin.Naming.Tests/TV/SeasonNumberTests.cs index 73bf1722..22d4d9cb 100644 --- a/tests/Jellyfin.Naming.Tests/TV/SeasonNumberTests.cs +++ b/tests/Jellyfin.Naming.Tests/TV/SeasonNumberTests.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Emby.Naming.Common; -using Emby.Naming.TV; -using Xunit; - namespace Jellyfin.Naming.Tests.TV { + using Emby.Naming.Common; + using Emby.Naming.TV; + using Xunit; + public class SeasonNumberTests { private readonly EpisodeResolver _resolver = new EpisodeResolver(new NamingOptions()); diff --git a/tests/Jellyfin.Naming.Tests/TV/SeasonPathParserTests.cs b/tests/Jellyfin.Naming.Tests/TV/SeasonPathParserTests.cs index 7569e326..be771fb7 100644 --- a/tests/Jellyfin.Naming.Tests/TV/SeasonPathParserTests.cs +++ b/tests/Jellyfin.Naming.Tests/TV/SeasonPathParserTests.cs @@ -2,11 +2,11 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Naming.Tests.TV; + using Emby.Naming.TV; using Xunit; -namespace Jellyfin.Naming.Tests.TV; - public class SeasonPathParserTests { [Theory] diff --git a/tests/Jellyfin.Naming.Tests/TV/SeriesPathParserTest.cs b/tests/Jellyfin.Naming.Tests/TV/SeriesPathParserTest.cs index c0ae8081..a9e65b52 100644 --- a/tests/Jellyfin.Naming.Tests/TV/SeriesPathParserTest.cs +++ b/tests/Jellyfin.Naming.Tests/TV/SeriesPathParserTest.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Emby.Naming.Common; -using Emby.Naming.TV; -using Xunit; - namespace Jellyfin.Naming.Tests.TV { + using Emby.Naming.Common; + using Emby.Naming.TV; + using Xunit; + public class SeriesPathParserTest { private readonly NamingOptions _namingOptions = new NamingOptions(); diff --git a/tests/Jellyfin.Naming.Tests/TV/SeriesResolverTests.cs b/tests/Jellyfin.Naming.Tests/TV/SeriesResolverTests.cs index 4d90c345..64ad3a30 100644 --- a/tests/Jellyfin.Naming.Tests/TV/SeriesResolverTests.cs +++ b/tests/Jellyfin.Naming.Tests/TV/SeriesResolverTests.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Emby.Naming.Common; -using Emby.Naming.TV; -using Xunit; - namespace Jellyfin.Naming.Tests.TV { + using Emby.Naming.Common; + using Emby.Naming.TV; + using Xunit; + public class SeriesResolverTests { private readonly NamingOptions _namingOptions = new NamingOptions(); diff --git a/tests/Jellyfin.Naming.Tests/TV/SimpleEpisodeTests.cs b/tests/Jellyfin.Naming.Tests/TV/SimpleEpisodeTests.cs index 48548388..be3e9550 100644 --- a/tests/Jellyfin.Naming.Tests/TV/SimpleEpisodeTests.cs +++ b/tests/Jellyfin.Naming.Tests/TV/SimpleEpisodeTests.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; -using Emby.Naming.Common; -using Emby.Naming.TV; -using Xunit; - namespace Jellyfin.Naming.Tests.TV { + using System.IO; + using Emby.Naming.Common; + using Emby.Naming.TV; + using Xunit; + public class SimpleEpisodeTests { private readonly EpisodeResolver _resolver = new EpisodeResolver(new NamingOptions()); diff --git a/tests/Jellyfin.Naming.Tests/TV/TvParserHelpersTest.cs b/tests/Jellyfin.Naming.Tests/TV/TvParserHelpersTest.cs index ba32e1d7..a2636a6a 100644 --- a/tests/Jellyfin.Naming.Tests/TV/TvParserHelpersTest.cs +++ b/tests/Jellyfin.Naming.Tests/TV/TvParserHelpersTest.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Naming.Tests.TV; + using Emby.Naming.TV; using MediaBrowser.Model.Entities; using Xunit; -namespace Jellyfin.Naming.Tests.TV; - public class TvParserHelpersTest { [Theory] diff --git a/tests/Jellyfin.Naming.Tests/Video/CleanDateTimeTests.cs b/tests/Jellyfin.Naming.Tests/Video/CleanDateTimeTests.cs index 3bed75e8..904f2593 100644 --- a/tests/Jellyfin.Naming.Tests/Video/CleanDateTimeTests.cs +++ b/tests/Jellyfin.Naming.Tests/Video/CleanDateTimeTests.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.IO; -using Emby.Naming.Common; -using Emby.Naming.Video; -using Xunit; - namespace Jellyfin.Naming.Tests.Video { + using System.IO; + using Emby.Naming.Common; + using Emby.Naming.Video; + using Xunit; + public sealed class CleanDateTimeTests { private readonly NamingOptions _namingOptions = new NamingOptions(); diff --git a/tests/Jellyfin.Naming.Tests/Video/CleanStringTests.cs b/tests/Jellyfin.Naming.Tests/Video/CleanStringTests.cs index 5d8736c0..17e7a777 100644 --- a/tests/Jellyfin.Naming.Tests/Video/CleanStringTests.cs +++ b/tests/Jellyfin.Naming.Tests/Video/CleanStringTests.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Emby.Naming.Common; -using Emby.Naming.Video; -using Xunit; - namespace Jellyfin.Naming.Tests.Video { + using Emby.Naming.Common; + using Emby.Naming.Video; + using Xunit; + public sealed class CleanStringTests { private readonly NamingOptions _namingOptions = new NamingOptions(); diff --git a/tests/Jellyfin.Naming.Tests/Video/ExtraTests.cs b/tests/Jellyfin.Naming.Tests/Video/ExtraTests.cs index 5bbc88c0..a42ebeb0 100644 --- a/tests/Jellyfin.Naming.Tests/Video/ExtraTests.cs +++ b/tests/Jellyfin.Naming.Tests/Video/ExtraTests.cs @@ -2,15 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Emby.Naming.Common; -using Emby.Naming.Video; -using MediaBrowser.Model.Entities; -using Xunit; - -using MediaType = Emby.Naming.Common.MediaType; - namespace Jellyfin.Naming.Tests.Video { + using Emby.Naming.Common; + using Emby.Naming.Video; + using MediaBrowser.Model.Entities; + using Xunit; + using MediaType = Emby.Naming.Common.MediaType; + public class ExtraTests { private readonly NamingOptions _videoOptions = new NamingOptions(); diff --git a/tests/Jellyfin.Naming.Tests/Video/Format3DTests.cs b/tests/Jellyfin.Naming.Tests/Video/Format3DTests.cs index 2668b571..07a453aa 100644 --- a/tests/Jellyfin.Naming.Tests/Video/Format3DTests.cs +++ b/tests/Jellyfin.Naming.Tests/Video/Format3DTests.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Emby.Naming.Common; -using Emby.Naming.Video; -using Xunit; - namespace Jellyfin.Naming.Tests.Video { + using Emby.Naming.Common; + using Emby.Naming.Video; + using Xunit; + public class Format3DTests { private readonly NamingOptions _namingOptions = new NamingOptions(); diff --git a/tests/Jellyfin.Naming.Tests/Video/MultiVersionTests.cs b/tests/Jellyfin.Naming.Tests/Video/MultiVersionTests.cs index 04be464b..5cd5d42b 100644 --- a/tests/Jellyfin.Naming.Tests/Video/MultiVersionTests.cs +++ b/tests/Jellyfin.Naming.Tests/Video/MultiVersionTests.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Collections.Generic; -using System.Linq; -using Emby.Naming.Common; -using Emby.Naming.Video; -using Xunit; - namespace Jellyfin.Naming.Tests.Video { + using System.Collections.Generic; + using System.Linq; + using Emby.Naming.Common; + using Emby.Naming.Video; + using Xunit; + public class MultiVersionTests { private readonly NamingOptions _namingOptions = new NamingOptions(); diff --git a/tests/Jellyfin.Naming.Tests/Video/StackTests.cs b/tests/Jellyfin.Naming.Tests/Video/StackTests.cs index 3b153fca..0532bf93 100644 --- a/tests/Jellyfin.Naming.Tests/Video/StackTests.cs +++ b/tests/Jellyfin.Naming.Tests/Video/StackTests.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Linq; -using Emby.Naming.Common; -using Emby.Naming.Video; -using MediaBrowser.Model.IO; -using Xunit; - namespace Jellyfin.Naming.Tests.Video { + using System.Linq; + using Emby.Naming.Common; + using Emby.Naming.Video; + using MediaBrowser.Model.IO; + using Xunit; + public class StackTests { private readonly NamingOptions _namingOptions = new NamingOptions(); diff --git a/tests/Jellyfin.Naming.Tests/Video/StubTests.cs b/tests/Jellyfin.Naming.Tests/Video/StubTests.cs index e16df350..3660f5c6 100644 --- a/tests/Jellyfin.Naming.Tests/Video/StubTests.cs +++ b/tests/Jellyfin.Naming.Tests/Video/StubTests.cs @@ -2,12 +2,12 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using Emby.Naming.Common; -using Emby.Naming.Video; -using Xunit; - namespace Jellyfin.Naming.Tests.Video { + using Emby.Naming.Common; + using Emby.Naming.Video; + using Xunit; + public class StubTests { private readonly NamingOptions _namingOptions = new NamingOptions(); diff --git a/tests/Jellyfin.Naming.Tests/Video/VideoListResolverTests.cs b/tests/Jellyfin.Naming.Tests/Video/VideoListResolverTests.cs index eb94b7d2..78ad47f7 100644 --- a/tests/Jellyfin.Naming.Tests/Video/VideoListResolverTests.cs +++ b/tests/Jellyfin.Naming.Tests/Video/VideoListResolverTests.cs @@ -2,15 +2,15 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Linq; -using Emby.Naming.Common; -using Emby.Naming.Video; -using MediaBrowser.Model.Entities; -using Xunit; - namespace Jellyfin.Naming.Tests.Video { + using System; + using System.Linq; + using Emby.Naming.Common; + using Emby.Naming.Video; + using MediaBrowser.Model.Entities; + using Xunit; + public class VideoListResolverTests { private readonly NamingOptions _namingOptions = new NamingOptions(); diff --git a/tests/Jellyfin.Naming.Tests/Video/VideoResolverTests.cs b/tests/Jellyfin.Naming.Tests/Video/VideoResolverTests.cs index e8268f64..952ab17c 100644 --- a/tests/Jellyfin.Naming.Tests/Video/VideoResolverTests.cs +++ b/tests/Jellyfin.Naming.Tests/Video/VideoResolverTests.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Linq; -using Emby.Naming.Common; -using Emby.Naming.Video; -using MediaBrowser.Model.Entities; -using Xunit; - namespace Jellyfin.Naming.Tests.Video { + using System.Linq; + using Emby.Naming.Common; + using Emby.Naming.Video; + using MediaBrowser.Model.Entities; + using Xunit; + public class VideoResolverTests { private static NamingOptions _namingOptions = new NamingOptions(); diff --git a/tests/Jellyfin.Naming.Tests/obj/Debug/net10.0/Jellyfin.Naming.Tests.AssemblyInfo.cs b/tests/Jellyfin.Naming.Tests/obj/Debug/net10.0/Jellyfin.Naming.Tests.AssemblyInfo.cs index 2b4ca5d8..6b29e4c6 100644 --- a/tests/Jellyfin.Naming.Tests/obj/Debug/net10.0/Jellyfin.Naming.Tests.AssemblyInfo.cs +++ b/tests/Jellyfin.Naming.Tests/obj/Debug/net10.0/Jellyfin.Naming.Tests.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Jellyfin.Naming.Tests")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f47555f2aa4eff7dcc5c5ef5bbda374f292f0638")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+44ab9e1d6dd9b53ec5329bad76927c63bbda5507")] [assembly: System.Reflection.AssemblyProductAttribute("Jellyfin.Naming.Tests")] [assembly: System.Reflection.AssemblyTitleAttribute("Jellyfin.Naming.Tests")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/tests/Jellyfin.Naming.Tests/obj/Debug/net10.0/Jellyfin.Naming.Tests.AssemblyInfoInputs.cache b/tests/Jellyfin.Naming.Tests/obj/Debug/net10.0/Jellyfin.Naming.Tests.AssemblyInfoInputs.cache index 24d2b8ff..65566125 100644 --- a/tests/Jellyfin.Naming.Tests/obj/Debug/net10.0/Jellyfin.Naming.Tests.AssemblyInfoInputs.cache +++ b/tests/Jellyfin.Naming.Tests/obj/Debug/net10.0/Jellyfin.Naming.Tests.AssemblyInfoInputs.cache @@ -1 +1 @@ -30c81018456f4ba0187d26717d805a825d9be02f4c4c5a3f004031fb7d5a579b +be2c6cc3195b92706a72976ceca9eaf7d607ed897f5f1053d63147009bc18920 diff --git a/tests/Jellyfin.Naming.Tests/obj/Debug/net10.0/Jellyfin.Naming.Tests.csproj.AssemblyReference.cache b/tests/Jellyfin.Naming.Tests/obj/Debug/net10.0/Jellyfin.Naming.Tests.csproj.AssemblyReference.cache index fe2953edb84303455a702a0183affa94d70a6c9b..9ba370f5f73c1cef55131fafd35e5cbc3c032574 100644 GIT binary patch delta 3209 zcmb`J&u<$=6vsUqC8Q}auDy1lY0{)=ON_$ACQ$_lgj^>PElFvbPzqR8*Y?!ivfkOu zjzbNIfO_izVdjQ}#1E;ekf5zNfoLy)gisG$L4rR3A#p?HRA$!e-JN)CClVvsvOI6* zy?OKbzIj)^0M~y7eFGrf=vyC{e(mRv?^w6qyryg}JY6_N@Fi5DcEPIH>&D}kkYUs> z=w{)B`vcBvR4WwuKl7+qs}xK`vl*C?=V93}0Ek2)H$Qsivpd!wg8+bGX$LUGXCLIB z;9ws_`x`fg*^RzkjUPu|k`~Nxmotvb8Q0~EG%s96gv$t6lqROf&mdy!*nF19nSFva zjvisp4Gca4`h_h3(bc+5Q5Bx9nN+VLFvM1r6uSwM>@7u|nvnJ?YBqw$tCoSP$fO$O zyV}i@@I?u>ONkwAou?TJ0F&nG0Jz>OpB3Tjk<4d04NTmMUd?fDVwn$7WcCA z$^(MS+!*?CvoG$>T*e|ImmQOinN{2-icO41bAlFM3o3f8Y%(Ym%NRU?M zYLMr>P|sEkc$!-v@-ore1a@e`JHDjJoM~cD)WIr{Y(`ZcY{^LFG#0#m?w3M;tJ8Mi*+fE_^gxc9Z9^v6@JdIGu;&I zTX~vIUitGASF;IE6TY2W9GfBqWvKnHz|NmT0{W9Lp|Mr`o>9A7Ss&bIhU(KNy5DYf7t(rAr8iv9{17Fw6`==P3dTl3%fQ5oImmWg>? ztC-lPddcPo#wGqX`*Da4wqrq=9Cx?a(wTNjn^!B{Mj0MA`OAu}RYW#)?pJaf9~Wl< NUCP7P!+rm({09SZ)T;mh delta 38 wcmV+>0NMYj*#U#90SE>GB>(^b0cVpS0~?VeQ3jf|p|ss^v3jNgv&9 +namespace Jellyfin.Networking.Tests.Configuration; + using MediaBrowser.Common.Net; using Xunit; -namespace Jellyfin.Networking.Tests.Configuration; - public static class NetworkConfigurationTests { [Theory] diff --git a/tests/Jellyfin.Networking.Tests/NetworkExtensionsTests.cs b/tests/Jellyfin.Networking.Tests/NetworkExtensionsTests.cs index c08968ad..c776a156 100644 --- a/tests/Jellyfin.Networking.Tests/NetworkExtensionsTests.cs +++ b/tests/Jellyfin.Networking.Tests/NetworkExtensionsTests.cs @@ -2,14 +2,14 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using FsCheck; -using FsCheck.Fluent; -using FsCheck.Xunit; -using MediaBrowser.Common.Net; -using Xunit; - namespace Jellyfin.Networking.Tests { + using FsCheck; + using FsCheck.Fluent; + using FsCheck.Xunit; + using MediaBrowser.Common.Net; + using Xunit; + public static class NetworkExtensionsTests { /// diff --git a/tests/Jellyfin.Networking.Tests/NetworkManagerTests.cs b/tests/Jellyfin.Networking.Tests/NetworkManagerTests.cs index 8ba5c944..6b54a295 100644 --- a/tests/Jellyfin.Networking.Tests/NetworkManagerTests.cs +++ b/tests/Jellyfin.Networking.Tests/NetworkManagerTests.cs @@ -2,16 +2,16 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System.Net; -using Jellyfin.Networking.Manager; -using MediaBrowser.Common.Net; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Logging.Abstractions; -using Moq; -using Xunit; - namespace Jellyfin.Networking.Tests { + using System.Net; + using Jellyfin.Networking.Manager; + using MediaBrowser.Common.Net; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.Logging.Abstractions; + using Moq; + using Xunit; + public class NetworkManagerTests { /// diff --git a/tests/Jellyfin.Networking.Tests/NetworkParseTests.cs b/tests/Jellyfin.Networking.Tests/NetworkParseTests.cs index 0a38dde6..e75eae9c 100644 --- a/tests/Jellyfin.Networking.Tests/NetworkParseTests.cs +++ b/tests/Jellyfin.Networking.Tests/NetworkParseTests.cs @@ -2,22 +2,22 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using Jellyfin.Networking.Manager; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Net; -using MediaBrowser.Model.Net; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Logging.Abstractions; -using Moq; -using Xunit; -using IConfigurationManager = MediaBrowser.Common.Configuration.IConfigurationManager; - namespace Jellyfin.Networking.Tests { + using System; + using System.Collections.Generic; + using System.Linq; + using System.Net; + using Jellyfin.Networking.Manager; + using MediaBrowser.Common.Configuration; + using MediaBrowser.Common.Net; + using MediaBrowser.Model.Net; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.Logging.Abstractions; + using Moq; + using Xunit; + using IConfigurationManager = MediaBrowser.Common.Configuration.IConfigurationManager; + public class NetworkParseTests { internal static IConfigurationManager GetMockConfig(NetworkConfiguration conf) diff --git a/tests/Jellyfin.Networking.Tests/obj/Debug/net10.0/Jellyfin.Networking.Tests.AssemblyInfo.cs b/tests/Jellyfin.Networking.Tests/obj/Debug/net10.0/Jellyfin.Networking.Tests.AssemblyInfo.cs index f38bead0..0d23fa46 100644 --- a/tests/Jellyfin.Networking.Tests/obj/Debug/net10.0/Jellyfin.Networking.Tests.AssemblyInfo.cs +++ b/tests/Jellyfin.Networking.Tests/obj/Debug/net10.0/Jellyfin.Networking.Tests.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Jellyfin.Networking.Tests")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f47555f2aa4eff7dcc5c5ef5bbda374f292f0638")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+44ab9e1d6dd9b53ec5329bad76927c63bbda5507")] [assembly: System.Reflection.AssemblyProductAttribute("Jellyfin.Networking.Tests")] [assembly: System.Reflection.AssemblyTitleAttribute("Jellyfin.Networking.Tests")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/tests/Jellyfin.Networking.Tests/obj/Debug/net10.0/Jellyfin.Networking.Tests.AssemblyInfoInputs.cache b/tests/Jellyfin.Networking.Tests/obj/Debug/net10.0/Jellyfin.Networking.Tests.AssemblyInfoInputs.cache index 0b89342a..699fa3f2 100644 --- a/tests/Jellyfin.Networking.Tests/obj/Debug/net10.0/Jellyfin.Networking.Tests.AssemblyInfoInputs.cache +++ b/tests/Jellyfin.Networking.Tests/obj/Debug/net10.0/Jellyfin.Networking.Tests.AssemblyInfoInputs.cache @@ -1 +1 @@ -a8cbf73d81986c2f53458469e99d6164ded9b5bdc70161af0a9a57ffed5dbad4 +5e0af92f29fd947440b136cc061d9e7bf275e39fac25cb6ae9c9c590898ac884 diff --git a/tests/Jellyfin.Networking.Tests/obj/Debug/net10.0/Jellyfin.Networking.Tests.csproj.AssemblyReference.cache b/tests/Jellyfin.Networking.Tests/obj/Debug/net10.0/Jellyfin.Networking.Tests.csproj.AssemblyReference.cache index ad790b22e3d21602551089fd48c3849bf71d9c4f..ad62dea311e4b9f058c588f1f6cbe3f4ce131399 100644 GIT binary patch delta 3249 zcmb_e&u<$=6!vVCG<8UnIyR+A>LyJZ;wVfU5+OiB;5w;j8<(^RWQG$G5>RmjTJ;2KD=$XCn%V+n^+wXp*Y^^N6SX?FeDk@W}XjZKa{h6ys*Bh5L zqj<{s0hd&&7EAn}B~+?ciw2_eS(uggVMW&gh{a;JK7H%U`{wVx0Dyk!1`y}FPw-D* zvF%(>^V@#*Yxn-pfKm>oNhh^1lUCGO_@vn)3- z#eOLC9s=FM7Jz}ZhDA{go~s*Ft053)XO$<}Es$dGDaq+^>8_G$A$YQ8>Zpbcs#1Qd z)p`g&G{p8RgU`9oX}JQxgmZl!*Gz2iQw3Z>I$Up9d>6aV!Cujf4GAN$Xq&}17hx7I zWEbXN0H6<^Szga$f^w#5ze$*EI}60X4bbeJ-V(_dQIOLe7MI;95_ZO;&G8Su|H7e- zlz|Z&JR${u=aQT~%EzF2FY7rfvm^|3H)e&M39#+$P=<^IDH2J+L6NM^6gmnyrqeSvDPK*U|^X6Ek6+B^)rpJjhj4!-kAAH0W5YUm-}X zaE-|Op1W_>ba;+iAo2#$+GIC5?u9^7YR)jQCv{hDqBf*l&+^!dnT$LTDZu1YsbCDx z))8r_C4EQr0W&;8GjUIiUF;t)u@DxdQRlWb#51PR2F#O&NpY2^=9PxzRARx7{+^^? zqK2r+&7?3o2Z@0jN&e^sfl0aU}#HQhuTZ?IOSA zc-mzbx=uNLs&!o@k(}S16RhvRl&gxT|GNGDN3RWJMuMvF*evi)Spl|Z2Kyaf3aEyO zpV!RP-n-0^N2g4(1CQA!`^H$elH3wc5UbUD>|cB0*!d2lM*&qd^*F)TEJUE)Kiepn z%NEeHTV+ zxcm;HJ1p3|l9taLJL=DFIm_fH#Y6>PrPPEckV@;kRr)7jm}?zsq%&itccvn`%^V(f zD#ntgRt;=Xt!(iJ<1+8qz8|8SMb?&yG3SaM6Kqu2yn^Wr)bOOido4EC5ZTl?t^}JH Q6K??>D#e}tu8j--0p-NvKmY&$ delta 38 wcmV+>0NMYe>;e9~0SE>GDgXcg0cVpS0~?VeQ3jf|p|ss^v3jKfv&0%-Tl4%4)&Kwi diff --git a/tests/Jellyfin.Providers.Tests/Lyrics/LrcLyricParserTests.cs b/tests/Jellyfin.Providers.Tests/Lyrics/LrcLyricParserTests.cs index 7216aadb..2b4a369a 100644 --- a/tests/Jellyfin.Providers.Tests/Lyrics/LrcLyricParserTests.cs +++ b/tests/Jellyfin.Providers.Tests/Lyrics/LrcLyricParserTests.cs @@ -2,13 +2,13 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Providers.Tests.Lyrics; + using System.IO; using MediaBrowser.Model.Lyrics; using MediaBrowser.Providers.Lyric; using Xunit; -namespace Jellyfin.Providers.Tests.Lyrics; - public static class LrcLyricParserTests { [Fact] diff --git a/tests/Jellyfin.Providers.Tests/Manager/ItemImageProviderTests.cs b/tests/Jellyfin.Providers.Tests/Manager/ItemImageProviderTests.cs index 212dbf3a..db21f28f 100644 --- a/tests/Jellyfin.Providers.Tests/Manager/ItemImageProviderTests.cs +++ b/tests/Jellyfin.Providers.Tests/Manager/ItemImageProviderTests.cs @@ -2,34 +2,34 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Net; -using System.Net.Http; -using System.Net.Mime; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Configuration; -using MediaBrowser.Model.Drawing; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.IO; -using MediaBrowser.Model.MediaInfo; -using MediaBrowser.Model.Providers; -using MediaBrowser.Providers.Manager; -using Microsoft.Extensions.Logging.Abstractions; -using Moq; -using Xunit; - namespace Jellyfin.Providers.Tests.Manager { + using System; + using System.Collections.Generic; + using System.Globalization; + using System.IO; + using System.Linq; + using System.Net; + using System.Net.Http; + using System.Net.Mime; + using System.Text; + using System.Text.RegularExpressions; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Configuration; + using MediaBrowser.Model.Drawing; + using MediaBrowser.Model.Entities; + using MediaBrowser.Model.IO; + using MediaBrowser.Model.MediaInfo; + using MediaBrowser.Model.Providers; + using MediaBrowser.Providers.Manager; + using Microsoft.Extensions.Logging.Abstractions; + using Moq; + using Xunit; + public partial class ItemImageProviderTests { private static readonly CompositeFormat _testDataImagePath = CompositeFormat.Parse("Test Data/Images/blank{0}.jpg"); diff --git a/tests/Jellyfin.Providers.Tests/Manager/MetadataServiceTests.cs b/tests/Jellyfin.Providers.Tests/Manager/MetadataServiceTests.cs index da966bf9..2c5d1ecb 100644 --- a/tests/Jellyfin.Providers.Tests/Manager/MetadataServiceTests.cs +++ b/tests/Jellyfin.Providers.Tests/Manager/MetadataServiceTests.cs @@ -2,20 +2,20 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Linq; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Providers.Manager; -using Xunit; - namespace Jellyfin.Providers.Tests.Manager { + using System; + using System.Collections.Generic; + using System.Linq; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Audio; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Providers; + using MediaBrowser.Model.Entities; + using MediaBrowser.Providers.Manager; + using Xunit; + public class MetadataServiceTests { [Theory] diff --git a/tests/Jellyfin.Providers.Tests/MediaInfo/AudioResolverTests.cs b/tests/Jellyfin.Providers.Tests/MediaInfo/AudioResolverTests.cs index 8582d221..bb40bc2b 100644 --- a/tests/Jellyfin.Providers.Tests/MediaInfo/AudioResolverTests.cs +++ b/tests/Jellyfin.Providers.Tests/MediaInfo/AudioResolverTests.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Providers.Tests.MediaInfo; + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -21,8 +23,6 @@ using Microsoft.Extensions.Logging; using Moq; using Xunit; -namespace Jellyfin.Providers.Tests.MediaInfo; - public class AudioResolverTests { private readonly AudioResolver _audioResolver; diff --git a/tests/Jellyfin.Providers.Tests/MediaInfo/EmbeddedImageProviderTests.cs b/tests/Jellyfin.Providers.Tests/MediaInfo/EmbeddedImageProviderTests.cs index 0202389c..4e08796a 100644 --- a/tests/Jellyfin.Providers.Tests/MediaInfo/EmbeddedImageProviderTests.cs +++ b/tests/Jellyfin.Providers.Tests/MediaInfo/EmbeddedImageProviderTests.cs @@ -2,27 +2,27 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.MediaEncoding; -using MediaBrowser.Controller.Persistence; -using MediaBrowser.Model.Drawing; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Entities; -using MediaBrowser.Providers.MediaInfo; -using Microsoft.Extensions.Logging.Abstractions; -using Moq; -using Xunit; - namespace Jellyfin.Providers.Tests.MediaInfo { + using System; + using System.Collections.Generic; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Entities.TV; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.MediaEncoding; + using MediaBrowser.Controller.Persistence; + using MediaBrowser.Model.Drawing; + using MediaBrowser.Model.Dto; + using MediaBrowser.Model.Entities; + using MediaBrowser.Providers.MediaInfo; + using Microsoft.Extensions.Logging.Abstractions; + using Moq; + using Xunit; + public class EmbeddedImageProviderTests { [Theory] diff --git a/tests/Jellyfin.Providers.Tests/MediaInfo/FFProbeVideoInfoTests.cs b/tests/Jellyfin.Providers.Tests/MediaInfo/FFProbeVideoInfoTests.cs index 330e17c0..a937d0dc 100644 --- a/tests/Jellyfin.Providers.Tests/MediaInfo/FFProbeVideoInfoTests.cs +++ b/tests/Jellyfin.Providers.Tests/MediaInfo/FFProbeVideoInfoTests.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Providers.Tests.MediaInfo; + using System; using AutoFixture; using AutoFixture.AutoMoq; @@ -12,8 +14,6 @@ using MediaBrowser.Providers.MediaInfo; using Moq; using Xunit; -namespace Jellyfin.Providers.Tests.MediaInfo; - public class FFProbeVideoInfoTests { private readonly FFProbeVideoInfo _fFProbeVideoInfo; diff --git a/tests/Jellyfin.Providers.Tests/MediaInfo/MediaInfoResolverTests.cs b/tests/Jellyfin.Providers.Tests/MediaInfo/MediaInfoResolverTests.cs index f70f2bf0..0167fde3 100644 --- a/tests/Jellyfin.Providers.Tests/MediaInfo/MediaInfoResolverTests.cs +++ b/tests/Jellyfin.Providers.Tests/MediaInfo/MediaInfoResolverTests.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Providers.Tests.MediaInfo; + using System; using System.Collections.Generic; using System.Linq; @@ -26,8 +28,6 @@ using Microsoft.Extensions.Logging; using Moq; using Xunit; -namespace Jellyfin.Providers.Tests.MediaInfo; - public class MediaInfoResolverTests { public const string VideoDirectoryPath = "Test Data/Video"; diff --git a/tests/Jellyfin.Providers.Tests/MediaInfo/SubtitleResolverTests.cs b/tests/Jellyfin.Providers.Tests/MediaInfo/SubtitleResolverTests.cs index 71b45296..c2fa0b64 100644 --- a/tests/Jellyfin.Providers.Tests/MediaInfo/SubtitleResolverTests.cs +++ b/tests/Jellyfin.Providers.Tests/MediaInfo/SubtitleResolverTests.cs @@ -2,6 +2,8 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // +namespace Jellyfin.Providers.Tests.MediaInfo; + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -21,8 +23,6 @@ using Microsoft.Extensions.Logging; using Moq; using Xunit; -namespace Jellyfin.Providers.Tests.MediaInfo; - public class SubtitleResolverTests { private readonly SubtitleResolver _subtitleResolver; diff --git a/tests/Jellyfin.Providers.Tests/MediaInfo/VideoImageProviderTests.cs b/tests/Jellyfin.Providers.Tests/MediaInfo/VideoImageProviderTests.cs index c089b658..688e21ca 100644 --- a/tests/Jellyfin.Providers.Tests/MediaInfo/VideoImageProviderTests.cs +++ b/tests/Jellyfin.Providers.Tests/MediaInfo/VideoImageProviderTests.cs @@ -2,25 +2,25 @@ // Copyright (c) PlaceholderCompany. All rights reserved. // -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.MediaEncoding; -using MediaBrowser.Controller.Persistence; -using MediaBrowser.Model.Drawing; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Entities; -using MediaBrowser.Providers.MediaInfo; -using Microsoft.Extensions.Logging.Abstractions; -using Moq; -using Xunit; - namespace Jellyfin.Providers.Tests.MediaInfo { + using System; + using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + using MediaBrowser.Controller.Entities; + using MediaBrowser.Controller.Entities.Movies; + using MediaBrowser.Controller.Library; + using MediaBrowser.Controller.MediaEncoding; + using MediaBrowser.Controller.Persistence; + using MediaBrowser.Model.Drawing; + using MediaBrowser.Model.Dto; + using MediaBrowser.Model.Entities; + using MediaBrowser.Providers.MediaInfo; + using Microsoft.Extensions.Logging.Abstractions; + using Moq; + using Xunit; + public class VideoImageProviderTests { public static TheoryData