⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 configreader.py

📁 ABC-win32-v3.1 一个P2P软源代码
💻 PY
📖 第 1 页 / 共 4 页
字号:
#written by John Hoffman

import sys
from wxPython.wx import *

from ConnChoice import connChoices
from download_bt1 import defaults
from ConfigDir import ConfigDir
import socket
from parseargs import defaultargs

try:
    True
except:
    True = 1
    False = 0
    
try:
    wxFULL_REPAINT_ON_RESIZE
except:
    wxFULL_REPAINT_ON_RESIZE = 0        # fix for wx pre-2.5

if (sys.platform == 'win32'):
    _FONT = 9
else:
    _FONT = 10

def HexToColor(s):
    r, g, b = s.split(' ')
    return wxColour(red = int(r, 16), green = int(g, 16), blue = int(b, 16))
    
def hex2(c):
    h = hex(c)[2:]
    if len(h) == 1:
        h = '0'+h
    return h
def ColorToHex(c):
    return hex2(c.Red()) + ' ' + hex2(c.Green()) + ' ' + hex2(c.Blue())

ratesettingslist = []
for x in connChoices:
    if not x.has_key('super-seed'):
        ratesettingslist.append(x['name'])


configFileDefaults = [
    #args only available for the gui client
    ('win32_taskbar_icon', 1, 
         "whether to iconize do system try or not on win32"), 
    ('gui_stretchwindow', 0, 
         "whether to stretch the download status window to fit the torrent name"), 
    ('gui_displaystats', 1, 
         "whether to display statistics on peers and seeds"), 
    ('gui_displaymiscstats', 1, 
         "whether to display miscellaneous other statistics"), 
    ('gui_ratesettingsdefault', ratesettingslist[0], 
         "the default setting for maximum upload rate and users"), 
    ('gui_ratesettingsmode', 'full', 
         "what rate setting controls to display; options are 'none', 'basic', and 'full'"), 
    ('gui_forcegreenonfirewall', 0, 
         "forces the status icon to be green even if the client seems to be firewalled"), 
    ('gui_default_savedir', '', 
         "default save directory"), 
    ('last_saved', '', # hidden; not set in config
         "where the last torrent was saved"), 
    ('gui_font', _FONT, 
         "the font size to use"), 
    ('gui_saveas_ask', -1, 
         "whether to ask where to download to (0 = never, 1 = always, -1 = automatic resume"), 
]

def setwxconfigfiledefaults():
    CHECKINGCOLOR = ColorToHex(wxSystemSettings_GetColour(wxSYS_COLOUR_3DSHADOW)) 	 
    DOWNLOADCOLOR = ColorToHex(wxSystemSettings_GetColour(wxSYS_COLOUR_ACTIVECAPTION))
    
    configFileDefaults.extend([
        ('gui_checkingcolor', CHECKINGCOLOR, 
            "progress bar checking color"), 
        ('gui_downloadcolor', DOWNLOADCOLOR, 
            "progress bar downloading color"), 
        ('gui_seedingcolor', '00 FF 00', 
            "progress bar seeding color"), 
    ])

defaultsToIgnore = ['responsefile', 'url', 'priority']


class configReader:

    def __init__(self):
        self.configfile = wxConfig("BitTorrent", style=wxCONFIG_USE_LOCAL_FILE)
        self.configMenuBox = None
        self.advancedMenuBox = None
        self._configReset = True         # run reset for the first time

        setwxconfigfiledefaults()

        defaults.extend(configFileDefaults)
        self.defaults = defaultargs(defaults)

        self.configDir = ConfigDir('gui')
        self.configDir.setDefaults(defaults, defaultsToIgnore)
        if self.configDir.checkConfig():
            self.config = self.configDir.loadConfig()
        else:
            self.config = self.configDir.getConfig()
            self.importOldGUIConfig()
            self.configDir.saveConfig()

        updated = False     # make all config default changes here

        if self.config['gui_ratesettingsdefault'] not in ratesettingslist:
            self.config['gui_ratesettingsdefault'] = (
                                self.defaults['gui_ratesettingsdefault'])
            updated = True
        if self.config['ipv6_enabled'] and (
                        sys.version_info < (2, 3) or not socket.has_ipv6):
            self.config['ipv6_enabled'] = 0
            updated = True
        for c in ['gui_checkingcolor', 'gui_downloadcolor', 'gui_seedingcolor']:
            try:
                HexToColor(self.config[c])
            except:
                self.config[c] = self.defaults[c]
                updated = True

        if updated:
            self.configDir.saveConfig()

        self.configDir.deleteOldCacheData(self.config['expire_cache_data'])


    def importOldGUIConfig(self):
        oldconfig = wxConfig("BitTorrent", style=wxCONFIG_USE_LOCAL_FILE)
        cont, s, i = oldconfig.GetFirstEntry()
        if not cont:
            oldconfig.DeleteAll()
            return False
        while cont:     # import old config data
            if self.config.has_key(s):
                t = oldconfig.GetEntryType(s)
                try:
                    if t == 1:
                        assert type(self.config[s]) == type('')
                        self.config[s] = oldconfig.Read(s)
                    elif t == 2 or t == 3:
                        assert type(self.config[s]) == type(1)
                        self.config[s] = int(oldconfig.ReadInt(s))
                    elif t == 4:
                        assert type(self.config[s]) == type(1.0)
                        self.config[s] = oldconfig.ReadFloat(s)
                except:
                    pass
            cont, s, i = oldconfig.GetNextEntry(i)

#        oldconfig.DeleteAll()
        return True


    def resetConfigDefaults(self):
        for p, v in self.defaults.items():
            if not p in defaultsToIgnore:
                self.config[p] = v
        self.configDir.saveConfig()

    def writeConfigFile(self):
        self.configDir.saveConfig()

    def WriteLastSaved(self, l):
        self.config['last_saved'] = l
        self.configDir.saveConfig()


    def getcheckingcolor(self):
        return HexToColor(self.config['gui_checkingcolor'])
    def getdownloadcolor(self):
        return HexToColor(self.config['gui_downloadcolor'])
    def getseedingcolor(self):
        return HexToColor(self.config['gui_seedingcolor'])

    def configReset(self):
        r = self._configReset
        self._configReset = False
        return r

    def getConfigDir(self):
        return self.configDir

    def getIconDir(self):
        return self.configDir.getIconDir()

    def getTorrentData(self, t):
        return self.configDir.getTorrentData(t)

    def setColorIcon(self, xxicon, xxiconptr, xxcolor):
        idata = wxMemoryDC()
        idata.SelectObject(xxicon)
        idata.SetBrush(wxBrush(xxcolor, wxSOLID))
        idata.DrawRectangle(0, 0, 16, 16)
        idata.SelectObject(wxNullBitmap)
        xxiconptr.Refresh()


    def getColorFromUser(self, parent, colInit):
        data = wxColourData()
        if colInit.Ok():
            data.SetColour(colInit)
        data.SetCustomColour(0, self.checkingcolor)
        data.SetCustomColour(1, self.downloadcolor)
        data.SetCustomColour(2, self.seedingcolor)
        dlg = wxColourDialog(parent, data)
        if not dlg.ShowModal():
            return colInit
        return dlg.GetColourData().GetColour()


    def configMenu(self, parent):
        self.parent = parent
        try:
            self.FONT = self.config['gui_font']
            self.default_font = wxFont(self.FONT, wxDEFAULT, wxNORMAL, wxNORMAL, False)
            self.checkingcolor = HexToColor(self.config['gui_checkingcolor'])
            self.downloadcolor = HexToColor(self.config['gui_downloadcolor'])
            self.seedingcolor = HexToColor(self.config['gui_seedingcolor'])
            
            if (self.configMenuBox is not None):
                try:
                    self.configMenuBox.Close()
                except wxPyDeadObjectError, e:
                    self.configMenuBox = None
    
            self.configMenuBox = wxFrame(None, -1, 'BitTorrent Preferences', size = (1, 1), 
                                style = wxDEFAULT_FRAME_STYLE|wxFULL_REPAINT_ON_RESIZE)
            if (sys.platform == 'win32'):
                self.icon = self.parent.icon
                self.configMenuBox.SetIcon(self.icon)
    
            panel = wxPanel(self.configMenuBox, -1)
            self.panel = panel
    
            def StaticText(text, font = self.FONT, underline = False, color = None, panel = panel):
                x = wxStaticText(panel, -1, text, style = wxALIGN_LEFT)
                x.SetFont(wxFont(font, wxDEFAULT, wxNORMAL, wxNORMAL, underline))
                if color is not None:
                    x.SetForegroundColour(color)
                return x
    
            colsizer = wxFlexGridSizer(cols = 1, vgap = 8)
    
            self.gui_stretchwindow_checkbox = wxCheckBox(panel, -1, "Stretch window to fit torrent name *")
            self.gui_stretchwindow_checkbox.SetFont(self.default_font)
            self.gui_stretchwindow_checkbox.SetValue(self.config['gui_stretchwindow'])
    
            self.gui_displaystats_checkbox = wxCheckBox(panel, -1, "Display peer and seed statistics")
            self.gui_displaystats_checkbox.SetFont(self.default_font)
            self.gui_displaystats_checkbox.SetValue(self.config['gui_displaystats'])
    
            self.gui_displaymiscstats_checkbox = wxCheckBox(panel, -1, "Display miscellaneous other statistics")
            self.gui_displaymiscstats_checkbox.SetFont(self.default_font)
            self.gui_displaymiscstats_checkbox.SetValue(self.config['gui_displaymiscstats'])
    
            self.security_checkbox = wxCheckBox(panel, -1, "Don't allow multiple connections from the same IP")
            self.security_checkbox.SetFont(self.default_font)
            self.security_checkbox.SetValue(self.config['security'])
    
            self.autokick_checkbox = wxCheckBox(panel, -1, "Kick/ban clients that send you bad data *")
            self.autokick_checkbox.SetFont(self.default_font)
            self.autokick_checkbox.SetValue(self.config['auto_kick'])

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -