public
Description: Subtitle downloader for http://www.subdivx.com/
Homepage: http://wiki.github.com/rha7dotcom/subdivx
Clone URL: git://github.com/rha7dotcom/subdivx.git
subdivx / subdivxgui.py
100644 136 lines (111 sloc) 5.21 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#!/usr/bin/env python
#
# This file is part of SubDivX.
#
# SubDivX is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License.
#
# SubDivX is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with SubDivX, if not, see <http://www.gnu.org/licenses/>.
#
# See the LICENSE file.
#
 
import os
import gtk
import urllib
import subdivxclient
 
class SubDivXGUI:
  def __init__(self):
    self.subdivxclient = subdivxclient.SubDivXClient()
    self.builder = gtk.Builder()
    self.builder.add_from_file('/var/lib/subdivx/subdivx.glade')
    self.builder.connect_signals({
      'on_button_quit_clicked' : self.app_quit,
      'on_window_subdivx_destroy' : self.app_quit,
      'on_button_search_clicked' : self.on_button_search_clicked,
      'on_button_next_clicked' : self.on_button_next_clicked,
      'on_button_clear_clicked' : self.on_button_clear_clicked,
      'on_button_results_fetch_clicked': self.on_button_results_fetch_clicked
    })
    
    self.win = self.builder.get_object('window_subdivx')
    self.win.maximize()
    
    self.entry_search = self.builder.get_object("entry_search")
 
    self.treeview_results = self.builder.get_object("treeview_results")
 
    column = gtk.TreeViewColumn('Name', gtk.CellRendererText(), text = 1)
    column.expand = False
    self.treeview_results.append_column(column)
 
    column = gtk.TreeViewColumn('CDs', gtk.CellRendererText(), text = 3)
    column.expand = False
    self.treeview_results.append_column(column)
 
    column = gtk.TreeViewColumn('Description', gtk.CellRendererText(), text = 2)
    column.expand = False
    self.treeview_results.append_column(column)
 
    self.treeview_results.set_tooltip_column(2)
 
    self.liststore_results = self.builder.get_object("liststore_results")
    
    self.button_next = self.builder.get_object("button_next")
    self.button_next.set_sensitive(False)
    self.button_clear = self.builder.get_object("button_clear")
    self.button_clear.set_sensitive(False)
    self.button_search = self.builder.get_object("button_search")
    self.button_search.set_sensitive(True)
 
    self.label_results = self.builder.get_object("label_results")
    
    self.page = 1
    
  def run(self):
    self.win.show()
    gtk.main()
 
  def app_quit(self, widget):
    gtk.main_quit()
 
  def on_button_search_clicked(self, widget):
    if len(self.entry_search.get_text().strip()) > 0:
      self.entry_search.set_sensitive(False)
      self.button_search.set_sensitive(False)
      self.button_next.set_sensitive(True)
      self.button_clear.set_sensitive(True)
      self.label_results.set_text("Results Page %s" % self.page)
      self.liststore_results.clear()
      results = self.subdivxclient.search(self.entry_search.get_text().strip(), self.page).results
      for i in range(len(results)):
        result = results[i]
        iter = self.liststore_results.append()
        self.liststore_results.set_value(iter, 0, i)
        self.liststore_results.set_value(iter, 1, results[i]['title'])
        self.liststore_results.set_value(iter, 2, results[i]['description'])
        self.liststore_results.set_value(iter, 3, int(results[i]['cds']))
        self.liststore_results.set_value(iter, 4, results[i]['link'])
 
      if len(results) < 20:
        self.button_next.set_sensitive(False)
    else:
      dialog = gtk.MessageDialog(self.win, flags=gtk.DIALOG_DESTROY_WITH_PARENT, type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_CLOSE)
      dialog.set_title("Error Searching")
      dialog.set_markup("Search Was Not Performed")
      dialog.format_secondary_text("You didn't specify any search terms.\nPlease try again.")
      dialog.run()
      dialog.destroy()
 
  def on_button_next_clicked(self, widget):
    self.page += 1
    self.on_button_search_clicked(widget)
  
  def on_button_clear_clicked(self, widget):
    self.page = 1
    self.liststore_results.clear()
    self.entry_search.set_sensitive(True)
    self.button_search.set_sensitive(True)
    self.button_next.set_sensitive(False)
    self.button_clear.set_sensitive(False)
    self.label_results.set_text("Results")
  
  def on_button_results_fetch_clicked(self, widget):
    sel_model, sel_iter = self.treeview_results.get_selection().get_selected()
    if sel_iter:
      os.system("gnome-open %s" % self.subdivxclient.fetch(sel_model.get_value(sel_iter, 0)))
    else:
      dialog = gtk.MessageDialog(self.win, flags=gtk.DIALOG_DESTROY_WITH_PARENT, type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_CLOSE)
      dialog.set_title("Error Downloading")
      dialog.set_markup("No Result Selected")
      dialog.format_secondary_text("You have to select a result to download.\nPlease try again.")
      dialog.run()
      dialog.destroy()