Merge branch 'development'

This commit is contained in:
Preston 2020-06-28 14:40:55 -04:00
commit 07f0206bbd
7 changed files with 172 additions and 110 deletions

218
package-lock.json generated
View File

@ -128,6 +128,24 @@
"integrity": "sha512-D9MyoQFI7iP5VdpEyPZyjjqIJ8Y8EDNQFIFVLOmeg1rI1xiHOChyUPMPRUVfqFCerxfE+yS3vMyj37F6IdtOoQ==", "integrity": "sha512-D9MyoQFI7iP5VdpEyPZyjjqIJ8Y8EDNQFIFVLOmeg1rI1xiHOChyUPMPRUVfqFCerxfE+yS3vMyj37F6IdtOoQ==",
"dev": true "dev": true
}, },
"@types/glob": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.2.tgz",
"integrity": "sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA==",
"dev": true,
"optional": true,
"requires": {
"@types/minimatch": "*",
"@types/node": "*"
}
},
"@types/minimatch": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
"integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
"dev": true,
"optional": true
},
"@types/node": { "@types/node": {
"version": "10.14.21", "version": "10.14.21",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.21.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.21.tgz",
@ -140,9 +158,9 @@
"integrity": "sha512-2scffjvioEmNz0OyDSLGWDfKCVwaKc6l9Pm9kOIREU13ClXZvHpg/nRL5xyjSSSLhOnXqft2HpsAzNEEA8cFFg==" "integrity": "sha512-2scffjvioEmNz0OyDSLGWDfKCVwaKc6l9Pm9kOIREU13ClXZvHpg/nRL5xyjSSSLhOnXqft2HpsAzNEEA8cFFg=="
}, },
"acorn": { "acorn": {
"version": "7.1.0", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz",
"integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==" "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg=="
}, },
"acorn-globals": { "acorn-globals": {
"version": "4.3.4", "version": "4.3.4",
@ -154,9 +172,9 @@
}, },
"dependencies": { "dependencies": {
"acorn": { "acorn": {
"version": "6.3.0", "version": "6.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
"integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==" "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA=="
} }
} }
}, },
@ -448,11 +466,12 @@
"dev": true "dev": true
}, },
"asar": { "asar": {
"version": "2.0.1", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/asar/-/asar-2.0.1.tgz", "resolved": "https://registry.npmjs.org/asar/-/asar-2.1.0.tgz",
"integrity": "sha512-Vo9yTuUtyFahkVMFaI6uMuX6N7k5DWa6a/8+7ov0/f8Lq9TVR0tUjzSzxQSxT1Y+RJIZgnP7BVb6Uhi+9cjxqA==", "integrity": "sha512-d2Ovma+bfqNpvBzY/KU8oPY67ZworixTpkjSx0PCXnQi67c2cXmssaTxpFDUM0ttopXoGx/KRxNg/GDThYbXQA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/glob": "^7.1.1",
"chromium-pickle-js": "^0.2.0", "chromium-pickle-js": "^0.2.0",
"commander": "^2.20.0", "commander": "^2.20.0",
"cuint": "^0.2.2", "cuint": "^0.2.2",
@ -463,9 +482,9 @@
}, },
"dependencies": { "dependencies": {
"glob": { "glob": {
"version": "7.1.4", "version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"dev": true, "dev": true,
"requires": { "requires": {
"fs.realpath": "^1.0.0", "fs.realpath": "^1.0.0",
@ -712,6 +731,12 @@
"integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
"dev": true "dev": true
}, },
"buffer-crc32": {
"version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
"integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
"dev": true
},
"buffer-fill": { "buffer-fill": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
@ -1030,9 +1055,9 @@
} }
}, },
"commander": { "commander": {
"version": "2.20.0", "version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"dev": true "dev": true
}, },
"commonjs": { "commonjs": {
@ -1075,9 +1100,9 @@
"dev": true "dev": true
}, },
"readable-stream": { "readable-stream": {
"version": "2.3.6", "version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"dev": true, "dev": true,
"requires": { "requires": {
"core-util-is": "~1.0.0", "core-util-is": "~1.0.0",
@ -1568,9 +1593,9 @@
} }
}, },
"yargs-parser": { "yargs-parser": {
"version": "13.1.1", "version": "13.1.2",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
"integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
"dev": true, "dev": true,
"requires": { "requires": {
"camelcase": "^5.0.0", "camelcase": "^5.0.0",
@ -1844,9 +1869,9 @@
"dev": true "dev": true
}, },
"minimist": { "minimist": {
"version": "1.2.0", "version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true "dev": true
}, },
"ms": { "ms": {
@ -2002,9 +2027,9 @@
} }
}, },
"minimist": { "minimist": {
"version": "1.2.0", "version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true "dev": true
}, },
"ms": { "ms": {
@ -2416,8 +2441,7 @@
}, },
"minimist": { "minimist": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "resolved": "",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true "dev": true
}, },
"ms": { "ms": {
@ -2689,9 +2713,9 @@
}, },
"dependencies": { "dependencies": {
"minimist": { "minimist": {
"version": "1.2.0", "version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true "dev": true
} }
} }
@ -2760,9 +2784,9 @@
"dev": true "dev": true
}, },
"yargs-parser": { "yargs-parser": {
"version": "13.1.1", "version": "13.1.2",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
"integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
"dev": true, "dev": true,
"requires": { "requires": {
"camelcase": "^5.0.0", "camelcase": "^5.0.0",
@ -2955,15 +2979,15 @@
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
}, },
"extract-zip": { "extract-zip": {
"version": "1.6.7", "version": "1.7.0",
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz",
"integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==",
"dev": true, "dev": true,
"requires": { "requires": {
"concat-stream": "1.6.2", "concat-stream": "^1.6.2",
"debug": "2.6.9", "debug": "^2.6.9",
"mkdirp": "0.5.1", "mkdirp": "^0.5.4",
"yauzl": "2.4.1" "yauzl": "^2.10.0"
} }
}, },
"extsprintf": { "extsprintf": {
@ -2987,9 +3011,9 @@
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
}, },
"fd-slicer": { "fd-slicer": {
"version": "1.0.1", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
"integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
"dev": true, "dev": true,
"requires": { "requires": {
"pend": "~1.2.0" "pend": "~1.2.0"
@ -3386,9 +3410,9 @@
} }
}, },
"html-entities": { "html-entities": {
"version": "1.2.1", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz",
"integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA=="
}, },
"http-cache-semantics": { "http-cache-semantics": {
"version": "4.0.3", "version": "4.0.3",
@ -3611,9 +3635,9 @@
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
}, },
"jquery": { "jquery": {
"version": "3.4.1", "version": "3.5.0",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.0.tgz",
"integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" "integrity": "sha512-Xb7SVYMvygPxbFMpTFQiHh1J7HClEaThguL15N/Gg37Lri/qKyhRGZYzHRyLH8Stq3Aow0LsHO2O2ci86fCrNQ=="
}, },
"js-yaml": { "js-yaml": {
"version": "3.13.1", "version": "3.13.1",
@ -4003,12 +4027,19 @@
} }
}, },
"m3u8stream": { "m3u8stream": {
"version": "0.6.3", "version": "0.7.1",
"resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.6.3.tgz", "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.7.1.tgz",
"integrity": "sha512-HNUco8ef9kOvMRH7tYxJqbk9IuRA+AuZG8a/dQwqI+jfuEs1/DUaPbfTIlUDB4JmTZNkTOZHvZI5TvnQGR8nKA==", "integrity": "sha512-z6ldnAdhbuWOL6LmMkwptSZGzj+qbRytMKLTbNicwF/bJMjf9U9lqD57RNQUFecvWadEkzy6PDjcNJFFgi19uQ==",
"requires": { "requires": {
"miniget": "^1.6.1", "miniget": "^1.6.1",
"sax": "^1.2.4" "sax": "^1.2.4"
},
"dependencies": {
"miniget": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/miniget/-/miniget-1.7.2.tgz",
"integrity": "sha512-USPNNK2bnHLOplX8BZVMehUkyQizS/DFpBdoH0TS+fM+hQoLNg9tWg4MeY9wE8gfY0pbzmx5UBEODujt3Lz8AA=="
}
} }
}, },
"make-dir": { "make-dir": {
@ -4053,9 +4084,9 @@
}, },
"dependencies": { "dependencies": {
"minimist": { "minimist": {
"version": "1.2.0", "version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true "dev": true
} }
} }
@ -4087,9 +4118,9 @@
"dev": true "dev": true
}, },
"miniget": { "miniget": {
"version": "1.6.1", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/miniget/-/miniget-1.6.1.tgz", "resolved": "https://registry.npmjs.org/miniget/-/miniget-2.0.0.tgz",
"integrity": "sha512-I5oBwZmcaOuJrjQn7lpS29HM+aAZDbzKbX5ouxVyhFYdg6fA6YKOTwOCgzZQwlHuMek3FlCxz6eNrd4pOXbwOA==" "integrity": "sha512-JAHY/3Dv673TFDmYcpF3yo755ViTy0fU2L0j9y+5bobs6+fbnX4k8UkmCqC8mwwgYUNDOEgHrN1P/oO+rQNxjw=="
}, },
"minimatch": { "minimatch": {
"version": "3.0.4", "version": "3.0.4",
@ -4101,16 +4132,16 @@
} }
}, },
"minimist": { "minimist": {
"version": "0.0.8", "version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
}, },
"mkdirp": { "mkdirp": {
"version": "0.5.1", "version": "0.5.5",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
"requires": { "requires": {
"minimist": "0.0.8" "minimist": "^1.2.5"
} }
}, },
"modify-filename": { "modify-filename": {
@ -4184,9 +4215,9 @@
}, },
"dependencies": { "dependencies": {
"minimist": { "minimist": {
"version": "1.2.0", "version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true "dev": true
} }
} }
@ -4248,7 +4279,7 @@
"dependencies": { "dependencies": {
"sax": { "sax": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "http://registry.npmjs.org/sax/-/sax-0.6.1.tgz", "resolved": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz",
"integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=" "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk="
} }
} }
@ -4552,9 +4583,9 @@
}, },
"dependencies": { "dependencies": {
"minimist": { "minimist": {
"version": "1.2.0", "version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true "dev": true
} }
} }
@ -4612,9 +4643,9 @@
} }
}, },
"minimist": { "minimist": {
"version": "1.2.0", "version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true "dev": true
} }
} }
@ -5187,9 +5218,9 @@
}, },
"dependencies": { "dependencies": {
"glob": { "glob": {
"version": "7.1.4", "version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"dev": true, "dev": true,
"requires": { "requires": {
"fs.realpath": "^1.0.0", "fs.realpath": "^1.0.0",
@ -5201,9 +5232,9 @@
} }
}, },
"rimraf": { "rimraf": {
"version": "2.6.3", "version": "2.7.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
"integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
"dev": true, "dev": true,
"requires": { "requires": {
"glob": "^7.1.3" "glob": "^7.1.3"
@ -5671,22 +5702,23 @@
} }
}, },
"yauzl": { "yauzl": {
"version": "2.4.1", "version": "2.10.0",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
"integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
"dev": true, "dev": true,
"requires": { "requires": {
"fd-slicer": "~1.0.1" "buffer-crc32": "~0.2.3",
"fd-slicer": "~1.1.0"
} }
}, },
"ytdl-core": { "ytdl-core": {
"version": "1.0.3", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-1.0.3.tgz", "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-3.1.1.tgz",
"integrity": "sha512-sBOVokjrAigKTEn248MJ+JpS5ifay/vBzYGMDeZhG61xmgthev6yHXBgEgm+M8ySDQXXVjOTmUtY3GHbX988KA==", "integrity": "sha512-sHw8Vz56Bs7LRKhJARW8j2JREndHFBuEdnYKgjx4RHwh1t75TsdZ5/SRpz9TLkNm2M5S8gVwvWm7AD1blhjb0g==",
"requires": { "requires": {
"html-entities": "^1.1.3", "html-entities": "^1.3.1",
"m3u8stream": "^0.6.3", "m3u8stream": "^0.7.1",
"miniget": "^1.6.0", "miniget": "^2.0.0",
"sax": "^1.1.3" "sax": "^1.1.3"
} }
} }

View File

@ -1,7 +1,7 @@
{ {
"name": "FreeTube", "name": "FreeTube",
"productName": "FreeTube", "productName": "FreeTube",
"version": "0.7.2", "version": "0.7.3",
"description": "An Open Source YouTube app for privacy.", "description": "An Open Source YouTube app for privacy.",
"main": "src/js/init.js", "main": "src/js/init.js",
"scripts": { "scripts": {
@ -94,12 +94,12 @@
"commonjs": "0.0.1", "commonjs": "0.0.1",
"dateformat": "^3.0.3", "dateformat": "^3.0.3",
"electron-context-menu": "^0.15.0", "electron-context-menu": "^0.15.0",
"jquery": "^3.4.1", "jquery": "^3.5.0",
"jsdom": "^15.2.0", "jsdom": "^15.2.0",
"mustache": "^3.1.0", "mustache": "^3.1.0",
"nedb": "^1.8.0", "nedb": "^1.8.0",
"opml-to-json": "0.0.3", "opml-to-json": "0.0.3",
"vue": "^2.6.10", "vue": "^2.6.10",
"ytdl-core": "^1.0.3" "ytdl-core": "^3.1.1"
} }
} }

View File

@ -399,11 +399,11 @@ function playVideo(videoId, playlistId = '') {
// Search through the returned object to get the 360p and 720p video URLs (If available) // Search through the returned object to get the 360p and 720p video URLs (If available)
videoUrls.forEach((video) => { videoUrls.forEach((video) => {
switch (video.itag) { switch (video.itag) {
case 18: case '18':
playerView.video360p = decodeURIComponent(video.url); playerView.video360p = decodeURIComponent(video.url);
// ft.log(playerView.video360p); // ft.log(playerView.video360p);
break; break;
case 22: case '22':
playerView.video720p = decodeURIComponent(video.url); playerView.video720p = decodeURIComponent(video.url);
// ft.log(playerView.video720p); // ft.log(playerView.video720p);
break; break;

View File

@ -893,7 +893,8 @@ let playerView = new Vue({
playlistShowList: true, playlistShowList: true,
recommendedVideoList: [], recommendedVideoList: [],
playlistVideoList: [], playlistVideoList: [],
distractionFreeMode: false distractionFreeMode: false,
includeCurrentTime: false
}, },
methods: { methods: {
channel: (channelId) => { channel: (channelId) => {
@ -947,13 +948,16 @@ let playerView = new Vue({
playerView.legacySeen = false; playerView.legacySeen = false;
playerView.playerSeen = true; playerView.playerSeen = true;
}, },
toggleSave: (videoId) => {
addSavedVideo(videoId);
},
copyYouTube: (videoId) => { copyYouTube: (videoId) => {
const url = 'https://youtube.com/watch?v=' + videoId; const url = 'https://youtube.com/watch?v=' + videoId + currentTimeParameter();
clipboard.writeText(url); clipboard.writeText(url);
showToast('URL has been copied to the clipboard'); showToast('URL has been copied to the clipboard');
}, },
openYouTube: (videoId) => { openYouTube: (videoId) => {
shell.openExternal('https://youtube.com/watch?v=' + videoId); shell.openExternal('https://youtube.com/watch?v=' + videoId + currentTimeParameter());
}, },
openYouTubeNoCookie: (videoId) => { openYouTubeNoCookie: (videoId) => {
const url = 'https://www.youtube-nocookie.com/embed/' + videoId; const url = 'https://www.youtube-nocookie.com/embed/' + videoId;
@ -965,12 +969,12 @@ let playerView = new Vue({
showToast('URL has been copied to the clipboard'); showToast('URL has been copied to the clipboard');
}, },
copyInvidious: (videoId) => { copyInvidious: (videoId) => {
const url = invidiousInstance + '/watch?v=' + videoId; const url = invidiousInstance + '/watch?v=' + videoId + currentTimeParameter();
clipboard.writeText(url); clipboard.writeText(url);
showToast('URL has been copied to the clipboard'); showToast('URL has been copied to the clipboard');
}, },
openInvidious: (videoId) => { openInvidious: (videoId) => {
shell.openExternal(invidiousInstance + '/watch?v=' + videoId); shell.openExternal(invidiousInstance + '/watch?v=' + videoId + currentTimeParameter());
}, },
save: (videoId) => { save: (videoId) => {
toggleSavedVideo(videoId); toggleSavedVideo(videoId);
@ -1786,3 +1790,12 @@ function hideViews() {
editProfileView.seen = false; editProfileView.seen = false;
backButtonView.lastView = false; backButtonView.lastView = false;
} }
function currentTimeParameter(){
if (!playerView.includeCurrentTime) return "";
if (typeof (playerView.currentTime) !== 'undefined') return "&t=" + Math.floor(playerView.currentTime);
if (typeof (player) !== 'undefined') return "&t=" + Math.floor(player.currentTime);
const legacyPlayer = $('#legacyPlayer').get(0);
if (typeof (legacyPlayer) !== 'undefined') return "&t=" + Math.floor(legacyPlayer.currentTime);
return "";
}

View File

@ -155,8 +155,9 @@ function displayVideo(videoData, listType = '') {
let published = new Date(videoData.published * 1000); let published = new Date(videoData.published * 1000);
let hours = 0; let hours = 0;
if (now < published.getTime()) { if (videoData.isUpcoming) {
video.publishedDate = 'Premieres on ' + published.toLocaleString(); const premiereDate = new Date(videoData.premiereTimestamp * 1000);
video.publishedDate = 'Premieres on ' + premiereDate.toLocaleString();
} else { } else {
if (time >= 3600) { if (time >= 3600) {
hours = Math.floor(time / 3600); hours = Math.floor(time / 3600);

View File

@ -263,6 +263,19 @@ iframe {
width: 100%; width: 100%;
} }
.recommendThumbnail i {
color: white;
background-color: black;
padding: 6px;
opacity: 0.7;
position: relative;
}
.recommendVideoSave {
bottom: 145px;
left: 222px;
}
.recommendTitle { .recommendTitle {
font-size: 16px; font-size: 16px;
font-weight: bold; font-weight: bold;

View File

@ -61,6 +61,8 @@
<div class='smallButton shareButton'> <div class='smallButton shareButton'>
<span>SHARE</span> <i class="fas fa-angle-down"></i> <span>SHARE</span> <i class="fas fa-angle-down"></i>
<div class='shareTypes'> <div class='shareTypes'>
<input type="checkbox" id="timeCheckbox" v-model="includeCurrentTime">
<label for="timeCheckbox">AT CURRENT TIME</label>
<ul> <ul>
<li v-on:click='copyYouTube(videoId)'>COPY YOUTUBE LINK</li> <li v-on:click='copyYouTube(videoId)'>COPY YOUTUBE LINK</li>
<li v-on:click='openYouTube(videoId)'>OPEN IN YOUTUBE</li> <li v-on:click='openYouTube(videoId)'>OPEN IN YOUTUBE</li>
@ -123,14 +125,15 @@
<div v-if='!distractionFreeMode' id='recommendations'> <div v-if='!distractionFreeMode' id='recommendations'>
<strong>Recommendations</strong> <strong>Recommendations</strong>
<div v-for='video in recommendedVideoList'> <div v-for='video in recommendedVideoList'>
<div class='recommendVideo' v-on:click='play(video.id)'> <div class='recommendVideo'>
<div class='recommendThumbnail'> <div class='recommendThumbnail'>
<img :src='video.thumbnail'></img> <img v-on:click='play(video.id)' :src='video.thumbnail'></img>
<p v-on:click='play(video.id)' class='videoDuration'>{{video.duration}}</p> <p v-on:click='play(video.id)' class='videoDuration'>{{video.duration}}</p>
<i class="fas fa-history recommendVideoSave" v-on:click='toggleSave(video.id)'></i>
</div> </div>
<p class='recommendTitle'>{{video.title}}</p> <p v-on:click='play(video.id)' class='recommendTitle'>{{video.title}}</p>
<p class='recommendChannel'>{{video.channelName}}</p> <p v-on:click='play(video.id)' class='recommendChannel'>{{video.channelName}}</p>
<p class='recommendDate'>{{video.viewCount}}</p> <p v-on:click='play(video.id)' class='recommendDate'>{{video.viewCount}}</p>
</div> </div>
<hr /> <hr />
</div> </div>