Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
多线程处理优化。使用流程优化优化。Win版应用开发。
  • Loading branch information
EvilCult authored and EvilCult committed Sep 21, 2017
1 parent 08b3ab9 commit 76cbe95
Show file tree
Hide file tree
Showing 13 changed files with 170 additions and 84 deletions.
56 changes: 30 additions & 26 deletions Bl/Play.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import time

from Da import BdApi
from Da import Aria2
from Da import Config
from View import PlayerView

Expand All @@ -26,37 +25,36 @@ def __init__ (self, master) :
else :
self.BDLogin = True

self.Aria = Aria2.Aria2()
self.Player = PlayerView.GUI()
self.Player = PlayerView.GUI(self.master)

def watchLink (self, target) :
self.Player.watchLinkStat = {'err': 0, 'msg': ''}
if self.BDLogin :
self.downloadUrl = target[1]

self.Player.showWatchLink()
linkType = self.downloadUrl[0:6]
if linkType != 'magnet' :
threading.Thread(target = self.__bdPlay).start()
else :
tkMessageBox.showinfo('Notice', '磁力链接无法在线观看,请下载或手动上传视频至百度云!')
self.Player.watchLinkStat['err'] = 2
else :
tkMessageBox.showinfo('Error', '本功能需要云支持,请于菜单栏「Edit -> Baidu Login」登录百度云。')

def dlLink (self, target) :
ariaStat = self.Aria.chkAria()
if ariaStat :
if self.BDLogin :
self.downloadUrl = target[1]
self.dlFileName = target[0]

linkType = self.downloadUrl[0:6]
if linkType != 'magnet' :
threading.Thread(target = self.__bdDownload).start()
else :
self.Aria.download(self.downloadUrl, self.dlFileName);
else :
tkMessageBox.showinfo('Error', '本功能需要云支持,请于菜单栏「Edit -> Baidu Login」登录百度云。')
self.Player.downLinkStat = {'err': 0, 'msg': ''}
if self.BDLogin :
self.downloadUrl = target[1]
self.dlFileName = target[0]

self.Player.showCloudLink()
linkType = self.downloadUrl[0:6]
if linkType != 'magnet' :
threading.Thread(target = self.__bdDownload).start()
else :
self.Player.downLinkStat['err'] = 2
else :
tkMessageBox.showinfo('Error', 'Aria2配置不正确,请确认已运行Aria2服务。')
tkMessageBox.showinfo('Error', '本功能需要云支持,请于菜单栏「Edit -> Baidu Login」登录百度云。')

def showLink (self, target) :
self.downloadUrl = target[1]
Expand All @@ -71,31 +69,35 @@ def __bdPlay (self) :
taskID = result['taskID']
playUrl = self.BD.getPlayUrl(taskID)
if playUrl != '' :
webbrowser.open_new(playUrl)
self.Player.watchLinkStat['msg'] = playUrl
else :
tkMessageBox.showinfo('Error', '云端未能完成该任务,请等待云端下载完成or换个资源试试!')
self.Player.watchLinkStat['err'] = 1
else :
self.bdAuth = {
'vcode': result['vcode'],
'input': ''
}
self.__authCode(result['img'], 'play')
self.Player.watchLinkStat['err'] = 3
self.Player.watchLinkStat['msg'] = result['img']
self.Player.authDownload = lambda authKey = '' : self.__authPlay(authKey)

def __bdDownload (self) :
result = self.BD.addTask(self.downloadUrl, self.bdAuth)
if result['err'] == 0 :
taskID = result['taskID']
dlUrl = self.BD.getDlUrl(taskID)
if dlUrl != '' :
self.Aria.download(dlUrl, self.dlFileName)
self.Player.downLinkStat['msg'] = dlUrl
else :
tkMessageBox.showinfo('Error', '云端未能完成该任务,请等待云端下载完成or换个资源试试!')
self.Player.downLinkStat['err'] = 1
else :
self.bdAuth = {
'vcode': result['vcode'],
'input': ''
}
self.__authCode(result['img'], 'download')
self.Player.downLinkStat['err'] = 3
self.Player.downLinkStat['msg'] = result['img']
self.Player.authDownload = lambda authKey = '' : self.__authDownload(authKey)

def __authCode (self, imgUrl, authType) :
authKey = ''
Expand All @@ -108,11 +110,13 @@ def __authCode (self, imgUrl, authType) :
self.Player.showAuthCode(imgUrl)

def __authPlay (self, authKey) :
self.Player.watchLinkStat = {'err': 0, 'msg': ''}
self.bdAuth['input'] = authKey

self.Player.showWatchLink()
threading.Thread(target = self.__bdPlay).start()

def __authDownload (self, authKey) :
self.Player.downLinkStat = {'err': 0, 'msg': ''}
self.bdAuth['input'] = authKey

self.Player.showCloudLink()
threading.Thread(target = self.__bdDownload).start()
4 changes: 2 additions & 2 deletions Da/Aria2.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,9 @@ def download (self, fileUrl, fileName) :
rpc = self.__getRpc(fileUrl, fileName)
dlStat = self.Tools.getPage(self.ariaHost, [], rpc)

try:
if self.ariaGuiPat != '':
os.system('open -a "' + str(self.ariaGuiPath) + '"')
except Exception as e:
else :
webbrowser.open_new('http://aria2c.com/')

def __getRpc (self, fileUrl, fileName) :
Expand Down
4 changes: 2 additions & 2 deletions Da/Config.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,8 @@ def __create (self) :

bdc = ''
path = 'MovieCatcherFiles'
ariarpc = 'http://localhost:6800/jsonrpc'
ariapath = '/Applications/Aria2GUI.app'
ariarpc = ''
ariapath = ''
udrate = '2'
udtime = str(int(time.time()))

Expand Down
11 changes: 10 additions & 1 deletion Lib/Tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import re
import ssl
import os
import platform
import sys

class Tools :
Expand Down Expand Up @@ -68,4 +69,12 @@ def getRes (self, fileName) :

filePath = os.path.join(base_path, fileName)

return filePath
return filePath

def isWin (self) :
osType = platform.system()

if osType == 'Windows' :
return True
else :
return False
3 changes: 2 additions & 1 deletion View/AppInfoView.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ def show (self) :
self.slave = Tkinter.Toplevel()
self.slave.title(self.winTitle)
self.slave.resizable(width = 'false', height = 'false')
self.slave.iconbitmap(self.Tools.getRes('biticon.ico'))
if self.Tools.isWin() :
self.slave.iconbitmap(self.Tools.getRes('biticon.ico'))

info = [
'简介: 就是瞎做来看电影的。',
Expand Down
29 changes: 8 additions & 21 deletions View/ConfigView.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ def show (self, data) :
self.slave = Tkinter.Toplevel()
self.slave.title(self.winTitle)
self.slave.resizable(width = 'false', height = 'false')
self.slave.iconbitmap(self.Tools.getRes('biticon.ico'))
if self.Tools.isWin() :
self.slave.iconbitmap(self.Tools.getRes('biticon.ico'))

mainFrame = Tkinter.Frame(self.slave, bd = 0, bg="#444")
mainFrame.pack(expand = True, fill = 'both', ipadx = '10')
Expand All @@ -30,25 +31,11 @@ def show (self, data) :
self.path.grid(row = 1, column = 1, pady = 5)
self.path.insert('end', data['path'])

AriaRpclabel = Tkinter.Label(mainFrame, text="Aria2 Json-RPC路径", fg = '#ddd', bg="#444", anchor = 'center')
AriaRpclabel.grid(row = 2, column = 1)

self.ariarpc = Tkinter.Entry(mainFrame, width = 25, bd = 0, bg = "#222", fg = "#ddd", highlightthickness = 1, highlightcolor="#111", highlightbackground = '#111', selectbackground = '#116cd6', justify='center')
self.ariarpc.grid(row = 3, column = 1, pady = 5)
self.ariarpc.insert('end', data['ariarpc'])

AriaPathlabel = Tkinter.Label(mainFrame, text="Aria2Gui路径", fg = '#ddd', bg="#444", anchor = 'center')
AriaPathlabel.grid(row = 4, column = 1)

self.ariapath = Tkinter.Entry(mainFrame, width = 25, bd = 0, bg = "#222", fg = "#ddd", highlightthickness = 1, highlightcolor="#111", highlightbackground = '#111', selectbackground = '#116cd6', justify='center')
self.ariapath.grid(row = 5, column = 1, pady = 5)
self.ariapath.insert('end', data['ariapath'])

updateTimelabel = Tkinter.Label(mainFrame, text="自动检测更新", fg = '#ddd', bg="#444", anchor = 'center')
updateTimelabel.grid(row = 6, column = 1)
updateTimelabel.grid(row = 2, column = 1)

utFrame = Tkinter.Frame(mainFrame, bd = 0, bg="#444")
utFrame.grid(row = 7, column = 1, pady = 5)
utFrame.grid(row = 3, column = 1, pady = 5)

self.chkUpdateTime = Tkinter.IntVar()
self.chkUpdateTime.set(int(data['udrate']))
Expand All @@ -60,23 +47,23 @@ def show (self, data) :
r3.grid(row = 0, column = 2, sticky = 'e')

cfgBtn = Tkinter.Button(mainFrame, text = '保存配置', width = 20, fg = '#222', highlightbackground = '#444', command = self.saveCfg)
cfgBtn.grid(row = 8, column = 1, pady = 5)
cfgBtn.grid(row = 4, column = 1, pady = 5)

mainFrame.grid_columnconfigure(0, weight=1)
mainFrame.grid_columnconfigure(2, weight=1)

def saveCfg (self) :
data = {
'path' : self.path.get(),
'ariarpc' : self.ariarpc.get(),
'ariapath' : self.ariapath.get(),
'ariarpc' : '',
'ariapath' : '',
'udrate' : self.chkUpdateTime.get()
}

result = self.save(data)

if result['stat'] == 1 :
self.slave.withdraw()
self.slave.destroy()
tkMessageBox.showinfo('Success', '更新成功')
else :
tkMessageBox.showinfo('Error', result['msg'])
Expand Down
4 changes: 2 additions & 2 deletions View/MainView.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ def __mainWindow (self) :

self.master.title(self.winTitle)
self.master.resizable(width = 'false', height = 'false')
self.master.iconbitmap(self.Tools.getRes('biticon.ico'))
# self.master.geometry('400x100+500+200')
if self.Tools.isWin() :
self.master.iconbitmap(self.Tools.getRes('biticon.ico'))

menuBar = MenuBarView.GUI(self.master)
menuBar.show()
Expand Down
2 changes: 1 addition & 1 deletion View/MenuBarView.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def show (self) :
Cfg = Config.Config()
editMenu.add_command(label = "Config", command = Cfg.show)
editMenu.add_separator()
editMenu.add_command(label = "Baidu Login", command = lambda cb = BdApi.BdApi().saveLogin : PlayerView.GUI().showLoginWindow(cb))
editMenu.add_command(label = "Baidu Login", command = lambda cb = BdApi.BdApi().saveLogin : PlayerView.GUI(self.master).showLoginWindow(cb))
menubar.add_cascade(label = "Edit", menu = editMenu)

winMenu = Tkinter.Menu(menubar, tearoff = 0)
Expand Down
Loading

0 comments on commit 76cbe95

Please sign in to comment.