3,699
edits
 (v1.01 fixing problems with \ at the end of the scanpath)  | 
				 (v1.02 added nagscreens to prevent the worst bugs + catching a couple more exceptions)  | 
				||
| Line 1: | Line 1: | ||
<pre>  | <pre>  | ||
import wx,os,subprocess  | import wx,os,subprocess  | ||
class mainFrame(wx.Frame):  | class mainFrame(wx.Frame):  | ||
| Line 20: | Line 6: | ||
     __options = {'avdump':'avdump.exe','user':'','pass':'','ext':'','misc':'','bsize':'2048','port':'','tout':'30','retries':'6','exp':'export.txt','log':'log.txt','done':'done.txt'}  |      __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'  |      __configfile='config.ini'  | ||
     def read_config(self):  |      def read_config(self,newconfig=''):  | ||
         '''read the config file and return the content'''  |          '''read the config file and return the content'''  | ||
         if not os.path.exists(self.__configfile):  |          if not os.path.exists(self.__configfile):  | ||
             self.  |              for elem in self.__options:  | ||
         for line in   |                 newconfig += ('%s=%s\n') %(elem,self.__options[elem])  | ||
            open(self.__configfile,"w").write(newconfig)  | |||
         for line in open(self.__configfile,"r").readlines():  | |||
             if not line.endswith('='):  |              if not line.endswith('='):  | ||
                 temp,val = line.rstrip('\n').split('=',1)  |                  temp,val = line.rstrip('\n').split('=',1)  | ||
| Line 33: | Line 21: | ||
                 if temp == elem:  |                  if temp == elem:  | ||
                     self.__options[temp] = val  |                      self.__options[temp] = val  | ||
     def __init__(self, parent, title):  |      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)  |          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.panel = wx.Panel(self, -1)  | ||
         self.filepath = wx.TextCtrl(self.panel, -1, '', (95, 25), size=(190, 24))  |          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.start = wx.Button(self.panel, -1, 'Start', (90,75), (-1, -1))  | ||
| Line 48: | Line 30: | ||
         self.select = wx.Button(self.panel, -1, '...', (295, 25), (25, -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.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.selectClick, self.select)  | ||
         self.Bind(wx.EVT_BUTTON, self.optionsClick, self.options)  |          self.Bind(wx.EVT_BUTTON, self.optionsClick, self.options)  | ||
         self.Bind(wx.EVT_BUTTON, self.startClick, self.start)  |          self.Bind(wx.EVT_BUTTON, self.startClick, self.start)  | ||
         self.child = OptionsFrame(self, 'App')  |          self.child = OptionsFrame(self, 'App')  | ||
        self.child.read_config()  | |||
     def selectClick(self, event,path=''):  |      def selectClick(self, event,path=''):  | ||
| Line 70: | Line 50: | ||
             if dialog.ShowModal() == wx.ID_OK:  |              if dialog.ShowModal() == wx.ID_OK:  | ||
                 path = '"' + dialog.GetPath().rstrip("\\") + '"'  |                  path = '"' + dialog.GetPath().rstrip("\\") + '"'  | ||
         self.filepath.Clear()  |          self.filepath.Clear()  | ||
         dialog.Destroy()  |          dialog.Destroy()  | ||
| Line 77: | Line 56: | ||
     def startClick(self, event):  |      def startClick(self, event):  | ||
        self.read_config()  | |||
         self.__options['param'] = ''  |          self.__options['param'] = ''  | ||
         if self.filepath.GetValue() != '':  |          if self.filepath.GetValue() == '':  | ||
             self.  |             self.child.error('You have to select some files or folder to scan!')  | ||
        elif (self.__options['user'] == '' or self.__options['pass'] == ''):  | |||
             self.child.error("You didn't enter your username and/or password in the options menu.")  | |||
        elif self.__options['avdump'] == '':  | |||
            self.child.error('You must specify the path to avdump.exe!')  | |||
        elif self.__options['avdump'] == 'avdump.exe':  | |||
            self.child.info('You should set the _absolute_ path to avdump.exe.\nOtherwise complications might arise.')  | |||
        else:  | |||
             if self.__options['misc'].lstrip(',') > 0:  |              if self.__options['misc'].lstrip(',') > 0:  | ||
                 for elem in self.__options['misc'].split(','):  |                  for elem in self.__options['misc'].split(','):  | ||
| Line 89: | Line 76: | ||
                         else:  |                          else:  | ||
                             self.__options['param'] += ' -' + elem + ':' + self.__options[elem]  |                              self.__options['param'] += ' -' + elem + ':' + self.__options[elem]  | ||
             subprocess.call(('  |              subprocess.call(('%s -ac:%s:%s%s %s') %(self.__options['avdump'], self.__options['user'], self.__options['pass'], self.__options['param'], self.__options['scanpath']))  | ||
     def optionsClick(self, event):  |      def optionsClick(self, event):  | ||
        self.child.refresh()  | |||
         self.child.Show(True)  |          self.child.Show(True)  | ||
| Line 103: | Line 91: | ||
         if not os.path.exists(self.__configfile):  |          if not os.path.exists(self.__configfile):  | ||
             self.write_config()  |              self.write_config()  | ||
         for line in   |          for line in open(self.__configfile,"r").readlines():  | ||
             if not line.endswith('='):  |              if not line.endswith('='):  | ||
                 temp,val = line.rstrip('\n').split('=',1)  |                  temp,val = line.rstrip('\n').split('=',1)  | ||
| Line 115: | Line 103: | ||
         for elem in self.__options:  |          for elem in self.__options:  | ||
             newconfig += ('%s=%s\n') %(elem,self.__options[elem])  |              newconfig += ('%s=%s\n') %(elem,self.__options[elem])  | ||
            open(self.__configfile,"w").write(newconfig)  | |||
     def set_misc(self,misc=''):  |      def set_misc(self,misc=''):  | ||
| Line 132: | Line 120: | ||
                 self.__box[misc] = True  |                  self.__box[misc] = True  | ||
     def __init__(self, parent, title):  |      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)  |          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)  | ||
| Line 193: | Line 180: | ||
         if dialog.ShowModal() == wx.ID_OK:  |          if dialog.ShowModal() == wx.ID_OK:  | ||
             self.filepath.Clear()  |              self.filepath.Clear()  | ||
             self.filepath.write(dialog.GetPath())  |              self.filepath.write('"' + dialog.GetPath().rstrip("\\") + '"')  | ||
     def selectlogClick(self, event):  |      def selectlogClick(self, event):  | ||
| Line 199: | Line 186: | ||
         if dialog.ShowModal() == wx.ID_OK:  |          if dialog.ShowModal() == wx.ID_OK:  | ||
             self.logpath.Clear()  |              self.logpath.Clear()  | ||
             self.logpath.write(dialog.GetPath())  |              self.logpath.write('"' + dialog.GetPath().rstrip("\\") + '"')  | ||
     def selectexpClick(self, event):  |      def selectexpClick(self, event):  | ||
| Line 205: | Line 192: | ||
         if dialog.ShowModal() == wx.ID_OK:  |          if dialog.ShowModal() == wx.ID_OK:  | ||
             self.exppath.Clear()  |              self.exppath.Clear()  | ||
             self.exppath.write(dialog.GetPath())  |              self.exppath.write('"' + dialog.GetPath().rstrip("\\") + '"')  | ||
     def selectdoneClick(self, event):  |      def selectdoneClick(self, event):  | ||
| Line 211: | Line 198: | ||
         if dialog.ShowModal() == wx.ID_OK:  |          if dialog.ShowModal() == wx.ID_OK:  | ||
             self.donepath.Clear()  |              self.donepath.Clear()  | ||
             self.donepath.write(dialog.GetPath())  |              self.donepath.write('"' + dialog.GetPath().rstrip("\\") + '"')  | ||
     def saveClick(self,event):  |      def saveClick(self,event):  | ||
         self.update()  |          self.update()  | ||
         self.Show(False)  |          if self.__options['avdump'] == '':  | ||
            self.error('You must specify the path to avdump.exe!')  | |||
        elif self.__options['avdump'] == 'avdump.exe':  | |||
            self.info('You should set the _absolute_ path to avdump.exe.\nOtherwise complications might arise.')  | |||
        else:  | |||
            self.Show(False)  | |||
     def cancelClick(self,event):  |      def cancelClick(self,event):  | ||
| Line 228: | Line 220: | ||
         self.get_checkboxes(self.__options['misc'])  |          self.get_checkboxes(self.__options['misc'])  | ||
         self.filepath.Clear()  |          self.filepath.Clear()  | ||
         self.filepath.write(self.__options['avdump'])  |          self.filepath.write(self.__options['avdump'].rstrip('"').lstrip('"'))  | ||
         self.username.Clear()  |          self.username.Clear()  | ||
         self.username.write(self.__options['user'])  |          self.username.write(self.__options['user'])  | ||
| Line 244: | Line 236: | ||
         self.retries.write(self.__options['retries'])  |          self.retries.write(self.__options['retries'])  | ||
         self.exppath.Clear()  |          self.exppath.Clear()  | ||
         self.exppath.write(self.__options['exp'])  |          self.exppath.write(self.__options['exp'].rstrip('"').lstrip('"'))  | ||
         self.logpath.Clear()  |          self.logpath.Clear()  | ||
         self.logpath.write(self.__options['log'])  |          self.logpath.write(self.__options['log'].rstrip('"').lstrip('"'))  | ||
         self.donepath.Clear()  |          self.donepath.Clear()  | ||
         self.donepath.write(self.__options['done'])  |          self.donepath.write(self.__options['done'].rstrip('"').lstrip('"'))  | ||
         self.ext.SetValue(self.__box['ext'])  |          self.ext.SetValue(self.__box['ext'])  | ||
         self.log.SetValue(self.__box['log'])  |          self.log.SetValue(self.__box['log'])  | ||
| Line 268: | Line 260: | ||
         self.__options['pass'] = self.password.GetValue()  |          self.__options['pass'] = self.password.GetValue()  | ||
         self.__options['ext'] = self.extention.GetValue()  |          self.__options['ext'] = self.extention.GetValue()  | ||
         '''make sure it's mod 8 and at least 256kb'''  |          '''make sure it's mod 8 and at least 256kb'''  | ||
         if int(temp) < 256:  |          try:  | ||
            temp = int(self.buffersize.GetValue())  | |||
            if int(temp) < 256:  | |||
                temp = 256  | |||
            if not temp % 8:  | |||
                temp = temp - (temp%8)  | |||
        except:  | |||
            temp = 2048  | |||
         self.__options['bsize'] = unicode(temp)  |          self.__options['bsize'] = unicode(temp)  | ||
         self.__options['port'] = self.portnumber.GetValue()  |          try:  | ||
            int(self.portnumber.GetValue())  | |||
            self.__options['port'] = self.portnumber.GetValue()  | |||
        except:  | |||
            self.__options['port'] = ''  | |||
         self.__options['tout'] = self.timeout.GetValue()  |          self.__options['tout'] = self.timeout.GetValue()  | ||
         temp = int(self.timeout.GetValue())  |          temp = int(self.timeout.GetValue())  | ||
         '''make sure it's at least 20'''  |          '''make sure it's at least 20'''  | ||
         if int(temp) < 20:  |          try:  | ||
             temp =   |             if int(temp) < 20:  | ||
                temp = 20  | |||
        except:  | |||
             temp = 30  | |||
         self.__options['tout'] = unicode(temp)  |          self.__options['tout'] = unicode(temp)  | ||
         self.__options['retries'] = self.retries.GetValue()  |          try:  | ||
            int(self.retries.GetValue())  | |||
            self.__options['retries'] = self.retries.GetValue()  | |||
        except:  | |||
            self.__options['retries'] = 6  | |||
         self.__options['exp'] = self.exppath.GetValue()  |          self.__options['exp'] = self.exppath.GetValue()  | ||
         self.__options['log'] = self.logpath.GetValue()  |          self.__options['log'] = self.logpath.GetValue()  | ||
| Line 302: | Line 308: | ||
         self.write_config()  |          self.write_config()  | ||
    def error(self,text):  | |||
        message = wx.MessageDialog(self,text,style=wx.ICON_ERROR | wx.OK)  | |||
        message.ShowModal()  | |||
    def info(self,text):  | |||
        message = wx.MessageDialog(self,text,style=wx.ICON_INFORMATION | wx.OK)  | |||
        message.ShowModal()  | |||
class App(wx.App):  | class App(wx.App):  | ||
     def OnInit(self):  |      def OnInit(self):  | ||
| Line 310: | Line 324: | ||
if __name__ == '__main__':  | if __name__ == '__main__':  | ||
     app = App(True)  |      app = App(True)  | ||
     app.MainLoop()  |      app.MainLoop()  | ||
</pre>  | </pre>  | ||