未验证 提交 817f5966 编写于 作者: 雪月秋水 提交者: GitHub

Merge pull request #127 from Naituw/feature_single_file_fast_export

Added "export to rpc section" to each file's more menu
......@@ -16,18 +16,20 @@ class Disk {
if (event.data.type && event.data.type === 'getSelected') {
window.postMessage({ type: 'selected', data: this.getSelected() }, location.origin)
}
if (event.data.type && event.data.type === 'getHovered') {
window.postMessage({ type: 'hovered', data: this.getHovered() }, location.origin)
}
if (event.data.type && event.data.type === 'showToast') {
this.showToast(event.data.data)
}
})
}
getSelected () {
getFileInfoFromElements (list) {
const selected = []
const list = this.context.querySelectorAll('li[rel="item"]')
Array.from(list).forEach((item) => {
const type = item.getAttribute('file_type')
// file
if (type === '1' && item.classList.contains('selected')) {
if (type === '1') {
selected.push({
isdir: false,
sha1: item.getAttribute('sha1'),
......@@ -36,7 +38,7 @@ class Disk {
})
}
// fold
if (type === '0' && item.classList.contains('selected')) {
if (type === '0') {
selected.push({
isdir: true,
cate_id: item.getAttribute('cate_id'),
......@@ -46,6 +48,14 @@ class Disk {
})
return selected
}
getSelected () {
const list = this.context.querySelectorAll('li[rel="item"].selected')
return this.getFileInfoFromElements(list)
}
getHovered () {
const list = this.context.querySelectorAll('li[rel="item"].hover')
return this.getFileInfoFromElements(list)
}
}
const disk = new Disk()
......
......@@ -22,6 +22,9 @@ class Home extends Downloader {
this.context = document.querySelector('iframe[rel="wangpan"]').contentDocument
UI.init()
UI.addMenu(this.context.querySelector('#js_upload_btn'), 'beforebegin')
UI.addContextMenuRPCSectionWithCallback(() => {
this.addContextMenuEventListener()
})
Core.requestCookies([{ url: 'http://115.com/', name: 'UID' }, { url: 'http://115.com/', name: 'CID' }, { url: 'http://115.com/', name: 'SEID' }])
Core.showToast('初始化成功!', 'inf')
this.mode = 'RPC'
......@@ -29,30 +32,38 @@ class Home extends Downloader {
}
startListen () {
const exportFiles = (files) => {
files.forEach((item) => {
if (item.isdir) {
this.addFolder(item)
} else {
this.addFile(item)
}
})
this.start(Core.getConfigData('interval'), (fileDownloadInfo) => {
if (this.mode === 'RPC') {
Core.aria2RPCMode(this.rpcURL, fileDownloadInfo)
}
if (this.mode === 'TXT') {
Core.aria2TXTMode(fileDownloadInfo)
document.querySelector('#textMenu').classList.add('open-o')
}
})
}
window.addEventListener('message', (event) => {
if (event.data.type && event.data.type === 'selected') {
const type = event.data.type
if (!type) {
return
}
if (type === 'selected' || type === 'hovered') {
this.reset()
const selectedFile = event.data.data
if (selectedFile.length === 0) {
Core.showToast('请选择一下你要保存的文件哦', 'war')
return
}
selectedFile.forEach((item) => {
if (item.isdir) {
this.addFolder(item)
} else {
this.addFile(item)
}
})
this.start(Core.getConfigData('interval'), (fileDownloadInfo) => {
if (this.mode === 'RPC') {
Core.aria2RPCMode(this.rpcURL, fileDownloadInfo)
}
if (this.mode === 'TXT') {
Core.aria2TXTMode(fileDownloadInfo)
document.querySelector('#textMenu').classList.add('open-o')
}
})
exportFiles(selectedFile)
}
})
const menuButton = this.context.querySelector('#aria2List')
......@@ -70,9 +81,24 @@ class Home extends Downloader {
})
}
addContextMenuEventListener () {
const section = this.context.querySelector('#more-menu-rpc-section')
section.addEventListener('click', (event) => {
const rpcURL = event.target.dataset.url
if (rpcURL) {
this.rpcURL = rpcURL
this.getHovered()
this.mode = 'RPC'
}
})
}
getSelected () {
window.postMessage({ type: 'getSelected' }, location.origin)
}
getHovered () {
window.postMessage({ type: 'getHovered' }, location.origin)
}
getFile (file) {
const options = {
credentials: 'include',
......
......@@ -48,7 +48,40 @@ class UI {
event.stopPropagation()
})
}
addContextMenuRPCSectionWithCallback (callback) {
const addContextMenuRPCSection = (node) => {
const dom = `<div class="cell" id="more-menu-rpc-section"><ul></ul></div>`
node.insertAdjacentHTML('beforebegin', dom)
if (this.mostRecentConfigData) {
this.updateMenu(this.mostRecentConfigData)
}
if (callback) {
callback()
}
}
const contextMenuNode = this.context.querySelector('body > .context-menu .cell')
if (contextMenuNode) {
addContextMenuRPCSection(contextMenuNode)
} else if ('MutationObserver' in window) {
const body = this.context.querySelector('body')
let observer
observer = new MutationObserver((mutationsList) => {
let contextMenuNode = this.context.querySelector('body > .context-menu .cell')
if (contextMenuNode) {
observer.disconnect()
addContextMenuRPCSection(contextMenuNode)
}
})
observer.observe(body, {
childList: true
})
}
}
resetMenu () {
this.context.querySelectorAll('#more-menu-rpc-section li').forEach((item) => {
item.remove()
})
this.context.querySelectorAll('.rpc-button').forEach((rpc) => {
rpc.remove()
})
......@@ -57,11 +90,18 @@ class UI {
this.resetMenu()
const { rpcList } = configData
let rpcDOMList = ''
let contextMenuDOMList = ''
rpcList.forEach((rpc) => {
const rpcDOM = `<a class="export-menu-item rpc-button" href="javascript:void(0);" data-url=${rpc.url}>${rpc.name}</a>`
rpcDOMList += rpcDOM
contextMenuDOMList += `<li><a href="javascript:void(0);" data-url=${rpc.url}>${rpc.name}</a></li>`
})
this.context.querySelector('#aria2List').insertAdjacentHTML('afterbegin', rpcDOMList)
const contextMenuSection = this.context.querySelector('#more-menu-rpc-section ul')
if (contextMenuSection) {
contextMenuSection.insertAdjacentHTML('afterbegin', contextMenuDOMList)
}
}
addTextExport () {
const text = `
......@@ -280,6 +320,8 @@ class UI {
document.querySelector('.userAgent-s').value = userAgent
document.querySelector('.referer-s').value = referer
document.querySelector('.headers-s').value = headers
this.mostRecentConfigData = configData
}
saveSetting () {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册