新增使用协议

pull/225/head
lyswhut 2020-04-23 12:12:46 +08:00
parent 9460b12cf9
commit 7bd4002f09
9 changed files with 240 additions and 49 deletions

View File

@ -81,15 +81,20 @@ npm run pack
常见问题已移至:<https://github.com/lyswhut/lx-music-desktop/blob/master/FAQ.md> 常见问题已移至:<https://github.com/lyswhut/lx-music-desktop/blob/master/FAQ.md>
### 免责声明 ### 项目协议
本项目基于 [Apache License 2.0](https://github.com/lyswhut/lx-music-desktop/blob/master/LICENSE) 许可证发行,以下协议是对于 Apache License 2.0 的补充,如有冲突,以以下协议为准。
词语约定:本协议中的“本项目”指洛雪音乐桌面版项目;“使用者”指签署本协议的使用者;“官方音乐平台”指对本项目内置的包括酷我、酷狗、咪咕等音乐源的官方平台统称;“版权数据”指包括但不限于图像、音频、名字等在内的他人拥有所属版权的数据。
1. 本项目的数据来源原理是从各官方音乐平台的公开服务器中拉取数据,经过对数据简单地筛选与合并后进行展示,因此本项目不对数据的准确性负责。
2. 使用本项目的过程中可能会产生版权数据,对于这些版权数据,本项目不拥有它们的所有权,为了避免造成侵权,使用者务必在**24小时**内清除使用本项目的过程中所产生的版权数据。
3. 本项目内的官方音乐平台别名为本项目内对官方音乐平台的一个称呼,不包含恶意,如果官方音乐平台觉得不妥,可联系本项目更改或移除。
4. 本项目内使用的部分包括但不限于字体、图片等资源来源于互联网,如果出现侵权可联系本项目移除。
5. 由于使用本项目产生的包括由于本协议或由于使用或无法使用本项目而引起的任何性质的任何直接、间接、特殊、偶然或结果性损害(包括但不限于因商誉损失、停工、计算机故障或故障引起的损害赔偿,或任何及所有其他商业损害或损失)由使用者负责。
6. 本项目完全免费,且开源发布于 GitHub 面向全世界人用作对技术的学习交流,本项目不对项目内的技术可能存在违反当地法律法规的行为作保证,**禁止在违反当地法律法规的情况下使用本项目**,对于使用者在明知或不知当地法律法规不允许的情况下使用本项目所造成的任何违法违规行为由使用者承担,本项目不承担由此造成的任何直接、间接、特殊、偶然或结果性责任。
若你使用了本项目,将代表你接收以上协议。
本项目**不开发或者破解直接获取音频数据**的功能。<br>
本项目仅用于**测试 `electron 8` 在各种系统上的兼容性**及用于**对比各大音乐平台歌单、排行榜等数据列表的差异性**,使用本项目的过程中可能产生的**任何涉及版权相关的数据**归版权方所有,并需于**24小时内删除**,然后到对应平台支持正版资源。<br>
本项目相关的作者不对使用本项目所造成的任何后果负责,即本项目所造成的的任何后果由使用者承担!<br>
本项目基于 [Apache License 2.0](https://github.com/lyswhut/lx-music-desktop/blob/master/LICENSE) 许可证发行。<br>
音乐平台不易,请尊重版权,支持正版。<br> 音乐平台不易,请尊重版权,支持正版。<br>
若对此有疑问请 mail to: lyswhut+qq.com (请将`+`替换成`@`) 若对此有疑问请 mail to: lyswhut+qq.com (请将`+`替换成`@`)
### 许可证
[Apache License 2.0](https://github.com/lyswhut/lx-music-desktop/blob/master/LICENSE)

View File

@ -4,6 +4,7 @@
- 添加软件启动时是否自动聚焦搜索框的设置 - 添加软件启动时是否自动聚焦搜索框的设置
- 新增托盘设置,默认关闭,可到设置开启,感谢@LasyIsLazy提交的PR - 新增托盘设置,默认关闭,可到设置开启,感谢@LasyIsLazy提交的PR
- 新增打开酷狗源用户歌单 - 新增打开酷狗源用户歌单
- 新增使用协议
### 优化 ### 优化

View File

@ -1,4 +1,4 @@
// const { app } = require('electron') const { app } = require('electron')
const { mainOn } = require('../../common/ipc') const { mainOn } = require('../../common/ipc')
mainOn('min', event => { mainOn('min', event => {
@ -11,11 +11,8 @@ mainOn('max', event => {
global.mainWindow.maximize() global.mainWindow.maximize()
} }
}) })
mainOn('close', (event, params) => { mainOn('close', (event, isForce) => {
if (global.mainWindow) { if (isForce) return app.exit(0)
// console.log('close', params)
// global.mainWindowdow.destroy() if (global.mainWindow) global.mainWindow.close()
// app.quit()
global.mainWindow.close()
}
}) })

View File

@ -6,6 +6,7 @@
core-view#view core-view#view
core-player#player core-player#player
core-icons core-icons
material-pact-modal(v-show="!setting.isAgreePact || globalObj.isShowPact")
material-version-modal(v-show="version.showModal") material-version-modal(v-show="version.showModal")
#container(v-else :class="theme") #container(v-else :class="theme")
core-aside#left core-aside#left
@ -14,6 +15,7 @@
core-view#view core-view#view
core-player#player core-player#player
core-icons core-icons
material-pact-modal(v-show="!setting.isAgreePact || globalObj.isShowPact")
material-version-modal(v-show="version.showModal") material-version-modal(v-show="version.showModal")
</template> </template>
@ -39,6 +41,7 @@ export default {
globalObj: { globalObj: {
apiSource: 'test', apiSource: 'test',
proxy: {}, proxy: {},
isShowPact: false,
}, },
updateTimeout: null, updateTimeout: null,
envParams: { envParams: {

View File

@ -6,7 +6,7 @@ transition(enter-active-class="animated fadeIn"
:leave-active-class="outClass") :leave-active-class="outClass")
div(:class="$style.content" v-show="show" @click.stop) div(:class="$style.content" v-show="show" @click.stop)
header(:class="$style.header") header(:class="$style.header")
button(type="button" @click="close") button(type="button" @click="close" v-if="closeBtn")
svg(version='1.1' xmlns='http://www.w3.org/2000/svg' xlink='http://www.w3.org/1999/xlink' height='100%' viewBox='0 0 212.982 212.982' space='preserve') svg(version='1.1' xmlns='http://www.w3.org/2000/svg' xlink='http://www.w3.org/1999/xlink' height='100%' viewBox='0 0 212.982 212.982' space='preserve')
use(xlink:href='#icon-delete') use(xlink:href='#icon-delete')
slot slot
@ -21,6 +21,10 @@ export default {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
closeBtn: {
type: Boolean,
default: true,
},
bgClose: { bgClose: {
type: Boolean, type: Boolean,
default: false, default: false,
@ -80,25 +84,28 @@ export default {
...mapGetters(['setting']), ...mapGetters(['setting']),
}, },
watch: { watch: {
'setting.randomAnimate': { 'setting.randomAnimate'(n) {
handler(n) { n ? this.createWatch() : this.removeWatch()
if (n) {
this.unwatchFn = this.$watch('show', function(n) {
if (n) {
this.inClass = 'animated ' + this.animateIn[getRandom(0, this.animateIn.length)]
this.outClass = 'animated ' + this.animateOut[getRandom(0, this.animateOut.length)]
}
})
} else {
this.unwatchFn && this.unwatchFn()
}
},
immediate: true,
}, },
}, },
mounted() { mounted() {
if (this.setting.randomAnimate) this.createWatch()
}, },
methods: { methods: {
createWatch() {
this.removeWatch()
this.unwatchFn = this.$watch('show', function(n) {
this.inClass = 'animated ' + this.animateIn[getRandom(0, this.animateIn.length)]
this.outClass = 'animated ' + this.animateOut[getRandom(0, this.animateOut.length)]
})
this.inClass = 'animated ' + this.animateIn[getRandom(0, this.animateIn.length)]
this.outClass = 'animated ' + this.animateOut[getRandom(0, this.animateOut.length)]
},
removeWatch() {
if (!this.unwatchFn) return
this.unwatchFn()
this.unwatchFn = null
},
close() { close() {
this.$emit('close') this.$emit('close')
}, },
@ -142,7 +149,9 @@ export default {
flex: none; flex: none;
background-color: @color-theme; background-color: @color-theme;
display: flex; display: flex;
align-items: center;
justify-content: flex-end; justify-content: flex-end;
height: 18px;
button { button {
border: none; border: none;

View File

@ -0,0 +1,176 @@
<template lang="pug">
material-modal(:show="!setting.isAgreePact || globalObj.isShowPact" @close="handleClose(false)" :bgClose="setting.isAgreePact" :close-btn="setting.isAgreePact")
main(:class="$style.main")
h2 许可协议
div.select.scroll(:class="$style.content")
p
| 本项目软件基于
strong.hover.underline(@click="openUrl('http://www.apache.org/licenses/LICENSE-2.0')") Apache License 2.0
| &nbsp;许可证发行在使用本软件前使用者需签署本协议才可继续使用以下协议是对于 Apache License 2.0 的补充如有冲突以以下协议为准
br
p 词语约定本协议中的本软件指洛雪音乐桌面版项目使用者指签署本协议的使用者官方音乐平台指对本软件内置的包括酷我酷狗咪咕等音乐源的官方平台统称版权数据指包括但不限于图像音频名字等在内的他人拥有所属版权的数据
br
p
strong 1
| 本软件的数据来源原理是从各官方音乐平台的公开服务器中拉取数据经过对数据简单地筛选与合并后进行展示因此本软件不对数据的准确性负责
p
strong 2
| 使用本软件的过程中可能会产生版权数据对于这些版权数据本软件不拥有它们的所有权为了避免造成侵权使用者务必在
strong 24小时内
| 清除使用本软件的过程中所产生的版权数据
p
strong 3
| 本软件内的官方音乐平台别名为本软件内对官方音乐平台的一个称呼不包含恶意如果官方音乐平台觉得不妥可联系本软件更改或移除
p
strong 4
| 本软件内使用的部分包括但不限于字体图片等资源来源于互联网如果出现侵权可联系本软件移除
p
strong 5
| 由于使用本软件产生的包括由于本协议或由于使用或无法使用本软件而引起的任何性质的任何直接间接特殊偶然或结果性损害包括但不限于因商誉损失停工计算机故障或故障引起的损害赔偿或任何及所有其他商业损害或损失由使用者负责
p
strong 6
| 本项目完全免费且开源发布于&nbsp;
span.hover.underline(@click="openUrl('https://github.com/lyswhut/lx-music-desktop#readme')") GitHub
| &nbsp;面向全世界人用作对技术的学习交流本软件不对项目内的技术可能存在违反当地法律法规的行为作保证
strong 禁止在违反当地法律法规的情况下使用本软件
|对于使用者在明知或不知当地法律法规不允许的情况下使用本软件所造成的任何违法违规行为由使用者承担本软件不承担由此造成的任何直接间接特殊偶然或结果性责任
br
p
strong *
| &nbsp;若协议更新恕不另行通知可到开源地址查看
p
strong *
| &nbsp;本软件的初衷是帮助官方音乐平台简化数据后代为展示帮助使用者根据歌曲名艺术家等关键字快速地定位所需内容所在的音乐平台
p
strong *
| &nbsp;音乐平台不易建议到对应音乐平台支持正版资源
br
p
strong 若你使用者接受以上协议请点击下面的接受按钮签署本协议若不接受请点击不接受后退出软件并清除本软件的所有数据
div(:class="$style.btns" v-if="!setting.isAgreePact")
material-btn(:class="$style.btn" @click="handleClose(true)") 不接受
material-btn(:class="$style.btn" :disabled="!btnEnable" @click="handleClick()") 接受 {{timeStr}}
</template>
<script>
import { mapGetters, mapMutations } from 'vuex'
import { rendererSend } from '../../../common/ipc'
import { openUrl } from '../../utils'
export default {
props: {
show: {
type: Boolean,
default: false,
},
},
data() {
return {
time: 20,
globalObj: {
isShowPact: false,
},
}
},
computed: {
...mapGetters(['setting']),
btnEnable() {
return this.time == 0
},
timeStr() {
return this.btnEnable ? '' : `(${this.time})`
},
},
mounted() {
if (!this.setting.isAgreePact) {
this.startTimeout()
}
this.$nextTick(() => {
this.globalObj = window.globalObj
})
},
methods: {
...mapMutations(['setAgreePact']),
handleClick() {
this.setAgreePact()
},
handleClose(isExit) {
if (isExit) return rendererSend('close', true)
this.globalObj.isShowPact = false
},
openUrl(url) {
openUrl(url)
},
startTimeout() {
setTimeout(() => {
if (--this.time > 0) this.startTimeout()
}, 1000)
},
},
}
</script>
<style lang="less" module>
@import '../../assets/styles/layout.less';
.main {
padding: 15px;
max-width: 550px;
min-width: 200px;
min-height: 0;
display: flex;
flex-flow: column nowrap;
justify-content: center;
h2 {
font-size: 16px;
color: @color-theme_2-font;
line-height: 1.3;
text-align: center;
}
}
.content {
flex: auto;
margin: 15px 0;
padding-right: 5px;
h3 {
font-weight: bold;
line-height: 2;
}
p {
line-height: 1.5;
font-size: 14px;
text-align: justify;
}
}
.btns {
display: flex;
align-items: center;
justify-content: space-between;
}
.btn {
display: block;
width: 48%;
&:last-child {
margin-bottom: 0;
}
}
each(@themes, {
:global(#container.@{value}) {
.main {
h2 {
color: ~'@{color-@{value}-theme_2-font}';
}
}
.name {
color: ~'@{color-@{value}-theme}';
}
}
})
</style>

View File

@ -9,6 +9,9 @@ export default {
setSetting(state, val) { setSetting(state, val) {
state.setting = val state.setting = val
}, },
setAgreePact(state) {
state.setting.isAgreePact = true
},
setSettingVersion(state, val) { setSettingVersion(state, val) {
state.settingVersion = val state.settingVersion = val
}, },

View File

@ -175,7 +175,7 @@ export const objectDeepMerge = (target, source) => {
* @param {*} setting * @param {*} setting
*/ */
export const updateSetting = (setting, version) => { export const updateSetting = (setting, version) => {
const defaultVersion = '1.0.22' const defaultVersion = '1.0.23'
if (!version) { if (!version) {
if (setting) { if (setting) {
version = setting.version version = setting.version
@ -249,6 +249,7 @@ export const updateSetting = (setting, version) => {
sourceNameType: 'alias', sourceNameType: 'alias',
randomAnimate: true, randomAnimate: true,
ignoreVersion: null, ignoreVersion: null,
isAgreePact: false,
} }
// 使用新年皮肤 // 使用新年皮肤

View File

@ -202,23 +202,14 @@ div.scroll(:class="$style.setting")
p.small 感谢以前捐赠过的人现在软件不再接受捐赠建议把你们的爱心用来支持正版音乐 p.small 感谢以前捐赠过的人现在软件不再接受捐赠建议把你们的爱心用来支持正版音乐
p.small 由于软件开发的初衷仅是为了对新技术的学习与研究因此软件直至停止维护都将会一直保持纯净 p.small 由于软件开发的初衷仅是为了对新技术的学习与研究因此软件直至停止维护都将会一直保持纯净
p.small
| 你已签署本软件的&nbsp;
material-btn(min @click="handleShowPact") 许可协议
| 协议的在线版本在&nbsp;
strong.hover.underline(:title="$t('view.setting.click_open')" @click="handleOpenUrl('https://github.com/lyswhut/lx-music-desktop#%E9%A1%B9%E7%9B%AE%E5%8D%8F%E8%AE%AE')") 这里
| &nbsp;
br br
p.small
| 使用本软件可能产生的
strong 任何涉及版权相关的数据
| 请于
strong 24小时内删除
|
p.small
| 本软件仅用于学习与交流使用禁止将本软件用于
strong 非法用途
| 或将版权内容用于
strong 商业用途
|
p.small
| 使用本软件造成的一切后果由
strong 使用者
| 承担
p p
small By small By
| 落雪无痕 | 落雪无痕
@ -431,6 +422,7 @@ export default {
} }
if (settingData.type !== 'setting') return if (settingData.type !== 'setting') return
const { version: settingVersion, setting } = updateSetting(settingData.data) const { version: settingVersion, setting } = updateSetting(settingData.data)
setting.isAgreePact = false
this.refreshSetting(setting, settingVersion) this.refreshSetting(setting, settingVersion)
}, },
exportSetting(path) { exportSetting(path) {
@ -482,6 +474,7 @@ export default {
} }
if (allData.type !== 'allData') return if (allData.type !== 'allData') return
const { version: settingVersion, setting } = updateSetting(allData.setting) const { version: settingVersion, setting } = updateSetting(allData.setting)
setting.isAgreePact = false
this.refreshSetting(setting, settingVersion) this.refreshSetting(setting, settingVersion)
// 0.6.2 // 0.6.2
@ -626,6 +619,9 @@ export default {
this.current_setting.tray.isShow = isToTray this.current_setting.tray.isShow = isToTray
rendererSend('changeTray', this.current_setting.tray) rendererSend('changeTray', this.current_setting.tray)
}, },
handleShowPact() {
window.globalObj.isShowPact = true
},
}, },
} }
</script> </script>