Merge lp:~sil/lolocopter/save-in-couch into lp:lolocopter

Proposed by Stuart Langridge
Status: Merged
Approved by: Jono Bacon
Approved revision: not available
Merged at revision: not available
Proposed branch: lp:~sil/lolocopter/save-in-couch
Merge into: lp:lolocopter
Diff against target: 211 lines (+109/-15)
3 files modified
bin/lolocopter (+49/-6)
data/ui/LolocopterWindow.ui (+50/-8)
lolocopter/AddSoundLolocopterDialog.py (+10/-1)
To merge this branch: bzr merge lp:~sil/lolocopter/save-in-couch
Reviewer Review Type Date Requested Status
Jono Bacon Approve
Review via email: mp+14899@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Stuart Langridge (sil) wrote :

Make the lolocopter part of the mighty desktopcouch empire

Revision history for this message
Jono Bacon (jonobacon) wrote :

Looks great.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'bin/lolocopter'
2--- bin/lolocopter 2009-11-14 18:50:55 +0000
3+++ bin/lolocopter 2009-11-15 21:55:18 +0000
4@@ -19,6 +19,7 @@
5 import os
6 import gtk
7 import gst
8+import xdg.BaseDirectory
9
10 # Check if we are working in the source tree or from the installed
11 # package and mangle the python path accordingly
12@@ -35,6 +36,8 @@
13 from lolocopter.lolocopterconfig import getdatapath
14 from lolocopter.lolocopter_server import CopterDiscoverer, LolocopterServer
15
16+from desktopcouch.records.server import CouchDatabase
17+
18 gtk.gdk.threads_init()
19
20 class LolocopterWindow(gtk.Window):
21@@ -68,19 +71,60 @@
22
23 #code for other initialization actions should be added here
24 self.pipeline = gst.Pipeline("mypipeline")
25- self.builder.get_object("play_trombone").connect("clicked",self.playFile,"/home/jono/Desktop/sadtrombone.mp3")
26- self.builder.get_object("play_keyboardcat").connect("clicked",self.playFile,"/home/jono/Desktop/keyboardcat.mp3")
27
28 # Start the CopterDiscoverer
29 disc = CopterDiscoverer(self.newLolocopterAppears, None)
30 disc.start()
31
32- # Start a background server (remove this later)
33- srv = LolocopterServer(1, "foo", "bar", None)
34- srv.start_server()
35+ self.mylol_vbox = self.builder.get_object("mylols")
36+ self.otherlol_vbox = self.builder.get_object("otherlols")
37+
38+ self.loadMyLOLs()
39+
40+ def loadMyLOLs(self):
41+ # query couch
42+ db = CouchDatabase("lolocopter", create=True)
43+ for record in db.get_records(create_view=True,
44+ record_type="http://launchpad.net/lolocopter/saved_sound"):
45+ self.loadOneMyLOL(record.value["filename"], record.value["label"])
46+
47+ def loadOneMyLOL(self, filename, name):
48+ print "loading", filename, name
49+ hbox = gtk.HBox()
50+ lbl = gtk.Label(name)
51+ playbtn = gtk.Button(stock=gtk.STOCK_MEDIA_PLAY)
52+ playbtn.connect("clicked", self.playFile,
53+ os.path.join(
54+ xdg.BaseDirectory.save_data_path('lolocopter'),
55+ "sounds",
56+ filename))
57+ sharebtn = gtk.ToggleButton(label="Share")
58+ sharebtn.connect("toggled", self.shareTheLOL, filename, name)
59+ hbox.pack_start(lbl)
60+ hbox.pack_start(playbtn)
61+ hbox.pack_start(sharebtn)
62+ self.mylol_vbox.pack_end(hbox)
63+ hbox.show_all()
64
65 def newLolocopterAppears(self, lolname, personname, host, port):
66 print "As if by magic, a lolocopter appears!", lolname, personname, host, port
67+ description = "%s, provided by %s" % (lolname, personname)
68+ hbox = gtk.HBox()
69+ lbl = gtk.Label("<big>%s</big> by %s" % (lolname, personname))
70+ joinbtn = gtk.Button(label="Join the Denial of LOL")
71+ joinbtn.connect("clicked", self.joinTheLOL, host, port)
72+ hbox.pack_start(lbl)
73+ hbox.pack_start(joinbtn)
74+ self.otherlol_vbox.pack_end(hbox)
75+ hbox.show_all()
76+
77+ def joinTheLOL(self, host, port):
78+ print "joining lol on host/port", host, port
79+
80+ def shareTheLOL(self, widget, filename, name):
81+ srv = LolocopterServer(10000, name, "Someone's Computer", None)
82+ srv.start_server()
83+
84
85 def about(self, widget, data=None):
86 """about - display the about box for lolocopter """
87@@ -90,7 +134,6 @@
88
89 def addSounds(self, widget, data=None):
90 """add sounds to the lolocopter"""
91- print "Add Sounds dialog box"
92 addsound = AddSoundLolocopterDialog.NewAddSoundLolocopterDialog()
93 response = addsound.run()
94 if response == gtk.RESPONSE_OK:
95
96=== modified file 'data/ui/LolocopterWindow.ui'
97--- data/ui/LolocopterWindow.ui 2009-11-14 17:18:08 +0000
98+++ data/ui/LolocopterWindow.ui 2009-11-15 21:55:18 +0000
99@@ -75,26 +75,68 @@
100 </packing>
101 </child>
102 <child>
103- <object class="GtkButton" id="play_trombone">
104- <property name="label" translatable="yes">Trombone</property>
105+ <object class="GtkExpander" id="expander1">
106 <property name="visible">True</property>
107 <property name="can_focus">True</property>
108- <property name="receives_default">True</property>
109+ <property name="expanded">True</property>
110+ <child>
111+ <object class="GtkScrolledWindow" id="scrolledwindow1">
112+ <property name="visible">True</property>
113+ <property name="can_focus">True</property>
114+ <property name="hscrollbar_policy">automatic</property>
115+ <property name="vscrollbar_policy">automatic</property>
116+ <child>
117+ <object class="GtkVBox" id="mylols">
118+ <property name="visible">True</property>
119+ <property name="orientation">vertical</property>
120+ <child>
121+ <placeholder/>
122+ </child>
123+ </object>
124+ </child>
125+ </object>
126+ </child>
127+ <child type="label">
128+ <object class="GtkLabel" id="label1">
129+ <property name="visible">True</property>
130+ <property name="label" translatable="yes">My LOLs</property>
131+ </object>
132+ </child>
133 </object>
134 <packing>
135- <property name="expand">False</property>
136 <property name="position">1</property>
137 </packing>
138 </child>
139 <child>
140- <object class="GtkButton" id="play_keyboardcat">
141- <property name="label" translatable="yes">Keyboard Cat</property>
142+ <object class="GtkExpander" id="expander2">
143 <property name="visible">True</property>
144 <property name="can_focus">True</property>
145- <property name="receives_default">True</property>
146+ <property name="expanded">True</property>
147+ <child>
148+ <object class="GtkScrolledWindow" id="scrolledwindow2">
149+ <property name="visible">True</property>
150+ <property name="can_focus">True</property>
151+ <property name="hscrollbar_policy">automatic</property>
152+ <property name="vscrollbar_policy">automatic</property>
153+ <child>
154+ <object class="GtkVBox" id="otherlols">
155+ <property name="visible">True</property>
156+ <property name="orientation">vertical</property>
157+ <child>
158+ <placeholder/>
159+ </child>
160+ </object>
161+ </child>
162+ </object>
163+ </child>
164+ <child type="label">
165+ <object class="GtkLabel" id="label2">
166+ <property name="visible">True</property>
167+ <property name="label" translatable="yes">LOLs from around the network</property>
168+ </object>
169+ </child>
170 </object>
171 <packing>
172- <property name="expand">False</property>
173 <property name="position">2</property>
174 </packing>
175 </child>
176
177=== modified file 'lolocopter/AddSoundLolocopterDialog.py'
178--- lolocopter/AddSoundLolocopterDialog.py 2009-11-14 19:22:56 +0000
179+++ lolocopter/AddSoundLolocopterDialog.py 2009-11-15 21:55:18 +0000
180@@ -21,6 +21,8 @@
181 import shutil
182
183 from lolocopter.lolocopterconfig import getdatapath
184+from desktopcouch.records.server import CouchDatabase
185+from desktopcouch.records.record import Record
186
187 class AddSoundLolocopterDialog(gtk.Dialog):
188 __gtype_name__ = "AddSoundLolocopterDialog"
189@@ -63,6 +65,7 @@
190 """ok - The user has elected to save the changes.
191 Called before the dialog returns gtk.RESONSE_OK from run().
192 Copies the sound over to the 'lolocopter/sounds' folder
193+ and adds it to the database
194 """
195
196 # copy the file to the sounds folder
197@@ -71,7 +74,13 @@
198 # this is the label of the sound
199 self.lol_name = self.lolname.get_text()
200
201-
202+ # Add sound to the database
203+ db = CouchDatabase("lolocopter", create=True)
204+ record = Record({
205+ "label": self.lol_name,
206+ "filename": os.path.split(self.lolfile.get_filename())[1]
207+ }, record_type="http://launchpad.net/lolocopter/saved_sound") # FIXME
208+ rid = db.put_record(record)
209
210 def cancel(self, widget, data=None):
211 """cancel - The user has elected cancel changes.

Subscribers

People subscribed via source and target branches

to all changes: