1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
from ServiceReference import ServiceReference
import os
class PlaylistIO:
def __init__(self):
self.list = []
# returns a list of services or None if filename is not a valid playlist
def open(self, filename):
return None
OK = 0
FILEEXISTS = 1
WRITEERROR = 2
ERROR = 3
UNSUPPORTED_FILES_IN_PLAYLIST = 4
def save(self, filename = None):
return self.ERROR
def clear(self):
del self.list[:]
def addService(self, service):
self.list.append(service)
class PlaylistIOInternal(PlaylistIO):
def __init__(self):
PlaylistIO.__init__(self)
def open(self, filename):
self.clear()
try:
file = open(filename, "r")
except IOError:
return None
while True:
entry = file.readline().strip()
if entry == "":
break
self.addService(ServiceReference(entry))
file.close()
return self.list
def save(self, filename = None):
print "Writing playlist into file", filename
file = open(filename, "w")
for x in self.list:
file.write(str(x) + "\n")
file.close()
return self.OK
class PlaylistIOM3U(PlaylistIO):
def __init__(self):
PlaylistIO.__init__(self)
def open(self, filename):
self.clear()
self.displayname = None
try:
file = open(filename, "r")
except IOError:
return None
while True:
entry = file.readline().strip()
if entry == "":
break
if entry.startswith("#EXTINF:"):
extinf = entry.split(',',1)
if len(extinf) > 1:
self.displayname = extinf[1]
# TODO: use e2 facilities to create a service ref from file
elif entry[0] != "#":
if entry[0] == "/":
sref = ServiceReference("4097:0:0:0:0:0:0:0:0:0:" + entry)
elif entry.startswith("http"):
sref = ServiceReference("4097:0:0:0:0:0:0:0:0:0:" + entry.replace(':',"%3a"))
else:
sref = ServiceReference("4097:0:0:0:0:0:0:0:0:0:" + os.path.dirname(filename) + "/" + entry)
if self.displayname:
sref.ref.setName(self.displayname)
self.displayname = None
self.addService(sref)
file.close()
return self.list
def save(self, filename = None):
return self.ERROR
class PlaylistIOPLS(PlaylistIO):
def __init__(self):
PlaylistIO.__init__(self)
def open(self, filename):
self.clear()
try:
file = open(filename, "r")
except IOError:
return None
entry = file.readline().strip()
if entry == "[playlist]": # extended pls
while True:
entry = file.readline().strip()
if entry == "":
break
if entry[0:4] == "File":
pos = entry.find('=') + 1
newentry = entry[pos:]
# TODO: use e2 facilities to create a service ref from file
if newentry[0] == "/":
self.addService(ServiceReference("4097:0:0:0:0:0:0:0:0:0:" + newentry))
else:
self.addService(ServiceReference("4097:0:0:0:0:0:0:0:0:0:" + os.path.dirname(filename) + "/" + newentry))
else:
playlist = PlaylistIOM3U()
return playlist.open(filename)
file.close()
return self.list
def save(self, filename = None):
return self.ERROR
|