#!/usr/bin/env python # -*- coding: utf-8 -*- # #Copyright (C) 2009 KingZero # #This program is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 3 of the License, #or (at your option) any later version. # #This program is distributed in the hope that it will be useful, #but WITHOUT ANY WARRANTY; without even the implied warranty of #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. #See the GNU General Public License for more details. # #You should have received a copy of the GNU General Public License # along with this program; if not, see . # ### from os import sep from os.path import abspath from os.path import dirname import socket from time import sleep from threading import Thread from pyLoadCore import Core import subprocess import wxversion wxversion.select('2.8') import wx import wx.lib.newevent import wx.lib.sized_controls as sized_control from module.remote.ClientSocket import SocketThread (DataArrived, EVT_DATA_ARRIVED) = wx.lib.newevent.NewEvent() class _Download_Dialog(sized_control.SizedDialog): def __init__(self, parent, id): sized_control.SizedDialog.__init__(self, parent, id, "Downloads hinzufügen", style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER) pane = self.GetContentsPane() self.links = wx.TextCtrl(pane, -1, style=wx.TE_MULTILINE, size=(500, 200)) self.links.SetSizerProps(expand=True, proportion=1) self.SetButtonSizer(self.CreateStdDialogButtonSizer(wx.OK | wx.CANCEL)) self.Fit() self.SetMinSize(self.GetSize()) #Clipboard self.data = wx.TextDataObject() if wx.TheClipboard.Open(): wx.TheClipboard.GetData(self.data) for link in self.data.GetText().split('\n'): if link.startswith("http"): self.links.write(link + "\n") wx.TheClipboard.Close() class _Upper_Panel(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent) sizer = wx.BoxSizer(wx.HORIZONTAL) download_liste = wx.ListCtrl(self, style=wx.LC_REPORT) download_liste.InsertColumn(0, 'Name', width=250) download_liste.InsertColumn(1, 'Status') download_liste.InsertColumn(2, 'Groesse') download_liste.InsertColumn(3, 'Uebertragen', width=100) download_liste.InsertColumn(4, 'Prozent', width=100) download_liste.InsertColumn(5, 'Dauer', width=100) download_liste.InsertColumn(7, 'Geschwindigkeit', width=150) sizer.Add(download_liste, 1, wx.EXPAND) self.SetSizer(sizer) class _Lower_Panel(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent) self.SetBackgroundColour(wx.BLACK) class _Host_Dialog(wx.Dialog): def __init__(self, parent, id, title): wx.Dialog.__init__(self, parent, id, title, size=(250, 170)) self.host = wx.TextCtrl(self, -1, '127.0.0.1') host_name = wx.StaticText(self, -1, 'Host:') self.port = wx.TextCtrl(self, -1, '7272') port_name = wx.StaticText(self, -1, 'Port:') self.password = wx.TextCtrl(self, -1, 'pwhere') password_name = wx.StaticText(self, -1, 'Password:') button_ok = wx.Button(self, wx.ID_OK, 'Ok', size=(90, 28)) button_cancel = wx.Button(self, wx.ID_CANCEL, 'Close', size=(90, 28)) fgs = wx.FlexGridSizer(3, 2, 9, 25) fgs.AddMany([(host_name), (self.host, 0, wx.EXPAND), (port_name), (self.port, 1, wx.EXPAND), (password_name), (self.password, 1, wx.EXPAND), (button_ok, 1, wx.EXPAND), (button_cancel, 1, wx.EXPAND)]) fgs.AddGrowableCol(1, 1) hbox = wx.BoxSizer(wx.HORIZONTAL) hbox.Add(fgs, 1, wx.ALL | wx.EXPAND, 15) self.SetSizer(hbox) class _Core_Thread(Thread): def __init__(self): Thread.__init__(self) self.core = Core() def run(self): self.core.start() class Pyload_Main_Gui(wx.Frame): def __init__(self, parent, id, title="pyLoad"): wx.Frame.__init__(self, parent, id, title, size=(910, 500)) app_path = dirname(abspath(__file__)) + sep socket_host = _Host_Dialog(self, -1, 'Connect to:') res_socket = socket_host.ShowModal() if (res_socket == wx.ID_CANCEL): self.Close() # socket try: self.thread = SocketThread(socket_host.host.GetValue(), int(socket_host.port.GetValue()), socket_host.password.GetValue(), self) except socket.error: #self.core = _Core_Thread() #self.core.start() cmd = ['python', 'pyLoadCore.py'] subprocess.call(cmd) sleep(1) self.thread = SocketThread(socket_host.host.GetValue(), int(socket_host.port.GetValue()), socket_host.password.GetValue(), self) # Menubar menubar = wx.MenuBar() menu_file = wx.Menu() submenu_exit = menu_file.Append(-1, 'Schliessen', 'pyLoad beenden') menubar.Append(menu_file, '&Datei') self.SetMenuBar(menubar) # Toolbar toolbar = self.CreateToolBar() toolbar.SetToolBitmapSize((32, 32)) add = toolbar.AddLabelTool(2, '', wx.Bitmap(app_path + '/icons/add.png')) delete = toolbar.AddLabelTool(3, '', wx.Bitmap(app_path + '/icons/del.png')) start = toolbar.AddLabelTool(4, '', wx.Bitmap(app_path + '/icons/start.png')) pause = toolbar.AddLabelTool(5, '', wx.Bitmap(app_path + '/icons/pause.png')) stop = toolbar.AddLabelTool(6, '', wx.Bitmap(app_path + '/icons/stop.png')) up = toolbar.AddLabelTool(7, '', wx.Bitmap(app_path + '/icons/up.png')) down = toolbar.AddLabelTool(8, '', wx.Bitmap(app_path + '/icons/down.png')) config = toolbar.AddLabelTool(9, '', wx.Bitmap(app_path + '/icons/setup.png')) toolbar.Realize() splitter = wx.SplitterWindow(self) panel_up = _Upper_Panel(splitter) panel_down = _Lower_Panel(splitter) splitter.SplitHorizontally(panel_up, panel_down, 300) # Binds self.Bind(wx.EVT_MENU, self.exit_button_clicked, submenu_exit) self.Bind(wx.EVT_TOOL, self.add_button_clicked, add) self.Bind(EVT_DATA_ARRIVED, self.onUpdate) self.Centre() self.Show(True) def exit_button_clicked(self, event): self.Close() def add_button_clicked(self, event): #test #self.thread.push_exec("get_downloads") add_download = _Download_Dialog(None, -1) result = add_download.ShowModal() add_download.Destroy() def show_links(self, links): for link in links: #wx.MessageDialog(self, str(link), 'info', style=wx.OK).ShowModal() print str(link) def data_arrived(self, rep): evt = DataArrived(obj=rep) wx.PostEvent(self, evt) def onUpdate(self, evt): if evt.obj.function == "get_downloads": pass #self.show_links(evt.obj.response) if evt.obj.command == "update": #pass self.show_links(evt.obj.data) app = wx.App() Pyload_Main_Gui(None, -1) app.MainLoop()