Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
52a762ef0e | ||
|
|
aa64c4c452 | ||
|
|
7d94cbd114 | ||
|
|
c7d1d208b8 | ||
|
|
122d4bd10c | ||
|
|
3e26f9cb51 | ||
|
|
9012be09ad | ||
|
|
bd85987e72 | ||
|
|
5c28cf19ed | ||
|
|
4e06e30a5c | ||
|
|
15fa6f3bfb | ||
|
|
1e2bc39bde | ||
|
|
551d11c802 | ||
|
|
c4d8662b51 | ||
|
|
dea6306acb | ||
|
|
420bf12c79 | ||
|
|
9b1995e596 | ||
|
|
b89b56cce4 | ||
|
|
84e2f456f8 | ||
|
|
3e345bf57b | ||
|
|
d70da3dc3e | ||
|
|
8f6a8fef07 | ||
|
|
bda6e32b04 | ||
|
|
51fd2c47da | ||
|
|
5b3a2efc42 | ||
|
|
791febea06 | ||
|
|
402aa62589 |
12
.github/workflows/release.yml
vendored
@@ -21,17 +21,7 @@ jobs:
|
||||
|
||||
- run: |
|
||||
yarn
|
||||
yarn electron:build
|
||||
yarn release
|
||||
shell: pwsh
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
files: |
|
||||
dist_electron/*.exe
|
||||
dist_electron/*.dmg
|
||||
dist_electron/*.snap
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
38
README.md
@@ -1,48 +1,42 @@
|
||||
<p align="center">
|
||||
<img src="https://i.loli.net/2020/02/22/jvfBbnEuOq5RS9J.png" >
|
||||
<img src="https://i.loli.net/2020/05/07/9kLvPnWVCp7538c.png" >
|
||||
</p>
|
||||
<p align="center">
|
||||
<img src="https://forthebadge.com/images/badges/built-with-love.svg">
|
||||
<img src="https://forthebadge.com/images/badges/made-with-vue.svg">
|
||||
<p>
|
||||
<p align="center">
|
||||
<img alt="GitHub" src="https://img.shields.io/github/license/Hunlongyu/ZY-Player?style=for-the-badge">
|
||||
<img src="https://github.com/aleen42/badges/raw/master/src/visual_studio_code_flat_square.svg?sanitize=true">
|
||||
<img src="https://github.com/aleen42/badges/raw/master/src/vue_flat_square.svg?sanitize=true">
|
||||
<img src="https://github.com/aleen42/badges/raw/master/src/javascript_flat_square.svg?sanitize=true">
|
||||
<img src="https://github.com/aleen42/badges/raw/master/src/eslint_flat_square.svg?sanitize=true">
|
||||
</p>
|
||||
<p align="center">
|
||||
<img alt="GitHub All Releases" src="https://img.shields.io/github/downloads/Hunlongyu/ZY-Player/total?style=for-the-badge">
|
||||
<img alt="GitHub release (latest by date including pre-releases)" src="https://img.shields.io/github/v/release/Hunlongyu/ZY-Player?include_prereleases&style=for-the-badge">
|
||||
<img alt="GitHub" src="https://img.shields.io/github/license/Hunlongyu/ZY-Player?style=for-the-badge">
|
||||
<img src="https://img.shields.io/github/workflow/status/Hunlongyu/ZY-Player/release-build?style=for-the-badge">
|
||||
<p>
|
||||
|
||||
|
||||
## ZY Player
|
||||
|
||||
|
||||
### 新版
|
||||
### 新版内测
|
||||
|
||||
新版本: v0.9.9 已开发完, 现进行内测. [内侧公告](https://github.com/Hunlongyu/ZY-Player/issues/24)
|
||||
新版本: v0.9.x 已开发完, 现进行内测, [点击查看内测公告](https://github.com/Hunlongyu/ZY-Player/issues/24)
|
||||
|
||||
[点击这里可以查看开发计划](https://github.com/Hunlongyu/ZY-Player/projects/3).
|
||||
|
||||
大家有什么新的需求建议欢迎踊跃提出[点击这里提意见](https://github.com/Hunlongyu/ZY-Player/issues/14).
|
||||
## v0.9.1 版本:
|
||||
大家有什么新的需求建议欢迎踊跃提出[点击这里提意见](https://github.com/Hunlongyu/ZY-Player/issues/14)
|
||||
|
||||
#### 下载 (目前最新版: v0.9.1):
|
||||
1. [Github -- 官方下载](https://github.com/Hunlongyu/ZY-Player/releases)
|
||||
|
||||
2. [蓝奏云 -- 快速下载](https://www.lanzous.com/b04s6a3re) 密码:95px
|
||||
|
||||
#### 截图:
|
||||
主界面 ⬇
|
||||

|
||||
暗黑主题 ⬇
|
||||

|
||||
搜索 ⬇
|
||||

|
||||
搜索结果 ⬇
|
||||

|
||||
详情 ⬇
|
||||

|
||||
播放 ⬇
|
||||

|
||||
收藏 ⬇
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
### 重要:
|
||||
所有资源来自网上, 该软件不参与任何制作, 上传, 储存, 下载等内容. 该软件仅供学习参考, 请于安装后24小时内删除.
|
||||
|
||||
|
Before Width: | Height: | Size: 233 KiB After Width: | Height: | Size: 136 KiB |
|
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 9.8 KiB |
|
Before Width: | Height: | Size: 831 B After Width: | Height: | Size: 838 B |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 353 KiB After Width: | Height: | Size: 353 KiB |
@@ -4,7 +4,7 @@
|
||||
<meta charset="utf-8">
|
||||
<meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no,minimal-ui">
|
||||
<meta name="referrer" content="no-referrer">
|
||||
<title>xgplayer</title>
|
||||
<title>ZY Player</title>
|
||||
<style type="text/css">
|
||||
html, body {width:100%;height:100%;margin:0;padding:0;overflow:hidden;}
|
||||
</style>
|
||||
@@ -19,9 +19,7 @@
|
||||
if (r!=null)return unescape(r[2]); return null;
|
||||
}
|
||||
let link = window.location.href
|
||||
let title = get('title')
|
||||
let url = get('url')
|
||||
document.title = title
|
||||
let player = new HlsJsPlayer({
|
||||
"id": "mse",
|
||||
"url": url,
|
||||
|
||||
21
package.json
@@ -1,7 +1,12 @@
|
||||
{
|
||||
"name": "zyplayer",
|
||||
"version": "0.9.11",
|
||||
"name": "zy",
|
||||
"version": "0.9.31",
|
||||
"private": true,
|
||||
"author": {
|
||||
"name": "Hunlongyu",
|
||||
"email": "hunlongyu@gmail.com"
|
||||
},
|
||||
"description": "ZY Player 资源播放器",
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
"build": "vue-cli-service build",
|
||||
@@ -9,12 +14,14 @@
|
||||
"electron:build": "vue-cli-service electron:build",
|
||||
"dev": "vue-cli-service electron:serve",
|
||||
"postinstall": "electron-builder install-app-deps",
|
||||
"postuninstall": "electron-builder install-app-deps"
|
||||
"postuninstall": "electron-builder install-app-deps",
|
||||
"electron:generate-icons": "electron-icon-builder --input=./public/icon.png --output=build --flatten",
|
||||
"release": "vue-cli-service electron:build -p always"
|
||||
},
|
||||
"main": "background.js",
|
||||
"dependencies": {
|
||||
"axios": "^0.19.2",
|
||||
"core-js": "^3.6.4",
|
||||
"core-js": "^3.6.5",
|
||||
"dexie": "^2.0.4",
|
||||
"electron-updater": "^4.2.5",
|
||||
"element-ui": "^2.13.1",
|
||||
@@ -26,8 +33,8 @@
|
||||
"vue": "^2.6.11",
|
||||
"vue-i18n": "^8.17.0",
|
||||
"vuex": "^3.1.3",
|
||||
"xgplayer": "^2.6.14",
|
||||
"xgplayer-hls.js": "^2.1.6"
|
||||
"xgplayer": "^2.6.19",
|
||||
"xgplayer-hls.js": "^2.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vue/cli-plugin-babel": "~4.3.0",
|
||||
@@ -37,7 +44,7 @@
|
||||
"@vue/eslint-config-standard": "^5.1.2",
|
||||
"babel-eslint": "^10.1.0",
|
||||
"babel-plugin-component": "^1.1.1",
|
||||
"electron": "^8.2.1",
|
||||
"electron": "^8.2.5",
|
||||
"eslint": "^6.7.2",
|
||||
"eslint-plugin-import": "^2.20.2",
|
||||
"eslint-plugin-node": "^11.1.0",
|
||||
|
||||
BIN
public/icon.png
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 80 KiB |
BIN
src/assets/image/green.png
Normal file
|
After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 22 KiB |
@@ -34,9 +34,28 @@
|
||||
--d-bsc-2: 0 -4px 23px 0 #38dd7733;
|
||||
--d-bsc-hover: 0 14px 26px -12px #38dd7733, 0 4px 23px 0 #38dd7722, 0 8px 10px -5px #38dd7711;
|
||||
--d-bsc-scroll: inset 0 0 5px #38dd7705;
|
||||
|
||||
// green
|
||||
--g-c-0: #EAEF9D;
|
||||
--g-c-1: #EAEF9D11;
|
||||
--g-c-2: #EAEF9D22;
|
||||
--g-c-3: #EAEF9D33;
|
||||
--g-c-5: #EAEF9D55;
|
||||
--g-c-8: #EAEF9D88;
|
||||
--g-c-9: #EAEF9D99;
|
||||
--g-fc-1: #80B155;
|
||||
--g-fc-2: #C1D95CAA;
|
||||
--g-fc-3: #C1D95C;
|
||||
--g-bgc-1: #336A29;
|
||||
--g-bgc-2: #498428;
|
||||
--g-bsc: 0 3px 1px -2px #C1D95C33, 0 2px 2px 0 #C1D95C22, 0 1px 5px 0 #C1D95C11;
|
||||
--g-bsc-2: 0 -4px 23px 0 #C1D95C33;
|
||||
--g-bsc-hover: 0 14px 26px -12px #C1D95C33, 0 4px 23px 0 #C1D95C22, 0 8px 10px -5px #C1D95C11;
|
||||
--g-bsc-scroll: inset 0 0 5px #C1D95C05;
|
||||
}
|
||||
|
||||
@import './theme/light.scss';
|
||||
@import './theme/dark.scss';
|
||||
@import './theme/green.scss';
|
||||
|
||||
@import './style.scss';
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
.theme-dark{
|
||||
background-color: var(--d-bgc-1);
|
||||
.xgplayer-skin-default video{
|
||||
background-color: var(--d-bgc-2);
|
||||
}
|
||||
.el-pagination{
|
||||
background-color: var(--d-bgc-1);
|
||||
color: var(--d-fc-1);
|
||||
@@ -134,7 +131,7 @@
|
||||
}
|
||||
}
|
||||
.detail{
|
||||
color: var(--d-fc-1);
|
||||
color: var(--d-fc-1) !important;
|
||||
background-color:var(--d-bgc-1);
|
||||
box-shadow: var(--d-bsc-2);
|
||||
.detail-content{
|
||||
|
||||
346
src/assets/scss/theme/green.scss
Normal file
@@ -0,0 +1,346 @@
|
||||
.theme-green{
|
||||
background-color: var(--g-bgc-1);
|
||||
.el-pagination{
|
||||
background-color: var(--g-bgc-1);
|
||||
color: var(--g-fc-1);
|
||||
.el-pagination__total, .el-pagination__jump, .el-input__inner{
|
||||
color: var(--g-fc-1);
|
||||
background-color: var(--g-bgc-1);
|
||||
}
|
||||
.el-input__inner{
|
||||
border-color: var(--g-c-3);
|
||||
}
|
||||
.el-pager{
|
||||
.number{
|
||||
background-color: var(--g-bgc-1);
|
||||
}
|
||||
.number:hover{
|
||||
color: var(--g-c-8);
|
||||
}
|
||||
.active{
|
||||
color: var(--g-c-9);
|
||||
}
|
||||
}
|
||||
.more, .btn-next, .btn-prev{
|
||||
background-color: var(--g-bgc-1);
|
||||
&:hover{
|
||||
color: var(--g-c-8);
|
||||
}
|
||||
}
|
||||
}
|
||||
.zy-select{
|
||||
color: var(--g-fc-1);
|
||||
background-color: var(--g-bgc-1);
|
||||
box-shadow: var(--g-bsc);
|
||||
&:hover{
|
||||
box-shadow: var(--g-bsc-hover);
|
||||
}
|
||||
.vs-options{
|
||||
background-color: var(--g-bgc-1);
|
||||
box-shadow: var(--g-bsc);
|
||||
ul{
|
||||
li{
|
||||
&:hover{
|
||||
background-color: var(--g-c-1);
|
||||
}
|
||||
&.active{
|
||||
background-color: var(--g-c-3);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.zy-table{
|
||||
color: var(--g-fc-2);
|
||||
.tHead{
|
||||
background-color: var(--g-bgc-1);
|
||||
border-bottom-color: var(--g-c-3);
|
||||
}
|
||||
.tBody{
|
||||
border-bottom-color: var(--g-c-3);
|
||||
ul{
|
||||
li{
|
||||
border-bottom-color: var(--g-c-2);
|
||||
&:hover{
|
||||
animation: d-tableHoverAni 0.2s ease both;
|
||||
@keyframes d-tableHoverAni {
|
||||
to{
|
||||
box-shadow: var(--g-bsc-hover);
|
||||
}
|
||||
}
|
||||
}
|
||||
span{
|
||||
&.btn:hover{
|
||||
color: var(--g-fc-3)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.tFooter{
|
||||
.tFooter-span{
|
||||
color: var(--g-fc-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
.zy-scroll{
|
||||
&:hover{
|
||||
&::-webkit-scrollbar-thumb {
|
||||
box-shadow: var(--g-bsc-scroll);
|
||||
background: var(--g-c-3);
|
||||
}
|
||||
&::-webkit-scrollbar-track {
|
||||
box-shadow: var(--g-bsc-scroll);
|
||||
background: var(--bgc);
|
||||
}
|
||||
}
|
||||
}
|
||||
.zy-loading{
|
||||
.loader{
|
||||
color: var(--g-c-3);
|
||||
}
|
||||
}
|
||||
.zy-body{
|
||||
background-color: var(--g-bgc-2);
|
||||
}
|
||||
.aside{
|
||||
.zy-svg{
|
||||
svg{
|
||||
stroke: var(--g-c-0);
|
||||
}
|
||||
&:hover{
|
||||
background-color: var(--g-c-2);
|
||||
}
|
||||
&.active{
|
||||
svg{
|
||||
stroke: var(--g-c-0);
|
||||
stroke-width: 2;
|
||||
fill: var(--g-c-2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.frame{
|
||||
span{
|
||||
&.min{
|
||||
background-color: #ffbe2a;
|
||||
}
|
||||
&.close{
|
||||
background-color: #ff5f56;
|
||||
}
|
||||
}
|
||||
}
|
||||
.detail{
|
||||
color: var(--g-fc-1);
|
||||
background-color:var(--g-bgc-1);
|
||||
box-shadow: var(--g-bsc-2);
|
||||
.detail-content{
|
||||
.detail-close{
|
||||
svg{
|
||||
stroke-width: 1;
|
||||
stroke: var(--g-c-8);
|
||||
&:hover{
|
||||
stroke-width: 2px;
|
||||
stroke: var(--g-c-9);
|
||||
}
|
||||
}
|
||||
}
|
||||
.detail-body{
|
||||
.info, .desc, .m3u8_urls, .mp4_urls{
|
||||
border-color: var(--g-c-2);
|
||||
}
|
||||
.m3u8_urls, .mp4_urls{
|
||||
.box{
|
||||
span{
|
||||
border-color: var(--g-c-5);
|
||||
&:hover{
|
||||
color: var(--g-fc-2);
|
||||
background-color: var(--g-c-1);
|
||||
border-color: var(--g-c-8);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.film{
|
||||
.top{
|
||||
.search{
|
||||
background-color: var(--g-bgc-1);
|
||||
box-shadow: var(--g-bsc);
|
||||
&:hover{
|
||||
box-shadow: var(--g-bsc-hover);
|
||||
}
|
||||
svg{
|
||||
stroke: var(--g-c-0);
|
||||
stroke-width: 1;
|
||||
fill: none;
|
||||
}
|
||||
.search-box{
|
||||
background-color: var(--g-bgc-1);
|
||||
}
|
||||
&.active{
|
||||
box-shadow: var(--g-bsc-hover);
|
||||
svg{
|
||||
stroke-width: 1.5;
|
||||
fill: var(--g-c-2);
|
||||
}
|
||||
}
|
||||
input{
|
||||
color: var(--g-fc-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
.middle{
|
||||
background-color: var(--g-bgc-1);
|
||||
box-shadow: var(--g-bsc);
|
||||
}
|
||||
}
|
||||
.play{
|
||||
background-color: var(--g-bgc-1);
|
||||
box-shadow: var(--g-bsc);
|
||||
.title{
|
||||
color: var(--g-fc-1);
|
||||
}
|
||||
.box{
|
||||
.more{
|
||||
span{
|
||||
svg{
|
||||
stroke: var(--g-c-5);
|
||||
stroke-width: 1;
|
||||
fill: none;
|
||||
}
|
||||
&:hover{
|
||||
svg{
|
||||
stroke: var(--g-c-8);
|
||||
stroke-width: 1.5;
|
||||
fill: var(--g-c-2);
|
||||
}
|
||||
}
|
||||
&.active{
|
||||
svg{
|
||||
stroke: var(--g-c-9);
|
||||
stroke-width: 2;
|
||||
fill: var(--g-c-3);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.list{
|
||||
border: 1px solid var(--g-c-3);
|
||||
background-color: var(--g-bgc-2);
|
||||
.list-top{
|
||||
color: var(--g-fc-2);
|
||||
.list-top-close{
|
||||
svg{
|
||||
stroke: var(--g-c-5);
|
||||
stroke-width: 1;
|
||||
fill: none;
|
||||
&:hover{
|
||||
stroke: var(--g-c-8);
|
||||
stroke-width: 1.5;
|
||||
fill: var(--g-c-2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.list-body{
|
||||
.list-item{
|
||||
li{
|
||||
color: var(--g-fc-1);
|
||||
&.active{
|
||||
background-color: var(--g-c-2);
|
||||
color: var(--g-fc-3);
|
||||
}
|
||||
}
|
||||
}
|
||||
.list-history{
|
||||
li{
|
||||
.title{
|
||||
color: var(--g-fc-1);
|
||||
}
|
||||
&.active{
|
||||
background-color: var(--g-c-2);
|
||||
.title{
|
||||
color: var(--g-fc-3);
|
||||
}
|
||||
}
|
||||
&:hover{
|
||||
background-color: var(--g-c-3);
|
||||
.detail-delete{
|
||||
display: inline-block;
|
||||
color: var(--g-fc-2);
|
||||
}
|
||||
}
|
||||
.detail-delete{
|
||||
&:hover{
|
||||
background-color: var(--g-c-2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.play-mask{
|
||||
background-color: var(--g-bgc-1);
|
||||
color: var(--g-fc-1);
|
||||
}
|
||||
}
|
||||
.star{
|
||||
background-color: var(--g-bgc-1);
|
||||
box-shadow: var(--g-bsc);
|
||||
}
|
||||
.setting{
|
||||
background-color: var(--g-bgc-1);
|
||||
box-shadow: var(--g-bsc);
|
||||
.info{
|
||||
a{
|
||||
color: var(--g-fc-1);
|
||||
&:hover{
|
||||
color: var(--g-fc-2);
|
||||
}
|
||||
}
|
||||
}
|
||||
.theme{
|
||||
.title{
|
||||
color: var(--g-fc-1);
|
||||
}
|
||||
.theme-item{
|
||||
box-shadow: var(--g-bsc);
|
||||
&:hover{
|
||||
box-shadow: var(--g-bsc-hover);
|
||||
.theme-name{
|
||||
color: var(--g-fc-2)
|
||||
}
|
||||
}
|
||||
.theme-name{
|
||||
color: var(--g-fc-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
.qrcode{
|
||||
.title{
|
||||
color: var(--g-fc-1);
|
||||
}
|
||||
.qrcode-item{
|
||||
box-shadow: var(--g-bsc);
|
||||
}
|
||||
}
|
||||
}
|
||||
.share{
|
||||
background-color: var(--g-bgc-1);
|
||||
color: var(--g-fc-1);
|
||||
border: 1px solid var(--g-c-8);
|
||||
.right{
|
||||
color: var(--g-fc-1);
|
||||
.tops{
|
||||
color: var(--g-fc-2);
|
||||
}
|
||||
}
|
||||
.share-mask{
|
||||
background-color: var(--g-bgc-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,5 @@
|
||||
.theme-light{
|
||||
background-color: var(--l-bgc-1);
|
||||
.xgplayer-skin-default video{
|
||||
background-color: var(--l-bgc-2);
|
||||
}
|
||||
.el-pagination{
|
||||
color: var(--l-fc-1);
|
||||
.el-pagination__total, .el-pagination__jump, .el-input__inner{
|
||||
@@ -221,6 +218,9 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.mask{
|
||||
background-color: var(--l-bgc-1);
|
||||
}
|
||||
}
|
||||
.list{
|
||||
border: 1px solid var(--l-c-3);
|
||||
|
||||
@@ -22,7 +22,7 @@ function createWindow () {
|
||||
width: 1080,
|
||||
height: 720,
|
||||
frame: false,
|
||||
resizable: true,
|
||||
resizable: false,
|
||||
transparent: true,
|
||||
webPreferences: {
|
||||
webSecurity: false,
|
||||
@@ -114,12 +114,26 @@ ipcMain.on('miniOpacity', (e, arg) => {
|
||||
mini.setOpacity(arg)
|
||||
})
|
||||
|
||||
app.on('ready', async () => {
|
||||
if (!process.env.WEBPACK_DEV_SERVER_URL) {
|
||||
createProtocol('app')
|
||||
}
|
||||
createWindow()
|
||||
})
|
||||
const gotTheLock = app.requestSingleInstanceLock()
|
||||
if (!gotTheLock) {
|
||||
app.quit()
|
||||
} else {
|
||||
app.on('second-instance', (event, commandLine, workingDirectory) => {
|
||||
// 当运行第二个实例时,将会聚焦到win这个窗口
|
||||
if (win) {
|
||||
if (win.isMinimized()) win.restore()
|
||||
win.focus()
|
||||
}
|
||||
})
|
||||
|
||||
// 创建 win, 加载应用的其余部分, etc...
|
||||
app.on('ready', () => {
|
||||
if (!process.env.WEBPACK_DEV_SERVER_URL) {
|
||||
createProtocol('app')
|
||||
}
|
||||
createWindow()
|
||||
})
|
||||
}
|
||||
|
||||
// Exit cleanly on request from parent process in development mode.
|
||||
if (isDevelopment) {
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<!-- tags -->
|
||||
<div class="zy-select" @mouseleave="show.tags = false" v-if="site.tags.length > 0">
|
||||
<div class="zy-select" @mouseleave="show.tags = false" v-if="site.tags.length > 0 && keywords.length <= 0">
|
||||
<div class="vs-placeholder" @click="show.tags = true">{{site.tags[tag].title}}</div>
|
||||
<div class="vs-options" v-show="show.tags">
|
||||
<ul>
|
||||
@@ -20,7 +20,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<!-- type -->
|
||||
<div class="zy-select" @mouseleave="show.type = false" v-if="site.tags[tag].children.length > 0">
|
||||
<div class="zy-select" @mouseleave="show.type = false" v-if="site.tags[tag].children.length > 0 && keywords.length <= 0">
|
||||
<div class="vs-placeholder" @click="show.type = true">{{typeName}}</div>
|
||||
<div class="vs-options" v-show="show.type">
|
||||
<ul>
|
||||
@@ -172,18 +172,22 @@ export default {
|
||||
},
|
||||
siteClick (e) {
|
||||
this.site = e
|
||||
this.tb.update = 0
|
||||
this.tb.total = 0
|
||||
this.tag = 0
|
||||
this.id = e.tags[0].id
|
||||
this.tb.loading = true
|
||||
this.show.site = false
|
||||
tools.film_get(e.key, this.id).then(res => {
|
||||
this.tb.list = res.list
|
||||
this.tb.total = res.total
|
||||
this.tb.update = res.update
|
||||
this.tb.loading = false
|
||||
})
|
||||
if (this.keywords.length > 0) {
|
||||
this.searchEvent()
|
||||
} else {
|
||||
this.tb.update = 0
|
||||
this.tb.total = 0
|
||||
this.tb.loading = true
|
||||
tools.film_get(e.key, this.id).then(res => {
|
||||
this.tb.list = res.list
|
||||
this.tb.total = res.total
|
||||
this.tb.update = res.update
|
||||
this.tb.loading = false
|
||||
})
|
||||
}
|
||||
},
|
||||
tagClick (e, n) {
|
||||
this.tb.update = 0
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
<div class="box">
|
||||
<div class="title">{{name}}</div>
|
||||
<div id="xg"></div>
|
||||
<div class="mask zy-loading" v-show="mask">
|
||||
<div class="loader"></div>
|
||||
</div>
|
||||
<div class="more" v-show="more">
|
||||
<span class="zy-svg" @click="nextEvent" v-show="showNext">
|
||||
<svg role="img" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-labelledby="forwardIconTitle">
|
||||
@@ -125,6 +128,7 @@ export default {
|
||||
screenShot: true,
|
||||
keyShortcut: 'on',
|
||||
crossOrigin: true,
|
||||
cssFullscreen: true,
|
||||
defaultPlaybackRate: 1,
|
||||
playbackRate: [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 3, 4, 5]
|
||||
},
|
||||
@@ -134,7 +138,8 @@ export default {
|
||||
more: true,
|
||||
showNext: false,
|
||||
isStar: false,
|
||||
isTop: false
|
||||
isTop: false,
|
||||
mask: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@@ -191,6 +196,7 @@ export default {
|
||||
methods: {
|
||||
...mapMutations(['SET_VIEW', 'SET_DETAIL', 'SET_VIDEO', 'SET_SHARE']),
|
||||
getUrls () {
|
||||
this.mask = true
|
||||
if (this.timer !== null) {
|
||||
clearInterval(this.timer)
|
||||
this.timer = null
|
||||
@@ -225,14 +231,17 @@ export default {
|
||||
} else {
|
||||
this.xg.play()
|
||||
}
|
||||
this.xg.once('play', () => {
|
||||
this.mask = false
|
||||
})
|
||||
this.onPlayVideo()
|
||||
this.xg.once('ended', () => {
|
||||
if (res.m3u8_urls.length > 1 && (res.m3u8_urls.length - 1 > this.video.index)) {
|
||||
this.video.currentTime = 0
|
||||
this.video.index++
|
||||
}
|
||||
this.xg.off('ended')
|
||||
})
|
||||
}).catch(err => {
|
||||
this.$m.error(err)
|
||||
})
|
||||
},
|
||||
changeVideo () {
|
||||
@@ -290,6 +299,7 @@ export default {
|
||||
const v = { ...this.video }
|
||||
const i = v.index + 1
|
||||
if (i < this.right.listData.length) {
|
||||
this.video.currentTime = 0
|
||||
this.video.index++
|
||||
} else {
|
||||
this.$m.warning(this.$t('last_video'))
|
||||
@@ -368,6 +378,7 @@ export default {
|
||||
})
|
||||
},
|
||||
listItemEvent (n) {
|
||||
this.video.currentTime = 0
|
||||
this.video.index = n
|
||||
this.right.show = false
|
||||
this.right.type = ''
|
||||
@@ -428,6 +439,15 @@ export default {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
.mask{
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 600;
|
||||
opacity: 0.98;
|
||||
}
|
||||
}
|
||||
.list{
|
||||
position: absolute;
|
||||
|
||||
@@ -2,7 +2,10 @@
|
||||
<div class="setting">
|
||||
<div class="setting-box zy-scroll" v-if="show.setting">
|
||||
<div class="logo"><img src="@/assets/image/logo.png"></div>
|
||||
<div class="info"><a href="https://github.com/Hunlongyu/ZY-Player">{{$t('website')}}</a><a href="https://github.com/Hunlongyu/ZY-Player/issues/24">{{$t('issues')}}</a></div>
|
||||
<div class="info">
|
||||
<a @click="linkOpen('https://github.com/Hunlongyu/ZY-Player')">{{$t('website')}}</a>
|
||||
<a @click="linkOpen('https://github.com/Hunlongyu/ZY-Player/issues')">v{{pkg.version}} {{$t('issues')}}</a>
|
||||
</div>
|
||||
<div class="change">
|
||||
<div class="zy-select" @mouseleave="show.language = false">
|
||||
<div class="vs-placeholder" @click="show.language = true">{{$t('language')}}</div>
|
||||
@@ -36,6 +39,12 @@
|
||||
</div>
|
||||
<div class="theme-name">Dark</div>
|
||||
</div>
|
||||
<div @click="changeTheme('green')" class="theme-item green">
|
||||
<div class="theme-image">
|
||||
<img src="../assets/image/green.png" alt="">
|
||||
</div>
|
||||
<div class="theme-name">Green</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="qrcode">
|
||||
@@ -53,10 +62,13 @@ import { mapMutations } from 'vuex'
|
||||
import setting from '../lib/dexie/setting'
|
||||
import { sites } from '../lib/site/sites'
|
||||
import '../lib/cloud/index.js'
|
||||
import { shell } from 'electron'
|
||||
import pkg from '../../package.json'
|
||||
export default {
|
||||
name: 'setting',
|
||||
data () {
|
||||
return {
|
||||
pkg: pkg,
|
||||
s: {},
|
||||
languages: [
|
||||
{
|
||||
@@ -104,6 +116,9 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
...mapMutations(['SET_THEME', 'SET_LANGUAGE', 'SET_SITE']),
|
||||
linkOpen (e) {
|
||||
shell.openExternal(e)
|
||||
},
|
||||
languageClick (e) {
|
||||
this.language = e
|
||||
this.show.language = false
|
||||
@@ -169,6 +184,7 @@ export default {
|
||||
text-decoration: none;
|
||||
margin: 0 10px;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
.change{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import Dexie from 'dexie'
|
||||
|
||||
const db = new Dexie('ZYDB')
|
||||
const db = new Dexie('zy')
|
||||
|
||||
db.version(1).stores({
|
||||
theme: '++id, theme',
|
||||
|
||||
@@ -4,7 +4,7 @@ const sites = [
|
||||
name: '最大资源网',
|
||||
url: 'http://www.zuidazy5.com',
|
||||
new: 'http://www.zuidazy5.com/?m=vod-index-pg-{page}.html',
|
||||
view: 'http://www.zuidazy5.com/?m=vod-type-id-{id}-page-{page}.html',
|
||||
view: 'http://www.zuidazy5.com/?m=vod-type-id-{id}-pg-{page}.html',
|
||||
search: 'http://www.zuidazy5.com/index.php?m=vod-search-pg-{page}-wd-{keywords}.html',
|
||||
type: 0,
|
||||
tags: [
|
||||
@@ -112,6 +112,139 @@ const sites = [
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
key: 'okzy',
|
||||
name: 'OK资源网',
|
||||
url: 'https://www.okzy.co',
|
||||
new: 'https://www.okzy.co/?m=vod-index-pg-{page}.html',
|
||||
view: 'https://www.okzy.co/?m=vod-type-id-{id}-pg-{page}.html',
|
||||
search: 'https://www.okzy.co/index.php?m=vod-search-pg-{page}-wd-{keywords}.html',
|
||||
type: 0,
|
||||
tags: [
|
||||
{
|
||||
title: '最新',
|
||||
id: 0,
|
||||
children: []
|
||||
},
|
||||
{
|
||||
title: '电影',
|
||||
id: 1,
|
||||
children: [
|
||||
{
|
||||
title: '动作片',
|
||||
id: 5
|
||||
},
|
||||
{
|
||||
title: '喜剧片',
|
||||
id: 6
|
||||
},
|
||||
{
|
||||
title: '爱情片',
|
||||
id: 7
|
||||
},
|
||||
{
|
||||
title: '科幻片',
|
||||
id: 8
|
||||
},
|
||||
{
|
||||
title: '恐怖片',
|
||||
id: 9
|
||||
},
|
||||
{
|
||||
title: '剧情片',
|
||||
id: 10
|
||||
},
|
||||
{
|
||||
title: '战争片',
|
||||
id: 11
|
||||
},
|
||||
{
|
||||
title: '纪录片',
|
||||
id: 19
|
||||
},
|
||||
{
|
||||
title: '微电影',
|
||||
id: 20
|
||||
},
|
||||
{
|
||||
title: '伦理片',
|
||||
id: 21
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '连续剧',
|
||||
id: 2,
|
||||
children: [
|
||||
{
|
||||
title: '国产剧',
|
||||
id: 12
|
||||
},
|
||||
{
|
||||
title: '香港剧',
|
||||
id: 13
|
||||
},
|
||||
{
|
||||
title: '韩国剧',
|
||||
id: 14
|
||||
},
|
||||
{
|
||||
title: '欧美剧',
|
||||
id: 15
|
||||
},
|
||||
{
|
||||
title: '台湾剧',
|
||||
id: 16
|
||||
},
|
||||
{
|
||||
title: '日本剧',
|
||||
id: 17
|
||||
},
|
||||
{
|
||||
title: '海外剧',
|
||||
id: 18
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '综艺片',
|
||||
id: 3,
|
||||
children: [
|
||||
{
|
||||
title: '内地综艺',
|
||||
id: 26
|
||||
},
|
||||
{
|
||||
title: '港台综艺',
|
||||
id: 27
|
||||
},
|
||||
{
|
||||
title: '日韩综艺',
|
||||
id: 28
|
||||
},
|
||||
{
|
||||
title: '欧美综艺',
|
||||
id: 29
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '动漫片',
|
||||
id: 4,
|
||||
children: []
|
||||
},
|
||||
{
|
||||
title: '福利片',
|
||||
id: 22,
|
||||
children: []
|
||||
},
|
||||
{
|
||||
title: '解说',
|
||||
id: 33,
|
||||
children: []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
key: 'subo',
|
||||
name: '速播资源站',
|
||||
@@ -215,6 +348,152 @@ const sites = [
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
key: 'mahuazy',
|
||||
name: '麻花资源',
|
||||
url: 'http://www.mahuazy.com',
|
||||
new: 'http://www.mahuazy.com/?m=vod-index-pg-{page}.html',
|
||||
view: 'http://www.mahuazy.com/?m=vod-type-id-{id}-pg-{page}.html',
|
||||
search: 'http://www.mahuazy.com/?m=vod-search-pg-{page}-wd-{keywords}.html',
|
||||
type: 0,
|
||||
tags: [
|
||||
{
|
||||
title: '最新',
|
||||
id: 0,
|
||||
children: []
|
||||
},
|
||||
{
|
||||
title: '电影',
|
||||
id: 1,
|
||||
children: [
|
||||
{
|
||||
title: '动作片',
|
||||
id: 5
|
||||
},
|
||||
{
|
||||
title: '喜剧片',
|
||||
id: 6
|
||||
},
|
||||
{
|
||||
title: '爱情片',
|
||||
id: 7
|
||||
},
|
||||
{
|
||||
title: '科幻片',
|
||||
id: 8
|
||||
},
|
||||
{
|
||||
title: '恐怖片',
|
||||
id: 9
|
||||
},
|
||||
{
|
||||
title: '剧情片',
|
||||
id: 10
|
||||
},
|
||||
{
|
||||
title: '战争片',
|
||||
id: 11
|
||||
},
|
||||
{
|
||||
title: '纪录片',
|
||||
id: 20
|
||||
},
|
||||
{
|
||||
title: '伦理片',
|
||||
id: 21
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '连续剧',
|
||||
id: 2,
|
||||
children: [
|
||||
{
|
||||
title: '国产剧',
|
||||
id: 12
|
||||
},
|
||||
{
|
||||
title: '香港剧',
|
||||
id: 13
|
||||
},
|
||||
{
|
||||
title: '韩剧',
|
||||
id: 14
|
||||
},
|
||||
{
|
||||
title: '欧美剧',
|
||||
id: 15
|
||||
},
|
||||
{
|
||||
title: '香港剧',
|
||||
id: 16
|
||||
},
|
||||
{
|
||||
title: '泰剧',
|
||||
id: 17
|
||||
},
|
||||
{
|
||||
title: '日剧',
|
||||
id: 18
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '综艺',
|
||||
id: 3,
|
||||
children: []
|
||||
},
|
||||
{
|
||||
title: '动漫',
|
||||
id: 4,
|
||||
children: []
|
||||
},
|
||||
{
|
||||
title: '网络电影',
|
||||
id: 30,
|
||||
children: [
|
||||
{
|
||||
title: '爆笑喜剧',
|
||||
id: 31
|
||||
},
|
||||
{
|
||||
title: '火爆动作',
|
||||
id: 32
|
||||
},
|
||||
{
|
||||
title: '浪漫爱情',
|
||||
id: 33
|
||||
},
|
||||
{
|
||||
title: '热血青春',
|
||||
id: 34
|
||||
},
|
||||
{
|
||||
title: '奇幻历险',
|
||||
id: 35
|
||||
},
|
||||
{
|
||||
title: '暗黑悬疑',
|
||||
id: 36
|
||||
},
|
||||
{
|
||||
title: '剧情家庭',
|
||||
id: 37
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '解说',
|
||||
id: 38,
|
||||
children: []
|
||||
},
|
||||
{
|
||||
title: '福利片',
|
||||
id: 19,
|
||||
children: []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
key: 'zuixinzy',
|
||||
name: '最新资源网',
|
||||
@@ -1082,6 +1361,109 @@ const sites = [
|
||||
children: []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
key: '135zy',
|
||||
name: '135资源网',
|
||||
url: 'http://135zy0.com',
|
||||
new: 'http://135zy0.com/?m=vod-index-pg-{page}.html',
|
||||
view: 'http://135zy0.com/?m=vod-type-id-{id}-pg-{page}.html',
|
||||
search: '',
|
||||
type: 3,
|
||||
tags: [
|
||||
{
|
||||
title: '最新',
|
||||
id: 0,
|
||||
children: []
|
||||
},
|
||||
{
|
||||
title: '电影',
|
||||
id: 1,
|
||||
children: [
|
||||
{
|
||||
title: '动作片',
|
||||
id: 5
|
||||
},
|
||||
{
|
||||
title: '喜剧片',
|
||||
id: 6
|
||||
},
|
||||
{
|
||||
title: '爱情片',
|
||||
id: 7
|
||||
},
|
||||
{
|
||||
title: '科幻片',
|
||||
id: 8
|
||||
},
|
||||
{
|
||||
title: '恐怖片',
|
||||
id: 9
|
||||
},
|
||||
{
|
||||
title: '剧情片',
|
||||
id: 10
|
||||
},
|
||||
{
|
||||
title: '战争片',
|
||||
id: 11
|
||||
},
|
||||
{
|
||||
title: '伦理片',
|
||||
id: 18
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '连续剧',
|
||||
id: 2,
|
||||
children: [
|
||||
{
|
||||
title: '国产剧',
|
||||
id: 12
|
||||
},
|
||||
{
|
||||
title: '香港剧',
|
||||
id: 13
|
||||
},
|
||||
{
|
||||
title: '日本剧',
|
||||
id: 14
|
||||
},
|
||||
{
|
||||
title: '欧美剧',
|
||||
id: 15
|
||||
},
|
||||
{
|
||||
title: '台湾剧',
|
||||
id: 16
|
||||
},
|
||||
{
|
||||
title: '韩国剧',
|
||||
id: 17
|
||||
},
|
||||
{
|
||||
title: '泰剧',
|
||||
id: 21
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '综艺',
|
||||
id: 3,
|
||||
children: []
|
||||
},
|
||||
{
|
||||
title: '动漫',
|
||||
id: 4,
|
||||
children: []
|
||||
},
|
||||
{
|
||||
title: '纪录片',
|
||||
id: 22,
|
||||
children: []
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ const zy = {
|
||||
page: 1, // 第几页
|
||||
keywords: '', // 搜索关键字
|
||||
// 获取浏览列表
|
||||
film_get (key, id = 1, page = 1) {
|
||||
film_get (key, id = 0, page = 1) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const site = getSite(key)
|
||||
let url = ''
|
||||
@@ -30,6 +30,10 @@ const zy = {
|
||||
const twoData = await this.film_get_type_two(data, key)
|
||||
resolve(twoData)
|
||||
}
|
||||
if (type === 3) {
|
||||
const threeData = await this.film_get_type_three(data, key)
|
||||
resolve(threeData)
|
||||
}
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
})
|
||||
@@ -128,6 +132,36 @@ const zy = {
|
||||
}
|
||||
})
|
||||
},
|
||||
film_get_type_three (txt, key) {
|
||||
return new Promise((resolve, reject) => {
|
||||
try {
|
||||
const parser = new DOMParser()
|
||||
const html = parser.parseFromString(txt, 'text/html')
|
||||
const list = html.querySelectorAll('.xing_vb li')
|
||||
const d = { list: [], total: 0, update: 0 }
|
||||
const url = getSite(key).url
|
||||
for (let i = 1; i < list.length - 1; i++) {
|
||||
const info = {
|
||||
site: key,
|
||||
name: list[i].childNodes[1].innerText,
|
||||
type: list[i].childNodes[2].innerText,
|
||||
time: list[i].childNodes[3].innerText,
|
||||
detail: url + list[i].childNodes[1].querySelector('a').getAttribute('href'),
|
||||
index: 0
|
||||
}
|
||||
d.list.push(info)
|
||||
}
|
||||
d.update = parseInt(html.querySelectorAll('.xing_top_right li strong')[0].innerText)
|
||||
let t = html.querySelector('.pages').innerText
|
||||
t = t.split('条')[0]
|
||||
t = t.split('共')[1]
|
||||
d.total = parseInt(t)
|
||||
resolve(d)
|
||||
} catch (err) {
|
||||
reject(err)
|
||||
}
|
||||
})
|
||||
},
|
||||
// 获取详情
|
||||
detail_get (key, url) {
|
||||
return new Promise((resolve, reject) => {
|
||||
@@ -145,6 +179,10 @@ const zy = {
|
||||
const twoData = await this.detail_get_type_two(res.data, key)
|
||||
resolve(twoData)
|
||||
}
|
||||
if (type === 3) {
|
||||
const threeData = await this.detail_get_type_three(res.data, key)
|
||||
resolve(threeData)
|
||||
}
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
})
|
||||
@@ -172,7 +210,7 @@ const zy = {
|
||||
for (let i = 0; i < vodInfo.length; i++) {
|
||||
const k = vodInfo[i].innerText
|
||||
if (k.indexOf('剧情介绍') >= 0) {
|
||||
data.desc = vodInfo[i].querySelector('.vodplayinfo').innerHTML
|
||||
data.desc = vodInfo[i].querySelector('.vodplayinfo').innerText
|
||||
}
|
||||
}
|
||||
const vodLi = html.querySelectorAll('.ibox .vodplayinfo li')
|
||||
@@ -279,6 +317,51 @@ const zy = {
|
||||
}
|
||||
})
|
||||
},
|
||||
detail_get_type_three (txt, key) {
|
||||
return new Promise((resolve, reject) => {
|
||||
try {
|
||||
const parser = new DOMParser()
|
||||
const html = parser.parseFromString(txt, 'text/html')
|
||||
const data = {
|
||||
site: key,
|
||||
name: '',
|
||||
info: '',
|
||||
desc: '',
|
||||
m3u8_urls: [],
|
||||
mp4_urls: []
|
||||
}
|
||||
const vodBox = html.querySelector('.vodBox')
|
||||
data.info = vodBox.innerHTML
|
||||
const title = html.querySelector('.vodh h2').innerText
|
||||
const index = html.querySelector('.vodh span').innerText
|
||||
data.name = title + index
|
||||
const vodInfo = html.querySelectorAll('.playBox')
|
||||
for (let i = 0; i < vodInfo.length; i++) {
|
||||
const k = vodInfo[i].innerText
|
||||
if (k.indexOf('剧情介绍') >= 0) {
|
||||
data.desc = vodInfo[i].querySelector('.vodplayinfo').innerHTML
|
||||
}
|
||||
}
|
||||
const vodLi = html.querySelectorAll('.ibox .vodplayinfo li')
|
||||
const m3u8UrlArr = []
|
||||
const mp4UrlArr = []
|
||||
for (let i = 0; i < vodLi.length; i++) {
|
||||
const j = vodLi[i].innerText
|
||||
if (j.indexOf('.m3u8') >= 0) {
|
||||
m3u8UrlArr.unshift(j)
|
||||
}
|
||||
if (j.indexOf('.mp4') >= 0) {
|
||||
mp4UrlArr.unshift(j)
|
||||
}
|
||||
}
|
||||
data.m3u8_urls = m3u8UrlArr
|
||||
data.mp4_urls = mp4UrlArr
|
||||
resolve(data)
|
||||
} catch (err) {
|
||||
reject(err)
|
||||
}
|
||||
})
|
||||
},
|
||||
// 搜索列表
|
||||
search_get (key, keywords = '', page = 1) {
|
||||
return new Promise((resolve, reject) => {
|
||||
@@ -301,6 +384,10 @@ const zy = {
|
||||
const oneData = await this.search_get_type_one(data, key)
|
||||
resolve(oneData)
|
||||
}
|
||||
if (type === 3) {
|
||||
const threeData = await this.search_get_type_three(data, key)
|
||||
resolve(threeData)
|
||||
}
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
})
|
||||
@@ -358,6 +445,33 @@ const zy = {
|
||||
reject(err)
|
||||
}
|
||||
})
|
||||
},
|
||||
search_get_type_three (txt, key) {
|
||||
return new Promise((resolve, reject) => {
|
||||
try {
|
||||
const parser = new DOMParser()
|
||||
const html = parser.parseFromString(txt, 'text/html')
|
||||
const list = html.querySelectorAll('.xing_vb li')
|
||||
const d = { list: [], total: 0 }
|
||||
const url = getSite(key).url
|
||||
for (let i = 1; i < list.length - 1; i++) {
|
||||
const info = {
|
||||
site: key,
|
||||
name: list[i].childNodes[1].innerText,
|
||||
type: list[i].childNodes[2].innerText,
|
||||
time: list[i].childNodes[3].innerText,
|
||||
detail: url + list[i].childNodes[1].querySelector('a').getAttribute('href'),
|
||||
index: 0
|
||||
}
|
||||
d.list.push(info)
|
||||
}
|
||||
const t = html.querySelector('.nvc dd').innerText.replace(/[^\d]/g, '')
|
||||
d.total = parseInt(t)
|
||||
resolve(d)
|
||||
} catch (err) {
|
||||
reject(err)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ Vue.use(Vuex)
|
||||
|
||||
export default new Vuex.Store({
|
||||
state: {
|
||||
view: 'Play',
|
||||
view: 'Film',
|
||||
theme: 'light',
|
||||
site: 'zuidazy',
|
||||
language: 'zhCn',
|
||||
|
||||
@@ -11,7 +11,34 @@ module.exports = {
|
||||
oneClick: false,
|
||||
allowToChangeInstallationDirectory: true
|
||||
},
|
||||
productName: 'ZY Player'
|
||||
appId: 'com.hunlongyu.zy',
|
||||
copyright: 'Copyright @ 2020 Hunlongyu',
|
||||
productName: 'ZY Player 内测版',
|
||||
publish: [
|
||||
{
|
||||
provider: 'github',
|
||||
owner: 'Hunlongyu',
|
||||
repo: 'ZY-Player'
|
||||
}
|
||||
],
|
||||
mac: {
|
||||
icon: 'build/icon/icon.icns',
|
||||
category: 'public.app-category.developer-tools',
|
||||
target: 'default',
|
||||
extendInfo: {
|
||||
LSUIElement: 1
|
||||
}
|
||||
},
|
||||
win: {
|
||||
icon: 'build/icons/icon.ico',
|
||||
target: 'nsis'
|
||||
},
|
||||
linux: {
|
||||
icon: 'build/icons/'
|
||||
},
|
||||
snap: {
|
||||
publish: ['github']
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
28
yarn.lock
@@ -2892,9 +2892,9 @@ core-js@^2.4.0, core-js@^2.6.5:
|
||||
resolved "https://mirrors.huaweicloud.com/repository/npm/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
|
||||
integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
|
||||
|
||||
core-js@^3.6.4:
|
||||
core-js@^3.6.4, core-js@^3.6.5:
|
||||
version "3.6.5"
|
||||
resolved "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a"
|
||||
resolved "https://mirrors.huaweicloud.com/repository/npm/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a"
|
||||
integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==
|
||||
|
||||
core-util-is@1.0.2, core-util-is@~1.0.0:
|
||||
@@ -3628,10 +3628,10 @@ electron-updater@^4.2.5:
|
||||
pako "^1.0.11"
|
||||
semver "^7.1.3"
|
||||
|
||||
electron@^8.2.1:
|
||||
version "8.2.2"
|
||||
resolved "https://registry.npmjs.org/electron/-/electron-8.2.2.tgz#6ddb27c1f15fda5f6e891e1ad13c0a0d15b0f133"
|
||||
integrity sha512-GH4RCbpuzEn3XpTmsf+wLaJ2KOPSOoBJvQ0s6ftTLs5+IQEgKZvkdYCj8TCBNXFhss31RT3BUqoEQQUyZErK0A==
|
||||
electron@^8.2.5:
|
||||
version "8.2.5"
|
||||
resolved "https://mirrors.huaweicloud.com/repository/npm/electron/-/electron-8.2.5.tgz#ae3cb23d5517b2189fd35298e487198d65d1a291"
|
||||
integrity sha512-LxSCUwmlfJtRwthd3ofpYaZ+1C2hQSW8Ep1DD9K3VbnDItO+kb3t1z35daJgAab78j54aOwo9gMxJtvU0Ftj6w==
|
||||
dependencies:
|
||||
"@electron/get" "^1.0.1"
|
||||
"@types/node" "^12.0.12"
|
||||
@@ -10022,18 +10022,18 @@ xdg-basedir@^4.0.0:
|
||||
resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
|
||||
integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
|
||||
|
||||
xgplayer-hls.js@^2.1.6:
|
||||
version "2.1.6"
|
||||
resolved "https://mirrors.huaweicloud.com/repository/npm/xgplayer-hls.js/-/xgplayer-hls.js-2.1.6.tgz#1e969a77a7546114a5e1b4509e89401fe74536da"
|
||||
integrity sha512-va/xmx0ES5oerbZ6bMVlXEw38Alz9dwEnvC0iwGOC6Kf543hv0ma/9qJ9JxWOPFsvAblmburT4rbAUxoMKGUDA==
|
||||
xgplayer-hls.js@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://mirrors.huaweicloud.com/repository/npm/xgplayer-hls.js/-/xgplayer-hls.js-2.2.0.tgz#e9eed21a957acebf48e965b835ca8c6b84fbae30"
|
||||
integrity sha512-u0bYCg6mjxCZSSp+FSlQBZs7qc25UedYDHfjf2oe6kyl/Cqhr0v5VfZXa/2IGVfnCYUaySFVML09NEbznk26rQ==
|
||||
dependencies:
|
||||
deepmerge "2.0.1"
|
||||
event-emitter "^0.3.5"
|
||||
|
||||
xgplayer@^2.6.14:
|
||||
version "2.6.14"
|
||||
resolved "https://mirrors.huaweicloud.com/repository/npm/xgplayer/-/xgplayer-2.6.14.tgz#991c8bdfa507db7cadea93cd14d9b448737fd65c"
|
||||
integrity sha512-lFwuUzSWt6f63KFDvoqHXDaF+8lWT3NPR30dFizzZp6/dUbtFnUigjXIc4HrN191v5gYQDss3wulQUFAfOo6KA==
|
||||
xgplayer@^2.6.19:
|
||||
version "2.6.19"
|
||||
resolved "https://mirrors.huaweicloud.com/repository/npm/xgplayer/-/xgplayer-2.6.19.tgz#1b3c2c7127ea4bdd7b4d071e778cd18edbe86afc"
|
||||
integrity sha512-JVHOTiEvKmALnnCkJTY+Pk9SUztJQZDB+IiBvXKuY7C6GFPPEJobxtYiEumODk7JvmcW7hAW/otzzhkxvMQXHQ==
|
||||
dependencies:
|
||||
chalk "^2.3.2"
|
||||
commander "^2.15.1"
|
||||
|
||||