summaryrefslogtreecommitdiff
path: root/hacks/python-playback/dvdomatic
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2012-02-07 12:12:01 +0000
committerCarl Hetherington <cth@carlh.net>2012-02-07 12:12:01 +0000
commit9ce56f6a2bdd076843a3b56d1cc27f3496b8528f (patch)
treef055ba1a871846d7aa2173db51a023924feaf82b /hacks/python-playback/dvdomatic
parentb072d4a885bf02f642650a1717c69252861cc5d0 (diff)
Move some hacks into the git repo.
Diffstat (limited to 'hacks/python-playback/dvdomatic')
-rwxr-xr-xhacks/python-playback/dvdomatic209
1 files changed, 209 insertions, 0 deletions
diff --git a/hacks/python-playback/dvdomatic b/hacks/python-playback/dvdomatic
new file mode 100755
index 000000000..ce405f37e
--- /dev/null
+++ b/hacks/python-playback/dvdomatic
@@ -0,0 +1,209 @@
+#!/usr/bin/python
+
+import os
+import operator
+import traceback
+import pygtk
+pygtk.require('2.0')
+import gtk
+import glib
+import gobject
+import film
+import film_view
+import player
+import screens
+import thumbs
+import ratio
+import util
+
+FILM_DIRECTORY = '/home/carl/DVD'
+
+current_player = None
+films = []
+inhibit_selection_update = False
+
+def find_films():
+ global films
+ films = []
+ for root, dirs, files in os.walk(FILM_DIRECTORY):
+ for name in files:
+ if os.path.basename(name) == 'info':
+ films.append(film.Film(os.path.join(root, os.path.dirname(name))))
+
+ films.sort(key = operator.attrgetter('name'))
+
+def update_film_store():
+ global film_store
+ global films
+ global inhibit_selection_update
+ inhibit_selection_update = True
+ film_store.clear()
+ for f in films:
+ film_store.append([f.name])
+ inhibit_selection_update = False
+
+def update_screen_store(screen_store, screens):
+ screen_store.clear()
+ for s in screens.screens:
+ screen_store.append([s.name])
+
+def create_film_tree_view(film_store):
+ view = gtk.TreeView(film_store)
+ column = gtk.TreeViewColumn()
+ view.append_column(column)
+ cell = gtk.CellRendererText()
+ column.pack_start(cell)
+ column.add_attribute(cell, 'text', 0)
+ view.get_selection().set_mode(gtk.SELECTION_SINGLE)
+ return view
+
+def create_screen_view(screen_store):
+ view = gtk.TreeView(screen_store)
+ column = gtk.TreeViewColumn()
+ view.append_column(column)
+ cell = gtk.CellRendererText()
+ column.pack_start(cell)
+ column.add_attribute(cell, 'text', 0)
+ view.get_selection().set_mode(gtk.SELECTION_SINGLE)
+ return view
+
+def get_selected_film():
+ (model, iter) = film_tree_view.get_selection().get_selected()
+
+ for f in films:
+ if f.name == model.get(iter, 0)[0]:
+ return f
+
+ return None
+
+# @return Selected screen name
+def get_selected_screen():
+ (model, iter) = screen_view.get_selection().get_selected()
+ return model.get(iter, 0)[0]
+
+def film_selected(selection):
+ if inhibit_selection_update:
+ return
+
+ film_view.set(get_selected_film())
+ check_for_playability()
+
+def screen_selected(selection):
+ check_for_playability()
+
+def check_for_playability():
+ f = get_selected_film()
+ if screens.get_format(get_selected_screen(), f.ratio) is not None:
+ play_button.set_label("Play")
+ play_button.set_sensitive(True)
+ else:
+ play_button.set_label("Cannot play: no setting for %s on screen %s" % (ratio.find(f.ratio).name(), get_selected_screen()))
+ play_button.set_sensitive(False)
+
+def update_status(s):
+ global current_player
+ if current_player is None:
+ s.set_text("Not playing")
+ return True
+
+ position = current_player.time_pos
+ if position is None:
+ return True
+ position_hms = util.s_to_hms(position)
+
+ length = current_player.length
+ if length is None:
+ return True
+
+ remaining = length - position
+ remaining_hms = util.s_to_hms(remaining)
+ s.set_text("Playing: %d:%02d:%02d, %d:%02d:%02d remaining" % (position_hms[0], position_hms[1], position_hms[2], remaining_hms[0], remaining_hms[1], remaining_hms[2]))
+ return True
+
+def play_clicked(b):
+ global current_player
+ f = get_selected_film()
+ current_player = player.get_player(f, screens.get_format(get_selected_screen(), f.ratio))
+ print current_player.args
+
+def stop_clicked(b):
+ global current_player
+ if current_player is not None:
+ current_player.stop()
+ current_player = None
+
+def add_film_clicked(b):
+ global films
+ c = gtk.FileChooserDialog("New Film", main_window, gtk.FILE_CHOOSER_ACTION_CREATE_FOLDER, (("Add", gtk.RESPONSE_OK)))
+ c.set_current_folder(FILM_DIRECTORY)
+ if c.run() == gtk.RESPONSE_OK:
+ f = film.Film()
+ f.data = c.get_filename()
+ f.name = os.path.basename(c.get_filename())
+ f.write()
+ find_films()
+ update_film_store()
+ c.hide()
+
+ for i in range(0, len(films)):
+ if films[i].name == f.name:
+ film_tree_view.get_selection().select_path((i, ))
+
+main_window = gtk.Window(gtk.WINDOW_TOPLEVEL)
+main_window.set_title("DVD-o-matic")
+main_window.maximize()
+
+main_hbox = gtk.HBox()
+main_hbox.set_spacing(12)
+main_hbox.set_border_width(12)
+main_window.add(main_hbox)
+
+find_films()
+film_view = film_view.FilmView(main_window)
+screens = screens.Screens("screens")
+
+left_vbox = gtk.VBox()
+left_vbox.set_spacing(12)
+main_hbox.pack_start(left_vbox, False, False)
+right_vbox = gtk.VBox()
+right_vbox.set_spacing(12)
+main_hbox.pack_start(right_vbox)
+
+film_store = gtk.ListStore(gobject.TYPE_STRING)
+update_film_store()
+
+film_tree_view = create_film_tree_view(film_store)
+left_vbox.pack_start(film_tree_view, True, True)
+film_tree_view.get_selection().select_path((0, ))
+film_tree_view.get_selection().connect("changed", film_selected)
+
+add_film_button = gtk.Button(stock = gtk.STOCK_ADD)
+left_vbox.pack_start(add_film_button, False, False)
+add_film_button.connect("clicked", add_film_clicked)
+
+screen_store = gtk.ListStore(gobject.TYPE_STRING)
+update_screen_store(screen_store, screens)
+
+screen_view = create_screen_view(screen_store)
+left_vbox.pack_start(screen_view, False, False)
+screen_view.get_selection().select_path((0, ))
+screen_view.get_selection().connect("changed", screen_selected)
+
+right_vbox.pack_start(film_view, False, False)
+film_view.set(films[0])
+
+play_button = gtk.Button("Play")
+right_vbox.pack_start(play_button)
+play_button.connect("clicked", play_clicked)
+
+stop_button = gtk.Button("Stop")
+right_vbox.pack_start(stop_button)
+stop_button.connect("clicked", stop_clicked)
+
+status = gtk.Label()
+right_vbox.pack_start(status, False, False)
+glib.timeout_add_seconds(1, update_status, status)
+
+check_for_playability()
+main_window.show_all()
+gtk.main()