Compare commits

...

34 Commits

Author SHA1 Message Date
Hunlongyu
a007e62e38 Create build.yml 2020-06-22 11:19:16 +08:00
hunlongyu
117c805e3c 🚑 打包 2020-06-22 11:13:32 +08:00
hunlongyu
529558b754 Merge branch 'master' of https://github.com/Hunlongyu/ZY-Player 2020-06-22 11:00:50 +08:00
hunlongyu
3b86ccd0d8 🚉 添加声明 2020-06-22 10:58:38 +08:00
hunlongyu
508a3af4b3 🚇 移除捐赠二维码 2020-06-22 10:44:43 +08:00
Hunlongyu
a010d8f11e 🦼 modify image 2020-06-18 14:34:37 +08:00
hunlongyu
d1a3c404fa 🚲 全新版本,从心出发 2020-06-17 16:33:31 +08:00
hunlongyu
1dbd07faae 🎈 优化视频自适应大小 2020-06-13 10:24:11 +08:00
Hunlongyu
4dec62aa9c Merge pull request #101 from WinterSoHot/master
fix(Play.vue):播放界面自适应窗口
2020-06-13 10:19:41 +08:00
Dongxian Gu
1f781ae92d fix(Play.vue):播放界面自适应窗口 2020-06-12 23:17:56 +08:00
hunlongyu
4717299ae6 🤣 新增分享演示 2020-06-05 23:24:18 +08:00
hunlongyu
8d40cbd5fc 😶 移除测试代码 2020-06-05 11:14:49 +08:00
hunlongyu
4c8fa08166 🙄 解决 Mac 下 dock 栏不显示图标问题 2020-06-05 11:09:52 +08:00
hunlongyu
ac513fbce6 🙄 解决 Mac 下 dock 栏不显示图标问题 2020-06-05 11:09:19 +08:00
hunlongyu
9321d3a5d9 Merge branch 'master' of https://github.com/Hunlongyu/ZY-Player 2020-06-05 10:26:41 +08:00
hunlongyu
0f2776fb1c 😁 移除测试代码 2020-06-05 10:26:37 +08:00
Hunlongyu
b577ce12c1 Merge pull request #77 from zhangweiii/master
修复Mac下dock栏不显示图标
2020-06-05 10:25:16 +08:00
zhangweiii
fa4c4e22fd 修复Mac下dock栏不显示图标 2020-06-04 10:53:02 +08:00
hunlongyu
a93d4042ba 🎢 修复 Mac 电脑无法完全退出的BUG 2020-06-02 10:54:17 +08:00
hunlongyu
09bd9d8401 😊 成功测试打包32位安装包 2020-06-01 18:14:31 +08:00
hunlongyu
588e52c330 😌 尝试v1 2020-06-01 17:00:58 +08:00
hunlongyu
6c4e110bb8 😫 再次尝试x86 2020-06-01 16:59:38 +08:00
hunlongyu
54857b8501 🥱 尝试x86 2020-06-01 16:52:39 +08:00
hunlongyu
a8a6fa2185 😶 白天写BUG, 晚上改BUG 2020-05-31 22:34:30 +08:00
hunlongyu
0e571efd6f 😑 日常写BUG, 改BUG 2020-05-31 13:40:34 +08:00
hunlongyu
79adbd1f81 😑 日常写BUG, 改BUG 2020-05-30 16:14:26 +08:00
hunlongyu
214a267ba5 😥 紧急修复bug 2020-05-29 14:29:53 +08:00
hunlongyu
7aee9b9fbe 😅 解决收藏夹点击播放,没有历史记录的问题 2020-05-29 11:52:09 +08:00
hunlongyu
010b488340 😋 修复精简模式下切换视频无法保留历史记录的问题 2020-05-27 09:49:56 +08:00
hunlongyu
03c32d8ee2 😥 修改说明文字 2020-05-25 22:32:38 +08:00
hunlongyu
203d2c19fd 😂 Mini 窗口支持倍速快捷键 2020-05-25 22:31:10 +08:00
hunlongyu
0ed25643fc 😅 升级依赖 2020-05-25 22:04:18 +08:00
hunlongyu
ba99e65bcb 😅 新增快捷键视频倍速 2020-05-25 22:00:23 +08:00
hunlongyu
169b28ab33 💦 播放速度 2020-05-25 18:23:03 +08:00
16 changed files with 310 additions and 10323 deletions

26
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,26 @@
name: release-build
on:
push:
branches: [ master ]
jobs:
release:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [windows-latest, macos-latest, ubuntu-latest]
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 12
- run: |
yarn
yarn release
shell: pwsh
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

35
.github/workflows/x86.yml vendored Normal file
View File

@@ -0,0 +1,35 @@
name: release-build
on:
push:
tags:
- x86 *
jobs:
release:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [windows-latest]
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 12
- run: |
yarn
yarn dist
shell: pwsh
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: dist_electron
path: dist_electron/*.exe
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -24,40 +24,65 @@
## ZY Player 资源播放器
1. 全平台支持. windows, mac, linux.
2. 12个视频源. 未来更新更多的视频源.
3. 新增历史播放记录, 并记录播放进度.
4. 新增分享功能. 一键分享海报图片.
5. 新增精简模式. 支持修改透明度.
6. 全新布局配色.
7. 新增多语言.
8. 下载功能 (最大资源网和OK资源网支持下载.)
9. 更详细的视频分类
10. 收藏夹同步更新视频追剧.(手动更新)
11. 后台自动更
1. 全平台支持. Windows, Mac, Linux
2. 12个视频源. 未来更新更多的视频源
3. 新增历史播放记录, 并记录播放进度
4. 新增分享功能. 一键分享海报图片
5. 新增精简模式. 支持修改透明度
6. 收藏夹同步更新视频追剧
7. 支持演员名称搜索
8. 更详细的视频分类
9. 后台自动更新
10. 全新布局配色
11.增多语言
12. 全局快捷键
13. 支持演员名称搜索
13. 下载功能
14. ...
觉得软件不错的, 点击右上角 star 收藏关注一波呀~
> Tips: 资源加载不出来时, 点击列表下方链接, 浏览器打开一下网站. 原理是需要通过网站的人机检测.
<!-- ### 全新版本,从心出发
新版本开发计划已写好, 由于功能很多,且还有其他平台, 个人精力终归有限, 所以招募小伙伴, 一起完成这个项目.
主要招募: 移动端(IOS, Android), 以及TV端(Android)
我会提供接口, 接口文档, 桌面端与移动端交互说明
欢迎各路大神参与开发维护项目. 也欢迎吃瓜群众入群尝鲜测试, 提出建议.
微信群:
<p>
<img width="256" src="https://i.loli.net/2020/06/17/uhYeHUVOrkB8fxL.jpg" >
</p> -->
#### 全局快捷键:
| 快捷键 | 说明 | 主界面 | 小窗口 |
| :----------------------: | ---------- | :----: | :----: |
| `⌘ + ``Ctrl + ` | 下一集 | √ | √ |
| `⌘ + ``Ctrl + ` | 上一集 | √ | √ |
| `⌘ + ``Ctrl + ` | 减少透明度 | | √ |
| `⌘ + ``Ctrl + ` | 增加透明度 | | √ |
| `⌘ + ``Ctrl + ` | 下一集 | √ | √ |
| `⌘ + ``Ctrl + ` | 上一集 | √ | √ |
| `⌘ + ``Ctrl + ` | 减少透明度 | | √ |
| `⌘ + ``Ctrl + ` | 增加透明度 | | √ |
| `Shift + ↑` | 增加倍速 + 0.25 | √ | √ |
| `Shift + ↓` | 减少倍速 - 0.25 | √ | √ |
#### 下载:
1. [Github -- 官方下载](https://github.com/Hunlongyu/ZY-Player/releases)
1. [Github -- 官方下载(最新版)](https://github.com/Hunlongyu/ZY-Player/releases)
2. [蓝奏云 -- 快速下载](https://www.lanzous.com/b04s6a3re) 密码:95px
2. [蓝奏云 -- 快速下载(老版本)](https://www.lanzous.com/b04s6a3re) 密码:95px
3. 适用于32位操作系统的x86软件,在蓝奏云网盘里, 后缀名: ZY Player * 32位.exe
#### 截图:
0. 分享 ⇣ ↓
![share.gif](https://i.loli.net/2020/06/05/hbJwBXlx194umcO.gif)
1. 浏览 ⇣ ↓
![01浏览.png](https://i.loli.net/2020/05/18/MshDLnXq2CTpoBy.png)
2. 搜索 ⇣ ↓

View File

@@ -1,6 +1,6 @@
{
"name": "zy",
"version": "1.0.7",
"version": "1.0.23",
"private": true,
"author": {
"name": "Hunlongyu",
@@ -16,24 +16,25 @@
"postinstall": "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"
"release": "vue-cli-service electron:build -p always",
"dist": "vue-cli-service electron:build --win --ia32"
},
"main": "background.js",
"dependencies": {
"axios": "^0.19.2",
"core-js": "^3.6.5",
"dexie": "^2.0.4",
"electron-updater": "^4.2.5",
"element-ui": "^2.13.1",
"electron-updater": "^4.3.1",
"element-ui": "^2.13.2",
"html2canvas": "^1.0.0-rc.5",
"leancloud-storage": "^4.5.3",
"macaddress": "^0.2.9",
"macaddress": "^0.5.1",
"modern-normalize": "^0.6.0",
"qrcode.vue": "^1.7.0",
"vue": "^2.6.11",
"vue-i18n": "^8.17.0",
"vuex": "^3.1.3",
"xgplayer": "^2.6.24",
"vue-i18n": "^8.17.7",
"vuex": "^3.4.0",
"xgplayer": "^2.7.1",
"xgplayer-hls.js": "^2.2.2"
},
"devDependencies": {
@@ -44,7 +45,7 @@
"@vue/eslint-config-standard": "^5.1.2",
"babel-eslint": "^10.1.0",
"babel-plugin-component": "^1.1.1",
"electron": "^8.3.0",
"electron": "^9.0.0",
"eslint": "^6.7.2",
"eslint-plugin-import": "^2.20.2",
"eslint-plugin-node": "^11.1.0",

View File

@@ -151,6 +151,9 @@
padding-left: 10px;
font-size: 12px;
}
.btn{
cursor: pointer;
}
}
}

View File

@@ -16,7 +16,7 @@ let mini
// Scheme must be registered before the app is ready
protocol.registerSchemesAsPrivileged([{ scheme: 'app', privileges: { secure: true, standard: true } }])
function createWindow () {
function createWindow() {
win = new BrowserWindow({
width: 1080,
height: 720,
@@ -44,7 +44,7 @@ function createWindow () {
})
}
function createMini () {
function createMini() {
mini = new BrowserWindow({
width: 550,
minWidth: 260,
@@ -74,13 +74,18 @@ function createMini () {
})
}
if (process.platform === 'darwin') {
app.dock.show()
}
app.allowRendererProcessReuse = true
app.commandLine.appendSwitch('--no-sandbox')
app.commandLine.appendSwitch('disable-features', 'OutOfBlinkCors')
if (process.platform === 'Linux') {
app.disableHardwareAcceleration()
}
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
app.quit()
})
app.on('activate', () => {
@@ -154,6 +159,22 @@ if (!gotTheLock) {
mini.webContents.send('down', 0)
}
})
globalShortcut.register('shift+up', function () {
if (win) {
win.webContents.send('playbackRateUp', 0)
}
if (mini) {
mini.webContents.send('playbackRateUp', 0)
}
})
globalShortcut.register('shift+down', function () {
if (win) {
win.webContents.send('playbackRateDown', 0)
}
if (mini) {
mini.webContents.send('playbackRateDown', 0)
}
})
if (!process.env.WEBPACK_DEV_SERVER_URL) {
createProtocol('app')
}

View File

@@ -299,7 +299,7 @@ export default {
top: 50px;
left: 0;
width: 100%;
height: calc(100 - 50px);
height: calc(100% - 50px);
display: flex;
justify-content: center;
align-items: center;

View File

@@ -69,6 +69,7 @@
</div>
<div class="tFooter">
<span class="tFooter-span">今日更新: {{ tb.update }} </span>
<span class="tFooter-span btn" @click="goWebsite">加载不出来,点这里</span>
<el-pagination small :page-size="tb.size" :total="tb.total" :current-page="tb.page" @current-change="tbPageChange" layout="total, prev, pager, next, jumper"></el-pagination>
</div>
</div>
@@ -81,6 +82,7 @@ import { sites, getSite } from '../lib/site/sites'
import tools from '../lib/site/tools'
import video from '../lib/dexie/video'
import setting from '../lib/dexie/setting'
import { shell } from 'electron'
const { clipboard } = require('electron')
export default {
name: 'film',
@@ -297,6 +299,9 @@ export default {
this.tb.list = res.list
this.tb.loading = false
})
},
goWebsite () {
shell.openExternal(this.site.url)
}
},
created () {

View File

@@ -125,8 +125,8 @@ export default {
id: 'xg',
lang: 'zh-cn',
url: '',
width: 900,
height: 500,
width: '100%',
height: '100%',
autoplay: false,
videoInit: true,
screenShot: true,
@@ -201,39 +201,49 @@ export default {
methods: {
...mapMutations(['SET_VIEW', 'SET_DETAIL', 'SET_VIDEO', 'SET_SHARE']),
getUrls () {
this.name = ''
this.mask = true
if (this.timer !== null) {
clearInterval(this.timer)
this.timer = null
}
if (this.xg) {
this.xg.pause()
}
this.changeVideo()
tools.detail_get(this.video.site, this.video.detail).then(res => {
this.name = this.video.name
this.right.listData = res.m3u8_urls
if (res.m3u8_urls.length > 1) {
const m3 = res.m3u8_urls
const arr = []
for (const i of m3) {
arr.push(i.split('$')[1])
}
this.length = arr.length
this.xg.src = arr[this.video.index]
this.showNext = true
} else {
const link = res.m3u8_urls[this.video.index]
const src = link.split('$')[1]
this.length = 1
this.xg.src = src
this.showNext = false
if (this.xg.hasStart) {
this.xg.pause()
}
const currentTime = this.video.currentTime
if (currentTime !== '') {
}
const index = this.video.index
let time = 0
history.find({ detail: this.video.detail }).then(item => {
if (item) {
if (item.index === index) {
time = item.currentTime
}
}
this.playVideo(index, time)
})
},
playVideo (index, time) {
tools.detail_get(this.video.site, this.video.detail).then(res => {
this.name = res.name
this.right.listData = res.m3u8_urls
const m = res.m3u8_urls
const arr = []
for (const i of m) {
arr.push(i.split('$')[1])
}
this.length = arr.length
this.xg.src = arr[index]
this.showNext = this.length > 1
if (time !== 0) {
this.xg.play()
this.xg.once('playing', () => {
this.xg.currentTime = currentTime
this.xg.currentTime = time
})
} else {
this.xg.play()
@@ -254,7 +264,6 @@ export default {
changeVideo () {
this.checkStar()
this.checkTop()
this.name = ''
},
checkStar () {
video.find({ detail: this.video.detail }).then(res => {
@@ -273,6 +282,7 @@ export default {
},
onPlayVideo () {
this.more = true
this.changeVideo()
const h = { ...this.video }
history.find({ detail: h.detail }).then(res => {
if (res) {
@@ -296,6 +306,14 @@ export default {
history.update(res.id, h)
}
})
video.find({ detail: d }).then(res => {
if (res) {
const h = { ...this.video }
delete h.id
delete h.currentTime
video.update(res.id, h)
}
})
}, 10000)
},
closeEvent () {
@@ -303,21 +321,17 @@ export default {
this.right.type = ''
},
nextEvent () {
const v = { ...this.video }
const i = v.index + 1
if (i < this.right.listData.length) {
this.video.currentTime = 0
if (this.video.index < this.right.listData.length - 1) {
this.video.index++
this.video.currentTime = 0
} else {
this.$m.warning(this.$t('last_video'))
}
},
prevEvent () {
const v = { ...this.video }
const i = v.index - 1
if (i > 0) {
this.video.currentTime = 0
if (this.video.index > 0) {
this.video.index--
this.video.currentTime = 0
} else {
this.$m.warning(this.$t('first_video'))
}
@@ -395,10 +409,16 @@ export default {
})
},
listItemEvent (n) {
this.video.currentTime = 0
this.video.index = n
this.right.show = false
this.right.type = ''
history.find({ detail: this.video.detail }).then(item => {
if (item) {
item.currentTime = 0
item.index = n
history.update(item.id, item)
}
this.video.index = n
this.right.show = false
this.right.type = ''
})
},
historyItemEvent (e) {
this.video = e
@@ -411,6 +431,14 @@ export default {
this.right.historyData = e.reverse()
})
})
},
playbackRateEvent (e) {
let rate = this.xg.playbackRate
if (rate > 0.25) {
rate = rate + e
this.xg.playbackRate = rate
this.$m.success(this.$t('rate') + rate)
}
}
},
mounted () {
@@ -432,6 +460,20 @@ export default {
}
}
})
ipc.on('playbackRateUp', () => {
if (this.xg) {
if (this.xg.hasStart) {
this.playbackRateEvent(0.25)
}
}
})
ipc.on('playbackRateDown', () => {
if (this.xg) {
if (this.xg.hasStart) {
this.playbackRateEvent(-0.25)
}
}
})
}
}
</script>
@@ -459,8 +501,9 @@ export default {
align-items: center;
}
.xgBox{
width: 900px;
width: 100%;
height: 500px;
flex: 1;
}
.more{
width: 100%;

View File

@@ -3,7 +3,8 @@
<div class="setting-box zy-scroll" v-if="show.setting">
<div class="logo"><img src="@/assets/image/logo.png"></div>
<div class="info">
<a @click="linkOpen('https://github.com/Hunlongyu/ZY-Player')">{{$t('website')}}</a>
<a @click="linkOpen('http://zyplayer.fun/')">{{$t('website')}}</a>
<a @click="linkOpen('https://github.com/Hunlongyu/ZY-Player')">Github</a>
<a @click="linkOpen('https://github.com/Hunlongyu/ZY-Player/issues')">v{{pkg.version}} {{$t('issues')}}</a>
</div>
<div class="change">
@@ -53,17 +54,20 @@
</div>
</div>
</div>
<div class="qrcode">
<!-- <div class="qrcode">
<div class="title">{{$t('donate')}}</div>
<div class="qrcode-box">
<img class="qrcode-item" src="../assets/image/alipay.png">
<img class="qrcode-item" src="../assets/image/wepay.jpg">
</div>
</div>
</div> -->
<div class="clearDB">
<span @click="clearDBEvent" class="clearBtn">{{$t('clearDB')}}</span>
<span class="clearTips">{{$t('clearTips')}}</span>
</div>
<div class="Tips">
<span>所有资源来自网上, 该软件不参与任何制作, 上传, 储存等内容, 禁止传播违法资源. 该软件仅供学习参考, 请于安装后24小时内删除.</span>
</div>
</div>
</div>
</template>
@@ -281,5 +285,10 @@ export default {
margin-left: 10px;
}
}
.Tips{
margin: 20px;
font-size: 12px;
color: #ff000066;
}
}
</style>

View File

@@ -32,7 +32,7 @@ export default {
name: '',
png: ''
},
value: 'https://www.baidu.com',
value: '',
loading: true
}
},

View File

@@ -1,32 +1,44 @@
import setting from '../dexie/setting'
const os = require('os')
const macadress = require('macaddress')
const macaddress = require('macaddress')
const AV = require('leancloud-storage')
setting.find().then(res => {
const cloud = res.cloud
if (!cloud) {
macadress.one((err, mac) => {
if (err) {
return false
}
const system = os.hostname() + ' ' + os.type() + ' ' + os.arch()
AV.init({
appId: 'X6TRIcMjgOG7EJ0t1l5r9In1-gzGzoHsz',
appKey: 'JmkGF9UqkWGQNYDcJ2g1QV1b',
serverURL: 'https://x6tricmj.lc-cn-n1-shared.com'
})
macaddress.one((err, mac) => {
if (err) {
return false
}
AV.init({
appId: 'X6TRIcMjgOG7EJ0t1l5r9In1-gzGzoHsz',
appKey: 'JmkGF9UqkWGQNYDcJ2g1QV1b',
serverURL: 'https://x6tricmj.lc-cn-n1-shared.com'
})
const system = os.hostname() + ' ' + os.type() + ' ' + os.arch()
const query = new AV.Query('ZYPlayer')
query.equalTo('os', system)
query.equalTo('mac', mac)
query.find().then(res => {
// 存储新用户数据
if (res.length === 0) {
const ZYPlayer = AV.Object.extend('ZYPlayer')
const zyPlayer = new ZYPlayer()
zyPlayer.set('os', system)
zyPlayer.set('mac', mac)
zyPlayer.save().then(e => {
const id = e.id
res.cloud = true
res.cloudKey = id
setting.update(res)
})
})
}
zyPlayer.set('times', 1)
zyPlayer.save()
return false
}
// 统计启动次数
if (res.length === 1) {
const id = res[0].id
const times = AV.Object.createWithoutData('ZYPlayer', id)
times.increment('times', 1)
times.save()
return false
}
// 清除冗余数据
if (res.length > 1) {
const arr = res
arr.shift()
AV.Object.destroyAll(arr)
}
})
})

View File

@@ -47,5 +47,6 @@
"async_success": "Synchronization succeeded, update found.",
"no_history": "No history data.",
"clearDB": "Reset software",
"clearTips": "Click to clear the database and close the software"
"clearTips": "Click to clear the database and close the software",
"rate": "The current video speed is: "
}

View File

@@ -47,5 +47,6 @@
"async_success": "同步成功, 查询到更新。",
"no_history": "无历史记录",
"clearDB": "重置软件",
"clearTips": "软件没有问题,请勿重置软件,否则数据丢失概不负责.点击即清空数据库,并关闭软件."
"clearTips": "软件没有问题,请勿重置软件,否则数据丢失概不负责.点击即清空数据库,并关闭软件.",
"rate": "当前视频播放倍速为:"
}

View File

@@ -92,6 +92,7 @@ export default {
this.xg.on('ended', () => {
if (this.d.m3u8_urls.length > 1 && (this.d.m3u8_urls.length - 1 > this.index)) {
this.video.currentTime = 0
this.video.index++
this.index++
let src = this.d.m3u8_urls[this.index]
src = src.split('$')[1]
@@ -122,6 +123,7 @@ export default {
if (res) {
const v = res
v.currentTime = this.xg.currentTime
v.index = this.index
const id = v.id
delete v.id
history.update(id, v)
@@ -162,6 +164,13 @@ export default {
this.index++
})
})
},
playbackRateEvent (e) {
let rate = this.xg.playbackRate
if (rate > 0.25) {
rate = rate + e
this.xg.playbackRate = rate
}
}
},
created () {
@@ -195,6 +204,20 @@ export default {
this.opacityChange(this.opacity)
}
})
ipc.on('playbackRateUp', () => {
if (this.xg) {
if (this.xg.hasStart) {
this.playbackRateEvent(0.25)
}
}
})
ipc.on('playbackRateDown', () => {
if (this.xg) {
if (this.xg.hasStart) {
this.playbackRateEvent(-0.25)
}
}
})
}
}
</script>

10218
yarn.lock

File diff suppressed because it is too large Load Diff