compat.py :  » Network » Torrent-Swapper » swapper » Utility » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Network » Torrent Swapper 
Torrent Swapper » swapper » Utility » compat.py
##########################
#
# Things to handle backward compatability for the old-style
# torrent.lst and abc.ini
#
##########################

import os
import sys

from traceback import print_exc
from cStringIO import StringIO

from shutil import move,copy2

from Utility.configreader import ConfigReader
from Utility.helpers import existsAndIsReadable

def moveOldConfigFiles(utility):
    oldpath = utility.getPath()
    newpath = utility.getConfigPath()

    files = ["torrent.lst",
             "torrent.list",
             "torrent.list.backup1",
             "torrent.list.backup2",
             "torrent.list.backup3",
             "torrent.list.backup4",
             "abc.ini",
             "abc.conf",
             "webservice.conf",
             "maker.conf",
             "torrent",
             "torrentinfo"]
    
    for name in files:
        oldname = os.path.join(oldpath, name)
        if existsAndIsReadable(oldname):
            newname = os.path.join(newpath, name)
            try:
                move(oldname, newname)
            except:
#                data = StringIO()
#                print_exc(file = data)
#                sys.stderr.write(data.getvalue())
                pass
                
    # Special case: move lang\user.lang to configdir\user.lang
    oldname = os.path.join(oldpath, "lang", "user.lang")
    if existsAndIsReadable(oldname):
        newname = os.path.join(newpath, "user.lang")
        try:
            move(oldname, newname)
        except:
            pass

def convertOldList(utility):
    convertOldList1(utility)
    convertOldList2(utility)

#
# Convert the torrent.lst file to the new torrent.list
# format the first time ABC is run (if necessary)
#
def convertOldList1(utility):
    # Only continue if torrent.lst exists
    filename = os.path.join(utility.getConfigPath(), "torrent.lst")
    if not existsAndIsReadable(filename):
        return
    
    torrentconfig = utility.torrentconfig
    
    # Don't continue unless torrent.list is empty
    try:
        if torrentconfig.has_section("0"):
            return
    except:
        return
    
    oldconfig = open(filename, "r+")
    
    configline = oldconfig.readline()
    index = 0
    while configline != "" and configline != "\n":
        try:
            configmap = configline.split('|')
            
            torrentconfig.setSection(str(index))
            
            torrentconfig.Write("src", configmap[1])
            torrentconfig.Write("dest", configmap[2])

            # Write status information
            torrentconfig.Write("status", configmap[3])
            torrentconfig.Write("prio", configmap[4])

            # Write progress information
            torrentconfig.Write("downsize", configmap[5])
            torrentconfig.Write("upsize", configmap[6])
            if (len(configmap) <= 7) or (configmap[7] == '?\n'):
                progress = "0.0"
            else:
                progress = configmap[7]
            torrentconfig.Write("progress", str(progress))
        except:
#            data = StringIO()
#            print_exc(file = data)
#            sys.stderr.write(data.getvalue())   # report exception here too
            pass

        configline = oldconfig.readline()
        index += 1

    oldconfig.close()
    torrentconfig.Flush()
    
    # Rename the old list file
    move(filename, filename + ".old")
    
#
# Convert list to new format
# (only src stored in list, everything else stored in torrentinfo)
#
def convertOldList2(utility):
    index = 0
    while convertOldList2B(utility, index):
        index += 1
    utility.torrentconfig.Flush()
    
def convertOldList2B(utility, indexval):
    torrentconfig = utility.torrentconfig
    
    index = str(indexval)
    
    try:
        if not torrentconfig.has_section(index):
            return False
    except:
        return False
        
    if indexval == 0:
        # backup the old file
        oldconfigname = os.path.join(utility.getConfigPath(), "torrent.list")
        if existsAndIsReadable(oldconfigname):
            try:
                copy2(oldconfigname, oldconfigname + ".old")
            except:
                pass
    
    # Torrent information
    filename = torrentconfig.Read("src", section = index)
    # Format from earlier 2.7.0 test builds:
    if not filename:
        # If the src is missing, then we should not try to add the torrent
        sys.stdout.write("Filename is empty for index: " + str(index) + "!\n")
        return False
    elif filename.startswith(utility.getPath()):
        src = filename
    else:
        src = os.path.join(utility.getConfigPath(), "torrent", filename)
        
    filename = os.path.split(src)[1]
    newsrc = os.path.join(utility.getConfigPath(), "torrent", filename)
        
    configpath = os.path.join(utility.getConfigPath(), "torrentinfo", filename + ".info")
    config = ConfigReader(configpath, "TorrentInfo")
    
    for name, value in torrentconfig.Items(index):
        if name != "src" and value != "":
            config.Write(name, value)
            
    config.Flush()
    
    torrentconfig.DeleteGroup(index)
    torrentconfig.Write(index, newsrc)
    
    return True
    
# Get settings from the old abc.ini file
def convertINI(utility):
    # Only continue if abc.ini exists
    filename = os.path.join(utility.getConfigPath(), "abc.ini")
    if not existsAndIsReadable(filename):
        return

    config = utility.config
    lang = utility.lang
    
    # We'll ignore anything that was set to the defaults
    # from the previous version
    olddefaults = { 0: [-1, "abc_width", 710], 
                    1: [-1, "abc_height", 400], 
                    2: [-1, "detailwin_width", 610], 
                    3: [-1, "detailwin_height", 500], 
                    4: [0, "Title", 150], 
                    5: [1, "Progress", 60], 
                    6: [2, "BT Status", 100], 
                    7: [8, "Priority", 50], 
                    8: [5, "ETA", 85], 
                    9: [6, "Size", 75], 
                    10: [3, "DL Speed", 65], 
                    11: [4, "UL Speed", 60], 
                    12: [7, "%U/D Size", 65], 
                    13: [9, "Error Message", 200], 
                    14: [-1, "#Connected Seed", 60], 
                    15: [-1, "#Connected Peer", 60], 
                    16: [-1, "#Seeing Copies", 60], 
                    17: [-1, "Peer Avg Progress", 60], 
                    18: [-1, "Download Size", 75], 
                    19: [-1, "Upload Size", 75], 
                    20: [-1, "Total Speed", 80], 
                    21: [-1, "Torrent Name", 150] }
        
    oldconfig = open(filename, "r+")
    
    configline = oldconfig.readline()
    while configline != "" and configline != "\n":
        try:
            configmap = configline.split("|")
            
            colid = int(configmap[0])
            
            # Main window - width
            if colid == 0:
                if not config.Exists("window_width"):
                    try:
                        width = int(configmap[3])
                        if width != olddefaults[colid][2]:
                            config.Write("window_width", width)
                    except:
                        pass

            # Main window - height
            elif colid == 1:
                if not config.Exists("window_height"):
                    try:
                        height = int(configmap[3])
                        if height != olddefaults[colid][2]:
                            config.Write("window_height", height)
                    except:
                        pass

            # Advanced details - width
            elif colid == 2:
                if not config.Exists("detailwindow_width"):
                    try:
                        width = int(configmap[3])
                        if width != olddefaults[colid][2]:
                            config.Write("detailwindow_width", width)
                    except:
                        pass

            # Advanced details - height
            elif colid == 3:
                if not config.Exists("detailwindow_height"):
                    try:
                        height = int(configmap[3])
                        if height != olddefaults[colid][2]:
                            config.Write("detailwindow_height", height)
                    except:
                        pass

            # Column information
            elif colid >= utility.list.columns.minid and colid < utility.list.columns.maxid:
                # Column RankQ
                if not config.Exists("column" + colid + "_rank"):
                    try:
                        rank = int(configmap[1])
                        if rank != olddefaults[colid][0]:
                            config.Write("column" + colid + "_rank", rank)
                    except:
                        pass

                # Column title
                if not lang.user_lang.Exists("column" + colid + "_text"):
                    try:
                        title = configmap[2]
                        if title != olddefaults[colid][1]:
                            lang.writeUser("column" + colid + "_text", title)
                    except:
                        pass

                # Column width
                if not config.Exists("column" + colid + "_width"):
                    try:
                        width = int(configmap[3])
                        if width != olddefaults[colid][2]:
                            config.Write("column" + colid + "_width", width)
                    except:
                        pass
        except:
            pass
        
        configline = oldconfig.readline()
    
    oldconfig.close()

    # Add in code to process things later
        
    lang.flush()
    config.Flush()
    
    # Rename the old ini file
    # (uncomment this out after we actually include something to process things)
    move(filename, filename + ".old")
        
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.