diff --git a/README.md b/README.md index 2806fbc1..9a13bf82 100644 --- a/README.md +++ b/README.md @@ -81,15 +81,20 @@ npm run pack 常见问题已移至: -### 免责声明 +### 项目协议 + +本项目基于 [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 面向全世界人用作对技术的学习交流,本项目不对项目内的技术可能存在违反当地法律法规的行为作保证,**禁止在违反当地法律法规的情况下使用本项目**,对于使用者在明知或不知当地法律法规不允许的情况下使用本项目所造成的任何违法违规行为由使用者承担,本项目不承担由此造成的任何直接、间接、特殊、偶然或结果性责任。 + +若你使用了本项目,将代表你接收以上协议。 -本项目**不开发或者破解直接获取音频数据**的功能。
-本项目仅用于**测试 `electron 8` 在各种系统上的兼容性**及用于**对比各大音乐平台歌单、排行榜等数据列表的差异性**,使用本项目的过程中可能产生的**任何涉及版权相关的数据**归版权方所有,并需于**24小时内删除**,然后到对应平台支持正版资源。
-本项目相关的作者不对使用本项目所造成的任何后果负责,即本项目所造成的的任何后果由使用者承担!
-本项目基于 [Apache License 2.0](https://github.com/lyswhut/lx-music-desktop/blob/master/LICENSE) 许可证发行。
音乐平台不易,请尊重版权,支持正版。
若对此有疑问请 mail to: lyswhut+qq.com (请将`+`替换成`@`) - -### 许可证 - -[Apache License 2.0](https://github.com/lyswhut/lx-music-desktop/blob/master/LICENSE) diff --git a/publish/changeLog.md b/publish/changeLog.md index 668181bc..acff5343 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -4,6 +4,7 @@ - 添加软件启动时是否自动聚焦搜索框的设置 - 新增托盘设置,默认关闭,可到设置开启,感谢@LasyIsLazy提交的PR - 新增打开酷狗源用户歌单 +- 新增使用协议 ### 优化 diff --git a/src/main/rendererEvents/trafficLight.js b/src/main/rendererEvents/trafficLight.js index 89bdfcf1..3e3805d9 100644 --- a/src/main/rendererEvents/trafficLight.js +++ b/src/main/rendererEvents/trafficLight.js @@ -1,4 +1,4 @@ -// const { app } = require('electron') +const { app } = require('electron') const { mainOn } = require('../../common/ipc') mainOn('min', event => { @@ -11,11 +11,8 @@ mainOn('max', event => { global.mainWindow.maximize() } }) -mainOn('close', (event, params) => { - if (global.mainWindow) { - // console.log('close', params) - // global.mainWindowdow.destroy() - // app.quit() - global.mainWindow.close() - } +mainOn('close', (event, isForce) => { + if (isForce) return app.exit(0) + + if (global.mainWindow) global.mainWindow.close() }) diff --git a/src/renderer/App.vue b/src/renderer/App.vue index e3af6262..32f84a7e 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -6,6 +6,7 @@ core-view#view core-player#player core-icons + material-pact-modal(v-show="!setting.isAgreePact || globalObj.isShowPact") material-version-modal(v-show="version.showModal") #container(v-else :class="theme") core-aside#left @@ -14,6 +15,7 @@ core-view#view core-player#player core-icons + material-pact-modal(v-show="!setting.isAgreePact || globalObj.isShowPact") material-version-modal(v-show="version.showModal") @@ -39,6 +41,7 @@ export default { globalObj: { apiSource: 'test', proxy: {}, + isShowPact: false, }, updateTimeout: null, envParams: { diff --git a/src/renderer/components/material/Modal.vue b/src/renderer/components/material/Modal.vue index 546e5073..7f379240 100644 --- a/src/renderer/components/material/Modal.vue +++ b/src/renderer/components/material/Modal.vue @@ -6,7 +6,7 @@ transition(enter-active-class="animated fadeIn" :leave-active-class="outClass") div(:class="$style.content" v-show="show" @click.stop) 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') use(xlink:href='#icon-delete') slot @@ -21,6 +21,10 @@ export default { type: Boolean, default: false, }, + closeBtn: { + type: Boolean, + default: true, + }, bgClose: { type: Boolean, default: false, @@ -80,25 +84,28 @@ export default { ...mapGetters(['setting']), }, watch: { - 'setting.randomAnimate': { - handler(n) { - 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, + 'setting.randomAnimate'(n) { + n ? this.createWatch() : this.removeWatch() }, }, mounted() { + if (this.setting.randomAnimate) this.createWatch() }, 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() { this.$emit('close') }, @@ -142,7 +149,9 @@ export default { flex: none; background-color: @color-theme; display: flex; + align-items: center; justify-content: flex-end; + height: 18px; button { border: none; diff --git a/src/renderer/components/material/PactModal.vue b/src/renderer/components/material/PactModal.vue new file mode 100644 index 00000000..0b8994c0 --- /dev/null +++ b/src/renderer/components/material/PactModal.vue @@ -0,0 +1,176 @@ + + + + + + diff --git a/src/renderer/store/mutations.js b/src/renderer/store/mutations.js index 30cd58e0..8aade6cc 100644 --- a/src/renderer/store/mutations.js +++ b/src/renderer/store/mutations.js @@ -9,6 +9,9 @@ export default { setSetting(state, val) { state.setting = val }, + setAgreePact(state) { + state.setting.isAgreePact = true + }, setSettingVersion(state, val) { state.settingVersion = val }, diff --git a/src/renderer/utils/index.js b/src/renderer/utils/index.js index c47a558a..3d17bec9 100644 --- a/src/renderer/utils/index.js +++ b/src/renderer/utils/index.js @@ -175,7 +175,7 @@ export const objectDeepMerge = (target, source) => { * @param {*} setting */ export const updateSetting = (setting, version) => { - const defaultVersion = '1.0.22' + const defaultVersion = '1.0.23' if (!version) { if (setting) { version = setting.version @@ -249,6 +249,7 @@ export const updateSetting = (setting, version) => { sourceNameType: 'alias', randomAnimate: true, ignoreVersion: null, + isAgreePact: false, } // 使用新年皮肤 diff --git a/src/renderer/views/Setting.vue b/src/renderer/views/Setting.vue index e12f3281..a75f0e39 100644 --- a/src/renderer/views/Setting.vue +++ b/src/renderer/views/Setting.vue @@ -202,23 +202,14 @@ div.scroll(:class="$style.setting") p.small 感谢以前捐赠过的人❤️,现在软件不再接受捐赠,建议把你们的爱心用来支持正版音乐, p.small 由于软件开发的初衷仅是为了对新技术的学习与研究,因此软件直至停止维护都将会一直保持纯净。 + p.small + | 你已签署本软件的  + material-btn(min @click="handleShowPact") 许可协议 + | ,协议的在线版本在  + 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')") 这里 + |  。 br - p.small - | 使用本软件可能产生的 - strong 任何涉及版权相关的数据 - | 请于 - strong 24小时内删除 - | , - p.small - | 本软件仅用于学习与交流使用,禁止将本软件用于 - strong 非法用途 - | 或将版权内容用于 - strong 商业用途 - | 。 - p.small - | 使用本软件造成的一切后果由 - strong 使用者 - | 承担! + p small By: | 落雪无痕 @@ -431,6 +422,7 @@ export default { } if (settingData.type !== 'setting') return const { version: settingVersion, setting } = updateSetting(settingData.data) + setting.isAgreePact = false this.refreshSetting(setting, settingVersion) }, exportSetting(path) { @@ -482,6 +474,7 @@ export default { } if (allData.type !== 'allData') return const { version: settingVersion, setting } = updateSetting(allData.setting) + setting.isAgreePact = false this.refreshSetting(setting, settingVersion) // 兼容0.6.2及以前版本的列表数据 @@ -626,6 +619,9 @@ export default { this.current_setting.tray.isShow = isToTray rendererSend('changeTray', this.current_setting.tray) }, + handleShowPact() { + window.globalObj.isShowPact = true + }, }, }