Avdump GUI: Difference between revisions

Jump to navigation Jump to search
10,774 bytes removed ,  27 September 2019
no edit summary
(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...)
 
No edit summary
(65 intermediate revisions by 7 users not shown)
Line 1: Line 1:
<pre>
{{TOCright}}
import wx,os,subprocess


class stuff:
==Introduction==
    def read_file(self,filepath):
{{eyecatch|Note|You have to set an API key in your profile before auto-creqing with Avdump GUI.}}
        """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):
{{Avdump-gui}}
        """writes content to a not existing file"""
        f = open(filepath,"w")
        f.write(new)
        f.close()


class mainFrame(wx.Frame):
'''For Vista and Windows 7 permission issues on installation:'''
    __simple = ['p','z','r','m','c','o']
*Create a blank .bat file.
    __options = {'avdump':'avdump.exe','user':'','pass':'','ext':'','misc':'','bsize':'2048','port':'','tout':'30','retries':'6','exp':'export.txt','log':'log.txt','done':'done.txt'}
*Insert this text into it and modify it to your situation:<br> <tt>"C:\Windows\System32\msiExec.exe" -i  "C:\Directory\Where\Located\avdump-gui.msi"</tt>
    __configfile='config.ini'
*Right click and run the .bat file as administrator.
   
    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=''):
==Changelog==
        for elem in self.__options:
<pre>
            newconfig += ('%s=%s\n') %(elem,self.__options[elem])
v2.42 - 08.01.2019 *available as auto update*
        glob.create_file(self.__configfile,newconfig)
* Avdump2 Build 7080 added


    def avdump(self):
v2.41 - 05.01.2019 *available as auto update*
        self.__options['param'] = ''
* show error message about too long paths
        if self.__options['misc'].lstrip(',') > 0:
* fallback to cp437 in case shell encoding fails which i guess should work?
            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'])


v2.40 - 03.01.2019 *available as auto update*
* Avdump2 Build 7070 added
* show errors in filelist if we encounter one while processing a file instead of endless retrying


    def __init__(self, parent, title):
v2.33 - 09.11.2016 *available as auto update*
        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)
* new icon
        self.panel = wx.Panel(self, -1)
* progressbar and status not updating


        self.filepath = wx.TextCtrl(self.panel, -1, '', (95, 25), size=(190, 24))
v2.32 - 09.11.2016 *available as auto update*
        self.start = wx.Button(self.panel, -1, 'Start', (90,75), (-1, -1))
* options not being stored on initial start
        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')
v2.31 - 09.11.2016 *available as auto update*
* fixed drag and drop


    def selectClick(self, event,path=''):
v2.30 - 03.11.2016 *available as auto update*
        if self.scantype.GetStringSelection() == 'Files':
* ported from python 2.7 to 3.4
            dialog = wx.FileDialog ( None, message = 'Pick a directory.', style= wx.FD_MULTIPLE)
* path/filename encoding woes fixed(?)
            if dialog.ShowModal() == wx.ID_OK:
* export option removed and made implicit to be always enabled
                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()
v2.20 - 18.08.2015 *available as auto update*
        dialog.Destroy()
* Avdump2 Build 6714 added
        self.filepath.write(path)
* dependencies updated
        self.__options['scanpath'] = path


    def startClick(self, event):
v2.19 - 11.11.2012 *available as msi installer & auto update*
        if self.filepath.GetValue() != '':
* Avdump2 Build 6525 added
            self.read_config()
* recompiled with updated dependencies which may or may not fix some issues or cause new ones
            subprocess.call(str(self.avdump()))


    def optionsClick(self, event):
v2.18 - 31.07.2012 *available as auto update*
        self.child.Show(True)
* Avdump2 Build 5290 added


class OptionsFrame(wx.Frame):
v2.17 - 21.09.2011 *available as auto update*
    __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}
* filename encoding issue fixed
    __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):
v2.15 - 13.09.2011
        '''read the config file and return the content'''
* Avdump2 Build 5028 added
        if not os.path.exists(self.__configfile):
* text fix (Optionen instead of Options. watch out for da evil germanz ja)
            self.write_config()
* can now drop files into the table to process
        for line in glob.read_file(self.__configfile):
* speed improvement when adding lots of files at once (really only noticeable > 500)
            if not line.endswith('='):
* potentially fixing some issue with the last filehash not being shown in the export box
                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=''):
v2.14 - 11.09.2011
        for elem in self.__options:
* Avdump2 Build 5000 added
            newconfig += ('%s=%s\n') %(elem,self.__options[elem])
        glob.create_file(self.__configfile,newconfig)


    def set_misc(self,misc=''):
v2.13 - 06.09.2011
        for elem in self.__box:
* Avdump2 Build 4991 added
            if self.__box[elem] is True:
* fixes to be compatible to the new Avdump2 CLI
                misc += elem + ','
        self.__options['misc'] = misc


    def get_checkboxes(self,misc):
v2.12 - 05.09.2011 *pulled*
        if misc is not None:
* Avdump2 Build 4964 added
            misc = misc.rstrip(',').lstrip(',')
            if misc.find(',') > 0:
                for elem in misc.split(','):
                    self.__box[elem] = True
            else:
                self.__box[misc] = True


   
v2.11 - 01.07.2011
    def __init__(self, parent, title):
* trying to scan files without having provided a username/password -> BOOM (trying to kill the subprocess without it running)
        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)
* removing already scanned files form the list and readding them will process them again even if "done" is set
        self.panel = wx.Panel(self, -1)
  (from frontend at least. avdump itself would ignore them. this would leave a couple "new" entries in the list)
        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):
v2.10 - 01.07.2011
        dialog = wx.FileDialog ( None, message = 'Pick a directory.')
* Avdump2 Build 4334 added
        if dialog.ShowModal() == wx.ID_OK:
* Autoupdater implemented
            self.filepath.Clear()
* last scanned dir stored in config
            self.filepath.write(dialog.GetPath())
* window size stored in config (unless it's maximized)
* use stderr to catch errors instead of stdout
* lots of rewriting


    def selectlogClick(self, event):
v2.02 - 09.06.2011
        dialog = wx.FileDialog ( None, message = 'Pick a directory.')
* Avdump2 Build 4320 added
        if dialog.ShowModal() == wx.ID_OK:
* ditched subprocess module in favour of qprocess
            self.logpath.Clear()
* peek into console output and notice the user when an error happened (outdated version or wrong password/username)
            self.logpath.write(dialog.GetPath())


    def selectexpClick(self, event):
v2.01 - 06.06.2011
        dialog = wx.FileDialog ( None, message = 'Pick a directory.')
* various nasty bugs removed
        if dialog.ShowModal() == wx.ID_OK:
* windows can be enlarged on demand
            self.exppath.Clear()
            self.exppath.write(dialog.GetPath())


    def selectdoneClick(self, event):
v2.00 - 03.06.2011
        dialog = wx.FileDialog ( None, message = 'Pick a directory.')
* Avdump2 Build 4260 added
        if dialog.ShowModal() == wx.ID_OK:
* rewrote the whole lot and simplified it
            self.donepath.Clear()
            self.donepath.write(dialog.GetPath())


    def saveClick(self,event):
v1.07 - 06.04.2008
        self.update()
* Avdump 0.34 added
        self.Show(False)
* fixed a bug with the bufferfield not allowing 16 buffer while that being the default
* made option o default when no profile exists


    def cancelClick(self,event):
v1.06 - 12.02.2008
        self.refresh()
* Avdump 0.33 added
        self.Show(False)


    def onclose(self,event):
v1.05 - 13.11.2007
        self.Show(False)
* thx to rar for fixing dumping of files with characters in non local codepage


    def refresh(self):
v1.04 - 10.11.2007
        self.read_config()
* fix for not being able to dump files with Japanese characters in the filename
        self.get_checkboxes(self.__options['misc'])
* Avdump 0.32 added and changes implemented
        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):
v1.03 - 13.05.2007
        self.__options['avdump'] = self.filepath.GetValue()
* added the console again
        self.__options['user'] = self.username.GetValue()
* fix for log, export and done paths with spaces
        self.__options['pass'] = self.password.GetValue()
* added parents for the dialogues so they die with the program and can't stay open any more
        self.__options['ext'] = self.extention.GetValue()
* option 9 added (experimental mp3 hashing for ostdb)
        temp = int(self.buffersize.GetValue())
        '''make sure it's mod 8 and at least 256kb'''
v1.02 - 13.05.2007
        if int(temp) < 256:
* added error and warning dialogue boxes to prevent a couple problems
            temp = 256
* added some exception handling for a few fields
        if not temp % 8:
            temp = temp - (temp%8)
v1.01 - 12.05.2007
        self.__options['bsize'] = unicode(temp)
* killed a nasty bug with trailing \ in the scanpath
        self.__options['port'] = self.portnumber.GetValue()
        self.__options['tout'] = self.timeout.GetValue()
v1.00 - 12.05.2007
        temp = int(self.timeout.GetValue())
* Initial release
        '''make sure it's at least 20'''
</pre>
        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):
[[Category:Features]]
    def OnInit(self):
[[Category:AniDB Clients]]
        frame = mainFrame(None, 'App')
[[Category:Avdump]]
        frame.Show(True)
[[Category:Development]]
        self.SetTopWindow(frame)
        return True
 
if __name__ == '__main__':
    glob = stuff()
    app = App(True)
    app.MainLoop()
</pre>

Navigation menu

MediaWiki spam blocked by CleanTalk.
MediaWiki spam blocked by CleanTalk.