diff --git a/Kyoo.Common/Models/Exceptions/TaskFailedException.cs b/Kyoo.Common/Models/Exceptions/TaskFailedException.cs
new file mode 100644
index 00000000..5fe65f7c
--- /dev/null
+++ b/Kyoo.Common/Models/Exceptions/TaskFailedException.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Runtime.Serialization;
+using Kyoo.Controllers;
+
+namespace Kyoo.Models.Exceptions
+{
+ ///
+ /// An exception raised when an failed.
+ ///
+ [Serializable]
+ public class TaskFailedException : AggregateException
+ {
+ ///
+ /// Create a new with a default message.
+ ///
+ public TaskFailedException()
+ : base("A task failed.")
+ {}
+
+ ///
+ /// Create a new with a custom message.
+ ///
+ /// The message to use.
+ public TaskFailedException(string message)
+ : base(message)
+ {}
+
+ ///
+ /// Create a new wrapping another exception.
+ ///
+ /// The exception to wrap.
+ public TaskFailedException(Exception exception)
+ : base(exception)
+ {}
+
+ ///
+ /// The serialization constructor
+ ///
+ /// Serialization infos
+ /// The serialization context
+ protected TaskFailedException(SerializationInfo info, StreamingContext context)
+ : base(info, context)
+ { }
+ }
+}
\ No newline at end of file
diff --git a/Kyoo.Common/Models/Resources/Episode.cs b/Kyoo.Common/Models/Resources/Episode.cs
index cdb7fb8f..e7cf056a 100644
--- a/Kyoo.Common/Models/Resources/Episode.cs
+++ b/Kyoo.Common/Models/Resources/Episode.cs
@@ -20,9 +20,11 @@ namespace Kyoo.Models
{
get
{
- if (ShowSlug == null && Show == null)
- return GetSlug(ShowID.ToString(), SeasonNumber, EpisodeNumber, AbsoluteNumber);
- return GetSlug(ShowSlug ?? Show.Slug, SeasonNumber, EpisodeNumber, AbsoluteNumber);
+ if (ShowSlug != null || Show != null)
+ return GetSlug(ShowSlug ?? Show.Slug, SeasonNumber, EpisodeNumber, AbsoluteNumber);
+ return ShowID != 0
+ ? GetSlug(ShowID.ToString(), SeasonNumber, EpisodeNumber, AbsoluteNumber)
+ : null;
}
[UsedImplicitly] [NotNull] private set
{
diff --git a/Kyoo.Common/Models/Resources/Track.cs b/Kyoo.Common/Models/Resources/Track.cs
index df00e94e..d82cdbe1 100644
--- a/Kyoo.Common/Models/Resources/Track.cs
+++ b/Kyoo.Common/Models/Resources/Track.cs
@@ -156,30 +156,17 @@ namespace Kyoo.Models
}
///
- /// Utility method to edit a track slug (this only return a slug with the modification, nothing is stored)
+ /// Utility method to create a track slug from a incomplete slug (only add the type of the track).
///
/// The slug to edit
/// The new type of this
- ///
- ///
- ///
///
- public static string EditSlug(string baseSlug,
- StreamType type = StreamType.Unknown,
- string language = null,
- int? index = null,
- bool? forced = null)
+ public static string BuildSlug(string baseSlug,
+ StreamType type)
{
- Track track = new() {Slug = baseSlug};
- if (type != StreamType.Unknown)
- track.Type = type;
- if (language != null)
- track.Language = language;
- if (index != null)
- track.TrackIndex = index.Value;
- if (forced != null)
- track.IsForced = forced.Value;
- return track.Slug;
+ return baseSlug.EndsWith($".{type}", StringComparison.InvariantCultureIgnoreCase)
+ ? baseSlug
+ : $"{baseSlug}.{type.ToString().ToLowerInvariant()}";
}
}
}
diff --git a/Kyoo.Common/Models/WatchItem.cs b/Kyoo.Common/Models/WatchItem.cs
index 3b64d54e..eaf437c7 100644
--- a/Kyoo.Common/Models/WatchItem.cs
+++ b/Kyoo.Common/Models/WatchItem.cs
@@ -176,6 +176,7 @@ namespace Kyoo.Models
return new WatchItem
{
EpisodeID = ep.ID,
+ Slug = ep.Slug,
ShowSlug = ep.Show.Slug,
SeasonNumber = ep.SeasonNumber,
EpisodeNumber = ep.EpisodeNumber,
@@ -183,6 +184,7 @@ namespace Kyoo.Models
Title = ep.Title,
ReleaseDate = ep.ReleaseDate,
Path = ep.Path,
+ Container = PathIO.GetExtension(ep.Path)![1..],
Video = ep.Tracks.FirstOrDefault(x => x.Type == StreamType.Video),
Audios = ep.Tracks.Where(x => x.Type == StreamType.Audio).ToArray(),
Subtitles = ep.Tracks.Where(x => x.Type == StreamType.Subtitle).ToArray(),
diff --git a/Kyoo.Tests/Library/SpecificTests/CollectionsTests.cs b/Kyoo.Tests/Library/SpecificTests/CollectionsTests.cs
index 7a5976de..73691bf7 100644
--- a/Kyoo.Tests/Library/SpecificTests/CollectionsTests.cs
+++ b/Kyoo.Tests/Library/SpecificTests/CollectionsTests.cs
@@ -3,7 +3,7 @@ using Kyoo.Models;
using Xunit;
using Xunit.Abstractions;
-namespace Kyoo.Tests.Library
+namespace Kyoo.Tests.Database
{
namespace SqLite
{
diff --git a/Kyoo.Tests/Library/SpecificTests/EpisodeTests.cs b/Kyoo.Tests/Library/SpecificTests/EpisodeTests.cs
index 6b1adf27..d9e0e9ff 100644
--- a/Kyoo.Tests/Library/SpecificTests/EpisodeTests.cs
+++ b/Kyoo.Tests/Library/SpecificTests/EpisodeTests.cs
@@ -4,7 +4,7 @@ using Kyoo.Models;
using Xunit;
using Xunit.Abstractions;
-namespace Kyoo.Tests.Library
+namespace Kyoo.Tests.Database
{
namespace SqLite
{
diff --git a/Kyoo.Tests/Library/SpecificTests/GenreTests.cs b/Kyoo.Tests/Library/SpecificTests/GenreTests.cs
index d79dba5e..dc820187 100644
--- a/Kyoo.Tests/Library/SpecificTests/GenreTests.cs
+++ b/Kyoo.Tests/Library/SpecificTests/GenreTests.cs
@@ -3,7 +3,7 @@ using Kyoo.Models;
using Xunit;
using Xunit.Abstractions;
-namespace Kyoo.Tests.Library
+namespace Kyoo.Tests.Database
{
namespace SqLite
{
diff --git a/Kyoo.Tests/Library/SpecificTests/LibraryItemTest.cs b/Kyoo.Tests/Library/SpecificTests/LibraryItemTest.cs
index b2db4f66..c5639dbb 100644
--- a/Kyoo.Tests/Library/SpecificTests/LibraryItemTest.cs
+++ b/Kyoo.Tests/Library/SpecificTests/LibraryItemTest.cs
@@ -5,7 +5,7 @@ using Kyoo.Models;
using Xunit;
using Xunit.Abstractions;
-namespace Kyoo.Tests.Library
+namespace Kyoo.Tests.Database
{
namespace SqLite
{
diff --git a/Kyoo.Tests/Library/SpecificTests/LibraryTests.cs b/Kyoo.Tests/Library/SpecificTests/LibraryTests.cs
index fbed1793..079f50cf 100644
--- a/Kyoo.Tests/Library/SpecificTests/LibraryTests.cs
+++ b/Kyoo.Tests/Library/SpecificTests/LibraryTests.cs
@@ -1,8 +1,11 @@
+using System.Linq;
+using System.Threading.Tasks;
using Kyoo.Controllers;
+using Kyoo.Models;
using Xunit;
using Xunit.Abstractions;
-namespace Kyoo.Tests.Library
+namespace Kyoo.Tests.Database
{
namespace SqLite
{
@@ -23,7 +26,7 @@ namespace Kyoo.Tests.Library
}
}
- public abstract class ALibraryTests : RepositoryTests
+ public abstract class ALibraryTests : RepositoryTests
{
private readonly ILibraryRepository _repository;
@@ -32,5 +35,17 @@ namespace Kyoo.Tests.Library
{
_repository = Repositories.LibraryManager.LibraryRepository;
}
+
+ [Fact]
+ public async Task CreateWithProvider()
+ {
+ Library library = TestSample.GetNew();
+ library.Providers = new[] { TestSample.Get() };
+ await _repository.Create(library);
+ Library retrieved = await _repository.Get(2);
+ await Repositories.LibraryManager.Load(retrieved, x => x.Providers);
+ Assert.Equal(1, retrieved.Providers.Count);
+ Assert.Equal(TestSample.Get().Slug, retrieved.Providers.First().Slug);
+ }
}
}
\ No newline at end of file
diff --git a/Kyoo.Tests/Library/SpecificTests/PeopleTests.cs b/Kyoo.Tests/Library/SpecificTests/PeopleTests.cs
index fc8b788d..23d40bfe 100644
--- a/Kyoo.Tests/Library/SpecificTests/PeopleTests.cs
+++ b/Kyoo.Tests/Library/SpecificTests/PeopleTests.cs
@@ -3,7 +3,7 @@ using Kyoo.Models;
using Xunit;
using Xunit.Abstractions;
-namespace Kyoo.Tests.Library
+namespace Kyoo.Tests.Database
{
namespace SqLite
{
diff --git a/Kyoo.Tests/Library/SpecificTests/ProviderTests.cs b/Kyoo.Tests/Library/SpecificTests/ProviderTests.cs
index 853e34a1..9c022875 100644
--- a/Kyoo.Tests/Library/SpecificTests/ProviderTests.cs
+++ b/Kyoo.Tests/Library/SpecificTests/ProviderTests.cs
@@ -3,7 +3,7 @@ using Kyoo.Models;
using Xunit;
using Xunit.Abstractions;
-namespace Kyoo.Tests.Library
+namespace Kyoo.Tests.Database
{
namespace SqLite
{
diff --git a/Kyoo.Tests/Library/SpecificTests/SanityTests.cs b/Kyoo.Tests/Library/SpecificTests/SanityTests.cs
index 78637d35..933bbf82 100644
--- a/Kyoo.Tests/Library/SpecificTests/SanityTests.cs
+++ b/Kyoo.Tests/Library/SpecificTests/SanityTests.cs
@@ -5,7 +5,7 @@ using Kyoo.Models;
using Xunit;
using Xunit.Abstractions;
-namespace Kyoo.Tests.Library
+namespace Kyoo.Tests.Database
{
public class GlobalTests : IDisposable, IAsyncDisposable
{
diff --git a/Kyoo.Tests/Library/SpecificTests/SeasonTests.cs b/Kyoo.Tests/Library/SpecificTests/SeasonTests.cs
index 39be8b82..b1692747 100644
--- a/Kyoo.Tests/Library/SpecificTests/SeasonTests.cs
+++ b/Kyoo.Tests/Library/SpecificTests/SeasonTests.cs
@@ -4,7 +4,7 @@ using Kyoo.Models;
using Xunit;
using Xunit.Abstractions;
-namespace Kyoo.Tests.Library
+namespace Kyoo.Tests.Database
{
namespace SqLite
{
diff --git a/Kyoo.Tests/Library/SpecificTests/ShowTests.cs b/Kyoo.Tests/Library/SpecificTests/ShowTests.cs
index 8940f0c3..63207710 100644
--- a/Kyoo.Tests/Library/SpecificTests/ShowTests.cs
+++ b/Kyoo.Tests/Library/SpecificTests/ShowTests.cs
@@ -8,7 +8,7 @@ using Microsoft.EntityFrameworkCore;
using Xunit;
using Xunit.Abstractions;
-namespace Kyoo.Tests.Library
+namespace Kyoo.Tests.Database
{
namespace SqLite
{
diff --git a/Kyoo.Tests/Library/SpecificTests/StudioTests.cs b/Kyoo.Tests/Library/SpecificTests/StudioTests.cs
index f5093b19..c727f67a 100644
--- a/Kyoo.Tests/Library/SpecificTests/StudioTests.cs
+++ b/Kyoo.Tests/Library/SpecificTests/StudioTests.cs
@@ -3,7 +3,7 @@ using Kyoo.Models;
using Xunit;
using Xunit.Abstractions;
-namespace Kyoo.Tests.Library
+namespace Kyoo.Tests.Database
{
namespace SqLite
{
diff --git a/Kyoo.Tests/Library/SpecificTests/TrackTests.cs b/Kyoo.Tests/Library/SpecificTests/TrackTests.cs
index 3aebaef9..0ff0c156 100644
--- a/Kyoo.Tests/Library/SpecificTests/TrackTests.cs
+++ b/Kyoo.Tests/Library/SpecificTests/TrackTests.cs
@@ -4,7 +4,7 @@ using Kyoo.Models;
using Xunit;
using Xunit.Abstractions;
-namespace Kyoo.Tests.Library
+namespace Kyoo.Tests.Database
{
namespace SqLite
{
diff --git a/Kyoo.Tests/Library/SpecificTests/UserTests.cs b/Kyoo.Tests/Library/SpecificTests/UserTests.cs
index be67296d..24bfc789 100644
--- a/Kyoo.Tests/Library/SpecificTests/UserTests.cs
+++ b/Kyoo.Tests/Library/SpecificTests/UserTests.cs
@@ -3,7 +3,7 @@ using Kyoo.Models;
using Xunit;
using Xunit.Abstractions;
-namespace Kyoo.Tests.Library
+namespace Kyoo.Tests.Database
{
namespace SqLite
{
diff --git a/Kyoo.Tests/Library/TestSample.cs b/Kyoo.Tests/Library/TestSample.cs
index adbe7d84..96cd63c1 100644
--- a/Kyoo.Tests/Library/TestSample.cs
+++ b/Kyoo.Tests/Library/TestSample.cs
@@ -9,8 +9,14 @@ namespace Kyoo.Tests
private static readonly Dictionary> NewSamples = new()
{
{
- typeof(Show),
- () => new Show()
+ typeof(Library),
+ () => new Library
+ {
+ ID = 2,
+ Slug = "new-library",
+ Name = "New Library",
+ Paths = new [] {"/a/random/path"}
+ }
}
};
@@ -18,8 +24,8 @@ namespace Kyoo.Tests
private static readonly Dictionary> Samples = new()
{
{
- typeof(Models.Library),
- () => new Models.Library
+ typeof(Library),
+ () => new Library
{
ID = 1,
Slug = "deck",
diff --git a/Kyoo.WebApp b/Kyoo.WebApp
index 22a02671..dcdebad1 160000
--- a/Kyoo.WebApp
+++ b/Kyoo.WebApp
@@ -1 +1 @@
-Subproject commit 22a02671918201d6d9d4e80a76f01b59b216a82d
+Subproject commit dcdebad14cbcdf1f9486cb9178e6518d10c0e97f
diff --git a/Kyoo/Controllers/RegexIdentifier.cs b/Kyoo/Controllers/RegexIdentifier.cs
index 3e5d82fe..f578aa30 100644
--- a/Kyoo/Controllers/RegexIdentifier.cs
+++ b/Kyoo/Controllers/RegexIdentifier.cs
@@ -87,7 +87,7 @@ namespace Kyoo.Controllers
public Task