Merge branch 'dev/1.1.x' into main

This commit is contained in:
vexorian 2020-10-30 01:26:57 -04:00
commit ca99b0c4ef
13 changed files with 183 additions and 130 deletions

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<Container version="2">
<Name>dizquetv</Name>
<Repository>vexorian/dizquetv:latest</Repository>
<Repository>vexorian/dizquetv:latest-nvidia</Repository>
<Registry>https://hub.docker.com/r/vexorian/dizquetv</Registry>
<Network>host</Network>
<MyIP/>

View File

@ -171,12 +171,8 @@ app.get('/version.js', (req, res) => {
app.use('/images', express.static(path.join(process.env.DATABASE, 'images')))
app.use(express.static(path.join(__dirname, 'web/public')))
app.use('/images', express.static(path.join(process.env.DATABASE, 'images')))
app.use('/favicon-16.png', express.static(
path.join(__dirname, 'resources/favicon-16.png')
) );
app.use('/favicon-32.png', express.static(
path.join(__dirname, 'resources/favicon-32.png')
app.use('/favicon.svg', express.static(
path.join(__dirname, 'resources/favicon.svg')
) );
app.use(api.router(db, channelDB, fillerDB, xmltvInterval, guideService ))

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 532 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 903 B

View File

@ -16,9 +16,9 @@
id="svg8"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
sodipodi:docname="favicon.svg"
inkscape:export-filename="/home/vx/dev/pseudotv/resources/favicon-32.png"
inkscape:export-xdpi="15.36"
inkscape:export-ydpi="15.36">
inkscape:export-filename="/home/vx/dev/pseudotv/resources/favicon-16.png"
inkscape:export-xdpi="7.6799998"
inkscape:export-ydpi="7.6799998">
<defs
id="defs2" />
<sodipodi:namedview
@ -28,9 +28,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8284271"
inkscape:cx="167.97182"
inkscape:cy="117.8445"
inkscape:zoom="3.0547013"
inkscape:cx="173.01248"
inkscape:cy="84.726326"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
@ -48,7 +48,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
@ -57,10 +57,18 @@
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-244.08278)">
<rect
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:1.46508551;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4712"
width="52.211964"
height="51.512306"
x="-0.85796964"
y="245.32475"
transform="matrix(0.99980416,-0.01978974,0.00448328,0.99998995,0,0)" />
<g
id="g4581"
style="fill:#1f1f1f;fill-opacity:1;stroke-width:0.45839298"
transform="matrix(2.1815344,0,0,2.1815344,-157.46714,-279.05712)">
style="fill:#1f1f1f;fill-opacity:1;stroke-width:0.68901283"
transform="matrix(1.2119871,0,0,1.7379906,-82.577875,-167.18505)">
<rect
transform="rotate(-0.94645665)"
y="239.28041"
@ -73,49 +81,56 @@
<rect
style="opacity:1;fill:#9cbc28;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4518"
width="17.452276"
height="39.267612"
x="2.9063668"
y="251.19781"
transform="rotate(0.52601413)" />
<rect
y="250.82713"
x="24.506426"
height="39.267612"
width="17.452272"
id="rect4520"
style="opacity:1;fill:#289bbc;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
transform="rotate(1.4727573)" />
<rect
style="opacity:1;fill:#bc289b;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4522"
width="17.452271"
height="39.267616"
x="18.553907"
y="253.31032"
transform="rotate(-3.2986122)" />
<circle
style="opacity:1;fill:#6a6a6a;fill-opacity:0.86792453;stroke:none;stroke-width:1.46499991;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
width="10.338528"
height="23.042738"
x="8.726779"
y="258.22861"
transform="matrix(0.99995865,0.00909414,-0.00926779,0.99995705,0,0)" />
<ellipse
style="opacity:1;fill:#a1a1a1;fill-opacity:0.86792453;stroke:none;stroke-width:1.46499991;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path4568"
cx="68.087334"
cy="255.99945"
r="5.4538355" />
<circle
r="5.4538355"
cy="277.56085"
cx="70.664635"
cx="44.118061"
cy="261.20392"
rx="2.4216392"
ry="2.3988426" />
<ellipse
cy="272.90894"
cx="44.765343"
id="circle4570"
style="opacity:1;fill:#6a6a6a;fill-opacity:0.86792453;stroke:none;stroke-width:1.46499991;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
style="opacity:1;fill:#a1a1a1;fill-opacity:0.86792453;stroke:none;stroke-width:1.46499991;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
rx="2.4216392"
ry="2.3988426" />
<g
id="g1705"
transform="translate(0,-2.116672)">
<rect
transform="matrix(0.99967585,0.02545985,-0.02594573,0.99966335,0,0)"
style="opacity:1;fill:#289bbc;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4520"
width="10.338468"
height="23.042864"
x="23.424755"
y="259.99872" />
</g>
<rect
transform="matrix(0.99837418,-0.05699994,0.05808481,0.99831165,0,0)"
y="259.69229"
x="10.517879"
height="23.043449"
width="10.33821"
id="rect4522"
style="opacity:1;fill:#bc289b;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:56.4507103px;line-height:125%;font-family:'Liberation Serif';-inkscape-font-specification:'Liberation Serif';letter-spacing:0px;word-spacing:0px;fill:#1f1f1f;fill-opacity:1;stroke:none;stroke-width:0.26458403px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="10.669483"
y="290.47122"
id="text922"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.03992438px;line-height:125%;font-family:'Liberation Serif';-inkscape-font-specification:'Liberation Serif';letter-spacing:0px;word-spacing:0px;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.264584px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="16.979799"
y="286.34747"
id="text1730"
transform="rotate(-1.2296789)"><tspan
sodipodi:role="line"
id="tspan920"
x="10.669483"
y="290.47122"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Serif';-inkscape-font-specification:'Liberation Serif';fill:#1f1f1f;fill-opacity:1;stroke-width:0.26458403px">d</tspan></text>
id="tspan1728"
x="16.979799"
y="286.34747"
style="fill:#e6e6e6;fill-opacity:1;stroke-width:0.264584px">dizqueTV</tspan></text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@ -52,6 +52,9 @@ class PlexPlayer {
throw Error(`Unable to find server "${lineupItem.serverKey}" specied by program.`);
}
server = server[0];
if (server.uri.endsWith("/")) {
server.uri = server.uri.slice(0, server.uri.length - 1);
}
try {
let plexSettings = db['plex-settings'].find()[0];

View File

@ -2,8 +2,15 @@ const request = require('request')
class Plex {
constructor(opts) {
this._accessToken = typeof opts.accessToken !== 'undefined' ? opts.accessToken : ''
let uri = "http://127.0.0.1:32400";
if ( (typeof opts.uri) !== 'undefined' ) {
uri = opts.uri;
if (uri.endsWith("/")) {
uri = uri.slice(0, uri.length - 1);
}
}
this._server = {
uri: typeof opts.uri !== 'undefined' ? opts.uri : 'http://127.0.0.1:32400',
uri: uri,
host: typeof opts.host !== 'undefined' ? opts.host : '127.0.0.1',
port: typeof opts.port !== 'undefined' ? opts.port : '32400',
protocol: typeof opts.protocol !== 'undefined' ? opts.protocol : 'http'

View File

@ -15,7 +15,10 @@
version="1.1"
id="svg8"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
sodipodi:docname="dizquetv.svg">
sodipodi:docname="dizquetv.svg"
inkscape:export-filename="/home/vx/dev/dizqueanimation/01.png"
inkscape:export-xdpi="245.75999"
inkscape:export-ydpi="245.75999">
<defs
id="defs2" />
<sodipodi:namedview
@ -25,9 +28,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.5768297"
inkscape:cx="-44.708187"
inkscape:cy="32.377644"
inkscape:zoom="1"
inkscape:cx="-91.800821"
inkscape:cy="221.87049"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
@ -55,29 +58,17 @@
id="layer1"
transform="translate(0,-244.08278)">
<rect
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:1.46499991;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:1.46501946;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4712"
width="51.087337"
height="48.801544"
x="3.6474326"
y="245.61409"
transform="rotate(0.63279348)" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.93639898px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:0.81132076;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="16.805246"
y="257.03284"
id="text4692"
transform="rotate(0.63279348)"><tspan
sodipodi:role="line"
id="tspan4690"
x="16.805246"
y="257.03284"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.29093266px;font-family:'Liberation Serif';-inkscape-font-specification:'Liberation Serif';fill:#000000;fill-opacity:0.81132076;stroke-width:0.26458332px">dizqueT</tspan></text>
width="52.206699"
height="35.866219"
x="-1.3992016"
y="254.87126"
transform="matrix(0.99990505,-0.01378015,0.00643904,0.99997927,0,0)" />
<g
id="g4581"
style="fill:#1f1f1f;fill-opacity:1;stroke-width:0.85952657"
transform="matrix(1.1634312,0,0,1.1634312,-78.839147,-18.96312)">
style="fill:#1f1f1f;fill-opacity:1;stroke-width:0.82573813"
transform="matrix(1.2119871,0,0,1.2100891,-82.577875,-32.337926)">
<rect
transform="rotate(-0.94645665)"
y="239.28041"
@ -90,44 +81,55 @@
<rect
style="opacity:1;fill:#9cbc28;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4518"
width="9.3074493"
height="20.941759"
x="7.8814092"
y="263.77377"
transform="rotate(0.52601423)" />
<rect
y="263.45377"
x="21.544861"
height="20.941759"
width="9.3074484"
id="rect4520"
style="opacity:1;fill:#289bbc;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
transform="rotate(1.4727576)" />
<rect
style="opacity:1;fill:#bc289b;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4522"
width="9.3074474"
height="20.941761"
x="7.5537415"
y="265.03363"
transform="rotate(-3.2986122)" />
<circle
style="opacity:1;fill:#6a6a6a;fill-opacity:0.86792453;stroke:none;stroke-width:1.46499991;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
width="10.338528"
height="23.042738"
x="8.7463942"
y="260.34518"
transform="matrix(0.99995865,0.00909414,-0.00926779,0.99995705,0,0)" />
<ellipse
style="opacity:1;fill:#a1a1a1;fill-opacity:0.86792453;stroke:none;stroke-width:1.46499991;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path4568"
cx="41.451012"
cy="266.38718"
r="2.9085779" />
<circle
r="2.9085779"
cy="277.88605"
cx="42.825504"
cx="44.118061"
cy="263.32062"
rx="2.4216392"
ry="2.3988426" />
<ellipse
cy="275.02563"
cx="44.765343"
id="circle4570"
style="opacity:1;fill:#6a6a6a;fill-opacity:0.86792453;stroke:none;stroke-width:1.46499991;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#1f1f1f;stroke-width:0.86500216;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 28.843321,248.69894 5.63385,9.46891 1.848035,-5.42662"
id="path5993"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
style="opacity:1;fill:#a1a1a1;fill-opacity:0.86792453;stroke:none;stroke-width:1.46499991;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
rx="2.4216392"
ry="2.3988426" />
<g
id="g1705">
<rect
transform="matrix(0.99967585,0.02545985,-0.02594573,0.99966335,0,0)"
style="opacity:1;fill:#289bbc;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4520"
width="10.338468"
height="23.042864"
x="23.424755"
y="259.99872" />
</g>
<rect
transform="matrix(0.99837418,-0.05699994,0.05808481,0.99831165,0,0)"
y="261.80557"
x="10.394932"
height="23.043449"
width="10.33821"
id="rect4522"
style="opacity:1;fill:#bc289b;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.03992438px;line-height:125%;font-family:'Liberation Serif';-inkscape-font-specification:'Liberation Serif';letter-spacing:0px;word-spacing:0px;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.264584px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="16.934374"
y="288.46368"
id="text1730"
transform="rotate(-1.2296789)"><tspan
sodipodi:role="line"
id="tspan1728"
x="16.934374"
y="288.46368"
style="fill:#e6e6e6;fill-opacity:1;stroke-width:0.264584px">dizqueTV</tspan></text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@ -113,6 +113,7 @@ class TVGuideService
let playing = {};
if (
(typeof(previousKnown) !== 'undefined')
&& (previousKnown.index !== -1)
&& (previousKnown.program.duration == channel.programs[previousKnown.index].duration )
&& (previousKnown.start + previousKnown.program.duration == t)
) {
@ -126,6 +127,17 @@ class TVGuideService
} else {
playing = await this.getCurrentPlayingIndex(channel, t);
}
if ( (playing.program == null) || (typeof(playing) === 'undefined') ) {
console.log("There is a weird issue with the TV guide generation. A placeholder program is placed to prevent further issues. Please report this.");
playing = {
index: -1,
program: {
isOffline: true,
duration: 30*60*1000,
},
start: t
}
}
if ( playing.program.isOffline && playing.program.type === 'redirect') {
let ch2 = playing.program.channel;
@ -189,13 +201,15 @@ class TVGuideService
) {
y.program.duration -= melded;
programs[ programs.length - 1] = y;
programs.push( {
start: y.start + y.program.duration,
program: {
isOffline : true,
duration: melded,
},
} );
if (y.start + y.program.duration < t1) {
programs.push( {
start: y.start + y.program.duration,
program: {
isOffline : true,
duration: melded,
},
} );
}
melded = 0;
} else {
programs[ programs.length - 1] = y;
@ -216,7 +230,14 @@ class TVGuideService
};
while (x.start < t1) {
await push(x);
x = await this.getChannelPlaying(channel, x, x.start + x.program.duration);
let t2 = x.start + x.program.duration;
x = await this.getChannelPlaying(channel, x, t2);
if (x.start < t2) {
let d = t2 - x.start;
x.start = t2;
x.program = clone(x.program);
x.program.duration -= d;
}
if (x.program.duration == 0) throw Error("D");
}
result.programs = [];

View File

@ -3,8 +3,7 @@
<head>
<title>dizqueTV</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="/favicon-16.png" sizes="16x16"></link>
<link rel="icon" type="image/png" href="/favicon-32.png" sizes="32x32"></link>
<link rel="icon" type="image/png" href="/favicon.svg" ></link>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.14.0/css/all.min.css">
<link href="style.css" rel="stylesheet">

View File

@ -249,6 +249,17 @@ table.tvguide {
text-align: right;
}
.filler-list .list-group-item {
min-height: 1.5em;
}
.filler-list .list-group-item .title {
margin-right: 5px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* Safari */
@-webkit-keyframes spin {
0% { -webkit-transform: rotate(0deg); }

View File

@ -62,14 +62,13 @@
</div>
</div>
<div class="modal-body container list-group list-group-root" vs-repeat="options" dnd-list="content" ng-if="showList()">
<div class="modal-body container list-group list-group-root filler-list" vs-repeat="options" dnd-list="content" ng-if="showList()">
<div class="list-group-item flex-container" style="cursor: default;" ng-repeat="x in content" dnd-draggable="x" dnd-moved="content.splice($index, 1)" dnd-effect-allowed="move">
<div class="program-start" >
{{durationString(x.duration)}}
</div>
<div ng-style="programSquareStyle(x, false)" />
<div style="margin-right: 5px;">
<div class="title" >
{{x.title}}
</div>
<div class="flex-pull-right">