diff --git a/Tv7Playlist/LoggingEvents.cs b/Tv7Playlist.Core/LoggingEvents.cs similarity index 75% rename from Tv7Playlist/LoggingEvents.cs rename to Tv7Playlist.Core/LoggingEvents.cs index d582702..44713cd 100644 --- a/Tv7Playlist/LoggingEvents.cs +++ b/Tv7Playlist.Core/LoggingEvents.cs @@ -1,6 +1,6 @@ -namespace Tv7Playlist +namespace Tv7Playlist.Core { - public class LoggingEvents + public static class LoggingEvents { public const int Startup = 1000; public const int Playlist = 1001; diff --git a/Tv7Playlist/Parser/IPlaylistParser.cs b/Tv7Playlist.Core/Parsers/IPlaylistParser.cs similarity index 85% rename from Tv7Playlist/Parser/IPlaylistParser.cs rename to Tv7Playlist.Core/Parsers/IPlaylistParser.cs index 80ab481..24b2ff4 100644 --- a/Tv7Playlist/Parser/IPlaylistParser.cs +++ b/Tv7Playlist.Core/Parsers/IPlaylistParser.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Threading.Tasks; -namespace Tv7Playlist.Parser +namespace Tv7Playlist.Core.Parsers { public interface IPlaylistParser { diff --git a/Tv7Playlist/Parser/M3UParser.cs b/Tv7Playlist.Core/Parsers/M3UParser.cs similarity index 94% rename from Tv7Playlist/Parser/M3UParser.cs rename to Tv7Playlist.Core/Parsers/M3UParser.cs index a964358..d4a5319 100644 --- a/Tv7Playlist/Parser/M3UParser.cs +++ b/Tv7Playlist.Core/Parsers/M3UParser.cs @@ -2,12 +2,11 @@ using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore.Internal; using Microsoft.Extensions.Logging; -namespace Tv7Playlist.Parser +namespace Tv7Playlist.Core.Parsers { - internal class M3UParser : IPlaylistParser + public class M3UParser : IPlaylistParser { private const string ExtInfStartTag = "#EXTINF:"; private const string ExtFileStartTag = "#EXTM3U"; @@ -120,7 +119,9 @@ namespace Tv7Playlist.Parser if (string.IsNullOrWhiteSpace(url)) return null; - var fields = metaLine.Replace(ExtInfStartTag, string.Empty).Split(","); + //TODO: Check line parsing of https://github.com/tellytv/telly/blob/dev/internal/m3uplus/main.go + //format is base for telly to export. + var fields = metaLine.Replace(ExtInfStartTag, string.Empty).Split(','); var name = fields.Length >= 2 ? fields[1] : $"{currentId}-unknown"; return new ParsedTrack(currentId, name, url); diff --git a/Tv7Playlist/Parser/ParsedTrack.cs b/Tv7Playlist.Core/Parsers/ParsedTrack.cs similarity index 97% rename from Tv7Playlist/Parser/ParsedTrack.cs rename to Tv7Playlist.Core/Parsers/ParsedTrack.cs index f28faa6..4ad0f09 100644 --- a/Tv7Playlist/Parser/ParsedTrack.cs +++ b/Tv7Playlist.Core/Parsers/ParsedTrack.cs @@ -1,7 +1,7 @@ using System; using System.Diagnostics; -namespace Tv7Playlist.Parser +namespace Tv7Playlist.Core.Parsers { [DebuggerDisplay("ParsedTrack-{Id}(Name:{Name}, Url:{Url})")] public class ParsedTrack diff --git a/Tv7Playlist.Core/Tv7Playlist.Core.csproj b/Tv7Playlist.Core/Tv7Playlist.Core.csproj new file mode 100644 index 0000000..dd2d8d6 --- /dev/null +++ b/Tv7Playlist.Core/Tv7Playlist.Core.csproj @@ -0,0 +1,11 @@ + + + + netstandard2.0 + + + + + + + diff --git a/Tv7Playlist.Data/PlaylistContext.cs b/Tv7Playlist.Data/PlaylistContext.cs new file mode 100644 index 0000000..0921675 --- /dev/null +++ b/Tv7Playlist.Data/PlaylistContext.cs @@ -0,0 +1,23 @@ +using Microsoft.EntityFrameworkCore; + +namespace Tv7Playlist.Data +{ + public class PlaylistContext : DbContext + { + public PlaylistContext(DbContextOptions options) + : base(options) + { + } + + public DbSet PlaylistEntries { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + var entityTypeBuilder = modelBuilder.Entity(); + entityTypeBuilder.HasKey(e => e.Id); + entityTypeBuilder.HasAlternateKey(e => e.TrackNumber); + } + } +} \ No newline at end of file diff --git a/Tv7Playlist.Data/PlaylistEntry.cs b/Tv7Playlist.Data/PlaylistEntry.cs new file mode 100644 index 0000000..d1ba666 --- /dev/null +++ b/Tv7Playlist.Data/PlaylistEntry.cs @@ -0,0 +1,15 @@ +using System; + +namespace Tv7Playlist.Data +{ + public class PlaylistEntry + { + public Guid Id { get; set; } + + public int TrackNumber { get; set; } + + public string Name { get; set; } + + public string Url { get; set; } + } +} \ No newline at end of file diff --git a/Tv7Playlist.Data/Tv7Playlist.Data.csproj b/Tv7Playlist.Data/Tv7Playlist.Data.csproj new file mode 100644 index 0000000..2b4c125 --- /dev/null +++ b/Tv7Playlist.Data/Tv7Playlist.Data.csproj @@ -0,0 +1,12 @@ + + + + netstandard2.0 + + + + + + + + diff --git a/Tv7Playlist.sln b/Tv7Playlist.sln index ecbeec6..1f26256 100644 --- a/Tv7Playlist.sln +++ b/Tv7Playlist.sln @@ -5,6 +5,10 @@ VisualStudioVersion = 15.0.26124.0 MinimumVisualStudioVersion = 15.0.26124.0 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tv7Playlist", "Tv7Playlist\Tv7Playlist.csproj", "{7B2C4534-318C-4E66-9F6D-F15D1DCAF999}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tv7Playlist.Data", "Tv7Playlist.Data\Tv7Playlist.Data.csproj", "{43C1083D-D092-4CEC-8569-41B7408B5E64}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tv7Playlist.Core", "Tv7Playlist.Core\Tv7Playlist.Core.csproj", "{F891436B-5075-4CB4-A628-D5DCD8D3CBDD}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -30,5 +34,29 @@ Global {7B2C4534-318C-4E66-9F6D-F15D1DCAF999}.Release|x64.Build.0 = Release|Any CPU {7B2C4534-318C-4E66-9F6D-F15D1DCAF999}.Release|x86.ActiveCfg = Release|Any CPU {7B2C4534-318C-4E66-9F6D-F15D1DCAF999}.Release|x86.Build.0 = Release|Any CPU + {43C1083D-D092-4CEC-8569-41B7408B5E64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {43C1083D-D092-4CEC-8569-41B7408B5E64}.Debug|Any CPU.Build.0 = Debug|Any CPU + {43C1083D-D092-4CEC-8569-41B7408B5E64}.Debug|x64.ActiveCfg = Debug|Any CPU + {43C1083D-D092-4CEC-8569-41B7408B5E64}.Debug|x64.Build.0 = Debug|Any CPU + {43C1083D-D092-4CEC-8569-41B7408B5E64}.Debug|x86.ActiveCfg = Debug|Any CPU + {43C1083D-D092-4CEC-8569-41B7408B5E64}.Debug|x86.Build.0 = Debug|Any CPU + {43C1083D-D092-4CEC-8569-41B7408B5E64}.Release|Any CPU.ActiveCfg = Release|Any CPU + {43C1083D-D092-4CEC-8569-41B7408B5E64}.Release|Any CPU.Build.0 = Release|Any CPU + {43C1083D-D092-4CEC-8569-41B7408B5E64}.Release|x64.ActiveCfg = Release|Any CPU + {43C1083D-D092-4CEC-8569-41B7408B5E64}.Release|x64.Build.0 = Release|Any CPU + {43C1083D-D092-4CEC-8569-41B7408B5E64}.Release|x86.ActiveCfg = Release|Any CPU + {43C1083D-D092-4CEC-8569-41B7408B5E64}.Release|x86.Build.0 = Release|Any CPU + {F891436B-5075-4CB4-A628-D5DCD8D3CBDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F891436B-5075-4CB4-A628-D5DCD8D3CBDD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F891436B-5075-4CB4-A628-D5DCD8D3CBDD}.Debug|x64.ActiveCfg = Debug|Any CPU + {F891436B-5075-4CB4-A628-D5DCD8D3CBDD}.Debug|x64.Build.0 = Debug|Any CPU + {F891436B-5075-4CB4-A628-D5DCD8D3CBDD}.Debug|x86.ActiveCfg = Debug|Any CPU + {F891436B-5075-4CB4-A628-D5DCD8D3CBDD}.Debug|x86.Build.0 = Debug|Any CPU + {F891436B-5075-4CB4-A628-D5DCD8D3CBDD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F891436B-5075-4CB4-A628-D5DCD8D3CBDD}.Release|Any CPU.Build.0 = Release|Any CPU + {F891436B-5075-4CB4-A628-D5DCD8D3CBDD}.Release|x64.ActiveCfg = Release|Any CPU + {F891436B-5075-4CB4-A628-D5DCD8D3CBDD}.Release|x64.Build.0 = Release|Any CPU + {F891436B-5075-4CB4-A628-D5DCD8D3CBDD}.Release|x86.ActiveCfg = Release|Any CPU + {F891436B-5075-4CB4-A628-D5DCD8D3CBDD}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/Tv7Playlist/Controllers/PlayListController.cs b/Tv7Playlist/Controllers/PlayListController.cs index d943219..dec146b 100644 --- a/Tv7Playlist/Controllers/PlayListController.cs +++ b/Tv7Playlist/Controllers/PlayListController.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; +using Tv7Playlist.Core; namespace Tv7Playlist.Controllers { diff --git a/Tv7Playlist/Startup.cs b/Tv7Playlist/Startup.cs index ced8051..3c5b3b4 100644 --- a/Tv7Playlist/Startup.cs +++ b/Tv7Playlist/Startup.cs @@ -2,9 +2,12 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Tv7Playlist.Core; +using Tv7Playlist.Data; namespace Tv7Playlist { @@ -30,7 +33,10 @@ namespace Tv7Playlist options.MinimumSameSitePolicy = SameSiteMode.None; }); - + //TODO: Move to settings to make it configurable within docker. + var connection = "Data Source=playlist.db"; + services.AddDbContext(options => options.UseSqlite(connection)); + services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); } diff --git a/Tv7Playlist/Tv7Playlist.csproj b/Tv7Playlist/Tv7Playlist.csproj index 908d072..99f72f5 100644 --- a/Tv7Playlist/Tv7Playlist.csproj +++ b/Tv7Playlist/Tv7Playlist.csproj @@ -9,6 +9,18 @@ + + + + + + + + + + + +