######################################################################### # Author : Choopan RATTANAPOKA # Description : To change local upload options for each torrent ######################################################################### import wx from os import path ################################################################ # # Class: LocalSettingDialog # # Allows for setting local limits on rates or changing the # upload options for torrents on an individual basis. # ################################################################ class LocalSettingDialog(wx.Dialog): def __init__(self, parent, torrentlist): self.utility = parent.utility title = self.utility.lang.get('localsetting') pre = wx.PreDialog() pre.Create(parent, -1, title) self.this = pre.this self.torrentlist = torrentlist outerbox = wx.BoxSizer( wx.VERTICAL ) leftrightbox = wx.BoxSizer(wx.HORIZONTAL) leftbox = wx.BoxSizer(wx.VERTICAL) rightbox = wx.BoxSizer(wx.VERTICAL) # GUI for local upload setting ################################ # Upload setting ######################################## uploadsection_title = wx.StaticBox(self, -1, self.utility.lang.get('uploadsetting')) uploadsection = wx.StaticBoxSizer(uploadsection_title, wx.VERTICAL) self.maxupload = wx.SpinCtrl(self, size = wx.Size(60, -1)) self.maxupload.SetRange(2, 100) maxuploadsbox = wx.BoxSizer(wx.HORIZONTAL) maxuploadsbox.Add(wx.StaticText(self, -1, self.utility.lang.get('maxuploads')), 0, wx.ALIGN_CENTER_VERTICAL) maxuploadsbox.Add(self.maxupload, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT, 5) uploadsection.Add(maxuploadsbox, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5) maxuploadratebox = wx.BoxSizer(wx.HORIZONTAL) maxuploadratebox.Add(wx.StaticText(self, -1, self.utility.lang.get('maxuploadrate')), 0, wx.ALIGN_CENTER_VERTICAL) self.uploadrate = self.utility.makeNumCtrl(self, 0, integerWidth = 4) maxuploadratebox.Add(self.uploadrate, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT, 5) maxuploadratebox.Add(wx.StaticText(self, -1, self.utility.lang.get('KB') + "/" + self.utility.lang.get('l_second')), 0, wx.ALIGN_CENTER_VERTICAL) uploadsection.Add(maxuploadratebox, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5) uploadsection.Add(wx.StaticText(self, -1, self.utility.lang.get('zeroisauto')), 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5) leftbox.Add( uploadsection, 0, wx.EXPAND|wx.ALL, 5) # Download setting ######################################## downloadsection_title = wx.StaticBox(self, -1, self.utility.lang.get('downloadsetting')) downloadsection = wx.StaticBoxSizer(downloadsection_title, wx.VERTICAL) maxdownloadratebox = wx.BoxSizer(wx.HORIZONTAL) maxdownloadratebox.Add(wx.StaticText(self, -1, self.utility.lang.get('maxdownloadrate')), 0, wx.ALIGN_CENTER_VERTICAL) self.downloadrate = self.utility.makeNumCtrl(self, 0, integerWidth = 4) maxdownloadratebox.Add(self.downloadrate, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT, 5) maxdownloadratebox.Add(wx.StaticText(self, -1, self.utility.lang.get('KB') + "/" + self.utility.lang.get('l_second')), 0, wx.ALIGN_CENTER_VERTICAL) downloadsection.Add(maxdownloadratebox, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5) downloadsection.Add(wx.StaticText(self, -1, self.utility.lang.get('zeroisauto')), 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5) leftbox.Add( downloadsection, 0, wx.EXPAND|wx.ALL, 5) # Upload setting for completed file ######################################## continuesection_title = wx.StaticBox(self, -1, self.utility.lang.get('uploadoptforcompletedfile')) continuesection = wx.StaticBoxSizer(continuesection_title, wx.VERTICAL) uploadlist = [self.utility.lang.get('unlimitedupload'), self.utility.lang.get('continueuploadfor'), self.utility.lang.get('untilratio')] rb1 = wx.RadioButton(self, -1, uploadlist[0], wx.Point(-1,-1), wx.Size(-1, -1), wx.RB_GROUP) rb2 = wx.RadioButton(self, -1, uploadlist[1], wx.Point(-1,-1), wx.Size(-1, -1)) rb3 = wx.RadioButton(self, -1, uploadlist[2], wx.Point(-1,-1), wx.Size(-1, -1)) self.rb = [rb1, rb2, rb3] mtimeval = ['30', '45', '60', '75'] htimeval = [] for i in range(24): htimeval.append(str(i)) self.cbhtime = wx.ComboBox(self, -1, "", wx.Point(-1, -1), wx.Size(37, -1), htimeval, wx.CB_DROPDOWN|wx.CB_READONLY) self.cbmtime = wx.ComboBox(self, -1, "", wx.Point(-1, -1), wx.Size(37, -1), mtimeval, wx.CB_DROPDOWN|wx.CB_READONLY) continuesection.Add(rb1, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5) time_sizer = wx.BoxSizer(wx.HORIZONTAL) time_sizer.Add(rb2, 0, wx.ALIGN_CENTER_VERTICAL) time_sizer.Add(self.cbhtime, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT, 5) time_sizer.Add(wx.StaticText(self, -1, self.utility.lang.get('hour')), 0, wx.ALIGN_CENTER_VERTICAL) time_sizer.Add(self.cbmtime, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT, 5) time_sizer.Add(wx.StaticText(self, -1, self.utility.lang.get('minute')), 0, wx.ALIGN_CENTER_VERTICAL) continuesection.Add(time_sizer, -1, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5) ratioval = ['50', '75', '100', '125', '150','175','200', '300', '400', '500'] self.cbratio = wx.ComboBox(self, -1, "", wx.Point(-1, -1), wx.Size(45, -1), ratioval, wx.CB_DROPDOWN|wx.CB_READONLY) percent_sizer = wx.BoxSizer(wx.HORIZONTAL) percent_sizer.Add(rb3, 0, wx.ALIGN_CENTER_VERTICAL) percent_sizer.Add(self.cbratio, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT, 5) percent_sizer.Add(wx.StaticText(self, -1, "%"), 0, wx.ALIGN_CENTER_VERTICAL) continuesection.Add(percent_sizer, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5) rightbox.Add( continuesection, 0, wx.EXPAND|wx.ALL, 5) self.timeoutbox = wx.CheckBox(self, -1, self.utility.lang.get('disabletimeout')) rightbox.Add( self.timeoutbox, 0, wx.EXPAND|wx.ALL, 10) leftrightbox.Add(leftbox) leftrightbox.Add(rightbox) outerbox.Add(leftrightbox) applybtn = wx.Button(self, -1, self.utility.lang.get('apply')) self.Bind(wx.EVT_BUTTON, self.onApply, applybtn) okbtn = wx.Button(self, -1, self.utility.lang.get('ok')) self.Bind(wx.EVT_BUTTON, self.onOK, okbtn) cancelbtn = wx.Button(self, wx.ID_CANCEL, self.utility.lang.get('cancel')) setDefaultsbtn = wx.Button(self, -1, self.utility.lang.get('reverttodefault')) self.Bind(wx.EVT_BUTTON, self.RevertToDefault, setDefaultsbtn) buttonbox = wx.BoxSizer( wx.HORIZONTAL ) buttonbox.Add(applybtn, 0, wx.ALL, 5) buttonbox.Add(okbtn, 0, wx.ALL, 5) buttonbox.Add(cancelbtn, 0, wx.ALL, 5) buttonbox.Add(setDefaultsbtn, 0, wx.ALL, 5) outerbox.Add( buttonbox, 0, wx.ALIGN_CENTER) self.setDefaults() self.SetAutoLayout( True ) self.SetSizer( outerbox ) self.Fit() def RevertToDefault(self, event = None): maxupt = int(self.utility.config.Read('maxupload')) loc_maxupload = maxupt loc_uploadopt = self.utility.config.Read('uploadoption') loc_uploadtimeh = self.utility.config.Read('uploadtimeh') loc_uploadtimem = self.utility.config.Read('uploadtimem') loc_uploadratio = self.utility.config.Read('uploadratio') self.maxupload.SetValue(loc_maxupload) self.rb[int(loc_uploadopt)].SetValue(True) self.cbratio.SetValue(loc_uploadratio) self.cbhtime.SetValue(loc_uploadtimeh) self.cbmtime.SetValue(loc_uploadtimem) loc_maxuploadrate = 0 self.uploadrate.SetValue(int(loc_maxuploadrate)) loc_maxdownloadrate = 0 self.downloadrate.SetValue(int(loc_maxdownloadrate)) self.timeoutbox.SetValue(0) def setDefaults(self, event = None): ABCTorrentTemp = self.torrentlist[0] loc_uploadopt = ABCTorrentTemp.connection.getSeedOption('uploadoption') self.rb[int(loc_uploadopt)].SetValue(True) self.maxupload.SetValue(ABCTorrentTemp.connection.getMaxUpload()) self.cbratio.SetValue(ABCTorrentTemp.connection.getSeedOption('uploadratio')) self.cbhtime.SetValue(ABCTorrentTemp.connection.getSeedOption('uploadtimeh')) self.cbmtime.SetValue(ABCTorrentTemp.connection.getSeedOption('uploadtimem')) self.uploadrate.SetValue(ABCTorrentTemp.connection.getLocalRate('up')) self.downloadrate.SetValue(ABCTorrentTemp.connection.getLocalRate('down')) self.timeoutbox.SetValue(not ABCTorrentTemp.connection.timeout) def onApply(self, event = None): upload_rate = int(self.uploadrate.GetValue()) if upload_rate < 3 and upload_rate != 0: #display warning dlg = wx.MessageDialog(self, self.utility.lang.get('uploadrateminwarningauto') , self.utility.lang.get('error'), wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return False loc_info = {} loc_info['maxupload'] = self.maxupload.GetValue() #maxupload loc_info['uploadrate'] = self.uploadrate.GetValue() #maxuploadrate loc_info['downloadrate'] = self.downloadrate.GetValue() #maxdownloadrate for i in range (0, 3): #uploadopt if self.rb[i].GetValue(): loc_info['uploadoption'] = str(i) break loc_info['uploadtimeh'] = self.cbhtime.GetValue() #uploadtimeh loc_info['uploadtimem'] = self.cbmtime.GetValue() #uploadtimem loc_info['uploadratio'] = self.cbratio.GetValue() #uploadratio loc_info['timeout'] = not self.timeoutbox.IsChecked() for ABCTorrentTemp in self.torrentlist: ABCTorrentTemp.connection.changeLocalInfo(loc_info) self.utility.queue.updateAndInvoke() # Sent new parameter to process ################################# # must change now # - maxupload, maxuploadrate, numsimdownload # - uploadoption, uploadtimeh, uploadtimem, # - uploadratio ######################################### return True def onOK(self, event = None): if self.onApply(): self.EndModal(wx.ID_OK)