diff --git a/StreamCinema.sln b/Cinema.sln similarity index 77% rename from StreamCinema.sln rename to Cinema.sln index a5761b5..5c3d7b4 100644 --- a/StreamCinema.sln +++ b/Cinema.sln @@ -3,11 +3,11 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StreamCinemaLib", "StreamCinemaLib\StreamCinemaLib.csproj", "{7DE997A9-52B8-41E4-9958-1115BA3E481D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CinemaLib", "CinemaLib\CinemaLib.csproj", "{7DE997A9-52B8-41E4-9958-1115BA3E481D}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StreamCinemaWeb", "StreamCinemaWeb\StreamCinemaWeb.csproj", "{6B2550AF-200C-40B3-95AE-892A604B9A76}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CinemaWeb", "CinemaWeb\CinemaWeb.csproj", "{6B2550AF-200C-40B3-95AE-892A604B9A76}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StreamCinemaJellyfin", "StreamCinemaJellyfin\StreamCinemaJellyfin.csproj", "{E106C0D2-788D-4401-A9F0-9D0A35E8BB63}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CinemaJellyfin", "CinemaJellyfin\CinemaJellyfin.csproj", "{E106C0D2-788D-4401-A9F0-9D0A35E8BB63}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/StreamCinemaJellyfin/StreamCinemaEpisode.cs b/CinemaJellyfin/CinemaEpisode.cs similarity index 100% rename from StreamCinemaJellyfin/StreamCinemaEpisode.cs rename to CinemaJellyfin/CinemaEpisode.cs diff --git a/StreamCinemaJellyfin/StreamCinemaFilterFolder.cs b/CinemaJellyfin/CinemaFilterFolder.cs similarity index 89% rename from StreamCinemaJellyfin/StreamCinemaFilterFolder.cs rename to CinemaJellyfin/CinemaFilterFolder.cs index 0e820f8..7f515bb 100644 --- a/StreamCinemaJellyfin/StreamCinemaFilterFolder.cs +++ b/CinemaJellyfin/CinemaFilterFolder.cs @@ -6,14 +6,14 @@ using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Querying; -using StreamCinemaLib.API; +using CinemaLib.API; -namespace Jellyfin.Plugin.StreamCinema; +namespace Jellyfin.Plugin.Cinema; /// /// Stream Cinema folder that also implicitly represents a filter (minimally filter by ). /// -public abstract class StreamCinemaFilterFolder : Folder +public abstract class CinemaFilterFolder : Folder { private const string PreferredCulture = "cs"; private const string FallbackCulture = "en"; @@ -45,7 +45,7 @@ public abstract class StreamCinemaFilterFolder : Folder public abstract ItemType ItemType { get; } /// - /// Information for to render icon for us. + /// Information for to render icon for us. /// internal abstract string ImageName { get; } @@ -159,7 +159,7 @@ public abstract class StreamCinemaFilterFolder : Folder /// /// Type of the folder. /// Culture localized name of the folder. - protected T CreateChildFolder(string localizedName) where T : StreamCinemaFilterFolder, new() + protected T CreateChildFolder(string localizedName) where T : CinemaFilterFolder, new() { return CreateFilterFolderInternal(this, localizedName); } @@ -169,18 +169,18 @@ public abstract class StreamCinemaFilterFolder : Folder /// Type of the folder. /// Parent folder. /// Culture localized name of the folder. - internal static T CreateRootFilterFolder(string localizedName) where T : StreamCinemaRootFolder, new() + internal static T CreateRootFilterFolder(string localizedName) where T : CinemaRootFolder, new() { return CreateFilterFolderInternal(null, localizedName); } - private static T CreateFilterFolderInternal(StreamCinemaFilterFolder? parent, string localizedName) where T : StreamCinemaFilterFolder, new() + private static T CreateFilterFolderInternal(CinemaFilterFolder? parent, string localizedName) where T : CinemaFilterFolder, new() { - Guid folderId = StreamCinemaHost.LibraryManager.GetNewItemId("folder", typeof(T)); - string folderPath = GetInternalMetadataPath(StreamCinemaHost.InternalMetadataPath!, folderId); + Guid folderId = CinemaHost.LibraryManager.GetNewItemId("folder", typeof(T)); + string folderPath = GetInternalMetadataPath(CinemaHost.InternalMetadataPath!, folderId); Directory.CreateDirectory(folderPath); - T? folder = StreamCinemaHost.LibraryManager.GetItemById(folderId) as T; + T? folder = CinemaHost.LibraryManager.GetItemById(folderId) as T; bool isNew; bool forceUpdate = false; if (isNew = folder == null) @@ -189,8 +189,8 @@ public abstract class StreamCinemaFilterFolder : Folder { Id = folderId, Name = localizedName, - DateCreated = StreamCinemaHost.FileSystem.GetCreationTimeUtc(folderPath), - DateModified = StreamCinemaHost.FileSystem.GetLastWriteTimeUtc(folderPath) + DateCreated = CinemaHost.FileSystem.GetCreationTimeUtc(folderPath), + DateModified = CinemaHost.FileSystem.GetLastWriteTimeUtc(folderPath) }; } @@ -200,7 +200,7 @@ public abstract class StreamCinemaFilterFolder : Folder { folder.ParentId = Guid.Empty; folder.IsRoot = true; - StreamCinemaHost.LibraryManager.RootFolder.AddVirtualChild(folder); + CinemaHost.LibraryManager.RootFolder.AddVirtualChild(folder); } else { @@ -210,11 +210,11 @@ public abstract class StreamCinemaFilterFolder : Folder if (isNew) { folder.OnMetadataChanged(); - StreamCinemaHost.LibraryManager.CreateItem(folder, parent); + CinemaHost.LibraryManager.CreateItem(folder, parent); } folder.RefreshMetadata( - new MetadataRefreshOptions(new DirectoryService(StreamCinemaHost.FileSystem)) { ForceSave = !isNew && forceUpdate }, + new MetadataRefreshOptions(new DirectoryService(CinemaHost.FileSystem)) { ForceSave = !isNew && forceUpdate }, default ).GetAwaiter().GetResult(); @@ -275,7 +275,7 @@ public abstract class StreamCinemaFilterFolder : Folder } else { - item = GetMediaItemById(csId, null, out isNew); + item = GetMediaItemById(csId, null, out isNew); } if (isNew && media.info_labels != null) @@ -324,11 +324,11 @@ public abstract class StreamCinemaFilterFolder : Folder } } - // Identify the item as it originates from StreamCinema + // Identify the item as it originates from Cinema // Note: This is getting lost in persisted items if (item.ProviderIds == null) item.ProviderIds = new Dictionary(); - item.ProviderIds[StreamCinemaPlugin.StreamCinemaProviderName] = ""; + item.ProviderIds[CinemaPlugin.CinemaProviderName] = ""; item.Path = "https://a/b"; @@ -381,7 +381,7 @@ public abstract class StreamCinemaFilterFolder : Folder { // HACK: We use RegisterItem that is volatile intead of CreateItem //_libraryManager.CreateItem(item, parentFolder); - StreamCinemaHost.LibraryManager.RegisterItem(item); + CinemaHost.LibraryManager.RegisterItem(item); if (media.cast != null && media.cast.Count > 0) { @@ -451,7 +451,7 @@ public abstract class StreamCinemaFilterFolder : Folder internal static string GetInternalMetadataPath(string basePath, Guid id) { - return System.IO.Path.Combine(basePath, "streamcinema", id.ToString("N", CultureInfo.InvariantCulture), "metadata"); + return System.IO.Path.Combine(basePath, "cinema", id.ToString("N", CultureInfo.InvariantCulture), "metadata"); } /// @@ -459,7 +459,7 @@ public abstract class StreamCinemaFilterFolder : Folder /// internal static Guid GetMediaItemId(string csPrimaryId, string? csVersionId) { string idS = csVersionId == null ? csPrimaryId : (csPrimaryId + VersionSeparator + csVersionId); - return StreamCinemaHost.LibraryManager.GetNewItemId(idS, typeof(StreamCinemaPlugin)); + return CinemaHost.LibraryManager.GetNewItemId(idS, typeof(CinemaPlugin)); } /// @@ -469,7 +469,7 @@ public abstract class StreamCinemaFilterFolder : Folder where T : BaseItem, new() { Guid id = GetMediaItemId(csPrimaryId, csVersionId); - T? item = StreamCinemaHost.LibraryManager.GetItemById(id) as T; + T? item = CinemaHost.LibraryManager.GetItemById(id) as T; if (item == null) { diff --git a/StreamCinemaJellyfin/StreamCinemaHost.cs b/CinemaJellyfin/CinemaHost.cs similarity index 80% rename from StreamCinemaJellyfin/StreamCinemaHost.cs rename to CinemaJellyfin/CinemaHost.cs index 0715ea6..c0e1ba2 100644 --- a/StreamCinemaJellyfin/StreamCinemaHost.cs +++ b/CinemaJellyfin/CinemaHost.cs @@ -5,26 +5,26 @@ using MediaBrowser.Model.IO; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -namespace Jellyfin.Plugin.StreamCinema; +namespace Jellyfin.Plugin.Cinema; /// /// responsible for Live TV recordings. /// -public sealed class StreamCinemaHost : IHostedService +public sealed class CinemaHost : IHostedService { #pragma warning disable CS8618 // This instance is specially registered and gets created before all classes - // except StreamCinemaSeccviceRegistrator and StreamCinemaPlugin. + // except CinemaServiceRegistrator and CinemaPlugin. private static ILibraryManager _libraryManager; private static IServerConfigurationManager _config; private static IFileSystem _fileSystem; #pragma warning restore CS8618 - private readonly ILogger _logger; + private readonly ILogger _logger; /// /// Initializes a the Stream Cinema plugin. /// - public StreamCinemaHost(ILibraryManager libraryManager, IServerConfigurationManager config, IFileSystem fileSystem, ILogger logger) + public CinemaHost(ILibraryManager libraryManager, IServerConfigurationManager config, IFileSystem fileSystem, ILogger logger) { _libraryManager = libraryManager; _config = config; @@ -42,7 +42,7 @@ public sealed class StreamCinemaHost : IHostedService public Task StartAsync(CancellationToken cancellationToken) { // Make sure the Stream Cinema root folders are created - StreamCinemaFilterFolder.CreateRootFilterFolder("Movies"); + CinemaFilterFolder.CreateRootFilterFolder("Movies"); /* pluginItems.Add(CreateMenuItem("movies", Resources.Movies, GetResourceUrl("movies.png"))); diff --git a/StreamCinemaJellyfin/StreamCinemaImageProvider.cs b/CinemaJellyfin/CinemaImageProvider.cs similarity index 59% rename from StreamCinemaJellyfin/StreamCinemaImageProvider.cs rename to CinemaJellyfin/CinemaImageProvider.cs index ddb18d7..b6a0ccc 100644 --- a/StreamCinemaJellyfin/StreamCinemaImageProvider.cs +++ b/CinemaJellyfin/CinemaImageProvider.cs @@ -2,16 +2,16 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; -namespace Jellyfin.Plugin.StreamCinema; +namespace Jellyfin.Plugin.Cinema; /// -/// An image provider for Stream Cinema icons. +/// An image provider for Cinema icons. /// -public class StreamCinemaImageProvider : IDynamicImageProvider +public class CinemaImageProvider : IDynamicImageProvider { /// - public string Name => "Stream Cinema Image Provider"; + public string Name => "Cinema Image Provider"; /// public IEnumerable GetSupportedImages(BaseItem item) @@ -22,8 +22,8 @@ public class StreamCinemaImageProvider : IDynamicImageProvider /// public Task GetImage(BaseItem item, ImageType type, CancellationToken cancellationToken) { - if (item is StreamCinemaFilterFolder filter) - return Task.FromResult(new DynamicImageResponse() { HasImage = true, Stream = typeof(StreamCinemaImageProvider).Assembly.GetManifestResourceStream(typeof(StreamCinemaImageProvider), filter.ImageName) }); + if (item is CinemaFilterFolder filter) + return Task.FromResult(new DynamicImageResponse() { HasImage = true, Stream = typeof(CinemaImageProvider).Assembly.GetManifestResourceStream(typeof(CinemaImageProvider), filter.ImageName) }); else return Task.FromResult(new DynamicImageResponse() { HasImage = false }); } @@ -31,6 +31,6 @@ public class StreamCinemaImageProvider : IDynamicImageProvider /// public bool Supports(BaseItem item) { - return item is StreamCinemaFilterFolder; + return item is CinemaFilterFolder; } } diff --git a/CinemaJellyfin/CinemaInnerMediaSourceManager.cs b/CinemaJellyfin/CinemaInnerMediaSourceManager.cs new file mode 100644 index 0000000..4bdc1a8 --- /dev/null +++ b/CinemaJellyfin/CinemaInnerMediaSourceManager.cs @@ -0,0 +1,12 @@ +namespace Jellyfin.Plugin.Cinema; + +class CinemaInnerMediaSourceManager : ICinemaInnerMediaSourceManager +{ + private readonly Type _innerType; + + public CinemaInnerMediaSourceManager(Type innerType) { + this._innerType = innerType; + } + + public Type InnerType => _innerType; +} \ No newline at end of file diff --git a/StreamCinemaJellyfin/StreamCinemaJellyfin.csproj b/CinemaJellyfin/CinemaJellyfin.csproj similarity index 79% rename from StreamCinemaJellyfin/StreamCinemaJellyfin.csproj rename to CinemaJellyfin/CinemaJellyfin.csproj index 1aa40a2..d7742fe 100644 --- a/StreamCinemaJellyfin/StreamCinemaJellyfin.csproj +++ b/CinemaJellyfin/CinemaJellyfin.csproj @@ -7,7 +7,7 @@ - + @@ -16,9 +16,9 @@ - + - - + + diff --git a/StreamCinemaJellyfin/StreamCinemaMediaSourceManager.cs b/CinemaJellyfin/CinemaMediaSourceManager.cs similarity index 92% rename from StreamCinemaJellyfin/StreamCinemaMediaSourceManager.cs rename to CinemaJellyfin/CinemaMediaSourceManager.cs index 512e7ec..31ec2fe 100644 --- a/StreamCinemaJellyfin/StreamCinemaMediaSourceManager.cs +++ b/CinemaJellyfin/CinemaMediaSourceManager.cs @@ -16,12 +16,12 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.MediaInfo; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Primitives; -using StreamCinema.Webshare; -using StreamCinemaLib.API; +using Cinema.Webshare; +using CinemaLib.API; -namespace Jellyfin.Plugin.StreamCinema; +namespace Jellyfin.Plugin.Cinema; -public class StreamCinemaMediaSourceManager : IMediaSourceManager +public class CinemaMediaSourceManager : IMediaSourceManager { private const bool IsWebshareFreeAccount = true; private const double BitrateMargin = 0.1; // 10 % @@ -29,14 +29,14 @@ public class StreamCinemaMediaSourceManager : IMediaSourceManager private static readonly TimeSpan VersionValidityTimeout = TimeSpan.FromMinutes(180); - private static StreamCinemaMediaSourceManager? _instance; + private static CinemaMediaSourceManager? _instance; private readonly IMediaSourceManager _inner; private readonly ILibraryManager _libraryManager; private readonly IHttpContextAccessor _http; private readonly ConcurrentDictionary _videoVersions; - public StreamCinemaMediaSourceManager(IStreamCinemaInnerMediaSourceManager innerMediaSourceManager, ILibraryManager libraryManager, IServiceProvider svc, IHttpContextAccessor http) + public CinemaMediaSourceManager(ICinemaInnerMediaSourceManager innerMediaSourceManager, ILibraryManager libraryManager, IServiceProvider svc, IHttpContextAccessor http) { if (innerMediaSourceManager == null || svc == null) throw new ArgumentNullException(); @@ -53,7 +53,7 @@ public class StreamCinemaMediaSourceManager : IMediaSourceManager _instance = this; } - internal static bool TryGetInstance([NotNullWhen(true)] out StreamCinemaMediaSourceManager? instance) + internal static bool TryGetInstance([NotNullWhen(true)] out CinemaMediaSourceManager? instance) { instance = _instance; return instance != null; @@ -120,15 +120,15 @@ public class StreamCinemaMediaSourceManager : IMediaSourceManager { return _inner.GetMediaStreams(itemId); /* - // Intercept for StreamCinemaItems + // Intercept for CinemaItems Video? item = _libraryManager.GetItemById