Avdump GUI

From AniDB
Revision as of 18:55, 12 May 2007 by Der Idiot (talk | contribs) (New page: <pre> import wx,os,subprocess class stuff: def read_file(self,filepath): """reads a file and returns the containing text""" f = open(filepath,"r") config = f.r...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
import wx,os,subprocess

class stuff:
    def read_file(self,filepath):
        """reads a file and returns the containing text"""
        f = open(filepath,"r")
        config = f.readlines()
        f.close()
        return config

    def create_file(self,filepath,new):
        """writes content to a not existing file"""
        f = open(filepath,"w")
        f.write(new)
        f.close()

class mainFrame(wx.Frame):
    __simple = ['p','z','r','m','c','o']
    __options = {'avdump':'avdump.exe','user':'','pass':'','ext':'','misc':'','bsize':'2048','port':'','tout':'30','retries':'6','exp':'export.txt','log':'log.txt','done':'done.txt'}
    __configfile='config.ini'
    
    def read_config(self):
        '''read the config file and return the content'''
        if not os.path.exists(self.__configfile):
            self.write_config()
        for line in glob.read_file(self.__configfile):
            if not line.endswith('='):
                temp,val = line.rstrip('\n').split('=',1)
            else:
                val = ''
            for elem in self.__options:
                if temp == elem:
                    self.__options[temp] = val

    def write_config(self,newconfig=''):
        for elem in self.__options:
            newconfig += ('%s=%s\n') %(elem,self.__options[elem])
        glob.create_file(self.__configfile,newconfig)

    def avdump(self):
        self.__options['param'] = ''
        if self.__options['misc'].lstrip(',') > 0:
            for elem in self.__options['misc'].split(','):
                if elem not in ['retries','']:
                    if elem in self.__simple:
                        self.__options['param'] += ' -' + elem
                    elif elem == 'tout':
                        self.__options['param'] += ' -' + elem + ':' + self.__options[elem] + ':' + self.__options['retries']
                    else:
                        self.__options['param'] += ' -' + elem + ':' + self.__options[elem]
        return ('"%s" -ac:%s:%s%s %s') %(self.__options['avdump'], self.__options['user'], self.__options['pass'], self.__options['param'], self.__options['scanpath'])


    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, -1, u'Avdump GUI', wx.DefaultPosition, (350, 140), style=wx.CLOSE_BOX | wx.SYSTEM_MENU | wx.CAPTION | 0 | 0 | wx.MINIMIZE_BOX)
        self.panel = wx.Panel(self, -1)

        self.filepath = wx.TextCtrl(self.panel, -1, '', (95, 25), size=(190, 24))
        self.start = wx.Button(self.panel, -1, 'Start', (90,75), (-1, -1))
        self.options = wx.Button(self.panel, -1, 'Options', (185,75), (-1, -1))
        self.select = wx.Button(self.panel, -1, '...', (295, 25), (25, -1))
        self.scantype = wx.RadioBox(self.panel,-1,pos=(5,5),size=(-1, 59),style=wx.RA_VERTICAL,label='scantype',choices = ['Files','Folder'])
        
        self.Bind(wx.EVT_BUTTON, self.selectClick, self.select)
        self.Bind(wx.EVT_BUTTON, self.optionsClick, self.options)
        self.Bind(wx.EVT_BUTTON, self.startClick, self.start)
        self.read_config()

        self.child = OptionsFrame(self, 'App')

    def selectClick(self, event,path=''):
        if self.scantype.GetStringSelection() == 'Files':
            dialog = wx.FileDialog ( None, message = 'Pick a directory.', style= wx.FD_MULTIPLE)
            if dialog.ShowModal() == wx.ID_OK:
                temp = dialog.GetPaths()
                if len(temp)>1:
                    for elem in temp:
                        path += '"' + elem + '" '
                else:
                    path = '"' + temp[0] + '"'
        else:
            dialog = wx.DirDialog ( None, message = 'Pick a directory.' )
            if dialog.ShowModal() == wx.ID_OK:
                path = '"' + dialog.GetPath() + '"'

        self.filepath.Clear()
        dialog.Destroy()
        self.filepath.write(path)
        self.__options['scanpath'] = path

    def startClick(self, event):
        if self.filepath.GetValue() != '':
            self.read_config()
            subprocess.call(str(self.avdump()))

    def optionsClick(self, event):
        self.child.Show(True)

class OptionsFrame(wx.Frame):
    __box = {'ext':False,'log':False,'exp':False,'port':False,'done':False,'bsize':False,'tout':False,'c':False,'m':False,'p':False,'r':False,'z':False,'o':False}
    __options = {'avdump':'avdump.exe','user':'','pass':'','ext':'','misc':'','bsize':'2048','port':'','tout':'30','retries':'6','exp':'export.txt','log':'log.txt','done':'done.txt'}
    __configfile='config.ini'

    def read_config(self):
        '''read the config file and return the content'''
        if not os.path.exists(self.__configfile):
            self.write_config()
        for line in glob.read_file(self.__configfile):
            if not line.endswith('='):
                temp,val = line.rstrip('\n').split('=',1)
            else:
                val = ''
            for elem in self.__options:
                if temp == elem:
                    self.__options[temp] = val

    def write_config(self,newconfig=''):
        for elem in self.__options:
            newconfig += ('%s=%s\n') %(elem,self.__options[elem])
        glob.create_file(self.__configfile,newconfig)

    def set_misc(self,misc=''):
        for elem in self.__box:
            if self.__box[elem] is True:
                misc += elem + ','
        self.__options['misc'] = misc

    def get_checkboxes(self,misc):
        if misc is not None:
            misc = misc.rstrip(',').lstrip(',')
            if misc.find(',') > 0:
                for elem in misc.split(','):
                    self.__box[elem] = True
            else:
                self.__box[misc] = True

    
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, -1, 'options', wx.DefaultPosition, (301, 691), style=wx.CLOSE_BOX | wx.SYSTEM_MENU | wx.CAPTION | 0 | 0 | wx.MINIMIZE_BOX)
        self.panel = wx.Panel(self, -1)
        self.adoptions = wx.StaticBox(self.panel, -1, "advanced options", (5,170), (275, 275))
        self.groupbox3 = wx.StaticBox(self.panel, -1, "Path to Avdump", (5,0), (275, 55))
        self.groupbox4 = wx.StaticBox(self.panel, -1, "UDP API Username/Password", (5,55), (275, 115))
        self.groupbox5 = wx.StaticBox(self.panel, -1, "logs", (5,445), (275, 170))
        self.filepath = wx.TextCtrl(self.panel, -1, '', (15,20), size=(220, 25))
        self.selectavdump = wx.Button(self.panel, -1, '...', (245,20), (25, 25))
        self.username = wx.TextCtrl(self.panel, -1, '', (15,90), size=(255, 25))
        self.password = wx.TextCtrl(self.panel, -1, '', (15,135), size=(255, 25))
        self.delete = wx.CheckBox(self.panel, -1, 'delete files after parsing', (15,190), (240, 17))
        self.recursive = wx.CheckBox(self.panel, -1, 'do _not_ recurse into subfolders', (15,205), (240, 17))
        self.monitor = wx.CheckBox(self.panel, -1, 'Monitor folder(s)', (15,220), (240, 17))
        self.bsize = wx.CheckBox(self.panel, -1, 'overwrite the default setting for buffersize', (15,235), (240, 17))
        self.ext = wx.CheckBox(self.panel, -1, 'overwrite the default setting for extentions', (15,250), (240, 17))
        self.port = wx.CheckBox(self.panel, -1, 'overwrite the default setting for port', (15,265), (240, 17))
        self.tout = wx.CheckBox(self.panel, -1, 'overwrite the default setting for timeouts', (15,280), (240, 17))
        self.pause = wx.CheckBox(self.panel, -1, 'Pause when done (hold cmd window)', (15,295), (240, 17))
        self.random = wx.CheckBox(self.panel, -1, 'Random file order', (15,310), (240, 17))
        self.wait = wx.CheckBox(self.panel, -1, 'wait for response when sending dumps', (15,325), (240, 17))
        self.extention = wx.TextCtrl(self.panel, -1, '', (15,360), size=(255, 25))
        self.buffersize = wx.TextCtrl(self.panel, -1, '', (15,405), size=(55, 25))
        self.portnumber = wx.TextCtrl(self.panel, -1, '', (81,405), size=(55, 25))
        self.timeout = wx.TextCtrl(self.panel, -1, '', (149,405), size=(55, 25))
        self.retries = wx.TextCtrl(self.panel, -1, '', (215,405), size=(55, 25))
        self.exp = wx.CheckBox(self.panel, -1, '', (15,478), (17, 17))
        self.exppath = wx.TextCtrl(self.panel, -1, '', (35,475), size=(200, 25))
        self.selectexp = wx.Button(self.panel, -1, '...', (245,475), (25, 23))
        self.done = wx.CheckBox(self.panel, -1, '', (15,538), (17, 17))
        self.donepath = wx.TextCtrl(self.panel, -1, '', (35,535), size=(200, 25))
        self.selectdone = wx.Button(self.panel, -1, '...', (245,535), (25, 23))
        self.log = wx.CheckBox(self.panel, -1, '', (15,583), (17, 17))
        self.logpath = wx.TextCtrl(self.panel, -1, '', (35,580), size=(200, 25))
        self.selectlog = wx.Button(self.panel, -1, '...', (245,580), (25, 23))
        self.save = wx.Button(self.panel, -1, 'Save', (65,620), (75, 23))
        self.cancel = wx.Button(self.panel, -1, 'Cancel', (150,620), (75, 23))
        self.Retries = wx.StaticText(self.panel, -1, 'Retries:', (220,387), (44, 17))
        self.Timeout = wx.StaticText(self.panel, -1, 'Timeout:', (152,387), (50, 17))
        self.Buffersize = wx.StaticText(self.panel, -1, 'Buffersize:', (16,387), (60, 17))
        self.Port = wx.StaticText(self.panel, -1, 'Port:', (86,387), (44, 17))
        self.donelog = wx.StaticText(self.panel, -1, 'save processed-file-paths to file and exlude existing from proc', (40,505), (200, 25))
        self.exported2k = wx.StaticText(self.panel, -1, 'export ed2k-links to file', (40,457), (150, 17))
        self.writelog = wx.StaticText(self.panel, -1, 'write output to log', (40,563), (150, 17))
        self.apiuser = wx.StaticText(self.panel, -1, 'Username:', (20,73), (150, 17))
        self.apipass = wx.StaticText(self.panel, -1, 'Password:', (20,118), (150, 17))
        self.extentionlist = wx.StaticText(self.panel, -1, 'comma seperated extension list', (20,343), (170, 17))
        self.Bind(wx.EVT_BUTTON, self.selectavdClick, self.selectavdump)
        self.Bind(wx.EVT_BUTTON, self.selectlogClick, self.selectlog)
        self.Bind(wx.EVT_BUTTON, self.selectexpClick, self.selectexp)
        self.Bind(wx.EVT_BUTTON, self.selectdoneClick, self.selectdone)
        self.Bind(wx.EVT_BUTTON, self.saveClick, self.save)
        self.Bind(wx.EVT_BUTTON, self.cancelClick, self.cancel)
        self.Bind(wx.EVT_CLOSE, self.onclose)
        self.refresh()

    def selectavdClick(self, event):
        dialog = wx.FileDialog ( None, message = 'Pick a directory.')
        if dialog.ShowModal() == wx.ID_OK:
            self.filepath.Clear()
            self.filepath.write(dialog.GetPath())

    def selectlogClick(self, event):
        dialog = wx.FileDialog ( None, message = 'Pick a directory.')
        if dialog.ShowModal() == wx.ID_OK:
            self.logpath.Clear()
            self.logpath.write(dialog.GetPath())

    def selectexpClick(self, event):
        dialog = wx.FileDialog ( None, message = 'Pick a directory.')
        if dialog.ShowModal() == wx.ID_OK:
            self.exppath.Clear()
            self.exppath.write(dialog.GetPath())

    def selectdoneClick(self, event):
        dialog = wx.FileDialog ( None, message = 'Pick a directory.')
        if dialog.ShowModal() == wx.ID_OK:
            self.donepath.Clear()
            self.donepath.write(dialog.GetPath())

    def saveClick(self,event):
        self.update()
        self.Show(False)

    def cancelClick(self,event):
        self.refresh()
        self.Show(False)

    def onclose(self,event):
        self.Show(False)

    def refresh(self):
        self.read_config()
        self.get_checkboxes(self.__options['misc'])
        self.filepath.Clear()
        self.filepath.write(self.__options['avdump'])
        self.username.Clear()
        self.username.write(self.__options['user'])
        self.password.Clear()
        self.password.write(self.__options['pass'])
        self.extention.Clear()
        self.extention.write(self.__options['ext'])
        self.buffersize.Clear()
        self.buffersize.write(self.__options['bsize'])
        self.portnumber.Clear()
        self.portnumber.write(self.__options['port'])
        self.timeout.Clear()
        self.timeout.write(self.__options['tout'])
        self.retries.Clear()
        self.retries.write(self.__options['retries'])
        self.exppath.Clear()
        self.exppath.write(self.__options['exp'])
        self.logpath.Clear()
        self.logpath.write(self.__options['log'])
        self.donepath.Clear()
        self.donepath.write(self.__options['done'])
        self.ext.SetValue(self.__box['ext'])
        self.log.SetValue(self.__box['log'])
        self.exp.SetValue(self.__box['exp'])
        self.port.SetValue(self.__box['port'])
        self.done.SetValue(self.__box['done'])
        self.bsize.SetValue(self.__box['bsize'])
        self.tout.SetValue(self.__box['tout'])
        self.recursive.SetValue(self.__box['c'])
        self.monitor.SetValue(self.__box['m'])
        self.pause.SetValue(self.__box['p'])
        self.random.SetValue(self.__box['r'])
        self.delete.SetValue(self.__box['z'])
        self.wait.SetValue(self.__box['o'])

    def update(self):
        self.__options['avdump'] = self.filepath.GetValue()
        self.__options['user'] = self.username.GetValue()
        self.__options['pass'] = self.password.GetValue()
        self.__options['ext'] = self.extention.GetValue()
        temp = int(self.buffersize.GetValue())
        '''make sure it's mod 8 and at least 256kb'''
        if int(temp) < 256:
            temp = 256
        if not temp % 8:
            temp = temp - (temp%8)
        self.__options['bsize'] = unicode(temp)
        self.__options['port'] = self.portnumber.GetValue()
        self.__options['tout'] = self.timeout.GetValue()
        temp = int(self.timeout.GetValue())
        '''make sure it's at least 20'''
        if int(temp) < 20:
            temp = 20
        self.__options['tout'] = unicode(temp)
        self.__options['retries'] = self.retries.GetValue()
        self.__options['exp'] = self.exppath.GetValue()
        self.__options['log'] = self.logpath.GetValue()
        self.__options['done'] = self.donepath.GetValue()
        self.__box['ext'] = self.ext.GetValue()
        self.__box['log'] = self.log.GetValue()
        self.__box['exp'] = self.exp.GetValue()
        self.__box['port'] = self.port.GetValue()
        self.__box['done'] = self.done.GetValue()
        self.__box['bsize'] = self.bsize.GetValue()
        self.__box['tout'] = self.tout.GetValue()
        self.__box['c'] = self.recursive.GetValue()
        self.__box['m'] = self.monitor.GetValue()
        self.__box['p'] = self.pause.GetValue()
        self.__box['r'] = self.random.GetValue()
        self.__box['z'] = self.delete.GetValue()
        self.__box['o'] = self.wait.GetValue()
        self.set_misc()
        self.write_config()

class App(wx.App):
    def OnInit(self):
        frame = mainFrame(None, 'App')
        frame.Show(True)
        self.SetTopWindow(frame)
        return True

if __name__ == '__main__':
    glob = stuff()
    app = App(True)
    app.MainLoop()