mirror of
https://github.com/cuiocean/ZY-Player.git
synced 2026-02-14 16:06:48 +08:00
Compare commits
55 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6f296a1170 | ||
|
|
f8228a71f3 | ||
|
|
9886f04b48 | ||
|
|
37c4aad4b0 | ||
|
|
77d7b28e26 | ||
|
|
3505b22344 | ||
|
|
80cec08982 | ||
|
|
f92094daec | ||
|
|
2c06ef1da6 | ||
|
|
06403ece3f | ||
|
|
39a6491403 | ||
|
|
edb82eb3be | ||
|
|
c7ca3df50d | ||
|
|
0b198381b1 | ||
|
|
2dcda83741 | ||
|
|
5b3c3f0ff2 | ||
|
|
23454f7c7f | ||
|
|
0fdfe29343 | ||
|
|
fa7a799e2b | ||
|
|
9c1a707279 | ||
|
|
7b69bb05d4 | ||
|
|
3b6b6ea11b | ||
|
|
9ec65ab027 | ||
|
|
da5531a947 | ||
|
|
4744f91f6b | ||
|
|
36b80c1d7e | ||
|
|
15f4ab7248 | ||
|
|
0e25c25480 | ||
|
|
7ff48a407d | ||
|
|
bbc371b1c5 | ||
|
|
d141d60e77 | ||
|
|
80af701e5c | ||
|
|
f0e70e03cb | ||
|
|
aba3472f2e | ||
|
|
8772076d76 | ||
|
|
4abe03347a | ||
|
|
b3e6e817dd | ||
|
|
e48445c224 | ||
|
|
159f19d5ec | ||
|
|
c2953a530c | ||
|
|
9166f129d8 | ||
|
|
72ac3eafdd | ||
|
|
8610b41fad | ||
|
|
06e4c0e83e | ||
|
|
5db3fd9f9b | ||
|
|
978afb2b38 | ||
|
|
b00b69a582 | ||
|
|
9a33b0cfb3 | ||
|
|
f4bf42bf07 | ||
|
|
671a6e32d0 | ||
|
|
d05534fb17 | ||
|
|
b655c8c8bc | ||
|
|
8fbea8ab57 | ||
|
|
2ddfc66104 | ||
|
|
26d62cdef4 |
559
package-lock.json
generated
559
package-lock.json
generated
@@ -1,17 +1,18 @@
|
||||
{
|
||||
"name": "zy",
|
||||
"version": "2.7.7",
|
||||
"version": "2.8.3",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "zy",
|
||||
"version": "2.7.7",
|
||||
"version": "2.8.3",
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"axios": "^0.21.1",
|
||||
"cheerio": "^1.0.0-rc.5",
|
||||
"core-js": "^3.9.1",
|
||||
"bootstrap-vue": "^2.21.2",
|
||||
"cheerio": "^1.0.0-rc.6",
|
||||
"core-js": "^3.10.2",
|
||||
"dexie": "^3.0.3",
|
||||
"electron-localshortcut": "^3.2.1",
|
||||
"electron-proxy-agent": "^1.2.0",
|
||||
@@ -36,7 +37,7 @@
|
||||
"vue-waterfall-plugin": "^1.1.0",
|
||||
"vuedraggable": "^2.24.3",
|
||||
"vuex": "^3.6.2",
|
||||
"xgplayer": "2.17.13",
|
||||
"xgplayer": "2.19.1",
|
||||
"xgplayer-flv.js": "^2.3.0",
|
||||
"xgplayer-hls.js": "^2.4.2"
|
||||
},
|
||||
@@ -1546,6 +1547,87 @@
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/@nuxt/opencollective": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.3.2.tgz",
|
||||
"integrity": "sha512-XG7rUdXG9fcafu9KTDIYjJSkRO38EwjlKYIb5TQ/0WDbiTUTtUtgncMscKOYzfsY86kGs05pAuMOR+3Fi0aN3A==",
|
||||
"dependencies": {
|
||||
"chalk": "^4.1.0",
|
||||
"consola": "^2.15.0",
|
||||
"node-fetch": "^2.6.1"
|
||||
},
|
||||
"bin": {
|
||||
"opencollective": "bin/opencollective.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.0.0",
|
||||
"npm": ">=5.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@nuxt/opencollective/node_modules/ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"dependencies": {
|
||||
"color-convert": "^2.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/@nuxt/opencollective/node_modules/chalk": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
|
||||
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
|
||||
"dependencies": {
|
||||
"ansi-styles": "^4.1.0",
|
||||
"supports-color": "^7.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/chalk?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/@nuxt/opencollective/node_modules/color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"dependencies": {
|
||||
"color-name": "~1.1.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@nuxt/opencollective/node_modules/color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
||||
},
|
||||
"node_modules/@nuxt/opencollective/node_modules/has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/@nuxt/opencollective/node_modules/supports-color": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||
"dependencies": {
|
||||
"has-flag": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/@sindresorhus/is": {
|
||||
"version": "0.14.0",
|
||||
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
|
||||
@@ -3622,6 +3704,32 @@
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/bootstrap": {
|
||||
"version": "4.6.0",
|
||||
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.0.tgz",
|
||||
"integrity": "sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw==",
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/bootstrap"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"jquery": "1.9.1 - 3",
|
||||
"popper.js": "^1.16.1"
|
||||
}
|
||||
},
|
||||
"node_modules/bootstrap-vue": {
|
||||
"version": "2.21.2",
|
||||
"resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.21.2.tgz",
|
||||
"integrity": "sha512-0Exe+4MZysqhZNXIKf4TzkvXaupxh9EHsoCRez0o5Dc0J7rlafayOEwql63qXv74CgZO8E4U8ugRNJko1vMvNw==",
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"@nuxt/opencollective": "^0.3.2",
|
||||
"bootstrap": ">=4.5.3 <5.0.0",
|
||||
"popper.js": "^1.16.1",
|
||||
"portal-vue": "^2.1.7",
|
||||
"vue-functional-data-merge": "^3.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/boxen": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
|
||||
@@ -4495,33 +4603,31 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/cheerio": {
|
||||
"version": "1.0.0-rc.5",
|
||||
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.5.tgz",
|
||||
"integrity": "sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw==",
|
||||
"version": "1.0.0-rc.6",
|
||||
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.6.tgz",
|
||||
"integrity": "sha512-hjx1XE1M/D5pAtMgvWwE21QClmAEeGHOIDfycgmndisdNgI6PE1cGRQkMGBcsbUbmEQyWu5PJLUcAOjtQS8DWw==",
|
||||
"dependencies": {
|
||||
"cheerio-select-tmp": "^0.1.0",
|
||||
"dom-serializer": "~1.2.0",
|
||||
"domhandler": "^4.0.0",
|
||||
"entities": "~2.1.0",
|
||||
"htmlparser2": "^6.0.0",
|
||||
"parse5": "^6.0.0",
|
||||
"parse5-htmlparser2-tree-adapter": "^6.0.0"
|
||||
"cheerio-select": "^1.3.0",
|
||||
"dom-serializer": "^1.3.1",
|
||||
"domhandler": "^4.1.0",
|
||||
"htmlparser2": "^6.1.0",
|
||||
"parse5": "^6.0.1",
|
||||
"parse5-htmlparser2-tree-adapter": "^6.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.12"
|
||||
}
|
||||
},
|
||||
"node_modules/cheerio-select-tmp": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz",
|
||||
"integrity": "sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ==",
|
||||
"deprecated": "Use cheerio-select instead",
|
||||
"node_modules/cheerio-select": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.4.0.tgz",
|
||||
"integrity": "sha512-sobR3Yqz27L553Qa7cK6rtJlMDbiKPdNywtR95Sj/YgfpLfy0u6CGJuaBKe5YE/vTc23SCRKxWSdlon/w6I/Ew==",
|
||||
"dependencies": {
|
||||
"css-select": "^3.1.2",
|
||||
"css-what": "^4.0.0",
|
||||
"domelementtype": "^2.1.0",
|
||||
"domhandler": "^4.0.0",
|
||||
"domutils": "^2.4.4"
|
||||
"css-select": "^4.1.2",
|
||||
"css-what": "^5.0.0",
|
||||
"domelementtype": "^2.2.0",
|
||||
"domhandler": "^4.2.0",
|
||||
"domutils": "^2.6.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/fb55"
|
||||
@@ -5225,6 +5331,11 @@
|
||||
"integrity": "sha1-GOcxiqsGppkmc3KxDFIm0locmmk= sha512-bTTG28diWg7R7/+qE5NZumwPbCiJOT8uPdZYu674brDjBWQctbaQbYlDKhalS+4i5HxIx+G8dZsnBHKzWpp01A==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/consola": {
|
||||
"version": "2.15.3",
|
||||
"resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz",
|
||||
"integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw=="
|
||||
},
|
||||
"node_modules/console-browserify": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
|
||||
@@ -5412,9 +5523,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/core-js": {
|
||||
"version": "3.9.1",
|
||||
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.9.1.tgz",
|
||||
"integrity": "sha512-gSjRvzkxQc1zjM/5paAmL4idJBFzuJoo+jDjF1tStYFMV2ERfD02HhahhCGXUyHxQRG4yFKVSdO6g62eoRMcDg==",
|
||||
"version": "3.10.2",
|
||||
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.10.2.tgz",
|
||||
"integrity": "sha512-W+2oVYeNghuBr3yTzZFQ5rfmjZtYB/Ubg87R5YOmlGrIb+Uw9f7qjUbhsj+/EkXhcV7eOD3jiM4+sgraX3FZUw==",
|
||||
"hasInstallScript": true,
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
@@ -5643,14 +5754,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/css-select": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz",
|
||||
"integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==",
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.2.tgz",
|
||||
"integrity": "sha512-nu5ye2Hg/4ISq4XqdLY2bEatAcLIdt3OYGFc9Tm9n7VSlFBcfRv0gBNksHRgSdUDQGtN3XrZ94ztW+NfzkFSUw==",
|
||||
"dependencies": {
|
||||
"boolbase": "^1.0.0",
|
||||
"css-what": "^4.0.0",
|
||||
"domhandler": "^4.0.0",
|
||||
"domutils": "^2.4.3",
|
||||
"css-what": "^5.0.0",
|
||||
"domhandler": "^4.2.0",
|
||||
"domutils": "^2.6.0",
|
||||
"nth-check": "^2.0.0"
|
||||
},
|
||||
"funding": {
|
||||
@@ -5686,9 +5797,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/css-what": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz",
|
||||
"integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==",
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.0.tgz",
|
||||
"integrity": "sha512-qxyKHQvgKwzwDWC/rGbT821eJalfupxYW2qbSJSAtdSTimsr/MlaGONoNLllaUPZWf8QnbcKM/kPVYUQuEKAFA==",
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
},
|
||||
@@ -6341,9 +6452,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/dom-serializer": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz",
|
||||
"integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==",
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.1.tgz",
|
||||
"integrity": "sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q==",
|
||||
"dependencies": {
|
||||
"domelementtype": "^2.0.1",
|
||||
"domhandler": "^4.0.0",
|
||||
@@ -6369,9 +6480,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/domelementtype": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz",
|
||||
"integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==",
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
|
||||
"integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
@@ -6380,11 +6491,11 @@
|
||||
]
|
||||
},
|
||||
"node_modules/domhandler": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz",
|
||||
"integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==",
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz",
|
||||
"integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==",
|
||||
"dependencies": {
|
||||
"domelementtype": "^2.1.0"
|
||||
"domelementtype": "^2.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 4"
|
||||
@@ -6394,13 +6505,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/domutils": {
|
||||
"version": "2.4.4",
|
||||
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.4.tgz",
|
||||
"integrity": "sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA==",
|
||||
"version": "2.6.0",
|
||||
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz",
|
||||
"integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==",
|
||||
"dependencies": {
|
||||
"dom-serializer": "^1.0.1",
|
||||
"domelementtype": "^2.0.1",
|
||||
"domhandler": "^4.0.0"
|
||||
"domelementtype": "^2.2.0",
|
||||
"domhandler": "^4.2.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/fb55/domutils?sponsor=1"
|
||||
@@ -9682,9 +9793,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/htmlparser2": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.0.tgz",
|
||||
"integrity": "sha512-numTQtDZMoh78zJpaNdJ9MXb2cv5G3jwUoe3dMQODubZvLoGvTE/Ofp6sHvH8OGKcN/8A47pGLi/k58xHP/Tfw==",
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
|
||||
"integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
|
||||
"funding": [
|
||||
"https://github.com/fb55/htmlparser2?sponsor=1",
|
||||
{
|
||||
@@ -9695,7 +9806,7 @@
|
||||
"dependencies": {
|
||||
"domelementtype": "^2.0.1",
|
||||
"domhandler": "^4.0.0",
|
||||
"domutils": "^2.4.4",
|
||||
"domutils": "^2.5.2",
|
||||
"entities": "^2.0.0"
|
||||
}
|
||||
},
|
||||
@@ -10179,14 +10290,6 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/install": {
|
||||
"version": "0.13.0",
|
||||
"resolved": "https://registry.npmjs.org/install/-/install-0.13.0.tgz",
|
||||
"integrity": "sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==",
|
||||
"engines": {
|
||||
"node": ">= 0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/internal-ip": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
|
||||
@@ -10774,6 +10877,12 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/jquery": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
|
||||
"integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/js-message": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz",
|
||||
@@ -10893,6 +11002,7 @@
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
|
||||
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
|
||||
"dev": true,
|
||||
"optionalDependencies": {
|
||||
"graceful-fs": "^4.1.6"
|
||||
}
|
||||
@@ -11898,6 +12008,14 @@
|
||||
"lower-case": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/node-fetch": {
|
||||
"version": "2.6.1",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
|
||||
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
|
||||
"engines": {
|
||||
"node": "4.x || >=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/node-forge": {
|
||||
"version": "0.10.0",
|
||||
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
|
||||
@@ -12751,11 +12869,6 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/pasition": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/pasition/-/pasition-1.0.3.tgz",
|
||||
"integrity": "sha512-hsUNLhS7e5uWGkTtgbxoHMzCUb0PeboQelyqPmpRkAk26AkKal0Z6JfYWhjIEhZHIYzJTfr6Aom/BpBPrZXHnA=="
|
||||
},
|
||||
"node_modules/path-browserify": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
|
||||
@@ -12932,6 +13045,24 @@
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/popper.js": {
|
||||
"version": "1.16.1",
|
||||
"resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
|
||||
"integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==",
|
||||
"deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1",
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/popperjs"
|
||||
}
|
||||
},
|
||||
"node_modules/portal-vue": {
|
||||
"version": "2.1.7",
|
||||
"resolved": "https://registry.npmjs.org/portal-vue/-/portal-vue-2.1.7.tgz",
|
||||
"integrity": "sha512-+yCno2oB3xA7irTt0EU5Ezw22L2J51uKAacE/6hMPMoO/mx3h4rXFkkBkT4GFsMDv/vEe8TNKC3ujJJ0PTwb6g==",
|
||||
"peerDependencies": {
|
||||
"vue": "^2.5.18"
|
||||
}
|
||||
},
|
||||
"node_modules/portfinder": {
|
||||
"version": "1.0.26",
|
||||
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz",
|
||||
@@ -14452,11 +14583,6 @@
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/request-frame": {
|
||||
"version": "1.5.3",
|
||||
"resolved": "https://registry.npmjs.org/request-frame/-/request-frame-1.5.3.tgz",
|
||||
"integrity": "sha1-gTwxYNmwI1g4iaqpdzibaPyqLj0="
|
||||
},
|
||||
"node_modules/require-directory": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
||||
@@ -17136,6 +17262,7 @@
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
|
||||
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 4.0.0"
|
||||
}
|
||||
@@ -18086,6 +18213,11 @@
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/vue-functional-data-merge": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/vue-functional-data-merge/-/vue-functional-data-merge-3.1.0.tgz",
|
||||
"integrity": "sha512-leT4kdJVQyeZNY1kmnS1xiUlQ9z1B/kdBFCILIjYYQDqZgLqCLa0UhjSSeRX6c3mUe6U5qYeM8LrEqkHJ1B4LA=="
|
||||
},
|
||||
"node_modules/vue-hot-reload-api": {
|
||||
"version": "2.3.4",
|
||||
"resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
|
||||
@@ -19382,21 +19514,17 @@
|
||||
}
|
||||
},
|
||||
"node_modules/xgplayer": {
|
||||
"version": "2.17.13",
|
||||
"resolved": "https://registry.npmjs.org/xgplayer/-/xgplayer-2.17.13.tgz",
|
||||
"integrity": "sha512-4wVBmVx1ShtItdrArNDu4z9ZiKR5KkLDVhHr/kZfhAT2gOfv4+qUxfRJ3BkyGK8UbuZ5+c4bIvrRZdze9koxww==",
|
||||
"version": "2.19.1",
|
||||
"resolved": "https://registry.npmjs.org/xgplayer/-/xgplayer-2.19.1.tgz",
|
||||
"integrity": "sha512-gfl1F56UxtiH8krKaaOxfZlMWvLGIP8hpWeSthhMVwqcg7xoiW0VKSi6qe7OYt9iSURmNwa59qoBmJtZKcnTxQ==",
|
||||
"dependencies": {
|
||||
"chalk": "^2.3.2",
|
||||
"commander": "^2.15.1",
|
||||
"danmu.js": "^0.3.3",
|
||||
"deepmerge": "^1.5.0",
|
||||
"downloadjs": "1.4.7",
|
||||
"draggabilly": "^2.2.0",
|
||||
"event-emitter": "^0.3.5",
|
||||
"fs-extra": "^5.0.0",
|
||||
"install": "^0.13.0",
|
||||
"pasition": "^1.0.1",
|
||||
"request-frame": "^1.5.3"
|
||||
"xgplayer-subtitles": "^1.0.9"
|
||||
},
|
||||
"bin": {
|
||||
"xgplayer": "bin/xgplayer.js"
|
||||
@@ -19430,14 +19558,12 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/xgplayer/node_modules/fs-extra": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
|
||||
"integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
|
||||
"node_modules/xgplayer-subtitles": {
|
||||
"version": "1.0.9",
|
||||
"resolved": "https://registry.npmjs.org/xgplayer-subtitles/-/xgplayer-subtitles-1.0.9.tgz",
|
||||
"integrity": "sha512-9or3CvDzKVudhzyljveV2/kV1Y13W+T57c+ilquA+Ysym+cY4A1v9Z8umq2KM4JNQPFGKWRvgfGjl5YpICnI3w==",
|
||||
"dependencies": {
|
||||
"graceful-fs": "^4.1.2",
|
||||
"jsonfile": "^4.0.0",
|
||||
"universalify": "^0.1.0"
|
||||
"event-emitter": "^0.3.5"
|
||||
}
|
||||
},
|
||||
"node_modules/xregexp": {
|
||||
@@ -20962,6 +21088,61 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"@nuxt/opencollective": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.3.2.tgz",
|
||||
"integrity": "sha512-XG7rUdXG9fcafu9KTDIYjJSkRO38EwjlKYIb5TQ/0WDbiTUTtUtgncMscKOYzfsY86kGs05pAuMOR+3Fi0aN3A==",
|
||||
"requires": {
|
||||
"chalk": "^4.1.0",
|
||||
"consola": "^2.15.0",
|
||||
"node-fetch": "^2.6.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"requires": {
|
||||
"color-convert": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"chalk": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
|
||||
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
|
||||
"requires": {
|
||||
"ansi-styles": "^4.1.0",
|
||||
"supports-color": "^7.1.0"
|
||||
}
|
||||
},
|
||||
"color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"requires": {
|
||||
"color-name": "~1.1.4"
|
||||
}
|
||||
},
|
||||
"color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
||||
},
|
||||
"has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||
"requires": {
|
||||
"has-flag": "^4.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@sindresorhus/is": {
|
||||
"version": "0.14.0",
|
||||
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
|
||||
@@ -22716,6 +22897,24 @@
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"bootstrap": {
|
||||
"version": "4.6.0",
|
||||
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.0.tgz",
|
||||
"integrity": "sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw==",
|
||||
"requires": {}
|
||||
},
|
||||
"bootstrap-vue": {
|
||||
"version": "2.21.2",
|
||||
"resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.21.2.tgz",
|
||||
"integrity": "sha512-0Exe+4MZysqhZNXIKf4TzkvXaupxh9EHsoCRez0o5Dc0J7rlafayOEwql63qXv74CgZO8E4U8ugRNJko1vMvNw==",
|
||||
"requires": {
|
||||
"@nuxt/opencollective": "^0.3.2",
|
||||
"bootstrap": ">=4.5.3 <5.0.0",
|
||||
"popper.js": "^1.16.1",
|
||||
"portal-vue": "^2.1.7",
|
||||
"vue-functional-data-merge": "^3.1.0"
|
||||
}
|
||||
},
|
||||
"boxen": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
|
||||
@@ -23423,29 +23622,28 @@
|
||||
"dev": true
|
||||
},
|
||||
"cheerio": {
|
||||
"version": "1.0.0-rc.5",
|
||||
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.5.tgz",
|
||||
"integrity": "sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw==",
|
||||
"version": "1.0.0-rc.6",
|
||||
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.6.tgz",
|
||||
"integrity": "sha512-hjx1XE1M/D5pAtMgvWwE21QClmAEeGHOIDfycgmndisdNgI6PE1cGRQkMGBcsbUbmEQyWu5PJLUcAOjtQS8DWw==",
|
||||
"requires": {
|
||||
"cheerio-select-tmp": "^0.1.0",
|
||||
"dom-serializer": "~1.2.0",
|
||||
"domhandler": "^4.0.0",
|
||||
"entities": "~2.1.0",
|
||||
"htmlparser2": "^6.0.0",
|
||||
"parse5": "^6.0.0",
|
||||
"parse5-htmlparser2-tree-adapter": "^6.0.0"
|
||||
"cheerio-select": "^1.3.0",
|
||||
"dom-serializer": "^1.3.1",
|
||||
"domhandler": "^4.1.0",
|
||||
"htmlparser2": "^6.1.0",
|
||||
"parse5": "^6.0.1",
|
||||
"parse5-htmlparser2-tree-adapter": "^6.0.1"
|
||||
}
|
||||
},
|
||||
"cheerio-select-tmp": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz",
|
||||
"integrity": "sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ==",
|
||||
"cheerio-select": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.4.0.tgz",
|
||||
"integrity": "sha512-sobR3Yqz27L553Qa7cK6rtJlMDbiKPdNywtR95Sj/YgfpLfy0u6CGJuaBKe5YE/vTc23SCRKxWSdlon/w6I/Ew==",
|
||||
"requires": {
|
||||
"css-select": "^3.1.2",
|
||||
"css-what": "^4.0.0",
|
||||
"domelementtype": "^2.1.0",
|
||||
"domhandler": "^4.0.0",
|
||||
"domutils": "^2.4.4"
|
||||
"css-select": "^4.1.2",
|
||||
"css-what": "^5.0.0",
|
||||
"domelementtype": "^2.2.0",
|
||||
"domhandler": "^4.2.0",
|
||||
"domutils": "^2.6.0"
|
||||
}
|
||||
},
|
||||
"chokidar": {
|
||||
@@ -24021,6 +24219,11 @@
|
||||
"resolved": "https://registry.npm.taobao.org/connection-parse/download/connection-parse-0.0.7.tgz",
|
||||
"integrity": "sha1-GOcxiqsGppkmc3KxDFIm0locmmk= sha512-bTTG28diWg7R7/+qE5NZumwPbCiJOT8uPdZYu674brDjBWQctbaQbYlDKhalS+4i5HxIx+G8dZsnBHKzWpp01A=="
|
||||
},
|
||||
"consola": {
|
||||
"version": "2.15.3",
|
||||
"resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz",
|
||||
"integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw=="
|
||||
},
|
||||
"console-browserify": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
|
||||
@@ -24170,9 +24373,9 @@
|
||||
}
|
||||
},
|
||||
"core-js": {
|
||||
"version": "3.9.1",
|
||||
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.9.1.tgz",
|
||||
"integrity": "sha512-gSjRvzkxQc1zjM/5paAmL4idJBFzuJoo+jDjF1tStYFMV2ERfD02HhahhCGXUyHxQRG4yFKVSdO6g62eoRMcDg=="
|
||||
"version": "3.10.2",
|
||||
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.10.2.tgz",
|
||||
"integrity": "sha512-W+2oVYeNghuBr3yTzZFQ5rfmjZtYB/Ubg87R5YOmlGrIb+Uw9f7qjUbhsj+/EkXhcV7eOD3jiM4+sgraX3FZUw=="
|
||||
},
|
||||
"core-js-compat": {
|
||||
"version": "3.7.0",
|
||||
@@ -24356,14 +24559,14 @@
|
||||
}
|
||||
},
|
||||
"css-select": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz",
|
||||
"integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==",
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.2.tgz",
|
||||
"integrity": "sha512-nu5ye2Hg/4ISq4XqdLY2bEatAcLIdt3OYGFc9Tm9n7VSlFBcfRv0gBNksHRgSdUDQGtN3XrZ94ztW+NfzkFSUw==",
|
||||
"requires": {
|
||||
"boolbase": "^1.0.0",
|
||||
"css-what": "^4.0.0",
|
||||
"domhandler": "^4.0.0",
|
||||
"domutils": "^2.4.3",
|
||||
"css-what": "^5.0.0",
|
||||
"domhandler": "^4.2.0",
|
||||
"domutils": "^2.6.0",
|
||||
"nth-check": "^2.0.0"
|
||||
}
|
||||
},
|
||||
@@ -24392,9 +24595,9 @@
|
||||
}
|
||||
},
|
||||
"css-what": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz",
|
||||
"integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A=="
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.0.tgz",
|
||||
"integrity": "sha512-qxyKHQvgKwzwDWC/rGbT821eJalfupxYW2qbSJSAtdSTimsr/MlaGONoNLllaUPZWf8QnbcKM/kPVYUQuEKAFA=="
|
||||
},
|
||||
"cssesc": {
|
||||
"version": "3.0.0",
|
||||
@@ -24929,9 +25132,9 @@
|
||||
}
|
||||
},
|
||||
"dom-serializer": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz",
|
||||
"integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==",
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.1.tgz",
|
||||
"integrity": "sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q==",
|
||||
"requires": {
|
||||
"domelementtype": "^2.0.1",
|
||||
"domhandler": "^4.0.0",
|
||||
@@ -24950,26 +25153,26 @@
|
||||
"dev": true
|
||||
},
|
||||
"domelementtype": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz",
|
||||
"integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w=="
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
|
||||
"integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A=="
|
||||
},
|
||||
"domhandler": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz",
|
||||
"integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==",
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz",
|
||||
"integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==",
|
||||
"requires": {
|
||||
"domelementtype": "^2.1.0"
|
||||
"domelementtype": "^2.2.0"
|
||||
}
|
||||
},
|
||||
"domutils": {
|
||||
"version": "2.4.4",
|
||||
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.4.tgz",
|
||||
"integrity": "sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA==",
|
||||
"version": "2.6.0",
|
||||
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz",
|
||||
"integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==",
|
||||
"requires": {
|
||||
"dom-serializer": "^1.0.1",
|
||||
"domelementtype": "^2.0.1",
|
||||
"domhandler": "^4.0.0"
|
||||
"domelementtype": "^2.2.0",
|
||||
"domhandler": "^4.2.0"
|
||||
}
|
||||
},
|
||||
"dot-prop": {
|
||||
@@ -27561,13 +27764,13 @@
|
||||
}
|
||||
},
|
||||
"htmlparser2": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.0.tgz",
|
||||
"integrity": "sha512-numTQtDZMoh78zJpaNdJ9MXb2cv5G3jwUoe3dMQODubZvLoGvTE/Ofp6sHvH8OGKcN/8A47pGLi/k58xHP/Tfw==",
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
|
||||
"integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
|
||||
"requires": {
|
||||
"domelementtype": "^2.0.1",
|
||||
"domhandler": "^4.0.0",
|
||||
"domutils": "^2.4.4",
|
||||
"domutils": "^2.5.2",
|
||||
"entities": "^2.0.0"
|
||||
}
|
||||
},
|
||||
@@ -27954,11 +28157,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"install": {
|
||||
"version": "0.13.0",
|
||||
"resolved": "https://registry.npmjs.org/install/-/install-0.13.0.tgz",
|
||||
"integrity": "sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA=="
|
||||
},
|
||||
"internal-ip": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
|
||||
@@ -28399,6 +28597,12 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"jquery": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
|
||||
"integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==",
|
||||
"peer": true
|
||||
},
|
||||
"js-message": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz",
|
||||
@@ -28497,6 +28701,7 @@
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
|
||||
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"graceful-fs": "^4.1.6"
|
||||
}
|
||||
@@ -29342,6 +29547,11 @@
|
||||
"lower-case": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"node-fetch": {
|
||||
"version": "2.6.1",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
|
||||
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
|
||||
},
|
||||
"node-forge": {
|
||||
"version": "0.10.0",
|
||||
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
|
||||
@@ -30013,11 +30223,6 @@
|
||||
"integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
|
||||
"dev": true
|
||||
},
|
||||
"pasition": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/pasition/-/pasition-1.0.3.tgz",
|
||||
"integrity": "sha512-hsUNLhS7e5uWGkTtgbxoHMzCUb0PeboQelyqPmpRkAk26AkKal0Z6JfYWhjIEhZHIYzJTfr6Aom/BpBPrZXHnA=="
|
||||
},
|
||||
"path-browserify": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
|
||||
@@ -30157,6 +30362,17 @@
|
||||
"ts-pnp": "^1.1.6"
|
||||
}
|
||||
},
|
||||
"popper.js": {
|
||||
"version": "1.16.1",
|
||||
"resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
|
||||
"integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ=="
|
||||
},
|
||||
"portal-vue": {
|
||||
"version": "2.1.7",
|
||||
"resolved": "https://registry.npmjs.org/portal-vue/-/portal-vue-2.1.7.tgz",
|
||||
"integrity": "sha512-+yCno2oB3xA7irTt0EU5Ezw22L2J51uKAacE/6hMPMoO/mx3h4rXFkkBkT4GFsMDv/vEe8TNKC3ujJJ0PTwb6g==",
|
||||
"requires": {}
|
||||
},
|
||||
"portfinder": {
|
||||
"version": "1.0.26",
|
||||
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz",
|
||||
@@ -31468,11 +31684,6 @@
|
||||
"uuid": "^3.3.2"
|
||||
}
|
||||
},
|
||||
"request-frame": {
|
||||
"version": "1.5.3",
|
||||
"resolved": "https://registry.npmjs.org/request-frame/-/request-frame-1.5.3.tgz",
|
||||
"integrity": "sha1-gTwxYNmwI1g4iaqpdzibaPyqLj0="
|
||||
},
|
||||
"require-directory": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
||||
@@ -33660,7 +33871,8 @@
|
||||
"universalify": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
|
||||
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
|
||||
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
|
||||
"dev": true
|
||||
},
|
||||
"unpipe": {
|
||||
"version": "1.0.0",
|
||||
@@ -34396,6 +34608,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"vue-functional-data-merge": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/vue-functional-data-merge/-/vue-functional-data-merge-3.1.0.tgz",
|
||||
"integrity": "sha512-leT4kdJVQyeZNY1kmnS1xiUlQ9z1B/kdBFCILIjYYQDqZgLqCLa0UhjSSeRX6c3mUe6U5qYeM8LrEqkHJ1B4LA=="
|
||||
},
|
||||
"vue-hot-reload-api": {
|
||||
"version": "2.3.4",
|
||||
"resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
|
||||
@@ -35447,33 +35664,17 @@
|
||||
"dev": true
|
||||
},
|
||||
"xgplayer": {
|
||||
"version": "2.17.13",
|
||||
"resolved": "https://registry.npmjs.org/xgplayer/-/xgplayer-2.17.13.tgz",
|
||||
"integrity": "sha512-4wVBmVx1ShtItdrArNDu4z9ZiKR5KkLDVhHr/kZfhAT2gOfv4+qUxfRJ3BkyGK8UbuZ5+c4bIvrRZdze9koxww==",
|
||||
"version": "2.19.1",
|
||||
"resolved": "https://registry.npmjs.org/xgplayer/-/xgplayer-2.19.1.tgz",
|
||||
"integrity": "sha512-gfl1F56UxtiH8krKaaOxfZlMWvLGIP8hpWeSthhMVwqcg7xoiW0VKSi6qe7OYt9iSURmNwa59qoBmJtZKcnTxQ==",
|
||||
"requires": {
|
||||
"chalk": "^2.3.2",
|
||||
"commander": "^2.15.1",
|
||||
"danmu.js": "^0.3.3",
|
||||
"deepmerge": "^1.5.0",
|
||||
"downloadjs": "1.4.7",
|
||||
"draggabilly": "^2.2.0",
|
||||
"event-emitter": "^0.3.5",
|
||||
"fs-extra": "^5.0.0",
|
||||
"install": "^0.13.0",
|
||||
"pasition": "^1.0.1",
|
||||
"request-frame": "^1.5.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"fs-extra": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
|
||||
"integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
|
||||
"requires": {
|
||||
"graceful-fs": "^4.1.2",
|
||||
"jsonfile": "^4.0.0",
|
||||
"universalify": "^0.1.0"
|
||||
}
|
||||
}
|
||||
"xgplayer-subtitles": "^1.0.9"
|
||||
}
|
||||
},
|
||||
"xgplayer-flv.js": {
|
||||
@@ -35503,6 +35704,14 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"xgplayer-subtitles": {
|
||||
"version": "1.0.9",
|
||||
"resolved": "https://registry.npmjs.org/xgplayer-subtitles/-/xgplayer-subtitles-1.0.9.tgz",
|
||||
"integrity": "sha512-9or3CvDzKVudhzyljveV2/kV1Y13W+T57c+ilquA+Ysym+cY4A1v9Z8umq2KM4JNQPFGKWRvgfGjl5YpICnI3w==",
|
||||
"requires": {
|
||||
"event-emitter": "^0.3.5"
|
||||
}
|
||||
},
|
||||
"xregexp": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/xregexp/download/xregexp-2.0.0.tgz?cache=0&sync_timestamp=1604008197739&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxregexp%2Fdownload%2Fxregexp-2.0.0.tgz",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "zy",
|
||||
"version": "2.7.9",
|
||||
"version": "2.8.4",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
@@ -18,8 +18,9 @@
|
||||
"main": "background.js",
|
||||
"dependencies": {
|
||||
"axios": "^0.21.1",
|
||||
"cheerio": "^1.0.0-rc.5",
|
||||
"core-js": "^3.9.1",
|
||||
"bootstrap-vue": "^2.21.2",
|
||||
"cheerio": "^1.0.0-rc.6",
|
||||
"core-js": "^3.10.2",
|
||||
"dexie": "^3.0.3",
|
||||
"electron-localshortcut": "^3.2.1",
|
||||
"electron-proxy-agent": "^1.2.0",
|
||||
@@ -44,7 +45,7 @@
|
||||
"vue-waterfall-plugin": "^1.1.0",
|
||||
"vuedraggable": "^2.24.3",
|
||||
"vuex": "^3.6.2",
|
||||
"xgplayer": "2.17.13",
|
||||
"xgplayer": "2.19.1",
|
||||
"xgplayer-flv.js": "^2.3.0",
|
||||
"xgplayer-hls.js": "^2.4.2"
|
||||
},
|
||||
|
||||
53
src/App.vue
53
src/App.vue
@@ -22,11 +22,62 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { setting } from './lib/dexie'
|
||||
const { remote } = require('electron')
|
||||
export default {
|
||||
name: 'App',
|
||||
data () {
|
||||
return {
|
||||
appTheme: 'theme-light'
|
||||
appTheme: 'theme-light',
|
||||
winSizePosition: {
|
||||
x: 0,
|
||||
y: 0,
|
||||
width: 0,
|
||||
height: 0
|
||||
}
|
||||
}
|
||||
},
|
||||
created () {
|
||||
// 窗口创建口,检查是否有窗口大小位置的记录,如果有的话,更新窗口位置及大小
|
||||
setting.find().then(res => {
|
||||
if (res.restoreWindowPositionAndSize) {
|
||||
var win = remote.getCurrentWindow()
|
||||
win.setBounds({
|
||||
x: res.windowPositionAndSize.x,
|
||||
y: res.windowPositionAndSize.y,
|
||||
width: res.windowPositionAndSize.width,
|
||||
height: res.windowPositionAndSize.height
|
||||
})
|
||||
this.winSizePosition = {
|
||||
x: win.getPosition()[0],
|
||||
y: win.getPosition()[1],
|
||||
width: win.getSize()[0],
|
||||
height: win.getSize()[1]
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
updated () {
|
||||
// 本来想hook up到beforedestroy, 但不工作
|
||||
// 每当窗口更新时,检查窗口大小及位置,记录到setting数据库中
|
||||
if (this.setting.restoreWindowPositionAndSize) {
|
||||
const win = remote.getCurrentWindow()
|
||||
var newWinSizePosition = {
|
||||
x: win.getPosition()[0],
|
||||
y: win.getPosition()[1],
|
||||
width: win.getSize()[0],
|
||||
height: win.getSize()[1]
|
||||
}
|
||||
if (newWinSizePosition.x !== this.winSizePosition.x ||
|
||||
newWinSizePosition.y !== this.winSizePosition.y ||
|
||||
newWinSizePosition.width !== this.winSizePosition.width ||
|
||||
newWinSizePosition.height !== this.winSizePosition.height) {
|
||||
this.winSizePosition = newWinSizePosition
|
||||
setting.find().then(res => {
|
||||
res.windowPositionAndSize = newWinSizePosition
|
||||
setting.update(res)
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
||||
@@ -441,3 +441,134 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// detail
|
||||
.detail{
|
||||
.detail-content{
|
||||
.detail-body{
|
||||
.m3u8{
|
||||
.show-picture{
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
.card{
|
||||
border-radius: 6px;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
transition: 0.2s;
|
||||
&:hover {
|
||||
width: 102%;
|
||||
height: 102%
|
||||
}
|
||||
.img{
|
||||
position: relative;
|
||||
min-height: 40px;
|
||||
img{
|
||||
width: 100%;
|
||||
height: auto;
|
||||
cursor: pointer;
|
||||
}
|
||||
.rate{
|
||||
position: absolute;
|
||||
top: 3%;
|
||||
right: -40%;
|
||||
width: 100%;
|
||||
background-color: #111111aa;
|
||||
color:#2f90b9;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
font-size: 14px;
|
||||
font-weight: bolder;
|
||||
text-align: center;
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
.site{
|
||||
position: absolute;
|
||||
top: 0%;
|
||||
left: 0%;
|
||||
width: 100%;
|
||||
background-color: #111111aa;
|
||||
color:#2f90b9;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
font-size: 14px;
|
||||
font-weight: bolder;
|
||||
text-align: center;
|
||||
}
|
||||
.progress{
|
||||
position: absolute;
|
||||
bottom: 10%;
|
||||
left: 0%;
|
||||
width: 40%;
|
||||
background-color: #111111aa;
|
||||
color: #f8df70;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
font-size: 14px;
|
||||
font-weight: bolder;
|
||||
text-align: left;
|
||||
}
|
||||
.update{
|
||||
position: absolute;
|
||||
top: 5%;
|
||||
left: -40%;
|
||||
width: 100%;
|
||||
background-color: #68b88e;
|
||||
color: #cdcdcd;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
transform: rotate(-45deg);
|
||||
}
|
||||
.operate{
|
||||
display: none;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
background-color: #111111aa;
|
||||
width: 100%;
|
||||
font-size: 13px;
|
||||
.operate-wrap{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
.o-play, .o-star, .o-share{
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
width: 80px;
|
||||
height: 36px;
|
||||
text-align: center;
|
||||
line-height: 36px;
|
||||
color: #cdcdcd;
|
||||
&:hover{
|
||||
background-color: #111;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.name{
|
||||
font-size: 16px;
|
||||
padding: 10px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.info{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-size: 12px;
|
||||
padding: 10px;
|
||||
}
|
||||
&:hover{
|
||||
.operate{
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -138,6 +138,17 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.show-picture{
|
||||
color: var(--d-fc-1);
|
||||
.card{
|
||||
background-color: var(--d-bgc-3);
|
||||
box-shadow: var(--d-bsc);
|
||||
transition: all 0.3s cubic-bezier(.25,.8,.25,1);
|
||||
&:hover{
|
||||
box-shadow: var(--d-bsc-hover);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -138,6 +138,17 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.show-picture{
|
||||
color: var(--g-fc-1);
|
||||
.card{
|
||||
background-color: var(--g-bgc-3);
|
||||
box-shadow: var(--g-bsc);
|
||||
transition: all 0.3s cubic-bezier(.25,.8,.25,1);
|
||||
&:hover{
|
||||
box-shadow: var(--g-bsc-hover);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
.theme-light{
|
||||
background-color: var(--l-bgc-1);
|
||||
// background-color: var(--l-bgc-1);
|
||||
background: rgba(0, 0, 0, 0);
|
||||
.zy-select{
|
||||
color: var(--l-fc-1);
|
||||
background-color: var(--l-bgc-1);
|
||||
@@ -138,6 +139,17 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.show-picture{
|
||||
color: var(--l-fc-1);
|
||||
.card{
|
||||
background-color: var(--l-bgc-3);
|
||||
box-shadow: var(--l-bsc);
|
||||
transition: all 0.3s cubic-bezier(.25,.8,.25,1);
|
||||
&:hover{
|
||||
box-shadow: var(--l-bsc-hover);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -138,6 +138,17 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.show-picture{
|
||||
color: var(--p-fc-1);
|
||||
.card{
|
||||
background-color: var(--p-bgc-3);
|
||||
box-shadow: var(--p-bsc);
|
||||
transition: all 0.3s cubic-bezier(.25,.8,.25,1);
|
||||
&:hover{
|
||||
box-shadow: var(--p-bsc-hover);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
</svg>
|
||||
</span>
|
||||
</div>
|
||||
<div class="detail-body zy-scroll" v-show="!loading">
|
||||
<div class="detail-body zy-scroll listpage" v-show="!loading">
|
||||
<div class="info">
|
||||
<div class="info-left">
|
||||
<img :src="info.pic" alt="">
|
||||
@@ -37,9 +37,9 @@
|
||||
</div>
|
||||
<div class="operate">
|
||||
<span @click="playEvent(selectedEpisode)">播放</span>
|
||||
<span @click="starEvent">收藏</span>
|
||||
<span @click="starEvent(info)">收藏</span>
|
||||
<span @click="downloadEvent">下载</span>
|
||||
<span @click="shareEvent">分享</span>
|
||||
<span @click="shareEvent(info,selectedEpisode)">分享</span>
|
||||
<span @click="doubanLinkEvent">豆瓣</span>
|
||||
<span @click="togglePlayOnlineEvent">
|
||||
<input type="checkbox" v-model="playOnline"> 播放在线高清视频
|
||||
@@ -64,6 +64,47 @@
|
||||
<span v-bind:class="{ selected: j === selectedEpisode }" v-for="(i, j) in videoList" :key="j" @click="playEvent(j)" @mouseenter="() => { selectedEpisode = j }">{{ i | ftName(j) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="m3u8">
|
||||
<div class="show-picture" v-show="info.recommendations && info.recommendations.length > 0">
|
||||
<span>喜欢这部电影的人也喜欢 · · · · · ·</span>
|
||||
<Waterfall :list="info.recommendations" :gutter="20" :width="240"
|
||||
:breakpoints="{
|
||||
1200: { //当屏幕宽度小于等于1200
|
||||
rowPerView: 4,
|
||||
},
|
||||
800: { //当屏幕宽度小于等于800
|
||||
rowPerView: 3,
|
||||
},
|
||||
500: { //当屏幕宽度小于等于500
|
||||
rowPerView: 2,
|
||||
}
|
||||
}"
|
||||
animationEffect="fadeIn"
|
||||
backgroundColor="rgba(0, 0, 0, 0)">
|
||||
<template slot="item" slot-scope="props">
|
||||
<div class="card">
|
||||
<div class="img">
|
||||
<img style="width: 100%" :src="props.data.pic" alt="" @click="detailEvent(props.data)">
|
||||
<div class="operate">
|
||||
<div class="operate-wrap">
|
||||
<span class="o-play" @click="playRecommendationEvent(props.data)">播放</span>
|
||||
<span class="o-star" @click="starEvent(props.data)">收藏</span>
|
||||
<span class="o-share" @click="shareEvent(props.data, 0)">分享</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="name">{{props.data.name}}</div>
|
||||
<div class="info">
|
||||
<span>{{props.data.area}}</span>
|
||||
<span>{{props.data.year}}</span>
|
||||
<span>{{props.data.note}}</span>
|
||||
<span>{{props.data.type}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</Waterfall>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="detail-mask zy-loading" v-show="loading">
|
||||
<div class="loader"></div>
|
||||
@@ -73,6 +114,7 @@
|
||||
</template>
|
||||
<script>
|
||||
import { mapMutations } from 'vuex'
|
||||
import Waterfall from 'vue-waterfall-plugin'
|
||||
import zy from '../lib/site/tools'
|
||||
import onlineVideo from '../lib/site/onlineVideo'
|
||||
import { star, history } from '../lib/dexie'
|
||||
@@ -85,6 +127,8 @@ export default {
|
||||
videoFlag: '',
|
||||
videoList: [],
|
||||
videoFullList: [],
|
||||
key: '',
|
||||
site: {},
|
||||
info: {},
|
||||
playOnline: false,
|
||||
selectedEpisode: 0, // 选定集数
|
||||
@@ -144,8 +188,22 @@ export default {
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
Waterfall
|
||||
},
|
||||
methods: {
|
||||
...mapMutations(['SET_VIEW', 'SET_VIDEO', 'SET_DETAIL', 'SET_SHARE', 'SET_DetailCache']),
|
||||
async playRecommendationEvent (e) {
|
||||
const db = await history.find({ site: this.detail.key, ids: e.id })
|
||||
if (db) {
|
||||
this.video = { key: db.site, info: { id: db.ids, name: db.name, index: db.index, site: this.detail.site } }
|
||||
} else {
|
||||
this.video = { key: this.detail.key, info: { id: e.id, name: e.name, index: 0, site: this.detail.site } }
|
||||
}
|
||||
this.video.detail = e
|
||||
this.view = 'Play'
|
||||
this.detail.show = false
|
||||
},
|
||||
addClass (flag) {
|
||||
if (flag === this.videoFlag) {
|
||||
return 'selectedBox'
|
||||
@@ -200,15 +258,15 @@ export default {
|
||||
onlineVideo.playVideoOnline(this.selectedOnlineSite, this.detail.info.name, n)
|
||||
}
|
||||
},
|
||||
async starEvent () {
|
||||
const db = await star.find({ key: this.detail.key, ids: this.info.id })
|
||||
async starEvent (info) {
|
||||
const db = await star.find({ key: this.detail.key, ids: info.id })
|
||||
const doc = {
|
||||
key: this.detail.key,
|
||||
ids: this.info.id,
|
||||
ids: info.id,
|
||||
site: this.detail.site,
|
||||
name: this.info.name,
|
||||
detail: this.info,
|
||||
rate: this.info.rate
|
||||
name: info.name,
|
||||
detail: info,
|
||||
rate: info.rate
|
||||
}
|
||||
if (db) {
|
||||
star.update(db.id, doc)
|
||||
@@ -219,6 +277,10 @@ export default {
|
||||
})
|
||||
}
|
||||
},
|
||||
detailEvent (info) {
|
||||
this.detail.info = info
|
||||
this.getDetailInfo()
|
||||
},
|
||||
togglePlayOnlineEvent () {
|
||||
this.playOnline = !this.playOnline
|
||||
},
|
||||
@@ -257,12 +319,12 @@ export default {
|
||||
this.$message.error(err.info)
|
||||
})
|
||||
},
|
||||
shareEvent () {
|
||||
shareEvent (info, selectedEpisode) {
|
||||
this.share = {
|
||||
show: true,
|
||||
key: this.detail.key,
|
||||
info: this.info,
|
||||
index: this.selectedEpisode
|
||||
info: info,
|
||||
index: selectedEpisode
|
||||
}
|
||||
},
|
||||
doubanLinkEvent () {
|
||||
@@ -277,6 +339,17 @@ export default {
|
||||
const name = this.info.name.trim()
|
||||
const year = this.info.year
|
||||
this.info.rate = await zy.doubanRate(name, year)
|
||||
const recommendations = await zy.doubanRecommendations(name, year)
|
||||
if (recommendations) {
|
||||
this.info.recommendations = []
|
||||
recommendations.forEach(element => {
|
||||
zy.searchFirstDetail(this.detail.key, element).then(detailRes => {
|
||||
if (detailRes) {
|
||||
this.info.recommendations.push(detailRes)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
async getDetailInfo () {
|
||||
const id = this.detail.info.ids || this.detail.info.id
|
||||
@@ -293,13 +366,14 @@ export default {
|
||||
if (res) {
|
||||
this.info = res
|
||||
this.$set(this.info, 'rate', this.DetailCache[cacheKey].rate || '')
|
||||
this.$set(this.info, 'recommendations', this.DetailCache[cacheKey].recommendations || [])
|
||||
this.videoFlag = this.videoFlag || res.fullList[0].flag
|
||||
this.videoList = res.fullList[0].list
|
||||
this.videoFullList = res.fullList
|
||||
this.loading = false
|
||||
if (!this.info.rate) {
|
||||
await this.getDoubanRate()
|
||||
this.DetailCache[cacheKey].rate = this.info.rate
|
||||
this.DetailCache[cacheKey] = this.info
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="listpage" id="sites">
|
||||
<div class="listpage-header" v-show="!enableBatchEdit">
|
||||
<el-switch v-model="enableBatchEdit" active-text="批处理分组">></el-switch>
|
||||
<el-checkbox v-model="setting.excludeR18Films" @change="excludeR18FilmsChangeEvent">屏蔽福利片</el-checkbox>
|
||||
<el-button @click="openFilterKeywordsDiag" icon="el-icon-key">关键词过滤</el-button>
|
||||
<el-button @click="addSite" icon="el-icon-document-add">新增</el-button>
|
||||
<el-button @click="exportSites" icon="el-icon-upload2" title="导出全部,自动添加扩展名">导出</el-button>
|
||||
<el-button @click="importSites" icon="el-icon-download" title="支持同时导入多个文件">导入</el-button>
|
||||
@@ -83,7 +83,7 @@
|
||||
</div>
|
||||
<!-- 编辑页面 -->
|
||||
<div>
|
||||
<el-dialog :visible.sync="dialogVisible" v-if='dialogVisible' :title="dialogType==='edit'?'编辑源':'新增源'" :append-to-body="true" @close="closeDialog">
|
||||
<el-dialog :visible.sync="editSiteDialogVisible" v-if='editSiteDialogVisible' :title="dialogType==='edit'?'编辑源':'新增源'" :append-to-body="true" @close="closeDialog">
|
||||
<el-form :model="siteInfo" ref='siteInfo' label-width="75px" label-position="left" :rules="rules">
|
||||
<el-form-item label="源站名" prop='name'>
|
||||
<el-input v-model="siteInfo.name" placeholder="请输入源站名" />
|
||||
@@ -112,6 +112,27 @@
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<!-- 设置过滤关键词页面 -->
|
||||
<div>
|
||||
<el-dialog :visible.sync="filterKeywordsDialogVisible" v-if='filterKeywordsDialogVisible' :title="'分类过滤'" :append-to-body="true" @close="closeDialog">
|
||||
<el-form>
|
||||
<el-switch v-model="excludeRootClasses" active-text="开启主分类过滤">></el-switch>
|
||||
<el-form-item>
|
||||
<el-input v-model="rootClassFilterKeywords" :autosize="{ minRows: 3, maxRows: 6}" type="textarea" placeholder="请输入过滤关键词" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-form>
|
||||
<el-switch v-model="excludeR18Films" active-text="开启福利分类过滤">></el-switch>
|
||||
<el-form-item>
|
||||
<el-input v-model="r18ClassFilterKeywords" :autosize="{ minRows: 3, maxRows: 6}" type="textarea" placeholder="请输入过滤关键词" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="closeDialog">取消</el-button>
|
||||
<el-button type="primary" @click="saveFilterKeywords">保存</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
@@ -129,7 +150,8 @@ export default {
|
||||
show: false,
|
||||
sites: [],
|
||||
dialogType: 'new',
|
||||
dialogVisible: false,
|
||||
editSiteDialogVisible: false,
|
||||
filterKeywordsDialogVisible: false,
|
||||
siteInfo: {
|
||||
key: '',
|
||||
name: '',
|
||||
@@ -139,6 +161,10 @@ export default {
|
||||
group: '',
|
||||
isActive: true
|
||||
},
|
||||
excludeRootClasses: true,
|
||||
excludeR18Films: true,
|
||||
rootClassFilterKeywords: [],
|
||||
r18ClassFilterKeywords: [],
|
||||
siteGroup: [],
|
||||
rules: {
|
||||
name: [
|
||||
@@ -204,12 +230,6 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
...mapMutations(['SET_SETTING']),
|
||||
excludeR18FilmsChangeEvent () {
|
||||
setting.find().then(res => {
|
||||
res.excludeR18Films = this.setting.excludeR18Films
|
||||
setting.update(res)
|
||||
})
|
||||
},
|
||||
selectionCellClick (selection, row) {
|
||||
if (this.shiftDown && this.selectionBegin !== '' && selection.includes(row)) {
|
||||
this.selectionEnd = row.id
|
||||
@@ -261,6 +281,29 @@ export default {
|
||||
}
|
||||
this.siteGroup = arr
|
||||
},
|
||||
openFilterKeywordsDiag () {
|
||||
this.excludeRootClasses = this.setting.excludeRootClasses
|
||||
this.excludeR18Films = this.setting.excludeR18Films
|
||||
this.rootClassFilterKeywords = this.setting.rootClassFilter?.join()
|
||||
this.r18ClassFilterKeywords = this.setting.r18ClassFilter?.join()
|
||||
this.filterKeywordsDialogVisible = true
|
||||
},
|
||||
saveFilterKeywords () {
|
||||
// 移除空格,然后按逗号分开
|
||||
this.setting.rootClassFilter = this.rootClassFilterKeywords?.replace(/\s/g, '').split(',')
|
||||
this.setting.r18ClassFilter = this.r18ClassFilterKeywords?.replace(/\s/g, '').split(',')
|
||||
this.setting.classFilter = []
|
||||
this.setting.excludeRootClasses = this.excludeRootClasses
|
||||
if (this.excludeRootClasses) {
|
||||
this.setting.classFilter = this.setting.classFilter.concat(this.setting.rootClassFilter)
|
||||
}
|
||||
this.setting.excludeR18Films = this.excludeR18Films
|
||||
if (this.excludeR18Films) {
|
||||
this.setting.classFilter = this.setting.classFilter.concat(this.setting.r18ClassFilter)
|
||||
}
|
||||
setting.update(this.setting)
|
||||
this.filterKeywordsDialogVisible = false
|
||||
},
|
||||
addSite () {
|
||||
if (this.checkAllSitesLoading) {
|
||||
this.$message.info('正在检测, 请勿操作.')
|
||||
@@ -268,7 +311,7 @@ export default {
|
||||
}
|
||||
this.getSitesGroup()
|
||||
this.dialogType = 'new'
|
||||
this.dialogVisible = true
|
||||
this.editSiteDialogVisible = true
|
||||
this.siteInfo = {
|
||||
key: '',
|
||||
name: '',
|
||||
@@ -286,12 +329,13 @@ export default {
|
||||
}
|
||||
this.getSitesGroup()
|
||||
this.dialogType = 'edit'
|
||||
this.dialogVisible = true
|
||||
this.editSiteDialogVisible = true
|
||||
this.siteInfo = siteInfo
|
||||
this.editOldkey = siteInfo.key
|
||||
},
|
||||
closeDialog () {
|
||||
this.dialogVisible = false
|
||||
this.editSiteDialogVisible = false
|
||||
this.filterKeywordsDialogVisible = false
|
||||
this.getSites()
|
||||
},
|
||||
removeEvent (e) {
|
||||
@@ -348,7 +392,7 @@ export default {
|
||||
group: ''
|
||||
}
|
||||
this.dialogType === 'edit' ? this.$message.success('修改成功!') : this.$message.success('新增源成功!')
|
||||
this.dialogVisible = false
|
||||
this.editSiteDialogVisible = false
|
||||
this.getSites()
|
||||
})
|
||||
this.editOldkey = ''
|
||||
|
||||
@@ -281,7 +281,7 @@
|
||||
animationEffect="fadeIn"
|
||||
backgroundColor="rgba(0, 0, 0, 0)">
|
||||
<template slot="item" slot-scope="props">
|
||||
<div class="card" v-show="!setting.excludeR18Films || !containsR18Keywords(props.data.type)">
|
||||
<div class="card" v-show="!setting.excludeR18Films || !containsClassFilterKeyword(props.data.type)">
|
||||
<div class="img">
|
||||
<div class="site">
|
||||
<span>{{props.data.site.name}}</span>
|
||||
@@ -344,9 +344,8 @@ export default {
|
||||
filteredSearchContents: [],
|
||||
currentColumn: '',
|
||||
searchGroup: '',
|
||||
searchGroups: [],
|
||||
// 福利片关键词
|
||||
r18KeyWords: ['伦理', '论理', '倫理', '福利', '激情', '理论', '写真', '情色', '美女', '街拍', '赤足', '性感', '里番', 'VIP'],
|
||||
searchGroups: ['站内', '组内', '全站'],
|
||||
classFilterKeywords: [],
|
||||
filteredList: [],
|
||||
areas: [],
|
||||
searchRunning: false,
|
||||
@@ -414,12 +413,13 @@ export default {
|
||||
}
|
||||
},
|
||||
filterSettings () {
|
||||
return this.$store.getters.getSetting.excludeR18Films // 需要监听的数据
|
||||
return this.$store.getters.getSetting.classFilter // 需要监听的数据
|
||||
},
|
||||
searchSites () {
|
||||
if (this.searchGroup === '站内') return [this.site]
|
||||
if (this.searchGroup === '组内') return this.sites.filter(site => site.group === this.site.group)
|
||||
if (this.searchGroup === '全站') return this.sites
|
||||
return this.sites.filter(site => site.group === this.searchGroup)
|
||||
return this.sites.filter(site => site.isActive)
|
||||
}
|
||||
},
|
||||
filters: {
|
||||
@@ -444,7 +444,7 @@ export default {
|
||||
}
|
||||
},
|
||||
filterSettings () {
|
||||
this.siteClick(this.site.name)
|
||||
this.refreshClass()
|
||||
},
|
||||
list: {
|
||||
handler (list) {
|
||||
@@ -456,9 +456,12 @@ export default {
|
||||
siteSearchCount () {
|
||||
if (this.siteSearchCount === this.searchSites.length) this.searchRunning = false
|
||||
},
|
||||
site () {
|
||||
this.siteClick(this.site.name)
|
||||
},
|
||||
searchContents: {
|
||||
handler (list) {
|
||||
list = list.filter(res => !this.setting.excludeR18Films || !this.containsR18Keywords(res.type))
|
||||
list = list.filter(res => !this.setting.excludeR18Films || !this.containsClassFilterKeyword(res.type))
|
||||
this.areas = [...new Set(list.map(ele => ele.area))].filter(x => x)
|
||||
this.searchClassList = [...new Set(list.map(ele => ele.type))].filter(x => x)
|
||||
this.refreshFilteredList()
|
||||
@@ -500,7 +503,7 @@ export default {
|
||||
let filteredData = this.showFind ? this.searchContents : this.list
|
||||
if (this.showFind) filteredData = filteredData.filter(x => (this.selectedSearchClassNames.length === 0) || this.selectedSearchClassNames.includes(x.type))
|
||||
filteredData = filteredData.filter(x => (this.selectedAreas.length === 0) || this.selectedAreas.includes(x.area))
|
||||
filteredData = filteredData.filter(res => !this.setting.excludeR18Films || !this.containsR18Keywords(res.type))
|
||||
filteredData = filteredData.filter(res => !this.setting.excludeR18Films || !this.containsClassFilterKeyword(res.type))
|
||||
filteredData = filteredData.filter(res => res.year >= this.selectedYears.start)
|
||||
filteredData = filteredData.filter(res => res.year <= this.selectedYears.end)
|
||||
if (!this.showFind) this.selectedClassName = this.type.name + ' ' + filteredData.length + '/' + this.recordcount
|
||||
@@ -592,6 +595,16 @@ export default {
|
||||
})
|
||||
}
|
||||
},
|
||||
refreshClass () {
|
||||
this.getClass().then(res => {
|
||||
this.classList = res
|
||||
// cache classList data
|
||||
FILM_DATA_CACHE[this.site.key] = {
|
||||
classList: this.classList
|
||||
}
|
||||
this.classClick(this.site.name)
|
||||
})
|
||||
},
|
||||
classClick (className) {
|
||||
this.list = []
|
||||
this.type = this.classList.find(x => x.name === className)
|
||||
@@ -619,20 +632,11 @@ export default {
|
||||
getClass () {
|
||||
return new Promise((resolve, reject) => {
|
||||
const key = this.site.key
|
||||
// 屏蔽主分类
|
||||
const classToHide = ['电影', '电影片', '电视剧', '连续剧', '综艺', '动漫']
|
||||
zy.class(key).then(res => {
|
||||
const allClass = [{ name: '最新', tid: 0 }]
|
||||
res.class.forEach(element => {
|
||||
if (!this.setting.excludeRootClasses || !classToHide.includes(element.name)) {
|
||||
if (this.setting.excludeR18Films) {
|
||||
const containKeyWord = this.containsR18Keywords(element.name)
|
||||
if (!containKeyWord) {
|
||||
allClass.push(element)
|
||||
}
|
||||
} else {
|
||||
allClass.push(element)
|
||||
}
|
||||
if (!this.containsClassFilterKeyword(element.name)) {
|
||||
allClass.push(element)
|
||||
}
|
||||
})
|
||||
resolve(allClass)
|
||||
@@ -641,12 +645,17 @@ export default {
|
||||
})
|
||||
})
|
||||
},
|
||||
containsR18Keywords (name) {
|
||||
const containKeyWord = false
|
||||
if (!name) {
|
||||
return containKeyWord
|
||||
containsClassFilterKeyword (name) {
|
||||
let ret = false
|
||||
// 主分类过滤, 检测关键词是否包含分类名
|
||||
if (this.setting.excludeRootClasses) {
|
||||
ret = this.setting.rootClassFilter?.some(v => v.includes(name))
|
||||
}
|
||||
return this.r18KeyWords.some(v => name.includes(v))
|
||||
// 福利过滤,检测分类名是否包含关键词
|
||||
if (this.setting.excludeR18Films && !ret) {
|
||||
ret = this.setting.r18ClassFilter?.some(v => name?.includes(v))
|
||||
}
|
||||
return ret
|
||||
},
|
||||
toFlipPagecount () {
|
||||
// 似乎需要解析的网站的视频排序和其他m3u8采集站的顺序正好相反
|
||||
@@ -874,10 +883,6 @@ export default {
|
||||
this.selectedSiteName = this.sites[0].name
|
||||
}
|
||||
}
|
||||
this.searchGroups = [...new Set(this.sites.map(site => site.group))]
|
||||
if (this.searchGroups.length === 1) this.searchGroups = []
|
||||
this.searchGroups.unshift('站内')
|
||||
this.searchGroups.push('全站')
|
||||
this.searchGroup = this.setting.searchGroup
|
||||
if (this.searchGroup === undefined) setting.find().then(res => { this.searchGroup = res.searchGroup })
|
||||
})
|
||||
|
||||
@@ -4,10 +4,12 @@
|
||||
<el-button @click.stop="exportHistory" icon="el-icon-upload2" title="导出全部,自动添加扩展名">导出</el-button>
|
||||
<el-button @click.stop="importHistory" icon="el-icon-download" title="支持同时导入多个文件">导入</el-button>
|
||||
<el-button @click.stop="removeSelectedItems" icon="el-icon-delete-solid">{{ multipleSelection.length === 0 ? "清空" : "删除所选" }}</el-button>
|
||||
<el-button @click.stop="updateAllEvent" icon="el-icon-refresh">检查更新</el-button>
|
||||
<b-button-group>
|
||||
<el-switch v-model="onlyShowItemsHasUpdate" active-text="有更新" inactive-text="全部" @change="refreshFilteredList"></el-switch>
|
||||
<el-button @click.stop="updateAllEvent" icon="el-icon-refresh">检查更新</el-button>
|
||||
</b-button-group>
|
||||
</div>
|
||||
<div class="toolbar" v-show="showToolbar">
|
||||
<el-switch v-model="onlyShowItemsHasUpdate" active-text="有更新" inactive-text="全部" @change="refreshFilteredList"></el-switch>
|
||||
<el-select v-model="selectedAreas" size="small" multiple placeholder="地区" popper-class="popper" :popper-append-to-body="false" @remove-tag="refreshFilteredList" @change="refreshFilteredList">
|
||||
<el-option
|
||||
v-for="item in areas"
|
||||
@@ -79,10 +81,10 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="list.some(e => e.time)"
|
||||
width="150"
|
||||
width="200"
|
||||
label="时间进度">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.time && scope.row.duration">{{fmtMSS(scope.row.time.toFixed(0))}}/{{fmtMSS(scope.row.duration.toFixed(0))}}</span>
|
||||
<span v-if="scope.row.time && scope.row.duration">{{fmtMSS(scope.row.time.toFixed(0))}}/{{fmtMSS(scope.row.duration.toFixed(0))}} ({{progress(scope.row)}}%)</span>
|
||||
<span v-if="scope.row.onlinePlay">在线解析</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@@ -134,7 +136,7 @@
|
||||
<div class="name" @click="detailEvent(props.data)">{{props.data.name}}</div>
|
||||
<div class="info">
|
||||
<span v-if="props.data.time && props.data.duration">
|
||||
{{fmtMSS(props.data.time.toFixed(0))}}/{{fmtMSS(props.data.duration.toFixed(0))}}
|
||||
{{fmtMSS(props.data.time.toFixed(0))}}/{{fmtMSS(props.data.duration.toFixed(0))}} ({{progress(props.data)}}%)
|
||||
</span>
|
||||
<span v-if="props.data.onlinePlay">在线解析</span>
|
||||
<span v-if="props.data.detail && props.data.detail.fullList[0].list !== undefined && props.data.detail.fullList[0].list.length > 1">
|
||||
@@ -169,6 +171,7 @@ export default {
|
||||
multipleSelection: [],
|
||||
areas: [],
|
||||
types: [],
|
||||
filteredList: [],
|
||||
// Update
|
||||
numNoUpdate: 0,
|
||||
// Toolbar
|
||||
@@ -176,7 +179,7 @@ export default {
|
||||
selectedAreas: [],
|
||||
selectedTypes: [],
|
||||
sortKeyword: '',
|
||||
sortKeywords: ['按片名', '按上映年份', '按更新时间'],
|
||||
sortKeywords: ['按片名', '按上映年份', '按更新时间', '按完成度'],
|
||||
selectedYears: { start: 0, end: new Date().getFullYear() },
|
||||
onlyShowItemsHasUpdate: false
|
||||
}
|
||||
@@ -292,7 +295,6 @@ export default {
|
||||
toggleViewMode () {
|
||||
this.setting.historyViewMode = this.setting.historyViewMode === 'picture' ? 'table' : 'picture'
|
||||
if (this.setting.historyViewMode === 'table') {
|
||||
setTimeout(() => { this.rowDrop() }, 100)
|
||||
this.showShiftPrompt()
|
||||
} else {
|
||||
setTimeout(() => { if (this.$refs.historyWaterfall) this.$refs.historyWaterfall.refresh() }, 700)
|
||||
@@ -339,6 +341,9 @@ export default {
|
||||
return new Date(b.detail.last) - new Date(a.detail.last)
|
||||
})
|
||||
break
|
||||
case '按完成度':
|
||||
filteredData.sort(this.sortByProgress)
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
@@ -348,6 +353,16 @@ export default {
|
||||
this.filteredList = this.filteredList.filter(x => x.hasUpdate)
|
||||
}
|
||||
},
|
||||
progress (e) {
|
||||
return e.duration > 0 ? ((e.time / e.duration) * 100).toFixed(0) : 0
|
||||
},
|
||||
sortByProgress (a, b) {
|
||||
if (this.progress(a) < this.progress(b)) {
|
||||
return -1
|
||||
} else {
|
||||
return 1
|
||||
}
|
||||
},
|
||||
fmtMSS (s) {
|
||||
return (s - (s %= 60)) / 60 + (s > 9 ? ':' : ':0') + s
|
||||
},
|
||||
|
||||
@@ -342,7 +342,7 @@ export default {
|
||||
videoTitle: true,
|
||||
airplay: true,
|
||||
closeVideoTouch: true,
|
||||
ignores: ['cssFullscreen', 'replay', 'error'], // 为了切换播放器类型时避免显示错误刷新,暂时忽略错误
|
||||
ignores: ['replay', 'error'], // 为了切换播放器类型时避免显示错误刷新,暂时忽略错误
|
||||
preloadTime: 300
|
||||
},
|
||||
state: {
|
||||
@@ -445,6 +445,9 @@ export default {
|
||||
set (val) {
|
||||
this.SET_DetailCache(val)
|
||||
}
|
||||
},
|
||||
VideoEssentialInfo () {
|
||||
return this.video.key + '@' + this.video.info.id + '@' + this.video.info.index
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
@@ -458,12 +461,11 @@ export default {
|
||||
}
|
||||
}
|
||||
},
|
||||
video: {
|
||||
VideoEssentialInfo: {
|
||||
handler () {
|
||||
if (this.changingIPTV) return
|
||||
this.getUrls()
|
||||
},
|
||||
deep: true
|
||||
}
|
||||
},
|
||||
setting: {
|
||||
handler () {
|
||||
@@ -655,9 +657,9 @@ export default {
|
||||
const currentSite = await sites.find({ key: this.video.key })
|
||||
this.$message.info('即将调用解析接口播放,请等待...')
|
||||
if (currentSite.jiexiUrl) {
|
||||
this.onlineUrl = /^\s*(default|默认)\s*$/i.test(currentSite.jiexiUrl) ? this.setting.defaultParseURL + url : currentSite.jiexiUrl + url
|
||||
this.onlineUrl = currentSite.jiexiUrl + url
|
||||
} else {
|
||||
this.onlineUrl = url
|
||||
this.onlineUrl = this.setting.defaultParseURL + url
|
||||
}
|
||||
this.videoPlaying('online')
|
||||
return
|
||||
@@ -1568,7 +1570,7 @@ export default {
|
||||
},
|
||||
minMaxEvent () {
|
||||
win.on('minimize', () => {
|
||||
if (this.xg && this.xg.hasStart) {
|
||||
if (this.xg && this.xg.hasStart && this.setting.pauseWhenMinimize) {
|
||||
this.xg.pause()
|
||||
}
|
||||
})
|
||||
@@ -1664,6 +1666,9 @@ export default {
|
||||
cursor: pointer;
|
||||
margin-left: 3px;
|
||||
}
|
||||
.xgplayer-skin-default .xg-btn-playPrev {
|
||||
margin-left: 50px;
|
||||
}
|
||||
.xgplayer-skin-default .xg-btn-quitMiniMode {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,18 @@
|
||||
<template>
|
||||
<div class="listpage" id="recommendations">
|
||||
<div class="listpage-header" id="recommendations-header">
|
||||
<el-select v-model="selectedRecommendationType" size="small" slot="prepend"
|
||||
:popper-append-to-body="false"
|
||||
popper-class="popper"
|
||||
default-first-option placeholder="请选择"
|
||||
@change="changeRecommendationTypeEvent">
|
||||
<el-option
|
||||
v-for="item in recommendationTypes"
|
||||
:key="item"
|
||||
:label="item"
|
||||
:value="item">
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-button type="text">视频数:{{ recommendations.length }}</el-button>
|
||||
<el-button :loading="loading" @click.stop="updateEvent" icon="el-icon-refresh">更新推荐</el-button>
|
||||
</div>
|
||||
@@ -86,7 +98,6 @@
|
||||
<el-button @click.stop="playEvent(scope.row)" type="text">播放</el-button>
|
||||
<el-button @click.stop="shareEvent(scope.row)" type="text">分享</el-button>
|
||||
<el-button @click.stop="downloadEvent(scope.row)" type="text">下载</el-button>
|
||||
<el-button @click.stop="deleteEvent(scope.row)" type="text">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -118,7 +129,6 @@
|
||||
<span class="o-play" @click="playEvent(props.data)">播放</span>
|
||||
<span class="o-share" @click="shareEvent(props.data)">分享</span>
|
||||
<span class="o-star" @click="downloadEvent(props.data)">下载</span>
|
||||
<span class="o-star" @click="deleteEvent(props.data)">删除</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -138,10 +148,12 @@
|
||||
</template>
|
||||
<script>
|
||||
import { mapMutations } from 'vuex'
|
||||
import { history, recommendation, setting } from '../lib/dexie'
|
||||
import { history, recommendation, setting, sites, cachedMovies } from '../lib/dexie'
|
||||
import zy from '../lib/site/tools'
|
||||
import Waterfall from 'vue-waterfall-plugin'
|
||||
import axios from 'axios'
|
||||
const { clipboard } = require('electron')
|
||||
|
||||
export default {
|
||||
name: 'recommendations',
|
||||
data () {
|
||||
@@ -152,13 +164,43 @@ export default {
|
||||
types: [],
|
||||
areas: [],
|
||||
filteredList: [],
|
||||
// 不同推荐
|
||||
recommendationsDefault: [],
|
||||
recommendationTypes: ['作者推荐', '豆瓣热门电影', '豆瓣高分电影', '豆瓣热门剧集', '豆瓣热门美剧', '豆瓣热门英剧', '豆瓣热门国产剧', '豆瓣热门综艺', '豆瓣热门动漫', '豆瓣热门纪录片', '豆瓣热门动画电影'],
|
||||
selectedRecommendationType: '作者推荐',
|
||||
// Toolbar
|
||||
showToolbar: false,
|
||||
selectedAreas: [],
|
||||
selectedTypes: [],
|
||||
sortKeyword: '',
|
||||
sortKeywords: ['按片名', '按上映年份', '按更新时间'],
|
||||
selectedYears: { start: 0, end: new Date().getFullYear() }
|
||||
sortKeywords: ['按片名', '按上映年份', '按更新时间', '按评分'],
|
||||
selectedYears: { start: 0, end: new Date().getFullYear() },
|
||||
// 缓存数据
|
||||
localCachedMovies: [],
|
||||
// 豆瓣
|
||||
douban: {
|
||||
page_limit: 50,
|
||||
hotMoviePageStart: 0,
|
||||
hotmovie: [],
|
||||
hotTVPageStart: 0,
|
||||
hotTV: [],
|
||||
highRateMoviePageStart: 0,
|
||||
highRateMovie: [],
|
||||
hotAnimePageStart: 0,
|
||||
hotAnime: [],
|
||||
hotDocumentaryPageStart: 0,
|
||||
hotDocumentary: [],
|
||||
hotTVShowPageStart: 0,
|
||||
hotTVShow: [],
|
||||
hotCartonMoviePageStart: 0,
|
||||
hotCartonMovie: [],
|
||||
hotAmericanTVSeriesPageStart: 0,
|
||||
hotAmericanTVSeries: [],
|
||||
hotBritishTVSeriesPageStart: 0,
|
||||
hotBritishTVSeries: [],
|
||||
hotChineseTVSeriesPageStart: 0,
|
||||
hotChineseTVSeries: []
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
@@ -223,6 +265,179 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
...mapMutations(['SET_VIEW', 'SET_DETAIL', 'SET_VIDEO', 'SET_SHARE', 'SET_SETTING']),
|
||||
changeRecommendationTypeEvent () {
|
||||
if (this.selectedRecommendationType === '作者推荐') {
|
||||
this.recommendations = this.recommendationsDefault
|
||||
} else {
|
||||
if (this.selectedRecommendationType === '豆瓣热门电影') {
|
||||
this.recommendations = [...this.douban.hotmovie]
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣高分电影') {
|
||||
this.recommendations = [...this.douban.highRateMovie]
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门剧集') {
|
||||
this.recommendations = [...this.douban.hotTV]
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门美剧') {
|
||||
this.recommendations = [...this.douban.hotAmericanTVSeries]
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门英剧') {
|
||||
this.recommendations = [...this.douban.hotBritishTVSeries]
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门国产剧') {
|
||||
this.recommendations = [...this.douban.hotChineseTVSeries]
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门动漫') {
|
||||
this.recommendations = [...this.douban.hotAnime]
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门纪录片') {
|
||||
this.recommendations = [...this.douban.hotDocumentary]
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门综艺') {
|
||||
this.recommendations = [...this.douban.hotTVShow]
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门动画电影') {
|
||||
this.recommendations = [...this.douban.hotCartonMovie]
|
||||
}
|
||||
if (this.recommendations.length === 0) {
|
||||
this.updateDoubanRecommendationsEvent()
|
||||
}
|
||||
}
|
||||
},
|
||||
getRecommendationsDoubanMovieOrTV (doubanUrl) {
|
||||
axios.get(doubanUrl).then(res => {
|
||||
if (res.data) {
|
||||
res.data.subjects.forEach(element => {
|
||||
const localCachedMovie = this.localCachedMovies.find(e => e.key === this.sites[0].key && e.name === element.title)
|
||||
if (localCachedMovie) {
|
||||
this.updateDoubanRecommendataions(localCachedMovie)
|
||||
} else {
|
||||
this.searchAndCacheMovie(element)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
updateDoubanRecommendataions (movie) {
|
||||
this.recommendations.push(movie)
|
||||
if (this.selectedRecommendationType === '豆瓣热门电影') {
|
||||
this.douban.hotmovie.push(movie)
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣高分电影') {
|
||||
this.douban.highRateMovie.push(movie)
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门剧集') {
|
||||
this.douban.hotTV.push(movie)
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门美剧') {
|
||||
this.douban.hotAmericanTVSeries.push(movie)
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门英剧') {
|
||||
this.douban.hotBritishTVSeries.push(movie)
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门国产剧') {
|
||||
this.douban.hotChineseTVSeries.push(movie)
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门动漫') {
|
||||
this.douban.hotAnime.push(movie)
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门纪录片') {
|
||||
this.douban.hotDocumentary.push(movie)
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门综艺') {
|
||||
this.douban.hotTVShow.push(movie)
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门动画电影') {
|
||||
this.douban.hotCartonMovie.push(movie)
|
||||
}
|
||||
},
|
||||
searchAndCacheMovie (element) {
|
||||
zy.searchFirstDetail(this.sites[0].key, element.title).then(detailRes => {
|
||||
if (detailRes) {
|
||||
const doc = {
|
||||
key: this.sites[0].key,
|
||||
ids: detailRes.id,
|
||||
site: this.sites[0],
|
||||
name: detailRes.name,
|
||||
detail: detailRes,
|
||||
rate: element.rate
|
||||
}
|
||||
this.updateDoubanRecommendataions(doc)
|
||||
this.localCachedMovies.push(doc)
|
||||
cachedMovies.add(doc)
|
||||
}
|
||||
})
|
||||
},
|
||||
updateEvent () {
|
||||
if (this.selectedRecommendationType === '作者推荐') {
|
||||
this.updateAuthorRecommendataions()
|
||||
} else {
|
||||
this.updateDoubanRecommendationsEvent()
|
||||
}
|
||||
},
|
||||
updateAuthorRecommendataions () {
|
||||
const url = 'https://raw.githubusercontent.com/cuiocean/ZY-Player-Resources/main/Recommendations/Recommendations.json'
|
||||
this.loading = true
|
||||
axios.get(url).then(res => {
|
||||
if (res.status === 200) {
|
||||
if (res.data.length > 0) {
|
||||
this.recommendations = res.data
|
||||
recommendation.clear().then(recommendation.bulkAdd(this.recommendations))
|
||||
this.getFilterData()
|
||||
this.$message.success('更新推荐成功. 仅根据作者cuiocean个人喜好推荐,不喜请无视.')
|
||||
}
|
||||
}
|
||||
this.loading = false
|
||||
}).catch(error => {
|
||||
this.loading = false
|
||||
this.$message.error('更新推荐失败. ' + error)
|
||||
this.$message.warning('最新的推荐数据保存在Github上,请考虑使用代理或者等待下一版本内置数据更新.')
|
||||
})
|
||||
},
|
||||
updateDoubanRecommendationsEvent () {
|
||||
let doubanUrl = ''
|
||||
if (this.selectedRecommendationType === '豆瓣热门电影') {
|
||||
doubanUrl = `https://movie.douban.com/j/search_subjects?type=movie&tag=热门&sort=recommend&page_limit=${this.douban.page_limit}&page_start=${this.douban.hotMoviePageStart}`
|
||||
this.douban.hotMoviePageStart = this.douban.hotMoviePageStart + this.douban.page_limit
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门剧集') {
|
||||
doubanUrl = `https://movie.douban.com/j/search_subjects?type=tv&tag=热门&sort=recommend&page_limit=${this.douban.page_limit}&page_start=${this.douban.hotTVPageStart}`
|
||||
this.douban.hotTVPageStart = this.douban.hotTVPageStart + this.douban.page_limit
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门美剧') {
|
||||
doubanUrl = `https://movie.douban.com/j/search_subjects?type=tv&tag=美剧&sort=recommend&page_limit=${this.douban.page_limit}&page_start=${this.douban.hotCartonMoviePageStart}`
|
||||
this.douban.hotCartonMoviePageStart = this.douban.hotCartonMoviePageStart + this.douban.page_limit
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门英剧') {
|
||||
doubanUrl = `https://movie.douban.com/j/search_subjects?type=tv&tag=英剧&sort=recommend&page_limit=${this.douban.page_limit}&page_start=${this.douban.hotBritishTVSeriesPageStart}`
|
||||
this.douban.hotBritishTVSeriesPageStart = this.douban.hotBritishTVSeriesPageStart + this.douban.page_limit
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门国产剧') {
|
||||
doubanUrl = `https://movie.douban.com/j/search_subjects?type=tv&tag=国产剧&sort=recommend&page_limit=${this.douban.page_limit}&page_start=${this.douban.hotChineseTVSeriesPageStart}`
|
||||
this.douban.hotChineseTVSeriesPageStart = this.douban.hotChineseTVSeriesPageStart + this.douban.page_limit
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣高分电影') {
|
||||
doubanUrl = `https://movie.douban.com/j/search_subjects?type=movie&tag=豆瓣高分&sort=recommend&page_limit=${this.douban.page_limit}&page_start=${this.douban.highRateMoviePageStart}`
|
||||
this.douban.highRateMoviePageStart = this.douban.highRateMoviePageStart + this.douban.page_limit
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门动漫') {
|
||||
doubanUrl = `https://movie.douban.com/j/search_subjects?type=tv&tag=日本动画&sort=recommend&page_limit=${this.douban.page_limit}&page_start=${this.douban.hotAnimePageStart}`
|
||||
this.douban.hotAnimePageStart = this.douban.hotAnimePageStart + this.douban.page_limit
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门纪录片') {
|
||||
doubanUrl = `https://movie.douban.com/j/search_subjects?type=tv&tag=纪录片&sort=recommend&page_limit=${this.douban.page_limit}&page_start=${this.douban.hotDocumentaryPageStart}`
|
||||
this.douban.hotDocumentaryPageStart = this.douban.hotDocumentaryPageStart + this.douban.page_limit
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门综艺') {
|
||||
doubanUrl = `https://movie.douban.com/j/search_subjects?type=tv&tag=综艺&sort=recommend&page_limit=${this.douban.page_limit}&page_start=${this.douban.hotTVShowPageStart}`
|
||||
this.douban.hotTVShowPageStart = this.douban.hotTVShowPageStart + this.douban.page_limit
|
||||
}
|
||||
if (this.selectedRecommendationType === '豆瓣热门动画电影') {
|
||||
doubanUrl = `https://movie.douban.com/j/search_subjects?type=movie&tag=动画&sort=recommend&page_limit=${this.douban.page_limit}&page_start=${this.douban.hotCartonMoviePageStart}`
|
||||
this.douban.hotCartonMoviePageStart = this.douban.hotCartonMoviePageStart + this.douban.page_limit
|
||||
}
|
||||
this.getRecommendationsDoubanMovieOrTV(doubanUrl)
|
||||
},
|
||||
toggleViewMode () {
|
||||
this.setting.recommendationViewMode = this.setting.recommendationViewMode === 'picture' ? 'table' : 'picture'
|
||||
if (this.setting.recommendationViewMode === 'table') {
|
||||
@@ -272,6 +487,11 @@ export default {
|
||||
return new Date(b.detail.last) - new Date(a.detail.last)
|
||||
})
|
||||
break
|
||||
case '按评分':
|
||||
filteredData.sort(function (a, b) {
|
||||
return b.rate - a.rate
|
||||
})
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
@@ -288,26 +508,6 @@ export default {
|
||||
}
|
||||
}
|
||||
},
|
||||
updateEvent () {
|
||||
const url = 'https://raw.githubusercontent.com/cuiocean/ZY-Player-Resources/main/Recommendations/Recommendations.json'
|
||||
this.loading = true
|
||||
const axios = require('axios')
|
||||
axios.get(url).then(res => {
|
||||
if (res.status === 200) {
|
||||
if (res.data.length > 0) {
|
||||
this.recommendations = res.data
|
||||
recommendation.clear().then(recommendation.bulkAdd(this.recommendations))
|
||||
this.getFilterData()
|
||||
this.$message.success('更新推荐成功. 仅根据作者cuiocean个人喜好推荐,不喜请无视.')
|
||||
}
|
||||
}
|
||||
this.loading = false
|
||||
}).catch(error => {
|
||||
this.loading = false
|
||||
this.$message.error('更新推荐失败. ' + error)
|
||||
this.$message.warning('最新的推荐数据保存在Github上,请考虑使用代理或者等待下一版本内置数据更新.')
|
||||
})
|
||||
},
|
||||
async playEvent (e) {
|
||||
const db = await history.find({ site: e.key, ids: e.ids })
|
||||
if (db) {
|
||||
@@ -317,14 +517,6 @@ export default {
|
||||
}
|
||||
this.view = 'Play'
|
||||
},
|
||||
deleteEvent (e) {
|
||||
recommendation.remove(e.id).then(res => {
|
||||
if (res) {
|
||||
this.$message.warning('删除失败')
|
||||
}
|
||||
this.getRecommendations()
|
||||
})
|
||||
},
|
||||
shareEvent (e) {
|
||||
this.share = {
|
||||
show: true,
|
||||
@@ -348,6 +540,7 @@ export default {
|
||||
this.recommendations = res.sort(function (a, b) {
|
||||
return b.id - a.id
|
||||
})
|
||||
this.recommendationsDefault = this.recommendations
|
||||
this.getFilterData()
|
||||
})
|
||||
},
|
||||
@@ -361,10 +554,24 @@ export default {
|
||||
res.recommendationViewMode = this.setting.recommendationViewMode
|
||||
setting.update(res)
|
||||
})
|
||||
},
|
||||
getAllSites () {
|
||||
sites.all().then(res => {
|
||||
if (res.length > 0) {
|
||||
this.sites = res.filter(item => item.isActive)
|
||||
}
|
||||
})
|
||||
},
|
||||
getCachedMovies () {
|
||||
cachedMovies.all().then(res => {
|
||||
this.localCachedMovies = res
|
||||
})
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.getAllSites()
|
||||
this.getRecommendations()
|
||||
this.getCachedMovies()
|
||||
},
|
||||
mounted () {
|
||||
addEventListener('resize', () => {
|
||||
|
||||
@@ -93,9 +93,6 @@
|
||||
<div class="zy-select">
|
||||
<div class="vs-placeholder vs-noAfter" @click="show.configSitesDataUrlDialog = true">设置源站接口文件</div>
|
||||
</div>
|
||||
<div class="zy-input" @click="toggleExcludeRootClasses">
|
||||
<input type="checkbox" v-model = "d.excludeRootClasses" @change="updateSettingEvent"> 屏蔽主分类
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="site">
|
||||
@@ -113,6 +110,15 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="site">
|
||||
<div class="title">窗口及播放</div>
|
||||
<div class="site-box">
|
||||
<div class="zy-input">
|
||||
<input type="checkbox" v-model = "d.restoreWindowPositionAndSize" @change="updateSettingEvent"> 记录并恢复窗口位置和大小
|
||||
<input type="checkbox" v-model = "d.pauseWhenMinimize" @change="updateSettingEvent"> 最小化时暂停播放
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="theme">
|
||||
<div class="title">主题</div>
|
||||
<div class="theme-box">
|
||||
@@ -167,7 +173,7 @@
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="closeDialog">取消</el-button>
|
||||
<el-button type="danger" @click="get7kParseURL">重置</el-button>
|
||||
<el-button type="danger" @click="resetDefaultParseURL">重置</el-button>
|
||||
<el-button type="primary" @click="configDefaultParseURL">确定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
@@ -181,7 +187,7 @@
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="closeDialog">取消</el-button>
|
||||
<el-button type="danger" @click="getDefaultdeSitesDataURL">重置</el-button>
|
||||
<el-button type="danger" @click="resetDefaultSitesDataURL">重置</el-button>
|
||||
<el-button type="primary" @click="configSitesDataURL">确定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
@@ -328,7 +334,7 @@ export default {
|
||||
this.d = res
|
||||
this.setting = this.d
|
||||
if (!this.setting.defaultParseURL) this.configDefaultParseURL()
|
||||
if (!this.setting.sitesDataURL) this.getDefaultdeSitesDataURL()
|
||||
if (!this.setting.sitesDataURL) this.resetDefaultSitesDataURL()
|
||||
})
|
||||
},
|
||||
getDefaultSites () {
|
||||
@@ -374,25 +380,20 @@ export default {
|
||||
this.d.excludeRootClasses = !this.d.excludeRootClasses
|
||||
this.updateSettingEvent()
|
||||
},
|
||||
async get7kParseURL () {
|
||||
this.$message.info('正在获取7K源解析地址...')
|
||||
const parseURL = await zy.get7kParseURL()
|
||||
if (parseURL.startsWith('http')) {
|
||||
this.$message.success('获取成功,更新应用默认解析接口地址...')
|
||||
this.setting.defaultParseURL = parseURL
|
||||
}
|
||||
async resetDefaultParseURL () {
|
||||
this.setting.defaultParseURL = 'https://jx.bpba.cc/?v='
|
||||
},
|
||||
async configDefaultParseURL () {
|
||||
if (!this.setting.defaultParseURL) await this.get7kParseURL()
|
||||
if (!this.setting.defaultParseURL) await this.resetDefaultParseURL()
|
||||
this.d.defaultParseURL = this.setting.defaultParseURL?.trim()
|
||||
this.show.configDefaultParseUrlDialog = false
|
||||
this.updateSettingEvent()
|
||||
},
|
||||
getDefaultdeSitesDataURL () {
|
||||
resetDefaultSitesDataURL () {
|
||||
this.setting.sitesDataURL = 'https://gitee.com/cuiocean/ZY-Player-Resources/raw/main/Sites/Sites.json'
|
||||
},
|
||||
configSitesDataURL () {
|
||||
if (!this.setting.sitesDataURL) this.getDefaultdeSitesDataURL()
|
||||
if (!this.setting.sitesDataURL) this.resetDefaultSitesDataURL()
|
||||
this.d.sitesDataURL = this.setting.sitesDataURL
|
||||
this.show.configSitesDataUrlDialog = false
|
||||
this.updateSettingEvent()
|
||||
|
||||
@@ -4,10 +4,12 @@
|
||||
<el-button @click.stop="exportFavoritesEvent" icon="el-icon-upload2" title="导出全部,自动添加扩展名">导出</el-button>
|
||||
<el-button @click.stop="importFavoritesEvent" icon="el-icon-download" title="支持同时导入多个文件">导入</el-button>
|
||||
<el-button @click.stop="removeSelectedItems" icon="el-icon-delete-solid">{{ multipleSelection.length === 0 ? "清空" : "删除所选" }}</el-button>
|
||||
<el-button @click.stop="updateAllEvent" icon="el-icon-refresh">检查更新</el-button>
|
||||
<b-button-group>
|
||||
<el-switch v-model="onlyShowItemsHasUpdate" active-text="有更新" inactive-text="全部" @change="refreshFilteredList"></el-switch>
|
||||
<el-button @click.stop="updateAllEvent" icon="el-icon-refresh">检查更新</el-button>
|
||||
</b-button-group>
|
||||
</div>
|
||||
<div class="toolbar" v-show="showToolbar">
|
||||
<el-switch v-model="onlyShowItemsHasUpdate" active-text="有更新" inactive-text="全部" @change="refreshFilteredList"></el-switch>
|
||||
<el-select v-model="selectedAreas" size="small" multiple placeholder="地区" popper-class="popper" :popper-append-to-body="false" @remove-tag="refreshFilteredList" @change="refreshFilteredList">
|
||||
<el-option
|
||||
v-for="item in areas"
|
||||
|
||||
28
src/lib/dexie/cachedMovies.js
Normal file
28
src/lib/dexie/cachedMovies.js
Normal file
@@ -0,0 +1,28 @@
|
||||
import db from './dexie'
|
||||
const { cachedMovies } = db
|
||||
export default {
|
||||
async add (doc) {
|
||||
return await cachedMovies.add(doc)
|
||||
},
|
||||
async bulkAdd (doc) {
|
||||
return await cachedMovies.bulkAdd(doc)
|
||||
},
|
||||
async find (doc) {
|
||||
return await cachedMovies.where(doc).first()
|
||||
},
|
||||
async update (id, docs) {
|
||||
return await cachedMovies.update(id, docs)
|
||||
},
|
||||
async all () {
|
||||
return await cachedMovies.toArray()
|
||||
},
|
||||
async remove (id) {
|
||||
return await cachedMovies.delete(id)
|
||||
},
|
||||
async get (id) {
|
||||
return await cachedMovies.get(id)
|
||||
},
|
||||
async clear () {
|
||||
return await cachedMovies.clear()
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,7 @@
|
||||
import Dexie from 'dexie'
|
||||
import { setting, sites, localKey, iptv, recommendations } from './initData'
|
||||
import { sites, localKey, iptv, recommendations, iniSetting } from './initData'
|
||||
|
||||
const db = new Dexie('zy')
|
||||
|
||||
db.version(4).stores({
|
||||
search: '++id, keywords',
|
||||
setting: 'id, theme, site, shortcut, view, volume, externalPlayer, searchGroup, excludeRootClasses, excludeR18Films, forwardTimeInSec, starViewMode, recommandationViewMode, searchViewMode, password, proxy, allowPassWhenIptvCheck, autocleanWhenIptvCheck',
|
||||
@@ -63,8 +62,47 @@ db.version(9).stores({
|
||||
history: '++id, [site+ids], name, type, year, index, time, duration, detail, onlinePlay, hasUpdate'
|
||||
})
|
||||
|
||||
db.version(10).stores({
|
||||
setting: 'id, theme, shortcut, view, volume, externalPlayer, searchGroup, excludeRootClasses, excludeR18Films, forwardTimeInSec, starViewMode, recommandationViewMode, searchViewMode, password, proxy, allowPassWhenIptvCheck, autocleanWhenIptvCheck, rootClassFilter, r18ClassFilter, classFilter'
|
||||
}).upgrade(trans => {
|
||||
trans.setting.toCollection().modify(setting => {
|
||||
delete setting.site
|
||||
setting.rootClassFilter = ['电影', '电影片', '电视剧', '连续剧', '综艺', '动漫']
|
||||
setting.r18ClassFilter = ['伦理', '论理', '倫理', '福利', '激情', '理论', '写真', '情色', '美女', '街拍', '赤足', '性感', '里番', 'VIP']
|
||||
setting.classFilter = ['电影', '电影片', '电视剧', '连续剧', '综艺', '动漫', '伦理', '论理', '倫理', '福利', '激情', '理论', '写真', '情色', '美女', '街拍', '赤足', '性感', '里番', 'VIP']
|
||||
})
|
||||
})
|
||||
|
||||
db.version(11).stores({
|
||||
setting: 'id, theme, shortcut, view, volume, externalPlayer, searchGroup, excludeRootClasses, excludeR18Films, forwardTimeInSec, starViewMode, recommandationViewMode,' +
|
||||
'searchViewMode, password, proxy, allowPassWhenIptvCheck, autocleanWhenIptvCheck, rootClassFilter, r18ClassFilter, classFilter, restoreWindowPositionAndSize, windowPositionAndSize, pauseWhenMinimize',
|
||||
cachedMovies: '++id, [key+ids], site, name, detail, index, rate, hasUpdate'
|
||||
}).upgrade(trans => {
|
||||
trans.setting.toCollection().modify(setting => {
|
||||
setting.restoreWindowPositionAndSize = false
|
||||
setting.windowPositionAndSize = {
|
||||
x: 0,
|
||||
y: 0,
|
||||
width: 1080,
|
||||
height: 720
|
||||
}
|
||||
setting.pauseWhenMinimize = false
|
||||
})
|
||||
})
|
||||
|
||||
db.version(11).stores({
|
||||
setting: 'id, theme, shortcut, view, volume, externalPlayer, searchGroup, excludeRootClasses, excludeR18Films, forwardTimeInSec, starViewMode, recommandationViewMode,' +
|
||||
'searchViewMode, password, proxy, allowPassWhenIptvCheck, autocleanWhenIptvCheck, rootClassFilter, r18ClassFilter, classFilter, restoreWindowPositionAndSize,' +
|
||||
'windowPositionAndSize, pauseWhenMinimize, sitesDataURL, defaultParseURL'
|
||||
}).upgrade(trans => {
|
||||
trans.setting.toCollection().modify(setting => {
|
||||
setting.sitesDataURL = 'https://gitee.com/cuiocean/ZY-Player-Resources/raw/main/Sites/Sites.json'
|
||||
setting.defaultParseURL = 'https://jx.bpba.cc/?v='
|
||||
})
|
||||
})
|
||||
|
||||
db.on('populate', () => {
|
||||
db.setting.bulkAdd(setting)
|
||||
db.setting.bulkAdd(iniSetting)
|
||||
db.sites.bulkAdd(sites)
|
||||
db.shortcut.bulkAdd(localKey)
|
||||
db.iptv.bulkAdd(iptv)
|
||||
|
||||
@@ -8,6 +8,7 @@ import search from './search'
|
||||
import iptv from './iptv'
|
||||
import channelList from './channelList'
|
||||
import recommendation from './recommendation'
|
||||
import cachedMovies from './cachedMovies'
|
||||
|
||||
export {
|
||||
history,
|
||||
@@ -19,5 +20,6 @@ export {
|
||||
iptv,
|
||||
channelList,
|
||||
search,
|
||||
recommendation
|
||||
recommendation,
|
||||
cachedMovies
|
||||
}
|
||||
|
||||
82
src/lib/dexie/iniData/iniSetting.json
Normal file
82
src/lib/dexie/iniData/iniSetting.json
Normal file
@@ -0,0 +1,82 @@
|
||||
[{
|
||||
"id": 0,
|
||||
"theme": "light",
|
||||
"shortcut": true,
|
||||
"view": "picture",
|
||||
"externalPlayer": "",
|
||||
"searchGroup": "全站",
|
||||
"excludeRootClasses": true,
|
||||
"excludeR18Films": true,
|
||||
"forwardTimeInSec": 5,
|
||||
"waitingTimeInSec": 15,
|
||||
"starViewMode": "picture",
|
||||
"recommendationViewMode": "picture",
|
||||
"historyViewMode": "picture",
|
||||
"searchViewMode": "picture",
|
||||
"password": "",
|
||||
"proxy": {
|
||||
"type": "none",
|
||||
"scheme": "",
|
||||
"url": "",
|
||||
"port": ""
|
||||
},
|
||||
"allowPassWhenIptvCheck": true,
|
||||
"autocleanWhenIptvCheck": false,
|
||||
"autoChangeSourceWhenIptvStalling": true,
|
||||
"shortcutModified": false,
|
||||
"sitesDataURL": "https://gitee.com/cuiocean/ZY-Player-Resources/raw/main/Sites/Sites.json",
|
||||
"rootClassFilter": [
|
||||
"电影",
|
||||
"电影片",
|
||||
"电视剧",
|
||||
"连续剧",
|
||||
"综艺",
|
||||
"动漫"
|
||||
],
|
||||
"r18ClassFilter": [
|
||||
"伦理",
|
||||
"论理",
|
||||
"倫理",
|
||||
"福利",
|
||||
"激情",
|
||||
"理论",
|
||||
"写真",
|
||||
"情色",
|
||||
"美女",
|
||||
"街拍",
|
||||
"赤足",
|
||||
"性感",
|
||||
"里番",
|
||||
"VIP"
|
||||
],
|
||||
"classFilter": [
|
||||
"电影",
|
||||
"电影片",
|
||||
"电视剧",
|
||||
"连续剧",
|
||||
"综艺",
|
||||
"动漫",
|
||||
"伦理",
|
||||
"论理",
|
||||
"倫理",
|
||||
"福利",
|
||||
"激情",
|
||||
"理论",
|
||||
"写真",
|
||||
"情色",
|
||||
"美女",
|
||||
"街拍",
|
||||
"赤足",
|
||||
"性感",
|
||||
"里番",
|
||||
"VIP"
|
||||
],
|
||||
"restoreWindowPositionAndSize": false,
|
||||
"windowPositionAndSize": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"width": 1080,
|
||||
"height": 720
|
||||
},
|
||||
"pauseWhenMinimize": false
|
||||
}]
|
||||
112
src/lib/dexie/iniData/localKey.json
Normal file
112
src/lib/dexie/iniData/localKey.json
Normal file
@@ -0,0 +1,112 @@
|
||||
[
|
||||
{
|
||||
"name": "playAndPause",
|
||||
"desc": "播放或暂停",
|
||||
"key": "space"
|
||||
},
|
||||
{
|
||||
"name": "forward",
|
||||
"desc": "快进",
|
||||
"key": "right"
|
||||
},
|
||||
{
|
||||
"name": "back",
|
||||
"desc": "快退",
|
||||
"key": "left"
|
||||
},
|
||||
{
|
||||
"name": "volumeUp",
|
||||
"desc": "音量调高",
|
||||
"key": "up"
|
||||
},
|
||||
{
|
||||
"name": "volumeDown",
|
||||
"desc": "音量调低",
|
||||
"key": "down"
|
||||
},
|
||||
{
|
||||
"name": "mute",
|
||||
"desc": "静音",
|
||||
"key": "m"
|
||||
},
|
||||
{
|
||||
"name": "top",
|
||||
"desc": "置顶或退出置顶",
|
||||
"key": "t"
|
||||
},
|
||||
{
|
||||
"name": "fullscreen",
|
||||
"desc": "进入或退出全屏",
|
||||
"key": "f"
|
||||
},
|
||||
{
|
||||
"name": "escape",
|
||||
"desc": "退出全屏/精简模式",
|
||||
"key": "esc"
|
||||
},
|
||||
{
|
||||
"name": "next",
|
||||
"desc": "下一集",
|
||||
"key": "alt+right"
|
||||
},
|
||||
{
|
||||
"name": "prev",
|
||||
"desc": "上一集",
|
||||
"key": "alt+left"
|
||||
},
|
||||
{
|
||||
"name": "home",
|
||||
"desc": "跳到视频开始位置",
|
||||
"key": "home"
|
||||
},
|
||||
{
|
||||
"name": "end",
|
||||
"desc": "跳到视频结束位置",
|
||||
"key": "end"
|
||||
},
|
||||
{
|
||||
"name": "startPosition",
|
||||
"desc": "标记片头",
|
||||
"key": "ctrl+home"
|
||||
},
|
||||
{
|
||||
"name": "endPosition",
|
||||
"desc": "标记片尾",
|
||||
"key": "ctrl+end"
|
||||
},
|
||||
{
|
||||
"name": "clearPosition",
|
||||
"desc": "清除标记",
|
||||
"key": "ctrl+del"
|
||||
},
|
||||
{
|
||||
"name": "opacityUp",
|
||||
"desc": "透明度调高",
|
||||
"key": "alt+up"
|
||||
},
|
||||
{
|
||||
"name": "opacityDown",
|
||||
"desc": "透明度调低",
|
||||
"key": "alt+down"
|
||||
},
|
||||
{
|
||||
"name": "playbackRateUp",
|
||||
"desc": "播放倍速加快",
|
||||
"key": "pageup"
|
||||
},
|
||||
{
|
||||
"name": "playbackRateDown",
|
||||
"desc": "播放倍速减慢",
|
||||
"key": "pagedown"
|
||||
},
|
||||
{
|
||||
"name": "mini",
|
||||
"desc": "进入或退出mini模式",
|
||||
"key": "alt+m"
|
||||
},
|
||||
{
|
||||
"name": "resetMini",
|
||||
"desc": "重置mini窗口",
|
||||
"key": "ctrl+0"
|
||||
}
|
||||
]
|
||||
@@ -1,145 +1,3 @@
|
||||
const setting = [
|
||||
{
|
||||
id: 0,
|
||||
theme: 'light',
|
||||
shortcut: true,
|
||||
view: 'picture',
|
||||
externalPlayer: '',
|
||||
searchGroup: '全站',
|
||||
excludeRootClasses: true,
|
||||
excludeR18Films: true,
|
||||
forwardTimeInSec: 5,
|
||||
waitingTimeInSec: 15,
|
||||
starViewMode: 'picture',
|
||||
recommendationViewMode: 'picture',
|
||||
historyViewMode: 'picture',
|
||||
searchViewMode: 'picture',
|
||||
password: '',
|
||||
proxy: {
|
||||
type: 'none',
|
||||
scheme: '',
|
||||
url: '',
|
||||
port: ''
|
||||
},
|
||||
allowPassWhenIptvCheck: true,
|
||||
autocleanWhenIptvCheck: false,
|
||||
autoChangeSourceWhenIptvStalling: true
|
||||
}
|
||||
]
|
||||
|
||||
const localKey = [
|
||||
{
|
||||
name: 'playAndPause',
|
||||
desc: '播放或暂停',
|
||||
key: 'space'
|
||||
},
|
||||
{
|
||||
name: 'forward',
|
||||
desc: '快进',
|
||||
key: 'right'
|
||||
},
|
||||
{
|
||||
name: 'back',
|
||||
desc: '快退',
|
||||
key: 'left'
|
||||
},
|
||||
{
|
||||
name: 'volumeUp',
|
||||
desc: '音量调高',
|
||||
key: 'up'
|
||||
},
|
||||
{
|
||||
name: 'volumeDown',
|
||||
desc: '音量调低',
|
||||
key: 'down'
|
||||
},
|
||||
{
|
||||
name: 'mute',
|
||||
desc: '静音',
|
||||
key: 'm'
|
||||
},
|
||||
{
|
||||
name: 'top',
|
||||
desc: '置顶或退出置顶',
|
||||
key: 't'
|
||||
},
|
||||
{
|
||||
name: 'fullscreen',
|
||||
desc: '进入或退出全屏',
|
||||
key: 'f'
|
||||
},
|
||||
{
|
||||
name: 'escape',
|
||||
desc: '退出全屏/精简模式',
|
||||
key: 'esc'
|
||||
},
|
||||
{
|
||||
name: 'next',
|
||||
desc: '下一集',
|
||||
key: 'alt+right'
|
||||
},
|
||||
{
|
||||
name: 'prev',
|
||||
desc: '上一集',
|
||||
key: 'alt+left'
|
||||
},
|
||||
{
|
||||
name: 'home',
|
||||
desc: '跳到视频开始位置',
|
||||
key: 'home'
|
||||
},
|
||||
{
|
||||
name: 'end',
|
||||
desc: '跳到视频结束位置',
|
||||
key: 'end'
|
||||
},
|
||||
{
|
||||
name: 'startPosition',
|
||||
desc: '标记片头',
|
||||
key: 'ctrl+home'
|
||||
},
|
||||
{
|
||||
name: 'endPosition',
|
||||
desc: '标记片尾',
|
||||
key: 'ctrl+end'
|
||||
},
|
||||
{
|
||||
name: 'clearPosition',
|
||||
desc: '清除标记',
|
||||
key: 'ctrl+del'
|
||||
},
|
||||
{
|
||||
name: 'opacityUp',
|
||||
desc: '透明度调高',
|
||||
key: 'alt+up'
|
||||
},
|
||||
{
|
||||
name: 'opacityDown',
|
||||
desc: '透明度调低',
|
||||
key: 'alt+down'
|
||||
},
|
||||
{
|
||||
name: 'playbackRateUp',
|
||||
desc: '播放倍速加快',
|
||||
key: 'pageup'
|
||||
},
|
||||
{
|
||||
name: 'playbackRateDown',
|
||||
desc: '播放倍速减慢',
|
||||
key: 'pagedown'
|
||||
},
|
||||
{
|
||||
name: 'mini',
|
||||
desc: '进入或退出mini模式',
|
||||
key: 'alt+m'
|
||||
},
|
||||
{
|
||||
name: 'resetMini',
|
||||
desc: '重置mini窗口',
|
||||
key: 'ctrl+0'
|
||||
}
|
||||
]
|
||||
|
||||
const getSite = (key) => {
|
||||
for (const i of sites) {
|
||||
if (key === i.key) {
|
||||
@@ -151,11 +9,13 @@ const getSite = (key) => {
|
||||
const sites = require('./iniData/Sites.json')
|
||||
const iptv = require('./iniData/Iptv.json')
|
||||
const recommendations = require('./iniData/Recommendations.json')
|
||||
const iniSetting = require('./iniData/iniSetting.json')
|
||||
const localKey = require('./iniData/localKey.json')
|
||||
export {
|
||||
setting,
|
||||
sites,
|
||||
iptv,
|
||||
recommendations,
|
||||
iniSetting,
|
||||
localKey,
|
||||
getSite
|
||||
}
|
||||
|
||||
@@ -5,6 +5,12 @@ export default {
|
||||
async find () {
|
||||
return await setting.get({ id: 0 })
|
||||
},
|
||||
async bulkAdd (doc) {
|
||||
return await setting.bulkAdd(doc)
|
||||
},
|
||||
async add (doc) {
|
||||
return await setting.add(doc)
|
||||
},
|
||||
async update (docs) {
|
||||
return await setting.update(0, docs)
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import Vue from 'vue'
|
||||
import { Message, Button, Table, TableColumn, Tag, Input, InputNumber, Dialog, Form, FormItem, Switch, Select, Option, Checkbox, Autocomplete, Col, Tree, Divider, Progress, MessageBox } from 'element-ui'
|
||||
import Plugin from 'v-fit-columns'
|
||||
import { ButtonGroupPlugin } from 'bootstrap-vue'
|
||||
Vue.use(ButtonGroupPlugin)
|
||||
Vue.use(Button)
|
||||
Vue.use(Col)
|
||||
Vue.use(Table)
|
||||
|
||||
@@ -111,13 +111,16 @@ const zy = {
|
||||
axios.get(url).then(res => {
|
||||
const data = res.data
|
||||
const json = parser.parse(data, this.xmlConfig)
|
||||
const jsondata = json.rss === undefined ? json : json.rss
|
||||
const jsondata = json?.rss === undefined ? json : json.rss
|
||||
if (!jsondata?.class || !jsondata?.list) resolve()
|
||||
const arr = []
|
||||
if (jsondata.class) {
|
||||
// 有些网站返回的分类名里会含有一串包含在{}内的字符串,移除掉
|
||||
const regex = /\{.*\}/i
|
||||
for (const i of jsondata.class.ty) {
|
||||
const j = {
|
||||
tid: i._id,
|
||||
name: i._t
|
||||
name: i._t.replace(regex, '')
|
||||
}
|
||||
arr.push(j)
|
||||
}
|
||||
@@ -216,16 +219,55 @@ const zy = {
|
||||
axios.get(url, { timeout: 3000 }).then(res => {
|
||||
const data = res.data
|
||||
const json = parser.parse(data, this.xmlConfig)
|
||||
const jsondata = json.rss === undefined ? json : json.rss
|
||||
const jsondata = json?.rss === undefined ? json : json.rss
|
||||
if (json && jsondata && jsondata.list) {
|
||||
let videoList = jsondata.list.video
|
||||
if (Object.prototype.toString.call(videoList) === '[object Object]') videoList = [].concat(videoList)
|
||||
videoList = videoList.filter(e => e.name.toLowerCase().includes(wd.toLowerCase()))
|
||||
if (videoList.length) {
|
||||
videoList = videoList?.filter(e => e.name.toLowerCase().includes(wd.toLowerCase()))
|
||||
if (videoList?.length) {
|
||||
resolve(videoList)
|
||||
} else {
|
||||
resolve()
|
||||
}
|
||||
} else {
|
||||
resolve()
|
||||
}
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
})
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
})
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 搜索资源详情
|
||||
* @param {*} key 资源网 key
|
||||
* @param {*} wd 搜索关键字
|
||||
* @returns
|
||||
*/
|
||||
searchFirstDetail (key, wd) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.getSite(key).then(res => {
|
||||
const site = res
|
||||
const url = `${site.api}?wd=${encodeURI(wd)}`
|
||||
axios.get(url, { timeout: 3000 }).then(res => {
|
||||
const data = res.data
|
||||
const json = parser.parse(data, this.xmlConfig)
|
||||
const jsondata = json?.rss === undefined ? json : json.rss
|
||||
if (json && jsondata && jsondata.list) {
|
||||
let videoList = jsondata.list.video
|
||||
if (Object.prototype.toString.call(videoList) === '[object Object]') videoList = [].concat(videoList)
|
||||
videoList = videoList?.filter(e => e.name.toLowerCase().includes(wd.toLowerCase()))
|
||||
if (videoList?.length) {
|
||||
this.detail(key, videoList[0].id).then(detailRes => {
|
||||
resolve(detailRes)
|
||||
})
|
||||
} else {
|
||||
resolve()
|
||||
}
|
||||
} else {
|
||||
resolve()
|
||||
}
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
@@ -248,8 +290,9 @@ const zy = {
|
||||
axios.get(url).then(res => {
|
||||
const data = res.data
|
||||
const json = parser.parse(data, this.xmlConfig)
|
||||
const jsondata = json.rss === undefined ? json : json.rss
|
||||
const videoList = jsondata.list.video
|
||||
const jsondata = json?.rss === undefined ? json : json.rss
|
||||
const videoList = jsondata?.list?.video
|
||||
if (!videoList) resolve()
|
||||
// Parse video lists
|
||||
let fullList = []
|
||||
let index = 0
|
||||
@@ -491,13 +534,33 @@ const zy = {
|
||||
})
|
||||
})
|
||||
},
|
||||
get7kParseURL () {
|
||||
/**
|
||||
* 获取豆瓣相关视频推荐列表
|
||||
* @param {*} name 视频名称
|
||||
* @param {*} year 视频年份
|
||||
* @returns 豆瓣相关视频推荐列表
|
||||
*/
|
||||
doubanRecommendations (name, year) {
|
||||
return new Promise((resolve, reject) => {
|
||||
axios.get('https://zy.7kjx.com/').then(res => {
|
||||
const $ = cheerio.load(res.data)
|
||||
const parseURL = $('body > div.container > div > div.stui-pannel > div.col-pd > p:contains("解析接口:")').first().find('a').text()
|
||||
resolve(parseURL)
|
||||
}).catch(err => { reject(err) })
|
||||
const nameToSearch = name.replace(/\s/g, '')
|
||||
const recommendations = []
|
||||
this.doubanLink(nameToSearch, year).then(link => {
|
||||
if (link.includes('https://www.douban.com/search')) {
|
||||
resolve(recommendations)
|
||||
} else {
|
||||
axios.get(link).then(response => {
|
||||
const $ = cheerio.load(response.data)
|
||||
$('div.recommendations-bd').find('div>dl>dd>a').each(function (index, element) {
|
||||
recommendations.push($(element).text())
|
||||
})
|
||||
resolve(recommendations)
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
})
|
||||
}
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
})
|
||||
})
|
||||
},
|
||||
getDefaultSites () {
|
||||
|
||||
240
yarn.lock
240
yarn.lock
@@ -975,6 +975,15 @@
|
||||
dependencies:
|
||||
"mkdirp" "^1.0.4"
|
||||
|
||||
"@nuxt/opencollective@^0.3.2":
|
||||
"integrity" "sha512-XG7rUdXG9fcafu9KTDIYjJSkRO38EwjlKYIb5TQ/0WDbiTUTtUtgncMscKOYzfsY86kGs05pAuMOR+3Fi0aN3A=="
|
||||
"resolved" "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.3.2.tgz"
|
||||
"version" "0.3.2"
|
||||
dependencies:
|
||||
"chalk" "^4.1.0"
|
||||
"consola" "^2.15.0"
|
||||
"node-fetch" "^2.6.1"
|
||||
|
||||
"@sindresorhus/is@^0.14.0":
|
||||
"integrity" "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ=="
|
||||
"resolved" "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz"
|
||||
@@ -1816,11 +1825,10 @@
|
||||
"color-convert" "^2.0.1"
|
||||
|
||||
"ansi-styles@^4.1.0":
|
||||
"integrity" "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA=="
|
||||
"resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz"
|
||||
"version" "4.2.1"
|
||||
"integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
|
||||
"resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
|
||||
"version" "4.3.0"
|
||||
dependencies:
|
||||
"@types/color-name" "^1.1.1"
|
||||
"color-convert" "^2.0.1"
|
||||
|
||||
"any-promise@^1.0.0":
|
||||
@@ -2283,6 +2291,22 @@
|
||||
"resolved" "https://registry.npmjs.org/boolean/-/boolean-3.0.1.tgz"
|
||||
"version" "3.0.1"
|
||||
|
||||
"bootstrap-vue@^2.21.2":
|
||||
"integrity" "sha512-0Exe+4MZysqhZNXIKf4TzkvXaupxh9EHsoCRez0o5Dc0J7rlafayOEwql63qXv74CgZO8E4U8ugRNJko1vMvNw=="
|
||||
"resolved" "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.21.2.tgz"
|
||||
"version" "2.21.2"
|
||||
dependencies:
|
||||
"@nuxt/opencollective" "^0.3.2"
|
||||
"bootstrap" ">=4.5.3 <5.0.0"
|
||||
"popper.js" "^1.16.1"
|
||||
"portal-vue" "^2.1.7"
|
||||
"vue-functional-data-merge" "^3.1.0"
|
||||
|
||||
"bootstrap@>=4.5.3 <5.0.0":
|
||||
"integrity" "sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw=="
|
||||
"resolved" "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.0.tgz"
|
||||
"version" "4.6.0"
|
||||
|
||||
"boxen@^4.2.0":
|
||||
"integrity" "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ=="
|
||||
"resolved" "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz"
|
||||
@@ -2729,29 +2753,28 @@
|
||||
"resolved" "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz"
|
||||
"version" "8.0.3"
|
||||
|
||||
"cheerio-select-tmp@^0.1.0":
|
||||
"integrity" "sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ=="
|
||||
"resolved" "https://registry.npmjs.org/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz"
|
||||
"version" "0.1.1"
|
||||
"cheerio-select@^1.3.0":
|
||||
"integrity" "sha512-sobR3Yqz27L553Qa7cK6rtJlMDbiKPdNywtR95Sj/YgfpLfy0u6CGJuaBKe5YE/vTc23SCRKxWSdlon/w6I/Ew=="
|
||||
"resolved" "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.4.0.tgz"
|
||||
"version" "1.4.0"
|
||||
dependencies:
|
||||
"css-select" "^3.1.2"
|
||||
"css-what" "^4.0.0"
|
||||
"domelementtype" "^2.1.0"
|
||||
"domhandler" "^4.0.0"
|
||||
"domutils" "^2.4.4"
|
||||
"css-select" "^4.1.2"
|
||||
"css-what" "^5.0.0"
|
||||
"domelementtype" "^2.2.0"
|
||||
"domhandler" "^4.2.0"
|
||||
"domutils" "^2.6.0"
|
||||
|
||||
"cheerio@^1.0.0-rc.5":
|
||||
"integrity" "sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw=="
|
||||
"resolved" "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.5.tgz"
|
||||
"version" "1.0.0-rc.5"
|
||||
"cheerio@^1.0.0-rc.6":
|
||||
"integrity" "sha512-hjx1XE1M/D5pAtMgvWwE21QClmAEeGHOIDfycgmndisdNgI6PE1cGRQkMGBcsbUbmEQyWu5PJLUcAOjtQS8DWw=="
|
||||
"resolved" "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.6.tgz"
|
||||
"version" "1.0.0-rc.6"
|
||||
dependencies:
|
||||
"cheerio-select-tmp" "^0.1.0"
|
||||
"dom-serializer" "~1.2.0"
|
||||
"domhandler" "^4.0.0"
|
||||
"entities" "~2.1.0"
|
||||
"htmlparser2" "^6.0.0"
|
||||
"parse5" "^6.0.0"
|
||||
"parse5-htmlparser2-tree-adapter" "^6.0.0"
|
||||
"cheerio-select" "^1.3.0"
|
||||
"dom-serializer" "^1.3.1"
|
||||
"domhandler" "^4.1.0"
|
||||
"htmlparser2" "^6.1.0"
|
||||
"parse5" "^6.0.1"
|
||||
"parse5-htmlparser2-tree-adapter" "^6.0.1"
|
||||
|
||||
"chokidar@^2.1.8":
|
||||
"integrity" "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg=="
|
||||
@@ -3093,6 +3116,11 @@
|
||||
"resolved" "https://registry.npm.taobao.org/connection-parse/download/connection-parse-0.0.7.tgz"
|
||||
"version" "0.0.7"
|
||||
|
||||
"consola@^2.15.0":
|
||||
"integrity" "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw=="
|
||||
"resolved" "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz"
|
||||
"version" "2.15.3"
|
||||
|
||||
"console-browserify@^1.1.0":
|
||||
"integrity" "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA=="
|
||||
"resolved" "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz"
|
||||
@@ -3197,10 +3225,10 @@
|
||||
"resolved" "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz"
|
||||
"version" "2.6.11"
|
||||
|
||||
"core-js@^3.6.5", "core-js@^3.9.1":
|
||||
"integrity" "sha512-gSjRvzkxQc1zjM/5paAmL4idJBFzuJoo+jDjF1tStYFMV2ERfD02HhahhCGXUyHxQRG4yFKVSdO6g62eoRMcDg=="
|
||||
"resolved" "https://registry.npmjs.org/core-js/-/core-js-3.9.1.tgz"
|
||||
"version" "3.9.1"
|
||||
"core-js@^3.10.2", "core-js@^3.6.5":
|
||||
"integrity" "sha512-W+2oVYeNghuBr3yTzZFQ5rfmjZtYB/Ubg87R5YOmlGrIb+Uw9f7qjUbhsj+/EkXhcV7eOD3jiM4+sgraX3FZUw=="
|
||||
"resolved" "https://registry.npmjs.org/core-js/-/core-js-3.10.2.tgz"
|
||||
"version" "3.10.2"
|
||||
|
||||
"core-util-is@~1.0.0", "core-util-is@1.0.2":
|
||||
"integrity" "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
||||
@@ -3363,15 +3391,15 @@
|
||||
"domutils" "^1.7.0"
|
||||
"nth-check" "^1.0.2"
|
||||
|
||||
"css-select@^3.1.2":
|
||||
"integrity" "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA=="
|
||||
"resolved" "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz"
|
||||
"version" "3.1.2"
|
||||
"css-select@^4.1.2":
|
||||
"integrity" "sha512-nu5ye2Hg/4ISq4XqdLY2bEatAcLIdt3OYGFc9Tm9n7VSlFBcfRv0gBNksHRgSdUDQGtN3XrZ94ztW+NfzkFSUw=="
|
||||
"resolved" "https://registry.npmjs.org/css-select/-/css-select-4.1.2.tgz"
|
||||
"version" "4.1.2"
|
||||
dependencies:
|
||||
"boolbase" "^1.0.0"
|
||||
"css-what" "^4.0.0"
|
||||
"domhandler" "^4.0.0"
|
||||
"domutils" "^2.4.3"
|
||||
"css-what" "^5.0.0"
|
||||
"domhandler" "^4.2.0"
|
||||
"domutils" "^2.6.0"
|
||||
"nth-check" "^2.0.0"
|
||||
|
||||
"css-tree@1.0.0-alpha.37":
|
||||
@@ -3395,10 +3423,10 @@
|
||||
"resolved" "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz"
|
||||
"version" "3.3.0"
|
||||
|
||||
"css-what@^4.0.0":
|
||||
"integrity" "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A=="
|
||||
"resolved" "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz"
|
||||
"version" "4.0.0"
|
||||
"css-what@^5.0.0":
|
||||
"integrity" "sha512-qxyKHQvgKwzwDWC/rGbT821eJalfupxYW2qbSJSAtdSTimsr/MlaGONoNLllaUPZWf8QnbcKM/kPVYUQuEKAFA=="
|
||||
"resolved" "https://registry.npmjs.org/css-what/-/css-what-5.0.0.tgz"
|
||||
"version" "5.0.0"
|
||||
|
||||
"css-what@2.1":
|
||||
"integrity" "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg=="
|
||||
@@ -3624,7 +3652,7 @@
|
||||
"resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz"
|
||||
"version" "0.1.3"
|
||||
|
||||
"deepmerge@^1.2.0", "deepmerge@^1.5.0", "deepmerge@^1.5.2":
|
||||
"deepmerge@^1.2.0", "deepmerge@^1.5.2":
|
||||
"integrity" "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ=="
|
||||
"resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz"
|
||||
"version" "1.5.2"
|
||||
@@ -3811,10 +3839,10 @@
|
||||
dependencies:
|
||||
"utila" "~0.4"
|
||||
|
||||
"dom-serializer@^1.0.1", "dom-serializer@~1.2.0":
|
||||
"integrity" "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA=="
|
||||
"resolved" "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz"
|
||||
"version" "1.2.0"
|
||||
"dom-serializer@^1.0.1", "dom-serializer@^1.3.1":
|
||||
"integrity" "sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q=="
|
||||
"resolved" "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.1.tgz"
|
||||
"version" "1.3.1"
|
||||
dependencies:
|
||||
"domelementtype" "^2.0.1"
|
||||
"domhandler" "^4.0.0"
|
||||
@@ -3843,10 +3871,10 @@
|
||||
"resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz"
|
||||
"version" "1.3.1"
|
||||
|
||||
"domelementtype@^2.0.1", "domelementtype@^2.1.0":
|
||||
"integrity" "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w=="
|
||||
"resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz"
|
||||
"version" "2.1.0"
|
||||
"domelementtype@^2.0.1", "domelementtype@^2.2.0":
|
||||
"integrity" "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A=="
|
||||
"resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz"
|
||||
"version" "2.2.0"
|
||||
|
||||
"domelementtype@1":
|
||||
"integrity" "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
|
||||
@@ -3860,12 +3888,12 @@
|
||||
dependencies:
|
||||
"domelementtype" "1"
|
||||
|
||||
"domhandler@^4.0.0":
|
||||
"integrity" "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA=="
|
||||
"resolved" "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz"
|
||||
"version" "4.0.0"
|
||||
"domhandler@^4.0.0", "domhandler@^4.1.0", "domhandler@^4.2.0":
|
||||
"integrity" "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA=="
|
||||
"resolved" "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz"
|
||||
"version" "4.2.0"
|
||||
dependencies:
|
||||
"domelementtype" "^2.1.0"
|
||||
"domelementtype" "^2.2.0"
|
||||
|
||||
"domutils@^1.5.1", "domutils@1.5.1":
|
||||
"integrity" "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8="
|
||||
@@ -3883,14 +3911,14 @@
|
||||
"dom-serializer" "0"
|
||||
"domelementtype" "1"
|
||||
|
||||
"domutils@^2.4.3", "domutils@^2.4.4":
|
||||
"integrity" "sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA=="
|
||||
"resolved" "https://registry.npmjs.org/domutils/-/domutils-2.4.4.tgz"
|
||||
"version" "2.4.4"
|
||||
"domutils@^2.5.2", "domutils@^2.6.0":
|
||||
"integrity" "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA=="
|
||||
"resolved" "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz"
|
||||
"version" "2.6.0"
|
||||
dependencies:
|
||||
"dom-serializer" "^1.0.1"
|
||||
"domelementtype" "^2.0.1"
|
||||
"domhandler" "^4.0.0"
|
||||
"domelementtype" "^2.2.0"
|
||||
"domhandler" "^4.2.0"
|
||||
|
||||
"dot-prop@^5.2.0":
|
||||
"integrity" "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A=="
|
||||
@@ -4167,7 +4195,7 @@
|
||||
"resolved" "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz"
|
||||
"version" "1.1.2"
|
||||
|
||||
"entities@^2.0.0", "entities@~2.1.0":
|
||||
"entities@^2.0.0":
|
||||
"integrity" "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w=="
|
||||
"resolved" "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz"
|
||||
"version" "2.1.0"
|
||||
@@ -5039,15 +5067,6 @@
|
||||
"inherits" "^2.0.1"
|
||||
"readable-stream" "^2.0.0"
|
||||
|
||||
"fs-extra@^5.0.0":
|
||||
"integrity" "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ=="
|
||||
"resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz"
|
||||
"version" "5.0.0"
|
||||
dependencies:
|
||||
"graceful-fs" "^4.1.2"
|
||||
"jsonfile" "^4.0.0"
|
||||
"universalify" "^0.1.0"
|
||||
|
||||
"fs-extra@^7.0.1":
|
||||
"integrity" "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw=="
|
||||
"resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz"
|
||||
@@ -5626,14 +5645,14 @@
|
||||
"inherits" "^2.0.1"
|
||||
"readable-stream" "^3.1.1"
|
||||
|
||||
"htmlparser2@^6.0.0":
|
||||
"integrity" "sha512-numTQtDZMoh78zJpaNdJ9MXb2cv5G3jwUoe3dMQODubZvLoGvTE/Ofp6sHvH8OGKcN/8A47pGLi/k58xHP/Tfw=="
|
||||
"resolved" "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.0.tgz"
|
||||
"version" "6.0.0"
|
||||
"htmlparser2@^6.1.0":
|
||||
"integrity" "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A=="
|
||||
"resolved" "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz"
|
||||
"version" "6.1.0"
|
||||
dependencies:
|
||||
"domelementtype" "^2.0.1"
|
||||
"domhandler" "^4.0.0"
|
||||
"domutils" "^2.4.4"
|
||||
"domutils" "^2.5.2"
|
||||
"entities" "^2.0.0"
|
||||
|
||||
"http-cache-semantics@^4.0.0":
|
||||
@@ -5896,11 +5915,6 @@
|
||||
"strip-ansi" "^6.0.0"
|
||||
"through" "^2.3.6"
|
||||
|
||||
"install@^0.13.0":
|
||||
"integrity" "sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA=="
|
||||
"resolved" "https://registry.npmjs.org/install/-/install-0.13.0.tgz"
|
||||
"version" "0.13.0"
|
||||
|
||||
"internal-ip@^4.3.0":
|
||||
"integrity" "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg=="
|
||||
"resolved" "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz"
|
||||
@@ -6325,6 +6339,11 @@
|
||||
"merge-stream" "^2.0.0"
|
||||
"supports-color" "^7.0.0"
|
||||
|
||||
"jquery@1.9.1 - 3":
|
||||
"integrity" "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw=="
|
||||
"resolved" "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz"
|
||||
"version" "3.6.0"
|
||||
|
||||
"js-message@1.0.5":
|
||||
"integrity" "sha1-IwDSSxrwjondCVvBpMnJz8uJLRU="
|
||||
"resolved" "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz"
|
||||
@@ -7183,6 +7202,11 @@
|
||||
dependencies:
|
||||
"lower-case" "^1.1.1"
|
||||
|
||||
"node-fetch@^2.6.1":
|
||||
"integrity" "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
|
||||
"resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz"
|
||||
"version" "2.6.1"
|
||||
|
||||
"node-forge@^0.10.0":
|
||||
"integrity" "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA=="
|
||||
"resolved" "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz"
|
||||
@@ -7705,7 +7729,7 @@
|
||||
dependencies:
|
||||
"parse5" "^5.1.1"
|
||||
|
||||
"parse5-htmlparser2-tree-adapter@^6.0.0":
|
||||
"parse5-htmlparser2-tree-adapter@^6.0.1":
|
||||
"integrity" "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA=="
|
||||
"resolved" "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz"
|
||||
"version" "6.0.1"
|
||||
@@ -7717,7 +7741,7 @@
|
||||
"resolved" "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz"
|
||||
"version" "5.1.1"
|
||||
|
||||
"parse5@^6.0.0", "parse5@^6.0.1":
|
||||
"parse5@^6.0.1":
|
||||
"integrity" "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
|
||||
"resolved" "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz"
|
||||
"version" "6.0.1"
|
||||
@@ -7732,11 +7756,6 @@
|
||||
"resolved" "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz"
|
||||
"version" "0.1.1"
|
||||
|
||||
"pasition@^1.0.1":
|
||||
"integrity" "sha512-hsUNLhS7e5uWGkTtgbxoHMzCUb0PeboQelyqPmpRkAk26AkKal0Z6JfYWhjIEhZHIYzJTfr6Aom/BpBPrZXHnA=="
|
||||
"resolved" "https://registry.npmjs.org/pasition/-/pasition-1.0.3.tgz"
|
||||
"version" "1.0.3"
|
||||
|
||||
"path-browserify@0.0.1":
|
||||
"integrity" "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ=="
|
||||
"resolved" "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz"
|
||||
@@ -7906,6 +7925,16 @@
|
||||
dependencies:
|
||||
"ts-pnp" "^1.1.6"
|
||||
|
||||
"popper.js@^1.16.1":
|
||||
"integrity" "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ=="
|
||||
"resolved" "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz"
|
||||
"version" "1.16.1"
|
||||
|
||||
"portal-vue@^2.1.7":
|
||||
"integrity" "sha512-+yCno2oB3xA7irTt0EU5Ezw22L2J51uKAacE/6hMPMoO/mx3h4rXFkkBkT4GFsMDv/vEe8TNKC3ujJJ0PTwb6g=="
|
||||
"resolved" "https://registry.npmjs.org/portal-vue/-/portal-vue-2.1.7.tgz"
|
||||
"version" "2.1.7"
|
||||
|
||||
"portfinder@^1.0.16", "portfinder@^1.0.26":
|
||||
"integrity" "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ=="
|
||||
"resolved" "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz"
|
||||
@@ -8726,11 +8755,6 @@
|
||||
"resolved" "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz"
|
||||
"version" "1.6.1"
|
||||
|
||||
"request-frame@^1.5.3":
|
||||
"integrity" "sha1-gTwxYNmwI1g4iaqpdzibaPyqLj0="
|
||||
"resolved" "https://registry.npmjs.org/request-frame/-/request-frame-1.5.3.tgz"
|
||||
"version" "1.5.3"
|
||||
|
||||
"request@^2.88.2":
|
||||
"integrity" "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw=="
|
||||
"resolved" "https://registry.npmjs.org/request/-/request-2.88.2.tgz"
|
||||
@@ -9780,9 +9804,9 @@
|
||||
"has-flag" "^4.0.0"
|
||||
|
||||
"supports-color@^7.1.0":
|
||||
"integrity" "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g=="
|
||||
"resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz"
|
||||
"version" "7.1.0"
|
||||
"integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="
|
||||
"resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
|
||||
"version" "7.2.0"
|
||||
dependencies:
|
||||
"has-flag" "^4.0.0"
|
||||
|
||||
@@ -10527,6 +10551,11 @@
|
||||
"esquery" "^1.4.0"
|
||||
"lodash" "^4.17.15"
|
||||
|
||||
"vue-functional-data-merge@^3.1.0":
|
||||
"integrity" "sha512-leT4kdJVQyeZNY1kmnS1xiUlQ9z1B/kdBFCILIjYYQDqZgLqCLa0UhjSSeRX6c3mUe6U5qYeM8LrEqkHJ1B4LA=="
|
||||
"resolved" "https://registry.npmjs.org/vue-functional-data-merge/-/vue-functional-data-merge-3.1.0.tgz"
|
||||
"version" "3.1.0"
|
||||
|
||||
"vue-hot-reload-api@^2.3.0":
|
||||
"integrity" "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog=="
|
||||
"resolved" "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz"
|
||||
@@ -10583,7 +10612,7 @@
|
||||
"resolved" "https://registry.npm.taobao.org/vue-waterfall-plugin/download/vue-waterfall-plugin-1.1.0.tgz"
|
||||
"version" "1.1.0"
|
||||
|
||||
"vue@^2 || ^3.0.0-0", "vue@^2.0.0", "vue@^2.5.17", "vue@^2.6.10", "vue@^2.6.12":
|
||||
"vue@^2 || ^3.0.0-0", "vue@^2.0.0", "vue@^2.5.17", "vue@^2.5.18", "vue@^2.6.10", "vue@^2.6.12":
|
||||
"integrity" "sha1-9evU+mvShpQD4pqJau1JBEVskSM="
|
||||
"resolved" "https://registry.npm.taobao.org/vue/download/vue-2.6.12.tgz?cache=0&sync_timestamp=1602778254831&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue%2Fdownload%2Fvue-2.6.12.tgz"
|
||||
"version" "2.6.12"
|
||||
@@ -10879,22 +10908,25 @@
|
||||
"event-emitter" "^0.3.5"
|
||||
"eventemitter3" "^4.0.7"
|
||||
|
||||
"xgplayer@2.17.13":
|
||||
"integrity" "sha512-4wVBmVx1ShtItdrArNDu4z9ZiKR5KkLDVhHr/kZfhAT2gOfv4+qUxfRJ3BkyGK8UbuZ5+c4bIvrRZdze9koxww=="
|
||||
"resolved" "https://registry.npmjs.org/xgplayer/-/xgplayer-2.17.13.tgz"
|
||||
"version" "2.17.13"
|
||||
"xgplayer-subtitles@^1.0.9":
|
||||
"integrity" "sha512-9or3CvDzKVudhzyljveV2/kV1Y13W+T57c+ilquA+Ysym+cY4A1v9Z8umq2KM4JNQPFGKWRvgfGjl5YpICnI3w=="
|
||||
"resolved" "https://registry.npmjs.org/xgplayer-subtitles/-/xgplayer-subtitles-1.0.9.tgz"
|
||||
"version" "1.0.9"
|
||||
dependencies:
|
||||
"event-emitter" "^0.3.5"
|
||||
|
||||
"xgplayer@2.19.1":
|
||||
"integrity" "sha512-gfl1F56UxtiH8krKaaOxfZlMWvLGIP8hpWeSthhMVwqcg7xoiW0VKSi6qe7OYt9iSURmNwa59qoBmJtZKcnTxQ=="
|
||||
"resolved" "https://registry.npmjs.org/xgplayer/-/xgplayer-2.19.1.tgz"
|
||||
"version" "2.19.1"
|
||||
dependencies:
|
||||
"chalk" "^2.3.2"
|
||||
"commander" "^2.15.1"
|
||||
"danmu.js" "^0.3.3"
|
||||
"deepmerge" "^1.5.0"
|
||||
"downloadjs" "1.4.7"
|
||||
"draggabilly" "^2.2.0"
|
||||
"event-emitter" "^0.3.5"
|
||||
"fs-extra" "^5.0.0"
|
||||
"install" "^0.13.0"
|
||||
"pasition" "^1.0.1"
|
||||
"request-frame" "^1.5.3"
|
||||
"xgplayer-subtitles" "^1.0.9"
|
||||
|
||||
"xregexp@^4.2.4":
|
||||
"integrity" "sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g=="
|
||||
|
||||
Reference in New Issue
Block a user