mirror of
https://github.com/sahinakkaya/dotfiles.git
synced 2024-12-23 15:49:40 +01:00
174 lines
4.4 KiB
JavaScript
174 lines
4.4 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
//display chapter on osd and easily switch between chapters by click on title of chapter
|
||
|
mp.register_event("file-loaded", init);
|
||
|
mp.observe_property("chapter", "number", onChapterChange);
|
||
|
mp.observe_property("chapter-list/count", "number", init);
|
||
|
var options = {
|
||
|
font_size: 16,
|
||
|
font_color: "00FFFF",
|
||
|
border_size: 1.0,
|
||
|
border_color: "000000",
|
||
|
font_color_currentChapter: "C27F1B",
|
||
|
};
|
||
|
var playinfo = {
|
||
|
chapters: [], //array
|
||
|
chaptercount: "", // int
|
||
|
assinterface: [], //array(deprecated, use single assdraw instead)
|
||
|
currentChapter: "", //int
|
||
|
loaded:false,
|
||
|
};
|
||
|
var toggle_switch = false;
|
||
|
var assdraw = mp.create_osd_overlay("ass-events");
|
||
|
var autohidedelay = mp.get_property_number("cursor-autohide");
|
||
|
//function
|
||
|
function init() {
|
||
|
playinfo.chapters = getChapters();
|
||
|
playinfo.chaptercount = playinfo.chapters.length;
|
||
|
if(playinfo.chaptercount == 0){
|
||
|
return;
|
||
|
}
|
||
|
while (playinfo.chaptercount * options.font_size > 1000 / 1.5) {
|
||
|
options.font_size = options.font_size - 1;
|
||
|
}
|
||
|
drawChapterList();
|
||
|
mp.msg.info("initiated");
|
||
|
playinfo.loaded = true;
|
||
|
}
|
||
|
function getChapters() {
|
||
|
var chapterCount = mp.get_property("chapter-list/count");
|
||
|
if (chapterCount === 0) {
|
||
|
return ["null"];
|
||
|
} else {
|
||
|
var chaptersArray = [];
|
||
|
for (var index = 0; index < chapterCount; index++) {
|
||
|
var chapterTitle = mp.get_property_native(
|
||
|
"chapter-list/" + index + "/title"
|
||
|
);
|
||
|
|
||
|
if (chapterTitle != undefined) {
|
||
|
chaptersArray.push(chapterTitle);
|
||
|
}
|
||
|
}
|
||
|
return chaptersArray;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function drawChapterList() {
|
||
|
var resY = 0;
|
||
|
var resX = 0;
|
||
|
var assdrawdata = "";
|
||
|
function setPos(str, _X, _Y) {
|
||
|
str = str + "{\\pos(" + _X + ", " + _Y + ")}";
|
||
|
return str;
|
||
|
}
|
||
|
function setborderSize(str) {
|
||
|
str = str + "{\\bord" + options.border_size + "}";
|
||
|
return str;
|
||
|
}
|
||
|
function setborderColor(str) {
|
||
|
str = str + "{\\3c&H" + options.border_color + "&}";
|
||
|
return str;
|
||
|
}
|
||
|
function setFontColor(str, index) {
|
||
|
var _color;
|
||
|
if (playinfo.currentChapter == index) {
|
||
|
_color = options.font_color_currentChapter;
|
||
|
} else {
|
||
|
_color = options.font_color;
|
||
|
}
|
||
|
str = str + "{\\c&H" + _color + "&}";
|
||
|
return str;
|
||
|
}
|
||
|
function setFont(str) {
|
||
|
str = str + "{\\fs" + options.font_size + "}";
|
||
|
return str;
|
||
|
}
|
||
|
function setEndofmodifiers(str) {
|
||
|
str = str + "{\\p0}";
|
||
|
return str;
|
||
|
}
|
||
|
function setEndofLine(str) {
|
||
|
str = str + "\n";
|
||
|
return str;
|
||
|
}
|
||
|
playinfo.chapters.forEach(function (element, index) {
|
||
|
assdrawdata = setPos(assdrawdata, resX, resY);
|
||
|
assdrawdata = setborderSize(assdrawdata);
|
||
|
assdrawdata = setborderColor(assdrawdata);
|
||
|
assdrawdata = setFontColor(assdrawdata, index);
|
||
|
assdrawdata = setFont(assdrawdata);
|
||
|
assdrawdata = setEndofmodifiers(assdrawdata);
|
||
|
assdrawdata = assdrawdata + element;
|
||
|
assdrawdata = setEndofLine(assdrawdata);
|
||
|
resY += options.font_size;
|
||
|
});
|
||
|
assdraw.data = assdrawdata
|
||
|
|
||
|
}
|
||
|
|
||
|
function toggleOverlay() {
|
||
|
if(!playinfo.loaded){
|
||
|
return;
|
||
|
}
|
||
|
if (!toggle_switch) {
|
||
|
drawChapterList();
|
||
|
assdraw.update();
|
||
|
mp.set_property("cursor-autohide", "no");
|
||
|
toggle_switch = !toggle_switch;
|
||
|
} else {
|
||
|
assdraw.remove();
|
||
|
mp.set_property("cursor-autohide", autohidedelay);
|
||
|
toggle_switch = !toggle_switch;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function onChapterChange() {
|
||
|
playinfo.currentChapter = mp.get_property_native("chapter");
|
||
|
if (playinfo.currentChapter != undefined) {
|
||
|
drawChapterList();
|
||
|
}
|
||
|
|
||
|
if ((playinfo.currentChapter != undefined) & toggle_switch) {
|
||
|
assdraw.update();
|
||
|
}
|
||
|
}
|
||
|
function pos2chapter(x, y, overallscale) {
|
||
|
var vectical = y / (options.font_size * overallscale);
|
||
|
if(vectical > playinfo.chaptercount){
|
||
|
return null;
|
||
|
}
|
||
|
var intVectical = Math.floor(vectical);
|
||
|
var lengthofTitleClicked = playinfo.chapters[intVectical].length;
|
||
|
var lengthofTitleClicked_px =
|
||
|
(lengthofTitleClicked * options.font_size) / overallscale;
|
||
|
if (x < lengthofTitleClicked_px) {
|
||
|
return intVectical;
|
||
|
} else {
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
function getOverallScale() {
|
||
|
return mp.get_osd_size().height / 720;
|
||
|
}
|
||
|
function onMBTN_LEFT() {
|
||
|
//get mouse position
|
||
|
if(!playinfo.loaded){
|
||
|
return;
|
||
|
}
|
||
|
if (toggle_switch) {
|
||
|
var overallscale = getOverallScale();
|
||
|
var pos = mp.get_mouse_pos();
|
||
|
var chapterClicked = pos2chapter(pos.x, pos.y, overallscale);
|
||
|
if (chapterClicked != null) {
|
||
|
mp.set_property_native("chapter", chapterClicked);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
mp.add_key_binding("TAB", "tab", function () {
|
||
|
toggleOverlay();
|
||
|
});
|
||
|
mp.add_key_binding("MBTN_LEFT", "mbtn_left", function () {
|
||
|
onMBTN_LEFT();
|
||
|
});
|