diff --git a/Kyoo.Transcoder/src/Transcoder.cpp b/Kyoo.Transcoder/src/Transcoder.cpp index 13a90787..dbb7b635 100644 --- a/Kyoo.Transcoder/src/Transcoder.cpp +++ b/Kyoo.Transcoder/src/Transcoder.cpp @@ -223,7 +223,9 @@ Stream *ExtractSubtitles(const char *path, const char *outPath, int *streamCount if (inputCodecpar->codec_type != AVMEDIA_TYPE_SUBTITLE) outputList[i] = NULL; else - { + { + *subtitleCount += 1; + //Get metadata for file name streams[i] = Stream(NULL, //title av_dict_get(inputStream->metadata, "language", NULL, 0)->value, //language @@ -253,12 +255,15 @@ Stream *ExtractSubtitles(const char *path, const char *outPath, int *streamCount outStream << ".srt"; else if (strcmp(streams[i].codec, "ass") == 0) outStream << ".ass"; - + else + { + std::cout << "Unsupported subtitle codec: " << streams[i].codec << std::endl; + outputList[i] = NULL; + continue; + } streams[i].path = _strdup(outStream.str().c_str()); - *subtitleCount += 1; - std::cout << "Stream #" << i << "(" << streams[i].language << "), stream type: " << inputCodecpar->codec_type << " codec: " << streams[i].codec << std::endl; AVFormatContext *outputContext = NULL; @@ -293,7 +298,6 @@ Stream *ExtractSubtitles(const char *path, const char *outPath, int *streamCount } } } - //Write subtitle data to files. AVPacket pkt; while (av_read_frame(inputContext, &pkt) == 0) diff --git a/Kyoo/ClientApp/src/app/browse/browse.component.html b/Kyoo/ClientApp/src/app/browse/browse.component.html index 40914baf..8a917687 100644 --- a/Kyoo/ClientApp/src/app/browse/browse.component.html +++ b/Kyoo/ClientApp/src/app/browse/browse.component.html @@ -1,4 +1,4 @@ -
+
@@ -20,7 +20,7 @@
-
+

{{show.title}}

diff --git a/Kyoo/ClientApp/src/app/browse/browse.component.scss b/Kyoo/ClientApp/src/app/browse/browse.component.scss index 34eebecb..fb8218d2 100644 --- a/Kyoo/ClientApp/src/app/browse/browse.component.scss +++ b/Kyoo/ClientApp/src/app/browse/browse.component.scss @@ -12,7 +12,7 @@ button font-size: 12px; } -.container +.container-fluid { display: flex; flex-wrap: wrap; @@ -21,27 +21,34 @@ button .show { width: 33%; + max-width: 200px; list-style: none; padding: 1em; text-decoration: none; color: inherit; outline: none; - @include media-breakpoint-up(md) + @include media-breakpoint-up(sm) { width: 25%; } - @include media-breakpoint-up(lg) + @include media-breakpoint-up(md) { width: 20%; } - @include media-breakpoint-up(xl) + @include media-breakpoint-up(lg) { width: 18%; } + @include media-breakpoint-up(xl) + { + width: 15%; + } + + &:focus, &:hover { > img diff --git a/Kyoo/ClientApp/src/app/episodes-list/episodes-list.component.scss b/Kyoo/ClientApp/src/app/episodes-list/episodes-list.component.scss index e78cae2b..4c7d3a8b 100644 --- a/Kyoo/ClientApp/src/app/episodes-list/episodes-list.component.scss +++ b/Kyoo/ClientApp/src/app/episodes-list/episodes-list.component.scss @@ -13,6 +13,14 @@ display: block; } } + + &:hover + { + .episodes + { + visibility: visible; + } + } } .episodes @@ -26,11 +34,6 @@ flex-direction: row; visibility: hidden; - &:hover - { - visibility: visible; - } - &::-webkit-scrollbar { height: 4px; diff --git a/Kyoo/ClientApp/src/app/show-details/show-details.component.scss b/Kyoo/ClientApp/src/app/show-details/show-details.component.scss index c1f397fd..f11c63f3 100644 --- a/Kyoo/ClientApp/src/app/show-details/show-details.component.scss +++ b/Kyoo/ClientApp/src/app/show-details/show-details.component.scss @@ -1,6 +1,6 @@ -@import "~bootstrap//scss/functions"; +@import "~bootstrap/scss/functions"; @import "~bootstrap/scss/variables"; -@import "~bootstrap/scss//mixins/breakpoints"; +@import "~bootstrap/scss/mixins/breakpoints"; a { @@ -17,6 +17,7 @@ a { width: 100%; max-height: 75vh; + min-height: 60vh; object-fit: cover; } diff --git a/Kyoo/InternalAPI/LibraryManager/LibraryManager.cs b/Kyoo/InternalAPI/LibraryManager/LibraryManager.cs index 4c195731..008e3c81 100644 --- a/Kyoo/InternalAPI/LibraryManager/LibraryManager.cs +++ b/Kyoo/InternalAPI/LibraryManager/LibraryManager.cs @@ -748,6 +748,9 @@ namespace Kyoo.InternalAPI public void RegisterShowPeople(long showID, List people) { + if (people == null) + return; + string linkQuery = "INSERT INTO peopleLinks (peopleID, showID, role, type) VALUES($peopleID, $showID, $role, $type);"; for (int i = 0; i < people.Count; i++) diff --git a/Kyoo/InternalAPI/MetadataProvider/Implementations/TheTvDB/HelperTvDB.cs b/Kyoo/InternalAPI/MetadataProvider/Implementations/TheTvDB/HelperTvDB.cs index 9567b34e..ec9e568b 100644 --- a/Kyoo/InternalAPI/MetadataProvider/Implementations/TheTvDB/HelperTvDB.cs +++ b/Kyoo/InternalAPI/MetadataProvider/Implementations/TheTvDB/HelperTvDB.cs @@ -71,7 +71,7 @@ namespace Kyoo.InternalAPI.MetadataProvider.TheTvDB public long? GetYear(string firstAired) { - if (long.TryParse(firstAired?.Substring(0, 4), out long year)) + if (firstAired?.Length >= 4 && long.TryParse(firstAired?.Substring(0, 4), out long year)) return year; return null; diff --git a/Kyoo/InternalAPI/MetadataProvider/Implementations/TheTvDB/ProviderTheTvDB.cs b/Kyoo/InternalAPI/MetadataProvider/Implementations/TheTvDB/ProviderTheTvDB.cs index 0cc62953..159c786e 100644 --- a/Kyoo/InternalAPI/MetadataProvider/Implementations/TheTvDB/ProviderTheTvDB.cs +++ b/Kyoo/InternalAPI/MetadataProvider/Implementations/TheTvDB/ProviderTheTvDB.cs @@ -276,12 +276,12 @@ namespace Kyoo.InternalAPI.MetadataProvider string id = GetID(externalIDs); if (id == null) - return null; + return new Episode(seasonNumber, episodeNumber, null, null, null, -1, null, externalIDs); string token = await Authentificate(); if (token == null) - return null; + return new Episode(seasonNumber, episodeNumber, null, null, null, -1, null, externalIDs); WebRequest request = WebRequest.Create("https://api.thetvdb.com/series/" + id + "/episodes/query?airedSeason=" + seasonNumber + "&airedEpisode=" + episodeNumber); request.Method = "GET"; @@ -313,13 +313,13 @@ namespace Kyoo.InternalAPI.MetadataProvider { Debug.WriteLine("&TheTvDB Provider couldn't work for the episode number: " + episodeNumber + ".\nError Code: " + response.StatusCode + " Message: " + response.StatusDescription); response.Close(); - return null; + return new Episode(seasonNumber, episodeNumber, null, null, null, -1, null, externalIDs); } } catch (WebException ex) { Debug.WriteLine("&TheTvDB Provider couldn't work for the episode number: " + episodeNumber + ".\nError Code: " + ex.Status); - return null; + return new Episode(seasonNumber, episodeNumber, null, null, null, -1, null, externalIDs); } } diff --git a/Kyoo/Transcoder/Kyoo.Transcoder.dll b/Kyoo/Transcoder/Kyoo.Transcoder.dll index 8528a0a1..df9e8685 100644 Binary files a/Kyoo/Transcoder/Kyoo.Transcoder.dll and b/Kyoo/Transcoder/Kyoo.Transcoder.dll differ diff --git a/Kyoo/config.json b/Kyoo/config.json index fda33350..01e896cf 100644 --- a/Kyoo/config.json +++ b/Kyoo/config.json @@ -1,11 +1,11 @@ { "databasePath": "C://Projects/database.db", - "tempPath": "C://Projects/temp", - "peoplePath": "D://Videos/People", + "tempPath": "C:\\\\Projects\\temp", + "peoplePath": "D:\\\\Videos\\People", "plugins": "C:\\Projects\\Kyoo\\Debug", "providerPlugins": "C://Projects/Plugins/Providers", "libraryPaths": [ - "D:\\Videos" + "\\\\sdg\\video\\Anime" ], "regex": ".*\\\\(?.+?) S(?\\d+)E(?\\d+)" }