+
+
+
+
+
+
+
+
+
+
diff --git a/Kyoo/ClientApp/src/app/player/player.component.ts b/Kyoo/ClientApp/src/app/player/player.component.ts
index 9cd771b5..c588dfa3 100644
--- a/Kyoo/ClientApp/src/app/player/player.component.ts
+++ b/Kyoo/ClientApp/src/app/player/player.component.ts
@@ -1,5 +1,5 @@
import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
-import { WatchItem } from "../../models/watch-item";
+import { WatchItem, Track } from "../../models/watch-item";
import { ActivatedRoute } from "@angular/router";
import { DomSanitizer, Title } from "@angular/platform-browser";
import { Location } from "@angular/common";
@@ -20,6 +20,7 @@ export class PlayerComponent implements OnInit
volume: number = 100;
seeking: boolean = false;
videoHider;
+ selectedSubtitle: Track;
hours: number;
minutes: number = 0;
@@ -100,7 +101,6 @@ export class PlayerComponent implements OnInit
let progressBar: HTMLElement = document.getElementById("progress-bar") as HTMLElement;
$(progressBar).click((event) =>
{
- console.log("Duration: " + this.player.duration);
event.preventDefault();
let time: number = this.getTimeFromSeekbar(progressBar, event.pageX);
this.player.currentTime = time;
@@ -182,8 +182,6 @@ export class PlayerComponent implements OnInit
});
$('[data-toggle="tooltip"]').tooltip({ trigger: "hover" });
-
- SubtitleManager.add(this.player, "/api/subtitle/" + this.item.link + "-fre.ass", true);
}
getTimeFromSeekbar(progressBar: HTMLElement, pageX: number)
@@ -281,6 +279,36 @@ export class PlayerComponent implements OnInit
}
}
+ selectSubtitle(subtitle: Track)
+ {
+ this.selectedSubtitle = subtitle;
+
+ if (subtitle == null)
+ {
+ SubtitleManager.remove(this.player);
+ }
+ else
+ {
+ if (subtitle.codec == "ass")
+ SubtitleManager.add(this.player, this.getSubtitleLink(subtitle), true);
+ }
+ }
+
+ getSubtitleLink(subtitle: Track): string
+ {
+ let link: string = "/api/subtitle/" + this.item.link + "-" + subtitle.language;
+
+ if (subtitle.isForced)
+ link += "-forced";
+
+ //The extension is not necesarry but we add this because it allow the user to quickly download the file in the good format if he wants.
+ if (subtitle.codec == "ass")
+ link += ".ass";
+ else if (subtitle.codec == "subrip")
+ link += ".srt"
+
+ return link;
+ }
getThumb(url: string)
{
diff --git a/Kyoo/ClientApp/src/models/watch-item.ts b/Kyoo/ClientApp/src/models/watch-item.ts
index c6ff6a6d..03ab046c 100644
--- a/Kyoo/ClientApp/src/models/watch-item.ts
+++ b/Kyoo/ClientApp/src/models/watch-item.ts
@@ -15,15 +15,15 @@ export interface WatchItem
previousEpisode: string;
nextEpisode: Episode;
- audio: Stream[];
- subtitles: Stream[];
+ audio: Track[];
+ subtitles: Track[];
}
-export interface Stream
+export interface Track
{
title: string;
language: string;
isDefault: boolean;
isForced: boolean;
- format: string;
+ codec: string;
}
diff --git a/Kyoo/Controllers/SubtitleController.cs b/Kyoo/Controllers/SubtitleController.cs
index 547aeecc..9f0b04cc 100644
--- a/Kyoo/Controllers/SubtitleController.cs
+++ b/Kyoo/Controllers/SubtitleController.cs
@@ -18,10 +18,23 @@ namespace Kyoo.Controllers
this.transcoder = transcoder;
}
- [HttpGet("{showSlug}-s{seasonNumber}e{episodeNumber}-{languageTag}.{format?}")]
- public IActionResult GetSubtitle(string showSlug, long seasonNumber, long episodeNumber, string languageTag, string format)
+ [HttpGet("{showSlug}-s{seasonNumber}e{episodeNumber}-{languageTag}.{codec?}")]
+ public IActionResult GetSubtitle(string showSlug, long seasonNumber, long episodeNumber, string languageTag, string codec)
{
- Track subtitle = libraryManager.GetSubtitle(showSlug, seasonNumber, episodeNumber, languageTag);
+ Track subtitle = libraryManager.GetSubtitle(showSlug, seasonNumber, episodeNumber, languageTag, false);
+
+ if (subtitle == null)
+ return NotFound();
+
+ //Should use appropriate mime type here
+ return PhysicalFile(subtitle.Path, "text/x-ssa");
+ }
+
+ //This one is never called.
+ [HttpGet("{showSlug}-s{seasonNumber}e{episodeNumber}-{languageTag}-{disposition}.{codec?}")] //Disposition can't be tagged as optional because there is a parametter after him.
+ public IActionResult GetForcedSubtitle(string showSlug, long seasonNumber, long episodeNumber, string languageTag, string disposition, string codec)
+ {
+ Track subtitle = libraryManager.GetSubtitle(showSlug, seasonNumber, episodeNumber, languageTag, disposition == "forced");
if (subtitle == null)
return NotFound();
diff --git a/Kyoo/InternalAPI/LibraryManager/ILibraryManager.cs b/Kyoo/InternalAPI/LibraryManager/ILibraryManager.cs
index ec748ece..e8f4d933 100644
--- a/Kyoo/InternalAPI/LibraryManager/ILibraryManager.cs
+++ b/Kyoo/InternalAPI/LibraryManager/ILibraryManager.cs
@@ -18,7 +18,7 @@ namespace Kyoo.InternalAPI
//Internal HTML read
(List