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 @@
+
+
+
+
+
+
+
+
+
+
+
+