~ubuntu-branches/ubuntu/quantal/radiotray/quantal

« back to all changes in this revision

Viewing changes to src/XmlDataProvider.py

  • Committer: Bazaar Package Importer
  • Author(s): Elías Alejandro Año Mendoza
  • Date: 2010-06-15 02:19:00 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20100615021900-m8wrzkbq8kez1etv
Tags: 0.6-2
Added build dependency.

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
 
25
25
class XmlDataProvider:
26
26
 
27
 
        def __init__(self, filename):
28
 
                
29
 
                if(os.access(filename, os.W_OK|os.R_OK) == False):
30
 
                        raise Exception('Bookmarks file not found: ' + filename)
31
 
                else:
32
 
                        self.filename = filename
33
 
 
34
 
 
35
 
        def loadFromFile(self):
36
 
 
37
 
                self.root = etree.parse(self.filename).getroot()
38
 
 
39
 
        def saveToFile(self):
40
 
                out_file = open(self.filename, "w")
41
 
                out_file.write(etree.tostring(self.root, method='xml', encoding='UTF-8'))
42
 
                out_file.close()
43
 
 
44
 
        def listRadioNames(self):
45
 
 
46
 
                return self.root.xpath("//bookmark/@name")
47
 
 
48
 
        def getRadioUrl(self, name):
49
 
 
50
 
                result = self.root.xpath("//bookmark[@name=$var]/@url", var=name)
51
 
                if(len(result) == 1):
52
 
                        return result[0]
53
 
 
54
 
        def addRadio(self, name, url):
55
 
 
56
 
                radio = etree.SubElement(self.root, 'bookmark')
57
 
                radio.set("name", name)
58
 
                radio.set("url", url)
59
 
                self.saveToFile()
60
 
 
61
 
        def updateRadio(self, oldName, newName, url):   
62
 
 
63
 
                radioXml = self.root.xpath("//bookmark[@name=$var]", var=oldName)[0]
64
 
                radioXml.set("name", unicode(newName))
65
 
                radioXml.set("url", url)
66
 
                self.saveToFile()
67
 
 
68
 
        def removeRadio(self, name):
69
 
 
70
 
                radio = self.root.xpath("//bookmark[@name=$var]", var=name)[0]
71
 
                self.root.remove(radio)
72
 
                self.saveToFile()
73
 
 
74
 
        def moveUp(self, name):
75
 
 
76
 
                radio = self.root.xpath("//bookmark[@name=$var]", var=name)[0]
77
 
                previous = radio.getprevious()
78
 
                if ( previous != None):
79
 
                        index=self.root.xpath("count(//bookmark[@name=$var]/preceding-sibling::*)+1", var=name)
80
 
                        self.root.remove(radio)
81
 
                        self.root.insert(int(index)-2,radio)
82
 
                        self.saveToFile()
83
 
 
84
 
                        return True
85
 
                else:
86
 
                        return False
87
 
                
88
 
        def moveDown(self, name):
89
 
 
90
 
                radio = self.root.xpath("//bookmark[@name=$var]", var=name)[0]
91
 
                next = radio.getnext()
92
 
                if ( next != None):
93
 
                        index=self.root.xpath("count(//bookmark[@name=$var]/preceding-sibling::*)+1", var=name)
94
 
                        self.root.remove(radio)
95
 
                        self.root.insert(int(index),radio)
96
 
                        self.saveToFile()
97
 
 
98
 
                        return True
99
 
                else:
100
 
                        return False
101
 
        
 
27
    def __init__(self, filename):
 
28
 
 
29
        if(os.access(filename, os.W_OK|os.R_OK) == False):
 
30
            raise Exception('Bookmarks file not found: ' + filename)
 
31
        else:
 
32
            self.filename = filename
 
33
 
 
34
    def loadFromFile(self):
 
35
 
 
36
        self.root = etree.parse(self.filename).getroot()
 
37
 
 
38
    def saveToFile(self):
 
39
        out_file = open(self.filename, "w")
 
40
        out_file.write(etree.tostring(self.root, method='xml', encoding='UTF-8', pretty_print=True))
 
41
        out_file.close()
 
42
 
 
43
    def listRadioNames(self):
 
44
 
 
45
        return self.root.xpath("//bookmark/@name")
 
46
 
 
47
    def getRadioUrl(self, name):
 
48
 
 
49
        result = self.root.xpath("//bookmark[@name=$var]/@url", var=name)
 
50
        if(len(result) >= 1):
 
51
            return result[0]
 
52
 
 
53
    def addRadio(self, name, url):
 
54
 
 
55
        # Flag used to determine if a radio gets added or not
 
56
        radioAdded = None
 
57
 
 
58
        # First, let us check this name hasn't been used yet.
 
59
        result = self._radioExists(name)
 
60
 
 
61
        if result is None:
 
62
            radio = etree.SubElement(self.root, 'bookmark')
 
63
            radio.set("name", name)
 
64
            radio.set("url", url)
 
65
            self.saveToFile()
 
66
            radioAdded = True
 
67
        else:
 
68
            print "A radio with the name \"%s\" already exists." % name
 
69
            radioAdded = False
 
70
 
 
71
        return radioAdded
 
72
 
 
73
    def updateRadio(self, oldName, newName, url):
 
74
 
 
75
        # Flag used to determine if a radio gets added or not
 
76
        radioAdded = None
 
77
 
 
78
        result = self._radioExists(oldName)
 
79
 
 
80
        if result is None:
 
81
            print "Could not find a radio with the name \"%s\"." % oldName
 
82
            radioAdded = False
 
83
        else:
 
84
            if oldName == newName:
 
85
                result.set("url", url)
 
86
                self.saveToFile()
 
87
                radioAdded = True
 
88
            else:
 
89
                radioXml = self._radioExists(newName)
 
90
                if radioXml is not None:
 
91
                    print "A radio with the name \"%s\" already exists." % newName
 
92
                    radioAdded = False
 
93
                else:
 
94
                    result.set("name", unicode(newName))
 
95
                    result.set("url", url)
 
96
                    self.saveToFile()
 
97
                    radioAdded = True
 
98
 
 
99
        return radioAdded
 
100
 
 
101
    def removeRadio(self, name):
 
102
 
 
103
        radio = self._radioExists(name)
 
104
 
 
105
        if radio is not None:
 
106
            self.root.remove(radio)
 
107
            self.saveToFile()
 
108
 
 
109
    def moveUp(self, name):
 
110
 
 
111
        radio = self._radioExists(name)
 
112
        previous = radio.getprevious()
 
113
        if ( previous != None):
 
114
            index=self.root.xpath("count(//bookmark[@name=$var]/preceding-sibling::*)+1", var=name)
 
115
            self.root.remove(radio)
 
116
            self.root.insert(int(index)-2,radio)
 
117
            self.saveToFile()
 
118
 
 
119
            return True
 
120
        else:
 
121
            return False
 
122
 
 
123
    def moveDown(self, name):
 
124
 
 
125
        radio = self._radioExists(name)
 
126
        next = radio.getnext()
 
127
        if ( next != None):
 
128
            index=self.root.xpath("count(//bookmark[@name=$var]/preceding-sibling::*)+1", var=name)
 
129
            self.root.remove(radio)
 
130
            self.root.insert(int(index),radio)
 
131
            self.saveToFile()
 
132
 
 
133
            return True
 
134
        else:
 
135
            return False
 
136
 
 
137
    def _radioExists(self, name):
 
138
        radio = None
 
139
 
 
140
        try:
 
141
            radio = self.root.xpath("//bookmark[@name=$var]", var=name)[0]
 
142
        except IndexError, e:
 
143
            # No radio was found
 
144
            print "Could not find a radio with the name \"%s\"." % name
 
145
 
 
146
        return radio