diff options
| author | Carl Hetherington <cth@carlh.net> | 2012-02-07 12:12:01 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2012-02-07 12:12:01 +0000 |
| commit | 9ce56f6a2bdd076843a3b56d1cc27f3496b8528f (patch) | |
| tree | f055ba1a871846d7aa2173db51a023924feaf82b /hacks/python-playback/dvdomatic | |
| parent | b072d4a885bf02f642650a1717c69252861cc5d0 (diff) | |
Move some hacks into the git repo.
Diffstat (limited to 'hacks/python-playback/dvdomatic')
| -rwxr-xr-x | hacks/python-playback/dvdomatic | 209 |
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() |
