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+)"
}