Merge lp:~michael-sheldon/jokosher/windows_port into lp:jokosher

Proposed by Michael Sheldon
Status: Merged
Merged at revision: not available
Proposed branch: lp:~michael-sheldon/jokosher/windows_port
Merge into: lp:jokosher
Diff against target: None lines
To merge this branch: bzr merge lp:~michael-sheldon/jokosher/windows_port
Reviewer Review Type Date Requested Status
Jokosher Code Pending
Review via email: mp+4935@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Jokosher/ControlsBox.py'
2--- Jokosher/ControlsBox.py 2007-07-10 22:25:55 +0000
3+++ Jokosher/ControlsBox.py 2009-02-25 12:39:22 +0000
4@@ -54,16 +54,16 @@
5 self.muteImgEnabled = Utils.GetIconThatMayBeMissing("stock_volume-mute", gtk.ICON_SIZE_BUTTON, False)
6
7 self.recTip = gtk.Tooltips()
8- self.recButton = gtk.ToggleButton("")
9+ self.recButton = gtk.ToggleButton()
10 self.recTip.set_tip(self.recButton, self.recTipEnabled, None)
11 self.recButton.connect("toggled", self.OnArm)
12
13- self.muteButton = gtk.ToggleButton("")
14+ self.muteButton = gtk.ToggleButton()
15 self.muteButton.connect("toggled", self.OnMute)
16 self.muteTip = gtk.Tooltips()
17 self.muteTip.set_tip(self.muteButton, self.muteTipDisabled, None)
18
19- self.soloButton = gtk.ToggleButton("")
20+ self.soloButton = gtk.ToggleButton()
21 self.soloTip = gtk.Tooltips()
22 self.soloTip.set_tip(self.soloButton, self.soloTipDisabled, None)
23 self.soloButton.connect("toggled", self.OnSolo)
24
25=== modified file 'Jokosher/Event.py'
26--- Jokosher/Event.py 2009-02-18 03:05:16 +0000
27+++ Jokosher/Event.py 2009-03-19 23:28:10 +0000
28@@ -22,6 +22,7 @@
29 import Globals
30 import gettext
31 import urllib
32+import PlatformUtils
33
34 from elements.singledecodebin import SingleDecodeBin
35 _ = gettext.gettext
36@@ -51,7 +52,7 @@
37 }
38
39 """ The level sample interval in seconds """
40- LEVEL_INTERVAL = 0.01
41+ LEVEL_INTERVAL = 0.1
42 LEVELS_FILE_EXTENSION = ".leveldata"
43 NANO_TO_MILLI_DIVISOR = gst.SECOND / 1000
44
45@@ -161,9 +162,9 @@
46
47 Globals.debug("creating SingleDecodeBin")
48 caps = gst.caps_from_string("audio/x-raw-int;audio/x-raw-float")
49- f = "file://" + self.file
50+ f = PlatformUtils.pathname2url(self.file)
51+ Globals.debug("file uri is:", f)
52 self.single_decode_bin = SingleDecodeBin(caps=caps, uri=f)
53- Globals.debug("file uri is:", f)
54 self.gnlsrc.add(self.single_decode_bin)
55 Globals.debug("setting event properties:")
56 propsDict = {
57@@ -212,7 +213,7 @@
58 self.instrument.project.deleteOnCloseAudioFiles.remove(self.file)
59
60 self.temp = self.file
61- if os.path.samefile(self.instrument.project.audio_path, os.path.dirname(self.file)):
62+ if PlatformUtils.samefile(self.instrument.project.audio_path, os.path.dirname(self.file)):
63 # If the file is in the audio dir, just include the filename, not the absolute path
64 self.file = os.path.basename(self.file)
65
66@@ -772,10 +773,14 @@
67 """
68 Renders the level information for the GUI.
69 """
70- pipe = """filesrc name=src location=%s ! decodebin ! audioconvert ! level interval=%d message=true ! fakesink"""
71-
72- pipe = pipe % (self.file.replace(" ", "\ "), self.LEVEL_INTERVAL * gst.SECOND)
73+ pipe = """filesrc name=src ! decodebin ! audioconvert ! level message=true name=level_element ! fakesink"""
74 self.loadingPipeline = gst.parse_launch(pipe)
75+
76+ filesrc = self.loadingPipeline.get_by_name("src")
77+ level = self.loadingPipeline.get_by_name("level_element")
78+
79+ filesrc.set_property("location", self.file)
80+ level.set_property("interval", int(self.LEVEL_INTERVAL * gst.SECOND))
81
82 self.bus = self.loadingPipeline.get_bus()
83 self.bus.add_signal_watch()
84@@ -798,14 +803,25 @@
85 Copies the audio file to the new file location and reads the levels
86 at the same time.
87 """
88- if not gst.element_make_from_uri(gst.URI_SRC, uri):
89+
90+ urisrc = gst.element_make_from_uri(gst.URI_SRC, uri)
91+ if not urisrc:
92 #This means that here is no gstreamer src element on the system that can handle this URI type.
93 return False
94
95- pipe = """%s ! tee name=mytee mytee. ! queue ! filesink location=%s """ +\
96- """mytee. ! queue ! decodebin ! audioconvert ! level interval=%d message=true ! fakesink"""
97- pipe = pipe % (urllib.quote(uri,":/"), self.file.replace(" ", "\ "), self.LEVEL_INTERVAL * gst.SECOND)
98+ pipe = """tee name=mytee mytee. ! queue ! filesink name=sink """ +\
99+ """mytee. ! queue ! decodebin ! audioconvert ! level name=level_element message=true ! fakesink"""
100 self.loadingPipeline = gst.parse_launch(pipe)
101+
102+ tee = self.loadingPipeline.get_by_name("mytee")
103+ filesink = self.loadingPipeline.get_by_name("sink")
104+ level = self.loadingPipeline.get_by_name("level_element")
105+
106+ self.loadingPipeline.add(urisrc)
107+ urisrc.link(tee)
108+
109+ filesink.set_property("location", self.file)
110+ level.set_property("interval", int(self.LEVEL_INTERVAL * gst.SECOND))
111
112 self.bus = self.loadingPipeline.get_bus()
113 self.bus.add_signal_watch()
114
115=== modified file 'Jokosher/EventLaneViewer.py'
116--- Jokosher/EventLaneViewer.py 2009-02-15 23:11:00 +0000
117+++ Jokosher/EventLaneViewer.py 2009-03-19 23:28:10 +0000
118@@ -15,6 +15,7 @@
119 from EventViewer import *
120 import os.path
121 import gettext
122+import PlatformUtils
123 import urllib # To decode URI's
124 import Globals # To get projectfolder
125 import ui.EventLaneHSeparator as EventLaneHSeparator
126@@ -300,8 +301,9 @@
127 if event:
128 #if we we're called from a mouse click, use the mouse position as the start
129 start = (self.mouseDownPos[0]/self.project.viewScale) + self.project.viewStart
130-
131- self.instrument.AddEventsFromList(start, filenames)
132+
133+ uris = [PlatformUtils.pathname2url(filename) for filename in filenames]
134+ self.instrument.AddEventsFromList(start, uris)
135
136 #_____________________________________________________________________
137
138
139=== modified file 'Jokosher/Globals.py'
140--- Jokosher/Globals.py 2009-02-23 00:47:21 +0000
141+++ Jokosher/Globals.py 2009-03-19 23:39:14 +0000
142@@ -18,6 +18,7 @@
143 import gobject, gtk
144 import xdg.BaseDirectory
145 import shutil
146+import PlatformUtils
147
148 import gettext
149 _ = gettext.gettext
150@@ -37,7 +38,7 @@
151 "windowheight" : 550,
152 "windowwidth" : 900,
153 }
154-
155+
156 recording = {
157 "fileformat": "flacenc",
158 "file_extension": "flac",
159@@ -45,13 +46,17 @@
160 "audiosrc" : "gconfaudiosrc",
161 "device" : "default"
162 }
163+ # Overwrite with platform specific settings
164+ recording.update( PlatformUtils.GetRecordingDefaults() )
165
166 playback = {
167 "devicename": "default",
168 "device": "default",
169 "audiosink":"autoaudiosink"
170 }
171-
172+ # Overwrite with platform specific settings
173+ playback.update( PlatformUtils.GetPlaybackDefaults() )
174+
175 extensions = {
176 "extensions_blacklist": ""
177 }
178@@ -699,6 +704,7 @@
179
180 SAMPLE_RATES = [8000, 11025, 22050, 32000, 44100, 48000, 96000, 192000]
181
182+
183 PLAYBACK_BACKENDS = [
184 (_("Autodetect"), "autoaudiosink"),
185 (_("Use GNOME Settings"), "gconfaudiosink"),
186@@ -706,6 +712,8 @@
187 ("OSS", "osssink"),
188 ("JACK", "jackaudiosink"),
189 ("PulseAudio", "pulsesink"),
190+ ("Direct Sound", "directsoundsink"),
191+ ("Core Audio", "osxaudiosink")
192 ]
193
194 CAPTURE_BACKENDS = [
195@@ -714,6 +722,8 @@
196 ("OSS", "osssrc"),
197 ("JACK", "jackaudiosrc"),
198 ("PulseAudio", "pulsesrc"),
199+ ("Direct Sound", "dshowaudiosrc"),
200+ ("Core Audio", "osxaudiosrc")
201 ]
202
203 """ Default Instruments """
204
205=== modified file 'Jokosher/Instrument.py'
206--- Jokosher/Instrument.py 2009-02-18 03:05:16 +0000
207+++ Jokosher/Instrument.py 2009-03-19 23:28:10 +0000
208@@ -15,6 +15,7 @@
209 import pygst
210 pygst.require("0.10")
211 import gst
212+import PlatformUtils
213 import os, time, shutil
214 import urlparse # To split up URI's
215 import gobject
216@@ -199,7 +200,7 @@
217 self.volumeElement.link(self.levelElement)
218 self.levelElement.link(self.panElement)
219 self.panElement.link(self.resample)
220-
221+
222 self.playghostpad = gst.GhostPad("src", self.resample.get_pad("src"))
223 self.playbackbin.add_pad(self.playghostpad)
224
225@@ -541,7 +542,7 @@
226
227 Parameters:
228 start -- the offset time in seconds for the first event.
229- fileList -- paths or URIs to the Event files.
230+ fileList -- URIs to the Event files.
231 copyfile -- True = copy the files to Project's audio directory.
232 False = don't copy the files to the Project's audio directory.
233 """
234@@ -555,6 +556,7 @@
235 # Parse the uri, and continue only if it is pointing to a local file
236 (scheme, domain, file, params, query, fragment) = urlparse.urlparse(uri, "file", False)
237 if scheme == "file":
238+ file = PlatformUtils.url2pathname(file)
239 event = self.addEventFromFile(start, file, copyFile, _undoAction_=undoAction)
240 else:
241 event = self.addEventFromURL(start, uri, _undoAction_=undoAction)
242
243=== modified file 'Jokosher/JokosherApp.py'
244--- Jokosher/JokosherApp.py 2009-02-19 01:48:34 +0000
245+++ Jokosher/JokosherApp.py 2009-03-19 23:28:10 +0000
246@@ -27,6 +27,7 @@
247 import InstrumentConnectionsDialog, StatusBar
248 import EffectPresets, Extension, ExtensionManager
249 import Utils, AudioPreview, MixdownProfileDialog, MixdownActions
250+import PlatformUtils
251
252 #=========================================================================
253
254@@ -1462,7 +1463,8 @@
255 displayed to user detailing the error.
256 """
257 try:
258- self.SetProject(ProjectManager.LoadProjectFile(path))
259+ uri = PlatformUtils.pathname2url(path)
260+ self.SetProject(ProjectManager.LoadProjectFile(uri))
261 return True
262 except ProjectManager.OpenProjectError, e:
263 self.ShowOpenProjectErrorDialog(e,parent)
264
265=== modified file 'Jokosher/NewProjectDialog.py'
266--- Jokosher/NewProjectDialog.py 2008-12-18 19:07:15 +0000
267+++ Jokosher/NewProjectDialog.py 2009-03-19 23:28:10 +0000
268@@ -12,7 +12,7 @@
269 import gtk.glade
270 import os
271 import ProjectManager
272-import pwd
273+import PlatformUtils
274 import Globals
275 import gettext
276 _ = gettext.gettext
277@@ -75,17 +75,9 @@
278 self.templatecombo.add_attribute(text, "text", 0)
279
280 self.templatecombo.set_active(0)
281-
282+
283 # Default author to name of currently logged in user
284- try:
285- # Try to get the full name if it exists
286- fullname = pwd.getpwuid(os.getuid())[4].split(",")[0]
287- if fullname == "":
288- fullname = pwd.getpwuid(os.getuid())[0]
289- self.author.set_text(fullname)
290- except:
291- # If we can't get the fullname, then just use the login
292- self.author.set_text(pwd.getpwuid(os.getuid())[0])
293+ self.author.set_text(PlatformUtils.getFullName())
294
295 self.okbutton = self.res.get_widget("okButton")
296 self.okbutton.set_flags(gtk.CAN_DEFAULT)
297@@ -132,13 +124,15 @@
298 if not author:
299 author = _("Unknown Author")
300
301- folder = self.folder.get_current_folder()
302+ # CreateNewProject expects a URI
303+ folder = PlatformUtils.pathname2url(self.folder.get_current_folder())
304+
305 # Save the selected folder as the default folder
306 Globals.settings.general["projectfolder"] = folder
307 Globals.settings.write()
308 if not folder:
309 folder = "~"
310-
311+
312 try:
313 project = ProjectManager.CreateNewProject(folder, name, author)
314 except ProjectManager.CreateProjectError, e:
315
316=== added directory 'Jokosher/PlatformUtils'
317=== added file 'Jokosher/PlatformUtils/Unix.py'
318--- Jokosher/PlatformUtils/Unix.py 1970-01-01 00:00:00 +0000
319+++ Jokosher/PlatformUtils/Unix.py 2009-03-19 23:39:14 +0000
320@@ -0,0 +1,33 @@
321+
322+
323+import os, os.path, urllib
324+import pwd
325+
326+
327+def getFullName():
328+ try:
329+ # Try to get the full name if it exists
330+ fullname = pwd.getpwuid(os.getuid())[4].split(",")[0]
331+ if fullname == "":
332+ fullname = pwd.getpwuid(os.getuid())[0]
333+ return fullname
334+ except:
335+ # If we can't get the fullname, then just use the login
336+ return pwd.getpwuid(os.getuid())[0]
337+
338+def samefile(path1, path2):
339+ return os.path.samefile(path1, path2)
340+
341+
342+def url2pathname(url):
343+ return urllib.url2pathname(url)
344+
345+def pathname2url(path):
346+ return "file://%s" % urllib.pathname2url(path)
347+
348+def GetRecordingDefaults():
349+ return dict()
350+
351+def GetPlaybackDefaults():
352+ return dict()
353+
354
355=== added file 'Jokosher/PlatformUtils/Windows.py'
356--- Jokosher/PlatformUtils/Windows.py 1970-01-01 00:00:00 +0000
357+++ Jokosher/PlatformUtils/Windows.py 2009-03-19 23:39:14 +0000
358@@ -0,0 +1,33 @@
359+
360+
361+import urllib
362+
363+
364+def getFullName():
365+ #TODO: Work out how to get the fullname in windows
366+ return ""
367+
368+def samefile(path1, path2):
369+ return path1 == path2
370+
371+def url2pathname(url):
372+ return urllib.url2pathname(url)
373+
374+def pathname2url(path):
375+ #Windows pathname2url appends // to the front of the path
376+ return "file:%s" % urllib.pathname2url(path)
377+
378+def GetRecordingDefaults():
379+ defaults = {
380+ "fileformat": "vorbisenc ! oggmux",
381+ "file_extension": "ogg",
382+ "audiosrc" : "dshowaudiosrc"
383+ }
384+ return defaults
385+
386+
387+def GetPlaybackDefaults():
388+ defaults = {
389+ "audiosink": "directsoundsink"
390+ }
391+ return defaults
392
393=== added file 'Jokosher/PlatformUtils/__init__.py'
394--- Jokosher/PlatformUtils/__init__.py 1970-01-01 00:00:00 +0000
395+++ Jokosher/PlatformUtils/__init__.py 2009-03-19 23:44:15 +0000
396@@ -0,0 +1,10 @@
397+
398+import platform
399+
400+system = platform.system()
401+
402+if system == "Windows":
403+ from Windows import *
404+else:
405+ from Unix import *
406+
407
408=== modified file 'Jokosher/Project.py'
409--- Jokosher/Project.py 2009-03-17 02:09:31 +0000
410+++ Jokosher/Project.py 2009-03-26 15:07:44 +0000
411@@ -15,7 +15,7 @@
412 pygst.require("0.10")
413 import gst
414 import gobject
415-import os
416+import os, os.path
417 import gzip
418 import re
419
420@@ -27,6 +27,7 @@
421 import Utils
422 import AudioBackend
423 import ProjectManager
424+import PlatformUtils
425
426 #=========================================================================
427
428@@ -392,13 +393,20 @@
429 else:
430 capsString = "audioconvert"
431
432- pipe = "%s ! %s ! level name=recordlevel interval=%d" +\
433- " ! audioconvert ! %s ! filesink location=%s"
434- pipe %= (recordString, capsString, event.LEVEL_INTERVAL * gst.SECOND, encodeString, event.file.replace(" ", "\ "))
435+ # TODO: get rid of this entire string; do it manually
436+ pipe = "%s ! %s ! level name=recordlevel ! audioconvert ! %s ! filesink name=sink"
437+ pipe %= (recordString, capsString, encodeString)
438
439 Globals.debug("Using pipeline: %s" % pipe)
440
441 recordingbin = gst.parse_bin_from_description(pipe, False)
442+
443+ filesink = recordingbin.get_by_name("sink")
444+ level = recordingbin.get_by_name("recordlevel")
445+
446+ filesink.set_property("location", event.file)
447+ level.set_property("interval", int(event.LEVEL_INTERVAL * gst.SECOND))
448+
449 #update the levels in real time
450 handle = self.bus.connect("message::element", event.recording_bus_level)
451
452@@ -605,15 +613,21 @@
453 if instr.inTrack == index:
454 event = instr.GetRecordingEvent()
455
456+ # TODO: get rid of string concatentation
457 encodeString = Globals.settings.recording["fileformat"]
458- pipe = "queue ! audioconvert ! level name=recordlevel interval=%d !" +\
459- "audioconvert ! %s ! filesink location=%s"
460- pipe %= (event.LEVEL_INTERVAL * gst.SECOND, encodeString, event.file.replace(" ", "\ "))
461+ pipe = "queue ! audioconvert ! level name=recordlevel ! audioconvert ! %s ! filesink name=sink"
462+ pipe %= encodeString
463
464 encodeBin = gst.parse_bin_from_description(pipe, True)
465 bin.add(encodeBin)
466 pad.link(encodeBin.get_pad("sink"))
467
468+ filesink = bin.get_by_name("sink")
469+ level = bin.get_by_name("recordlevel")
470+
471+ filesink.set_property("location", event.file)
472+ level.set_property("interval", int(event.LEVEL_INTERVAL * gst.SECOND))
473+
474 handle = self.bus.connect("message::element", event.recording_bus_level)
475
476 # since we are adding the encodebin to an already playing pipeline, sync up there states
477@@ -812,6 +826,8 @@
478 os.remove(path + "~")
479 else:
480 #if the saving doesn't fail, move it to the proper location
481+ if os.path.exists(path):
482+ os.remove(path)
483 os.rename(path + "~", path)
484
485 self.emit("undo")
486@@ -1306,10 +1322,12 @@
487 """
488 if not undoAction:
489 undoAction = self.NewAtomicUndoAction()
490-
491+
492+ uris = [PlatformUtils.pathname2url(filename) for filename in fileList]
493+
494 name, type, pixbuf, path = [x for x in Globals.getCachedInstruments() if x[1] == "audiofile"][0]
495 instr = self.AddInstrument(name, type, _undoAction_=undoAction)
496- instr.AddEventsFromList(0, fileList, copyFile, undoAction)
497+ instr.AddEventsFromList(0, uris, copyFile, undoAction)
498
499 #_____________________________________________________________________
500
501
502=== modified file 'Jokosher/ProjectManager.py'
503--- Jokosher/ProjectManager.py 2009-03-17 02:09:31 +0000
504+++ Jokosher/ProjectManager.py 2009-03-26 15:07:44 +0000
505@@ -14,6 +14,7 @@
506 import Project, Instrument, Event
507 import xml.dom.minidom as xml
508 import traceback
509+import PlatformUtils
510
511 def CreateNewProject(projecturi, name, author):
512 """
513@@ -33,6 +34,8 @@
514
515 (scheme, domain,folder, params, query, fragment) = urlparse.urlparse(projecturi, "file", False)
516
517+ folder = PlatformUtils.url2pathname(folder)
518+
519 if scheme != "file":
520 # raise "The URI scheme used is invalid." message
521 raise CreateProjectError(5)
522@@ -114,6 +117,8 @@
523 # raise "The URI scheme used is invalid." message
524 raise OpenProjectError(1, scheme)
525
526+ projectfile = PlatformUtils.url2pathname(projectfile)
527+
528 Globals.debug("Attempting to open:", projectfile)
529
530 if not os.path.exists(projectfile):
531
532=== modified file 'Jokosher/Utils.py'
533--- Jokosher/Utils.py 2009-03-12 15:26:43 +0000
534+++ Jokosher/Utils.py 2009-03-16 10:02:30 +0000
535@@ -16,8 +16,11 @@
536 import Globals
537
538 import gst
539-if gst.pygst_version >= (0, 10, 10):
540+try:
541 import gst.pbutils
542+ have_pbutils = True
543+except:
544+ have_pbutils = False
545
546 # the highest range in decibels there can be between any two levels
547 DECIBEL_RANGE = 80
548@@ -125,7 +128,7 @@
549 if not channelLevels:
550 return 0
551
552- negInf = float("-inf")
553+ negInf = -1E+5000
554 peaktotal = 0
555 for peak in channelLevels:
556 #if peak > 0.001:
557@@ -380,8 +383,8 @@
558 #_____________________________________________________________________
559
560 def HandleGstPbutilsMissingMessage(message, callback, x_window_id=0):
561- # pbutils was wrapped in 0.10.10
562- if gst.pygst_version < (0, 10, 10):
563+ # Not all platforms have pbutils
564+ if not have_pbutils:
565 return False
566
567 #self._installing_plugins = True
568
569=== modified file 'bin/jokosher'
570--- bin/jokosher 2009-03-17 02:09:31 +0000
571+++ bin/jokosher 2009-03-26 14:19:15 +0000
572@@ -11,9 +11,17 @@
573 # This script is also responsible for parsing comment line arguments.
574 #
575 #-------------------------------------------------------------------------------
576-import os, sys
577+import os, sys, platform
578
579-ENV_PATHS = {"JOKOSHER_DATA_PATH" : "/usr/share/jokosher/",
580+if platform.system() == "Windows":
581+ ENV_PATHS = {"JOKOSHER_DATA_PATH" : ".\\",
582+ "JOKOSHER_IMAGE_PATH" : ".\\pixmaps\\",
583+ "JOKOSHER_LOCALE_PATH" : ".\\locale\\",
584+ "JOKOSHER_HELP_PATH" : ".\\help\\",
585+ "GST_PLUGIN_PATH" : ".\\"
586+ }
587+else:
588+ ENV_PATHS = {"JOKOSHER_DATA_PATH" : "/usr/share/jokosher/",
589 "JOKOSHER_IMAGE_PATH" : "/usr/share/jokosher/pixmaps/",
590 "JOKOSHER_LOCALE_PATH" : "/usr/share/locale/",
591 "JOKOSHER_HELP_PATH" : "/usr/share/gnome/jokosher/"
592
593=== removed file 'dist/jokosher-0.9.tar.gz'
594Binary files dist/jokosher-0.9.tar.gz 2007-04-25 03:17:21 +0000 and dist/jokosher-0.9.tar.gz 1970-01-01 00:00:00 +0000 differ
595=== added file 'images/jokosher.ico'
596Binary files images/jokosher.ico 1970-01-01 00:00:00 +0000 and images/jokosher.ico 2008-12-18 13:48:58 +0000 differ
597=== modified file 'setup.py'
598--- setup.py 2009-03-17 02:09:31 +0000
599+++ setup.py 2009-03-26 15:07:44 +0000
600@@ -50,7 +50,7 @@
601 license='GNU GPL',
602 platforms='linux',
603 scripts=['bin/jokosher'],
604- packages=['Jokosher', 'Jokosher/elements', 'Jokosher/ui'],
605+ packages=['Jokosher', 'Jokosher/elements', 'Jokosher/ui', 'Jokosher/PlatformUtils'],
606 data_files=[
607 ('share/jokosher/', glob.glob("Jokosher/*.glade")),
608 ('share/jokosher/', ["Jokosher/jokosher-logo.png"]),
609
610=== added file 'setup_win32.py'
611--- setup_win32.py 1970-01-01 00:00:00 +0000
612+++ setup_win32.py 2009-03-26 15:07:44 +0000
613@@ -0,0 +1,41 @@
614+#!/usr/bin/env python
615+
616+from distutils.core import setup
617+from subprocess import *
618+import os
619+import glob
620+import py2exe
621+
622+dist = setup(name='jokosher',
623+ version='0.11.1',
624+ author='Jokosher Project',
625+ author_email='jokosher-devel@gnome.org',
626+ maintainer='Michael Sheldon',
627+ maintainer_email='mike@mikeasoft.com',
628+ description='Multi-track non-linear audio editing.',
629+ long_description='Jokosher is a simple yet powerful multi-track studio. With it you can create and record music, podcasts and more, all from an integrated simple environment.',
630+ url='http://www.jokosher.org/',
631+ download_url='http://www.jokosher.org/download',
632+ license='GNU GPL',
633+ packages=['Jokosher', 'Jokosher/elements', 'Jokosher/ui', 'Jokosher/PlatformUtils'],
634+ windows = [
635+ {
636+ 'script' : 'bin/jokosher',
637+ 'icon_resources' : [(1, 'images/jokosher.ico')]
638+ }
639+ ],
640+ options = {
641+ 'py2exe': {
642+ 'packages' : 'encodings, Jokosher, Jokosher.elements, Jokosher.ui',
643+ 'includes' : 'cairo, gtk, gtk.glade, gobject, pango, pangocairo, atk, gst, pygst, xdg, Queue, xml.etree.ElementTree, gtk.keysyms, code, keyword, re'
644+ }
645+ },
646+ data_files=[
647+ "Jokosher\Jokosher.glade",
648+ "Jokosher\jokosher-logo.png",
649+ #glob.glob("Instruments\*.instr"),
650+ #glob.glob('Instruments\images\*.png'),
651+ #glob.glob("extensions\*.py") + glob.glob("extensions\*.egg"),
652+ ]
653+)
654+
655
656=== added file 'windows_installer.iss'
657--- windows_installer.iss 1970-01-01 00:00:00 +0000
658+++ windows_installer.iss 2009-03-26 14:19:15 +0000
659@@ -0,0 +1,13 @@
660+[Setup]
661+AppName =Jokosher
662+AppVerName=Jokosher version 0.11.1
663+DefaultDirName={pf}\Jokosher
664+DefaultGroupName=Jokosher
665+Compression=bzip/9
666+
667+[Files]
668+Source: dist/*; DestDir: {app}; Flags: recursesubdirs createallsubdirs
669+
670+[Icons]
671+Name: {group}\Jokosher; Filename: {app}\jokosher.exe; WorkingDir: {app}
672+Name: {group}\Uninstall Jokosher; Filename: {uninstallexe}

Subscribers

People subscribed via source and target branches