Beispiel #1
0
  def __updateSum(self, ctrl, ctrl_nr):
    size=sizeAdj=0
    for key, data in ctrl.data.obj.items():
      size+=data.size
      sizeAdj+=data.sizeAdj

    if ctrl_nr==1:
      self.lp1_size.SetValue(hlp.intToStringWithCommas(size))
      self.lp1_sizeAdj.SetValue(hlp.intToStringWithCommas(sizeAdj))
      if sizeAdj<self.size:
        self.lp1_sizeAdj.SetBackgroundColour("YELLOW")
        self.lp1_sizeAdj.SetToolTip(wx.ToolTip("Not enough files to fill target"))
      else:
        self.lp1_sizeAdj.SetBackgroundColour(wx.NullColor)
        self.lp1_sizeAdj.SetToolTip(wx.ToolTip.Enable(False))
    else:
      self.lp2_sizeAdj.SetValue(hlp.intToStringWithCommas(sizeAdj))
      remSize=self.size-sizeAdj
      self.lp2_sizeRem.SetValue(hlp.intToStringWithCommas(remSize))
      if remSize<0:
        self.lp2_sizeRem.SetBackgroundColour("YELLOW")
        self.lp2_sizeRem.SetToolTip(wx.ToolTip("Files do not fit on target"))
      else:
        self.lp2_sizeRem.SetBackgroundColour(wx.NullColor)
        self.lp2_sizeRem.SetToolTip(wx.ToolTip.Enable(False))
Beispiel #2
0
  def executeCMDs(self):
    progBarVal=0
    cnt=len(self.fileDict)

    self.messages.SetValue("")

    if self.jobType==0:
      cmd=["cp", "-rp"]
    elif self.jobType==1:
      cmd=["mv"]
    else:
      self.EndModal(wx.ID_CANCEL)

    if DEBUG_FS==True:
      countup=bnls=0
      formatstrg="{0:15} {1:15} {2:15} {3:15} {4:15} {5:5} {6:15}"

    # nach filename sortiert über "self.fileDict" iterieren
    for k in OrderedDict(sorted(self.fileDict.items(), key=lambda t: t[1].filename)):
      v=self.fileDict[k]
      cmdToExecute=cmd+[k, self.targetFolder] # Kommando zusammensetzen

      self.messages.AppendText(   self.listToString(cmdToExecute)+"\n")
      self.currentBytes.SetValue( hlp.intToStringWithCommas(v.sizeAdj))
      self.objRemain.SetValue(    hlp.intToStringWithCommas(cnt))
      self.bytesRemain.SetValue(  hlp.intToStringWithCommas(self.sumBytesToCopy-progBarVal))
      wx.Yield()

      if DEBUG_FS==True:
        szv=os.statvfs(self.targetFolder)
        sv=szv.f_bavail*szv.f_bsize       # Dateisystem-Restgröße vor dem copy

      self.executeSingleCMD(cmdToExecute)

      if self.abortTransfer==True:                          # Abbruch-Wunsch weiterreichen
        break
      cnt-=1
      progBarVal+=v.sizeAdj   # Fortschritt abhängig von der aktuellen Dateigröße...
      self.progBar.SetValue(progBarVal//self.gauge_devisor)  # ...darstellen
      wx.Yield()

      if DEBUG_FS==True:
        countup+=1                        # Nummer der bearbeiteten Datei
        szn=os.statvfs(self.targetFolder)
        sn=szn.f_bavail*szn.f_bsize       # Dateisystem-Restgröße nach dem copy
        delta1=(sv-sn)                    # bei letztem copy belegte Byte
        delta2=delta1-v.sizeAdj           # Differenz der belegten Byte zur Dateigröße (also der Fehler)
        bn=os.path.basename(k)            # Dateiname der gerade kopierten Datei
        bnls+=len(bn)                     # Länge der bisher kopierten Dateinamen
        print formatstrg.format(sv, sn, delta1, v.sizeAdj, delta2, countup, bn)

    self.currentBytes.SetValue( "0")
    self.objRemain.SetValue(    "0")
    self.bytesRemain.SetValue(  "0")

    self.ok.Enable()        # Schließen des Dialoges freischalten
    self.cancel.Disable()   # der Cancel-Button wird jetzt nicht mehr gebraucht
Beispiel #3
0
 def insertInDestPathList(self, index, name, comment, size, blocksize, addblock, folder, final):
   i=self.destPathList.InsertStringItem(index, name)
   self.destPathList.SetStringItem(i, 1, comment)
   self.destPathList.SetStringItem(i, 2, hlp.intToStringWithCommas(size))
   self.destPathList.SetStringItem(i, 3, hlp.intToStringWithCommas(blocksize))
   self.destPathList.SetStringItem(i, 4, str(addblock))
   self.destPathList.SetStringItem(i, 5, folder)
   if final==0:
     self.destPathList.SetStringItem(i, 6, "no")
   else:
     self.destPathList.SetStringItem(i, 6, "yes")
   self.destPathList.SetItemData(i, index)
Beispiel #4
0
  def fillListCtrl(self, ctrl, ctrl_nr=1):
    ctrl.DeleteAllItems()
    ctrl.Refresh()
    self.__updateSum(ctrl, ctrl_nr)

    index=0
    for key, data in ctrl.data.obj.items():
      ctrl.InsertStringItem(index, str(data.index))  # dummy

      if ctrl_nr==1:
        if data.isFolder==True:
          # Ordner mit Folder-Icon einfügen
          if data.hasErrors==True:
            ctrl.SetStringItem(index, 1, data.foldername, self.list_panel1.errico)
          else:
            ctrl.SetStringItem(index, 1, data.foldername, self.list_panel1.c1ifldr)
        elif data.isFile==True:
          if self.addblock==0 and data.size>4294967295:
            ctrl.SetStringItem(index, 1, data.foldername, self.list_panel1.errico)
          else:
            # Datei mit File-Icon einfügen
            ctrl.SetStringItem(index, 1, data.foldername, self.list_panel1.c1ifile)

      if ctrl_nr==1:
        # Datei einfügen
        ctrl.SetStringItem(index, 2, data.filename)
      else:
        if data.isFolder==True:
          if data.hasErrors==True:
            ctrl.SetStringItem(index, 2, data.filename, self.list_panel1.errico)
          else:
            ctrl.SetStringItem(index, 2, data.filename, self.list_panel1.c1ifldr)
        elif data.isFile==True:
          ctrl.SetStringItem(index, 2, data.filename, self.list_panel1.c1ifile)

      if ctrl_nr==1:
        ctrl.SetStringItem(index, 3, hlp.intToStringWithCommas(data.size))
        ctrl.SetStringItem(index, 4, hlp.intToStringWithCommas(data.sizeAdj))
      else:
        ctrl.SetStringItem(index, 3, hlp.intToStringWithCommas(data.sizeAdj))

      ctrl.SetItemImage(index, 1)
      ctrl.SetItemData(index, data.index)
      index+=1
    ctrl.SetItemState(0, wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED)
Beispiel #5
0
 def edit_dest(self, event):
   it=self.destPathList.GetFirstSelected()
   while it>-1: # solange es selektierte Sätze gibt
     data=self.getFromDestPath(it)
     dlg=AddOrEditDestProfile(self, data[0])
     if dlg.ShowModal()!=wx.ID_OK:
       dlg.Destroy()
     else:
       data=dlg.getData()
       dlg.Destroy()
       self.destPathList.SetStringItem(it, 0, data[0])
       self.destPathList.SetStringItem(it, 1, data[1])
       self.destPathList.SetStringItem(it, 2, hlp.intToStringWithCommas(data[2]))
       self.destPathList.SetStringItem(it, 3, hlp.intToStringWithCommas(data[3]))
       self.destPathList.SetStringItem(it, 4, str(data[4]))
       self.destPathList.SetStringItem(it, 5, data[5])
       if data[6]==0:
         self.destPathList.SetStringItem(it, 6, "no")
       else:
         self.destPathList.SetStringItem(it, 6, "yes")
       self.db.insertOrUpdateDest(data[0], data[1], data[2], data[3], data[4], data[5], data[6])
     it=self.destPathList.GetNextSelected(it)
Beispiel #6
0
  def choose_destBut(self, event=0):
    lastProfile=cfgfile.getLastSelectedDestProfile()  # merken, um es bei NO im Folgedialog ggf. zurücksetzen zu können
    dlg=DestProfileCustomizationDialog.DestProfileCustomizationDialog(self, 
                                        self.targetFolder, self.size, self.blockSize, self.addblock)
    if dlg.ShowModal()!=wx.ID_OK:
      dlg.Destroy()
      return

    targetFolder, size, blockSize, addblock=dlg.getData()
    dlg.Destroy()
    if (self.blockSize>0 and self.blockSize!=blockSize) or (self.addblock!=None and self.addblock!=addblock):
      # Blocksize wurde verändert!!!
      if len(self.list_panel1.list_ctrl.data.obj)>0 or len(self.list_panel2.list_ctrl.data.obj)>0:
        # es befinden sich schon Objekte in mind. einem der ListCtrls
        rc=wx.MessageBox("Blocksize or filesystems changed!\nRemove all files from both lists?",
                          "Confirm", wx.YES_NO, self)
        if rc!=wx.YES:
          cfgfile.setLastSelectedDestProfile(lastProfile)
          return
        self.deleteAllFromListCtrl1(0)
        self.deleteAllFromListCtrl2(0)
        self.base_profile.SetValue("")

    self.targetFolder=targetFolder
    self.size=size
    self.blockSize=blockSize
    self.addblock=addblock
    self.__updateSum(self.list_panel1.list_ctrl, 1)
    self.__updateSum(self.list_panel2.list_ctrl, 2)

    self.blksize.SetValue(hlp.intToStringWithCommas(self.blockSize))
    self.targtFldr.SetValue(targetFolder)
    if self.isEmptyFolder(targetFolder)!=True:
      self.targtFldr.SetBackgroundColour("YELLOW")
      self.targtFldr.SetToolTip(wx.ToolTip("Folder not empty!"))
    else:
      self.targtFldr.SetBackgroundColour(wx.NullColor)
      self.targtFldr.SetToolTip(wx.ToolTip.Enable(False))

    self.enableListCtrl1()
Beispiel #7
0
  def InitUI(self):
    self.sumBytesToCopy=sbtc=self.getSizeSum(self.fileDict)
    while sbtc>10000:
      sbtc/=10
      self.gauge_devisor*=10

    txt1=wx.StaticText(self, label="Number of objects:")
    self.objToCopy=wx.TextCtrl(self, wx.ID_ANY, "", size=(50, -1), style=wx.TE_READONLY)
    self.objToCopy.SetValue(hlp.intToStringWithCommas(len(self.fileDict)))
    txt2=wx.StaticText(self, label="Bytes in total:")
    self.bytesToCopy=wx.TextCtrl(self, wx.ID_ANY, "", size=(150, -1), style=wx.TE_READONLY)
    self.bytesToCopy.SetValue(hlp.intToStringWithCommas(self.sumBytesToCopy))
    txt3=wx.StaticText(self, label="Bytes current:")
    self.currentBytes=wx.TextCtrl(self, wx.ID_ANY, "", size=(150, -1), style=wx.TE_READONLY)
    txt4=wx.StaticText(self, label="Remaining objects:")
    self.objRemain=wx.TextCtrl(self, wx.ID_ANY, "", size=(50, -1), style=wx.TE_READONLY)
    txt5=wx.StaticText(self, label="Remaining bytes:")
    self.bytesRemain=wx.TextCtrl(self, wx.ID_ANY, "", size=(150, -1), style=wx.TE_READONLY)

    self.messages=wx.TextCtrl(self, wx.ID_ANY, "", size=(-1, 200), \
                              style=wx.TE_READONLY|wx.TE_MULTILINE|wx.HSCROLL)

    self.progBar=wx.Gauge(self, wx.ID_ANY, self.sumBytesToCopy//self.gauge_devisor, size=(1000, -1))

    self.ok=wx.Button(self, wx.ID_OK, "&Ok")
    self.cancel=wx.Button(self, wx.ID_CANCEL, "&Cancel")
    self.ok.Bind(wx.EVT_BUTTON, self.okBut)
    self.cancel.Bind(wx.EVT_BUTTON, self.cancelBut)

    vsizer=wx.BoxSizer(wx.VERTICAL)
    gsizer=wx.GridBagSizer(4, 4)
    sl=wx.LEFT|wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT
    st=wx.RIGHT
    gsizer.Add(txt1,                (0, 0), (1, 1), sl|wx.TOP,        4)
    gsizer.Add(self.objToCopy,      (0, 1), (1, 1), st|wx.TOP,        4)
    gsizer.Add(txt2,                (0, 2), (1, 1), sl|wx.TOP,        4)
    gsizer.Add(self.bytesToCopy,    (0, 3), (1, 1), st|wx.TOP,        4)
    gsizer.Add(wx.StaticLine(self), (1, 0), (1, 6), wx.ALL|wx.EXPAND, 4)
    gsizer.Add(txt3,                (2, 0), (1, 1), sl|wx.BOTTOM,     4)
    gsizer.Add(self.currentBytes,   (2, 1), (1, 1), st|wx.BOTTOM,     4)
    gsizer.Add(txt4,                (2, 2), (1, 1), sl|wx.BOTTOM,     4)
    gsizer.Add(self.objRemain,      (2, 3), (1, 1), st|wx.BOTTOM,     4)
    gsizer.Add(txt5,                (2, 4), (1, 1), sl|wx.BOTTOM,     4)
    gsizer.Add(self.bytesRemain,    (2, 5), (1, 1), st|wx.BOTTOM,     4)

    # eigener Sizer für Gauge, damit das nur horizontal EXPANDed wird
    hsizer1=wx.BoxSizer(wx.HORIZONTAL)
    hsizer1.Add(self.progBar, 1)

    hsizer2=wx.BoxSizer(wx.HORIZONTAL)
    hsizer2.Add(self.ok,          0, wx.ALIGN_RIGHT|wx.BOTTOM|wx.RIGHT, 4)
    hsizer2.Add(self.cancel,      0, wx.ALIGN_RIGHT|wx.BOTTOM|wx.RIGHT, 4)

    vsizer.Add(gsizer,            0, wx.LEFT|wx.RIGHT|wx.EXPAND,        4)
    vsizer.Add(self.messages,     1, wx.ALL|wx.EXPAND,                  4)
    vsizer.Add(hsizer1,           0, wx.ALL|wx.EXPAND,                  4)
    vsizer.Add(hsizer2,           0, wx.ALIGN_RIGHT|wx.BOTTOM|wx.RIGHT, 4)

    self.SetSizer(vsizer)
    vsizer.Fit(self)
    self.ok.Disable()
    self.cancel.SetFocus()
Beispiel #8
0
  def InitUI(self):
    txt1=wx.StaticText(self, label="Profilename:")
    self.name=wx.TextCtrl(self, wx.ID_ANY, "", size=(250, -1))
    txt2=wx.StaticText(self, label="Comment:")
    self.comment=wx.TextCtrl(self, wx.ID_ANY, "", size=(250, -1))
    txt3=wx.StaticText(self, label="Size:")
    self.size=wx.TextCtrl(self, wx.ID_ANY, "", size=(150, -1))
    txt4=wx.StaticText(self, label="Blocksize:")
    self.blocksize=wx.TextCtrl(self, wx.ID_ANY, "", size=(100, -1))
    self.addBlock1=wx.CheckBox(self, wx.ID_ANY, "Joliet + Rock Ridge (genisoimage)")
    self.addBlock2=wx.CheckBox(self, wx.ID_ANY, "UDF 1.02 (genisoimage)")
    self.addBlock3=wx.CheckBox(self, wx.ID_ANY, "UDF 2.01 (mkudffs)")

    sel=wx.Button(self, wx.ID_ANY, "Select &Folder", style=wx.BU_EXACTFIT)
    self.folder=wx.TextCtrl(self, wx.ID_ANY, "", size=(250, -1))
    self.final=wx.RadioBox(self, wx.ID_ANY, "<Folder> is the...", \
                choices=["starting point for the target folder", "target folder"], \
                style=wx.RA_SPECIFY_ROWS)
    ok=wx.Button(self, wx.ID_OK, "&Ok")
    cancel=wx.Button(self, wx.ID_CANCEL, "&Cancel")

    sel.Bind(wx.EVT_BUTTON, self.selBut)
    ok.Bind(wx.EVT_BUTTON, self.okBut)
    cancel.Bind(wx.EVT_BUTTON, self.cancelBut)
    self.addBlock1.Bind(wx.EVT_CHECKBOX, self.joliet)
    self.addBlock2.Bind(wx.EVT_CHECKBOX, self.udf102)
    self.addBlock3.Bind(wx.EVT_CHECKBOX, self.udf201)

    sizer=wx.GridBagSizer(4, 4)
    sl=wx.LEFT|wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT
    st=wx.RIGHT
    sizer.Add(txt1,           (0, 0), (1, 1), sl|wx.TOP,            4)
    sizer.Add(self.name,      (0, 1), (1, 2), st|wx.TOP|wx.EXPAND,  4)
    sizer.Add(txt2,           (1, 0), (1, 1), sl,                   4)
    sizer.Add(self.comment,   (1, 1), (1, 2), st|wx.EXPAND,         4)
    sizer.Add(txt3,           (2, 0), (1, 1), sl,                   4)
    sizer.Add(self.size,      (2, 1), (1, 2), st,                   4)
    sizer.Add(txt4,           (3, 0), (1, 1), sl,                   4)
    sizer.Add(self.blocksize, (3, 1), (1, 1), st,                   4)
    sizer.Add(self.addBlock1, (4, 1), (1, 1), st,                   4)
    sizer.Add(self.addBlock2, (5, 1), (1, 1), st,                   4)
    sizer.Add(self.addBlock3, (6, 1), (1, 1), st,                   4)
    sizer.Add(sel,            (7, 0), (1, 1), sl,                   4)
    sizer.Add(self.folder,    (7, 1), (1, 2), st|wx.EXPAND,         4)
    sizer.Add(self.final,     (8, 1), (1, 2), st,                   4)
    sizer.AddGrowableCol(1, 1)

    hsizer=wx.BoxSizer(wx.HORIZONTAL)
    hsizer.Add(ok,      0, wx.RIGHT, 4)
    hsizer.Add(cancel,  0, wx.LEFT, 4)
    sizer.Add(hsizer,         (9, 1), (1, 2), wx.ALIGN_RIGHT|wx.BOTTOM|wx.RIGHT, 4)

    if self.data!=[]:
      self.name.SetValue(self.data[0])
      self.name.Disable()  # der Key darf nicht verändert werden
      self.comment.SetValue(self.data[1])
      self.size.SetValue(hlp.intToStringWithCommas(self.data[2]))
      self.blocksize.SetValue(hlp.intToStringWithCommas(self.data[3]))
      self.setAddBlock(self.data[4])
      self.folder.SetValue(self.data[5])
      self.final.SetSelection(self.data[6])
      ok.SetFocus()
    else:
      self.name.SetFocus()

    self.SetSizer(sizer)
    sizer.Fit(self)