Don't crash without a neteork
[pyTivo.git] / pyTivoConfigurator.py
blobd3feb030346f879e98d616e95c8691ca4969e442
1 from Tkinter import *
2 import ConfigParser
4 class pyTivoConfigurator(Frame):
6 section = None
8 def buildContainerList(self):
9 frame = Frame(self)
10 frame.pack(fill=Y, expand=1)
11 scrollbar = Scrollbar(frame, orient=VERTICAL)
12 self.container_list = Listbox(frame, yscrollcommand=scrollbar.set)
13 scrollbar.config(command=self.container_list.yview)
14 scrollbar.pack(side=RIGHT, fill=Y)
15 self.container_list.pack(side=LEFT, fill=BOTH, expand=1)
16 self.container_list.bind("<Double-Button-1>", self.selected)
18 def selected(self, e):
19 if not self.container_list.curselection():
20 return
21 index = self.container_list.curselection()[0]
22 self.section = self.container_list.get(index)
24 self.updatePath()
26 def buildButtons(self):
27 frame = Frame()
28 frame.pack(fill=Y, expand=1)
30 save_button = Button(frame, text="Save", command=self.save)
31 save_button.pack(side=RIGHT)
33 add_button = Button(frame, text="Add", command=self.add)
34 add_button.pack(side=RIGHT)
36 restart_button = Button(frame, text="Restart pyTivo", command=self.restart)
37 restart_button.pack(side=RIGHT)
39 def save(self):
40 self.writeConfig()
42 def add(self):
43 import tkSimpleDialog
44 sharename = tkSimpleDialog.askstring('Add share', 'Share Name')
45 self.config.add_section(sharename)
46 self.config.set(sharename, 'type', 'video')
47 self.config.set(sharename, 'path', '<Pick A Path>')
49 self.updateContainerList()
51 def restart(self):
52 import win32serviceutil
53 self.writeConfig()
54 win32serviceutil.RestartService('pyTivo')
56 def buildPath(self):
57 frame = Frame(self)
58 frame.pack(fill=Y, expand=1)
59 l = Label(frame, text="Path")
60 l.pack(side=LEFT)
62 button = Button(frame, text="Browse", command=self.setPath)
63 button.pack(side=RIGHT)
65 self.path = Entry(frame)
66 self.path.pack(side=RIGHT, fill=Y, expand=1)
69 def setPath(self):
70 if not self.section:
71 return
72 import tkFileDialog
73 dir = tkFileDialog.askdirectory()
75 self.config.set(self.section, 'path', dir)
76 self.updatePath()
78 def updatePath(self):
79 if not self.section or not self.config.get(self.section, 'path'):
80 return
82 self.path.delete(0, END)
83 self.path.insert(0, self.config.get(self.section, 'path'))
85 def updateContainerList(self):
86 self.container_list.delete(0, END)
87 for section in self.config.sections():
88 if not section == 'Server':
89 self.container_list.insert(END, section)
91 def readConfig(self):
92 self.config = ConfigParser.ConfigParser()
93 self.config.read(self.config_file)
95 def writeConfig(self):
96 self.config.write(open(self.config_file, 'w'))
98 def __init__(self, master=None):
99 Frame.__init__(self, master)
100 self.master.title('pyTivoConfigurator')
101 self.pack()
103 import os
104 p = os.path.dirname(__file__)
105 self.config_file = os.path.join(p, 'pyTivo.conf')
107 self.readConfig()
109 self.buildContainerList()
110 self.buildPath()
111 self.buildButtons()
113 self.updateContainerList()
117 if __name__ == '__main__':
118 root = Tk()
119 app = pyTivoConfigurator(master=root)
120 app.mainloop()