Ticket #3681: Port-Gtk3-backup.diff
File Port-Gtk3-backup.diff, 49.7 KB (added by humitos, 11 years ago) |
---|
-
GetIABooksActivity.py
diff --git a/GetIABooksActivity.py b/GetIABooksActivity.py index 0a06069..7fc0827 100644
a b 19 19 import os 20 20 import logging 21 21 import time 22 import gtk 23 24 OLD_TOOLBAR = False 25 try: 26 from sugar.graphics.toolbarbox import ToolbarBox 27 from sugar.activity.widgets import StopButton 28 except ImportError: 29 OLD_TOOLBAR = True 30 31 from sugar.graphics import style 32 from sugar.graphics.toolbutton import ToolButton 33 from sugar.graphics.toggletoolbutton import ToggleToolButton 34 from sugar.graphics.toolcombobox import ToolComboBox 35 from sugar.graphics.combobox import ComboBox 36 from sugar.graphics import iconentry 37 from sugar import profile 38 from sugar.activity import activity 39 from sugar.activity.widgets import ToolbarButton 40 from sugar.bundle.activitybundle import ActivityBundle 41 from sugar.datastore import datastore 42 from sugar.graphics.alert import NotifyAlert 43 from sugar.graphics.alert import Alert 44 from sugar.graphics.icon import Icon 22 23 from gi.repository import Gtk 24 from gi.repository import Gdk 25 from gi.repository import GdkPixbuf 26 from gi.repository import GObject 27 from gi.repository import Pango 28 29 30 from sugar3.graphics.toolbarbox import ToolbarBox 31 from sugar3.activity.widgets import StopButton 32 from sugar3.graphics import style 33 from sugar3.graphics.toolbutton import ToolButton 34 from sugar3.graphics.toggletoolbutton import ToggleToolButton 35 from sugar3.graphics.toolcombobox import ToolComboBox 36 from sugar3.graphics.combobox import ComboBox 37 from sugar3.graphics import iconentry 38 from sugar3 import profile 39 from sugar3.activity import activity 40 from sugar3.activity.widgets import ToolbarButton 41 from sugar3.bundle.activitybundle import ActivityBundle 42 from sugar3.datastore import datastore 43 from sugar3.graphics.alert import NotifyAlert 44 from sugar3.graphics.alert import Alert 45 from sugar3.graphics.icon import Icon 45 46 from gettext import gettext as _ 47 46 48 import dbus 47 import gobject48 49 import ConfigParser 49 50 import base64 50 51 … … class GetIABooksActivity(activity.Activity): 86 87 else: 87 88 self._read_configuration() 88 89 89 if OLD_TOOLBAR: 90 toolbox = activity.ActivityToolbox(self) 91 activity_toolbar = toolbox.get_activity_toolbar() 92 93 self.set_toolbox(toolbox) 94 self._books_toolbar = gtk.Toolbar() 95 self._add_search_controls(self._books_toolbar) 96 self.toolbox.add_toolbar(_('Books'), self._books_toolbar) 97 self._books_toolbar.show() 98 toolbox.show() 99 toolbox.set_current_toolbar(1) 100 else: 101 toolbar_box = ToolbarBox() 102 activity_button = ToolButton() 103 color = profile.get_color() 104 bundle = ActivityBundle(activity.get_bundle_path()) 105 icon = Icon(file=bundle.get_icon(), xo_color=color) 106 activity_button.set_icon_widget(icon) 107 activity_button.show() 90 toolbar_box = ToolbarBox() 91 activity_button = ToolButton() 92 color = profile.get_color() 93 bundle = ActivityBundle(activity.get_bundle_path()) 94 icon = Icon(file=bundle.get_icon(), xo_color=color) 95 activity_button.set_icon_widget(icon) 96 activity_button.show() 108 97 109 110 98 toolbar_box.toolbar.insert(activity_button, 0) 99 self._add_search_controls(toolbar_box.toolbar) 111 100 112 separator = gtk.SeparatorToolItem()113 114 115 101 separator = Gtk.SeparatorToolItem() 102 separator.props.draw = False 103 separator.set_expand(True) 104 toolbar_box.toolbar.insert(separator, -1) 116 105 117 106 toolbar_box.toolbar.insert(StopButton(self), -1) 118 107 119 120 121 108 self.set_toolbar_box(toolbar_box) 109 toolbar_box.show_all() 110 self._books_toolbar = toolbar_box.toolbar 122 111 123 112 self._create_controls() 124 113 … … class GetIABooksActivity(activity.Activity): 133 122 logging.warning("Error setting OHM inhibit: %s", e) 134 123 self.ohm_keystore = None 135 124 125 136 126 def powerd_running(self): 137 127 self.using_powerd = os.access(POWERD_INHIBIT_DIR, os.W_OK) 138 128 logging.error("using_powerd: %d", self.using_powerd) … … class GetIABooksActivity(activity.Activity): 236 226 logging.error('catalogs %s', self.catalogs) 237 227 238 228 def _add_search_controls(self, toolbar): 239 book_search_item = gtk.ToolItem()229 book_search_item = Gtk.ToolItem() 240 230 toolbar.search_entry = iconentry.IconEntry() 241 231 toolbar.search_entry.set_icon_from_name(iconentry.ICON_ENTRY_PRIMARY, 242 232 'system-search') 243 233 toolbar.search_entry.add_clear_button() 244 234 toolbar.search_entry.connect('activate', 245 235 self.__search_entry_activate_cb) 246 width = int( gtk.gdk.screen_width() / 4)236 width = int(Gdk.Screen.width() / 4) 247 237 toolbar.search_entry.set_size_request(width, -1) 248 238 book_search_item.add(toolbar.search_entry) 249 239 toolbar.search_entry.show() … … class GetIABooksActivity(activity.Activity): 268 258 if len(self.languages) > 0: 269 259 toolbar.config_toolbarbutton = ToolbarButton() 270 260 toolbar.config_toolbarbutton.props.icon_name = 'preferences-system' 271 toolbar.config_toolbarbox = gtk.Toolbar()261 toolbar.config_toolbarbox = Gtk.Toolbar() 272 262 toolbar.config_toolbarbutton.props.page = toolbar.config_toolbarbox 273 263 toolbar.language_combo = ComboBox() 274 264 toolbar.language_combo.props.sensitive = True … … class GetIABooksActivity(activity.Activity): 321 311 self.queryresults = opds.RemoteQueryResult(catalog_config, 322 312 '', query_language) 323 313 self.show_message(_('Performing lookup, please wait...')) 324 self. window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))314 self.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.WATCH)) 325 315 326 316 self.queryresults.connect('updated', self.__query_updated_cb) 327 317 … … class GetIABooksActivity(activity.Activity): 455 445 self.tree_scroller.show_all() 456 446 self.separa.show() 457 447 else: 458 self.tree_scroller.hide_all() 448 # README: hide_all() doesn't exist anymore 449 # http://developer.gnome.org/gtk3/3.5/GtkWidget.html#gtk-widget-hide 450 self.tree_scroller.hide() 459 451 self.separa.hide() 460 452 461 453 def _create_controls(self): 462 454 self._download_content_length = 0 463 455 self._download_content_type = None 464 self.progressbox = gtk.HBox(spacing=20)465 self.progressbar = gtk.ProgressBar()466 self.progressbar .set_orientation(gtk.PROGRESS_LEFT_TO_RIGHT)456 self.progressbox = Gtk.Box(spacing=20, 457 orientation=Gtk.Orientation.HORIZONTAL) 458 self.progressbar = Gtk.ProgressBar() 467 459 self.progressbar.set_fraction(0.0) 468 self.progressbox.pack_start(self.progressbar, expand=True, 469 fill=True)470 self.cancel_btn = gtk.Button(stock=gtk.STOCK_CANCEL)460 self.progressbox.pack_start(self.progressbar, expand=True, fill=True, 461 padding=0) 462 self.cancel_btn = Gtk.Button(stock=Gtk.STOCK_CANCEL) 471 463 self.cancel_btn.connect('clicked', self.__cancel_btn_clicked_cb) 472 464 self.progressbox.pack_start(self.cancel_btn, expand=False, 473 fill=False)465 fill=False, padding=0) 474 466 475 self.msg_label = gtk.Label()467 self.msg_label = Gtk.Label() 476 468 477 self.list_box = gtk.HBox()469 self.list_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) 478 470 479 471 # Catalogs treeview 480 self.catalog_listview = gtk.TreeView()472 self.catalog_listview = Gtk.TreeView() 481 473 self.catalog_listview.headers_clickble = True 482 474 self.catalog_listview.hover_expand = True 483 475 self.catalog_listview.rules_hint = True 484 476 self.catalog_listview.connect('cursor-changed', self.move_down_catalog) 485 477 self.catalog_listview.set_enable_search(False) 486 self.treemodel = gtk.ListStore(gobject.TYPE_STRING) 487 s orter = gtk.TreeModelSort(self.treemodel)488 s orter.set_sort_column_id(0, gtk.SORT_ASCENDING)489 s orter.set_sort_func(0, self._sort_logfile)490 self.catalog_listview.set_model(sorter) 491 renderer = gtk.CellRendererText()492 renderer.set_property('wrap-mode', gtk.WRAP_WORD)493 self.treecol = gtk.TreeViewColumn(_('Catalogs'), renderer, text=0)478 479 self.treemodel = Gtk.ListStore(GObject.TYPE_STRING) 480 self.treemodel.set_sort_column_id(0, Gtk.SortType.ASCENDING) 481 self.catalog_listview.set_model(self.treemodel) 482 483 renderer = Gtk.CellRendererText() 484 renderer.set_property('wrap-mode', Pango.WrapMode.WORD) 485 self.treecol = Gtk.TreeViewColumn(_('Catalogs'), renderer, text=0) 494 486 self.treecol.set_property('clickable', True) 495 487 self.treecol.connect('clicked', self.move_up_catalog) 496 488 self.catalog_listview.append_column(self.treecol) … … class GetIABooksActivity(activity.Activity): 508 500 self.treemodel.clear() 509 501 for p in self.categories: 510 502 self.path_iter[p['text']] = self.treemodel.append([p['text']]) 511 self.tree_scroller = gtk.ScrolledWindow(hadjustment=None,512 vadjustment=None)513 self.tree_scroller.set_policy( gtk.POLICY_NEVER,514 gtk.POLICY_AUTOMATIC)503 self.tree_scroller = Gtk.ScrolledWindow(hadjustment=None, 504 vadjustment=None) 505 self.tree_scroller.set_policy(Gtk.PolicyType.NEVER, 506 Gtk.PolicyType.AUTOMATIC) 515 507 self.tree_scroller.add(self.catalog_listview) 516 self.list_box.pack_start(self.tree_scroller, expand=False, fill=False) 517 self.separa = gtk.VSeparator() 518 self.list_box.pack_start(self.separa, expand=False, fill=False) 508 self.list_box.pack_start(self.tree_scroller, expand=False, 509 fill=False, padding=0) 510 self.separa = Gtk.VSeparator() 511 self.list_box.pack_start(self.separa, expand=False, 512 fill=False, padding=0) 519 513 520 514 # books listview 521 515 self.listview = ListView(self._lang_code_handler) 522 516 self.listview.connect('selection-changed', self.selection_cb) 523 517 self.listview.set_enable_search(False) 524 518 525 self.list_scroller = gtk.ScrolledWindow(hadjustment=None,519 self.list_scroller = Gtk.ScrolledWindow(hadjustment=None, 526 520 vadjustment=None) 527 self.list_scroller.set_policy( gtk.POLICY_AUTOMATIC,528 gtk.POLICY_AUTOMATIC)521 self.list_scroller.set_policy(Gtk.PolicyType.AUTOMATIC, 522 Gtk.PolicyType.AUTOMATIC) 529 523 vadjustment = self.list_scroller.get_vadjustment() 530 524 vadjustment.connect('value-changed', 531 525 self.__vadjustment_value_changed_cb) 532 526 self.list_scroller.add(self.listview) 533 self.list_box.pack_start(self.list_scroller, expand=True, fill=True) 534 535 self.scrolled = gtk.ScrolledWindow() 536 self.scrolled.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) 537 self.scrolled.props.shadow_type = gtk.SHADOW_NONE 538 self.textview = gtk.TextView() 527 self.list_box.pack_start(self.list_scroller, expand=True, 528 fill=True, padding=0) 529 530 self.scrolled = Gtk.ScrolledWindow() 531 self.scrolled.set_policy(Gtk.PolicyType.NEVER, 532 Gtk.PolicyType.AUTOMATIC) 533 self.scrolled.props.shadow_type = Gtk.ShadowType.NONE 534 self.textview = Gtk.TextView() 539 535 self.textview.set_editable(False) 540 536 self.textview.set_cursor_visible(False) 541 self.textview.set_wrap_mode( gtk.WRAP_WORD)542 self.textview.set_justification( gtk.JUSTIFY_LEFT)537 self.textview.set_wrap_mode(Gtk.WrapMode.WORD) 538 self.textview.set_justification(Gtk.Justification.LEFT) 543 539 self.textview.set_left_margin(20) 544 540 self.textview.set_right_margin(20) 545 541 self.scrolled.add(self.textview) … … class GetIABooksActivity(activity.Activity): 547 543 self.separa.hide() 548 544 self.tree_scroller.hide() 549 545 550 vbox_download = gtk.VBox()546 vbox_download = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) 551 547 552 hbox_format = gtk.HBox()553 format_label = gtk.Label(_('Format:'))548 hbox_format = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) 549 format_label = Gtk.Label(label=_('Format:')) 554 550 self.format_combo = ComboBox() 555 551 for key in _MIMETYPES.keys(): 556 552 self.format_combo.append_item(_MIMETYPES[key], key) … … class GetIABooksActivity(activity.Activity): 563 559 hbox_format.pack_start(self.format_combo, False, False, 10) 564 560 vbox_download.pack_start(hbox_format, False, False, 10) 565 561 566 self._download = gtk.Button(_('Get Book'))562 self._download = Gtk.Button(_('Get Book')) 567 563 self._download.props.sensitive = False 568 564 self._download.connect('clicked', self.__get_book_cb) 569 565 vbox_download.pack_start(self._download, False, False, 10) 570 566 571 bottom_hbox = gtk.HBox()567 bottom_hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) 572 568 573 569 if self.show_images: 574 570 self.__image_downloader = None 575 self.image = gtk.Image()571 self.image = Gtk.Image() 576 572 self.add_default_image() 577 573 bottom_hbox.pack_start(self.image, False, False, 10) 578 574 bottom_hbox.pack_start(self.scrolled, True, True, 10) 579 575 bottom_hbox.pack_start(vbox_download, False, False, 10) 580 576 bottom_hbox.show_all() 581 577 582 vbox = gtk.VBox()578 vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) 583 579 vbox.pack_start(self.msg_label, False, False, 10) 584 580 vbox.pack_start(self.progressbox, False, False, 10) 585 581 vbox.pack_start(self.list_box, True, True, 0) … … class GetIABooksActivity(activity.Activity): 596 592 if len(self.catalogs) > 0: 597 593 self.bt_catalogs.set_active(True) 598 594 599 600 595 def can_close(self): 601 596 self._lang_code_handler.close() 602 597 if self.queryresults is not None: … … class GetIABooksActivity(activity.Activity): 606 601 607 602 def selection_cb(self, widget): 608 603 # Testing... 604 logging.debug('FUNCTION: selection_cb') 609 605 selected_book = self.listview.get_selected_book() 606 logging.debug('SELECTED_BOOK: %s', selected_book) 610 607 if self.source == 'local_books': 611 608 if selected_book: 612 609 self.download_url = '' … … class GetIABooksActivity(activity.Activity): 632 629 self.msg_label.hide() 633 630 634 631 def show_book_data(self, load_image=True): 632 logging.debug('FUNCTION: show_book_data') 635 633 self.selected_title = self.selected_book.get_title() 636 634 book_data = _('Title:\t\t') + self.selected_title + '\n' 637 635 self.selected_author = self.selected_book.get_author() … … class GetIABooksActivity(activity.Activity): 679 677 680 678 def get_pixbuf_from_buffer(self, image_buffer): 681 679 """Buffer To Pixbuf""" 682 pixbuf_loader = gtk.gdk.PixbufLoader()680 pixbuf_loader = GdkPixbuf.PixbufLoader() 683 681 pixbuf_loader.write(image_buffer) 684 682 pixbuf_loader.close() 685 683 pixbuf = pixbuf_loader.get_pixbuf() … … class GetIABooksActivity(activity.Activity): 718 716 self.add_image(file_path) 719 717 720 718 def add_image(self, file_path): 721 pixbuf = gtk.gdk.pixbuf_new_from_file(file_path)719 pixbuf = GdkPixbuf.Pixbuf.new_from_file(file_path) 722 720 self.add_image_buffer(pixbuf) 723 721 724 722 def add_image_buffer(self, pixbuf): 725 image_height = int( gtk.gdk.screen_height() / 4)723 image_height = int(Gdk.Screen.height() / 4) 726 724 image_width = image_height / 3 * 2 727 725 width, height = pixbuf.get_width(), pixbuf.get_height() 728 726 scale = 1 … … class GetIABooksActivity(activity.Activity): 731 729 scale_y = image_height / float(height) 732 730 scale = min(scale_x, scale_y) 733 731 734 pixbuf2 = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, \ 735 pixbuf.get_has_alpha(), \ 736 pixbuf.get_bits_per_sample(), \ 737 image_width, image_height) 738 pixbuf2.fill(style.COLOR_PANEL_GREY.get_int()) 732 pixbuf2 = GdkPixbuf.Pixbuf() 733 # GdkPixbuf.Colorspace.RGB, 734 # pixbuf.get_has_alpha(), 735 # pixbuf.get_bits_per_sample(), 736 # image_width, image_height 737 738 # import epdb; epdb.set_trace() 739 740 # FIXME: here is a "segmentation fault" 741 # [humitos@michifus sugar-toolkit-gtk3]$ git grep \.fill\( 742 # src/sugar3/graphics/colorbutton.py: pixbuf.fill(red << 24 + green << 16 + blue << 8 + 0xff) 743 # pixbuf2.fill(style.COLOR_PANEL_GREY.get_int()) 739 744 740 745 margin_x = int((image_width - (width * scale)) / 2) 741 746 margin_y = int((image_height - (height * scale)) / 2) 742 747 743 pixbuf.scale(pixbuf2, margin_x, margin_y, \744 image_width - (margin_x * 2), \745 image_height - (margin_y * 2), \746 margin_x, margin_y, scale, scale, \747 gtk.gdk.INTERP_BILINEAR)748 # pixbuf.scale(pixbuf2, margin_x, margin_y, \ 749 # image_width - (margin_x * 2), \ 750 # image_height - (margin_y * 2), \ 751 # margin_x, margin_y, scale, scale, \ 752 # GdkPixbuf.InterpType.BILINEAR) 748 753 749 754 self.image.set_from_pixbuf(pixbuf2) 750 755 … … class GetIABooksActivity(activity.Activity): 793 798 self.source, search_text) 794 799 795 800 self.show_message(_('Performing lookup, please wait...')) 796 self. window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))801 self.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.WATCH)) 797 802 self.queryresults.connect('updated', self.__query_updated_cb) 798 803 799 804 def __query_updated_cb(self, query, midway): … … class GetIABooksActivity(activity.Activity): 818 823 if only_english: 819 824 self.show_message( 820 825 _('Sorry, we only found english books.')) 821 self. window.set_cursor(None)826 self.get_window().set_cursor(None) 822 827 self._allow_suspend() 823 828 824 829 def catalogs_updated(self, query, midway): … … class GetIABooksActivity(activity.Activity): 919 924 def get_book(self): 920 925 self.enable_button(False) 921 926 self.progressbox.show_all() 922 gobject.idle_add(self.download_book, self.download_url)927 GObject.idle_add(self.download_book, self.download_url) 923 928 924 929 def download_book(self, url): 925 930 self._inhibit_suspend() … … class GetIABooksActivity(activity.Activity): 960 965 bytes_downloaded) 961 966 total = self._download_content_length 962 967 self.set_downloaded_bytes(bytes_downloaded, total) 963 while gtk.events_pending():964 gtk.main_iteration()968 while Gtk.events_pending(): 969 Gtk.main_iteration() 965 970 966 971 def _get_book_error_cb(self, getter, err): 967 972 self.listview.props.sensitive = True … … class GetIABooksActivity(activity.Activity): 1017 1022 textbuffer = self.textview.get_buffer() 1018 1023 journal_entry.metadata['description'] = \ 1019 1024 textbuffer.get_text(textbuffer.get_start_iter(), 1020 textbuffer.get_end_iter())1025 textbuffer.get_end_iter(), True) 1021 1026 if self.exist_cover_image: 1022 1027 image_buffer = self._get_preview_image_buffer() 1023 1028 journal_entry.metadata['preview'] = dbus.ByteArray(image_buffer) … … class GetIABooksActivity(activity.Activity): 1046 1051 _stop_alert.props.title = title 1047 1052 _stop_alert.props.msg = msg 1048 1053 open_icon = Icon(icon_name='zoom-activity') 1049 _stop_alert.add_button( gtk.RESPONSE_APPLY,1054 _stop_alert.add_button(Gtk.ResponseType.APPLY, 1050 1055 _('Show in Journal'), open_icon) 1051 1056 open_icon.show() 1052 1057 ok_icon = Icon(icon_name='dialog-ok') 1053 _stop_alert.add_button( gtk.RESPONSE_OK, _('Ok'), ok_icon)1058 _stop_alert.add_button(Gtk.ResponseType.OK, _('Ok'), ok_icon) 1054 1059 ok_icon.show() 1055 1060 # Remove other alerts 1056 1061 for alert in self._alerts: … … class GetIABooksActivity(activity.Activity): 1061 1066 _stop_alert.show() 1062 1067 1063 1068 def __stop_response_cb(self, alert, response_id): 1064 if response_id is gtk.RESPONSE_APPLY:1069 if response_id is Gtk.ResponseType.APPLY: 1065 1070 activity.show_object_in_journal(self._object_id) 1066 1071 self.remove_alert(alert) 1067 1072 … … class GetIABooksActivity(activity.Activity): 1077 1082 scale_y = preview_height / float(height) 1078 1083 scale = min(scale_x, scale_y) 1079 1084 1080 pixbuf2 = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, \1085 pixbuf2 = GdkPixbuf.Pixbuf(GdkPixbuf.Colorspace.RGB, \ 1081 1086 pixbuf.get_has_alpha(), \ 1082 1087 pixbuf.get_bits_per_sample(), \ 1083 1088 preview_width, preview_height) … … class GetIABooksActivity(activity.Activity): 1090 1095 preview_width - (margin_x * 2), \ 1091 1096 preview_height - (margin_y * 2), \ 1092 1097 margin_x, margin_y, scale, scale, \ 1093 gtk.gdk.INTERP_BILINEAR)1098 GdkPixbuf.InterpType.BILINEAR) 1094 1099 preview_data = [] 1095 1100 1096 1101 def save_func(buf, data): … … class GetIABooksActivity(activity.Activity): 1190 1195 pass 1191 1196 1192 1197 1193 class ButtonWithImage(gtk.Button): 1198 class ButtonWithImage(Gtk.Button): 1199 1200 __gtype_name__ = 'Catalogs' 1194 1201 1195 1202 def __init__(self, label_text): 1196 gtk.Button.__init__(self, _('Catalogs'))1203 GObject.GObject.__init__(self,) 1197 1204 self.icon_move_up = Icon(icon_name='go-up') 1198 self.remove(self.get_children()[0])1199 self.hbox = gtk.HBox()1205 # self.remove(self.get_children()[0]) 1206 self.hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) 1200 1207 self.add(self.hbox) 1201 1208 self.hbox.add(self.icon_move_up) 1202 self.label = gtk.Label(label_text)1209 self.label = Gtk.Label(label=label_text) 1203 1210 self.hbox.add(self.label) 1204 1211 self.show_all() 1205 1212 -
devicemanager.py
diff --git a/devicemanager.py b/devicemanager.py index f673fce..7630126 100644
a b 18 18 19 19 import os 20 20 import logging 21 import gobject22 21 import dbus 23 22 24 UDISK_DEVICE_PATH = 'org.freedesktop.UDisks.Device' 23 from gi.repository import GObject 25 24 25 # UDISK_DEVICE_PATH = 'org.freedesktop.UDisks.Device' 26 26 27 class DeviceManager(gobject.GObject): 27 28 class DeviceManager(GObject.GObject): 28 29 29 30 __gsignals__ = { 30 'device-changed': ( gobject.SIGNAL_RUN_FIRST,31 gobject.TYPE_NONE,31 'device-changed': (GObject.SignalFlags.RUN_FIRST, 32 None, 32 33 ([])), 33 34 } 34 35 35 36 def __init__(self): 36 gobject.GObject.__init__(self)37 GObject.GObject.__init__(self) 37 38 38 39 self._devices = {} 39 40 self._bus = dbus.SystemBus() … … class DeviceManager(gobject.GObject): 59 60 60 61 def _get_props_from_device(self, device): 61 62 # http://hal.freedesktop.org/docs/udisks/Device.html 62 device_obj = self._bus.get_object('org.freedesktop.UDisks', device)63 device_props = dbus.Interface(device_obj, dbus.PROPERTIES_IFACE)64 props = {}65 props['mounted'] = bool(device_props.Get(UDISK_DEVICE_PATH,66 'DeviceIsMounted'))67 if props['mounted']:68 props['mount_path'] = str(device_props.Get(UDISK_DEVICE_PATH,69 'DeviceMountPaths')[0])70 props['removable'] = bool(device_props.Get(UDISK_DEVICE_PATH,71 'DriveCanDetach'))72 props['label'] = str(device_props.Get(UDISK_DEVICE_PATH,73 'IdLabel'))74 props['size'] = int(device_props.Get(UDISK_DEVICE_PATH,75 'DeviceSize'))76 return props63 # device_obj = self._bus.get_object('org.freedesktop.UDisks', device) 64 # device_props = dbus.Interface(device_obj, dbus.PROPERTIES_IFACE) 65 # props = {} 66 # props['mounted'] = bool(device_props.Get(UDISK_DEVICE_PATH, 67 # 'DeviceIsMounted')) 68 # if props['mounted']: 69 # props['mount_path'] = str(device_props.Get(UDISK_DEVICE_PATH, 70 # 'DeviceMountPaths')[0]) 71 # props['removable'] = bool(device_props.Get(UDISK_DEVICE_PATH, 72 # 'DriveCanDetach')) 73 # props['label'] = str(device_props.Get(UDISK_DEVICE_PATH, 74 # 'IdLabel')) 75 # props['size'] = int(device_props.Get(UDISK_DEVICE_PATH, 76 # 'DeviceSize')) 77 # return props 77 78 return None 78 79 79 80 def _have_catalog(self, props): -
extListview.py
diff --git a/extListview.py b/extListview.py index cf0b450..c1f83b8 100644
a b 34 34 # 35 35 # v1.3: 36 36 # * Greatly improved speed when sorting a lot of rows 37 # * Added support for gtk.CellRendererToggle37 # * Added support for Gtk.CellRendererToggle 38 38 # * Improved replaceContent() method 39 39 # * Added a call to set_cursor() when removing selected row(s) 40 40 # * Added getFirstSelectedRow(), appendRows(), addColumnAttribute(), 41 41 # unselectAll() and selectAll() methods 42 # * Set expand to False when calling pack_start( )42 # * Set expand to False when calling pack_start(, True, True, 0) 43 43 # 44 44 # v1.2: 45 45 # * Fixed D'n'D reordering bugs … … 52 52 # the empty area 53 53 # * Sort indicators are now displayed whenever needed 54 54 55 import gtk56 55 import random 56 import logging 57 57 58 from g tk import gdk59 from g object import signal_new, TYPE_INT, TYPE_STRING, TYPE_BOOLEAN, \60 TYPE_PYOBJECT, TYPE_NONE, SIGNAL_RUN_LAST 58 from gi.repository import Gtk 59 from gi.repository import GObject 60 from gi.repository import Gdk 61 61 62 62 63 63 # Internal d'n'd (reordering) 64 64 DND_REORDERING_ID = 1024 65 65 DND_INTERNAL_TARGET = ('extListview-internal', 66 gtk.TARGET_SAME_WIDGET, DND_REORDERING_ID)66 Gtk.TargetFlags.SAME_WIDGET, DND_REORDERING_ID) 67 67 68 68 69 # Custom signals 70 signal_new('extlistview-dnd', gtk.TreeView, SIGNAL_RUN_LAST, TYPE_NONE, 71 (gdk.DragContext, TYPE_INT, TYPE_INT, gtk.SelectionData, TYPE_INT, 72 TYPE_PYOBJECT)) 73 signal_new('extlistview-modified', gtk.TreeView, SIGNAL_RUN_LAST, TYPE_NONE, 74 ()) 75 signal_new('extlistview-button-pressed', gtk.TreeView, SIGNAL_RUN_LAST, 76 TYPE_NONE, (gdk.Event, TYPE_PYOBJECT)) 77 signal_new('extlistview-column-visibility-changed', gtk.TreeView, 78 SIGNAL_RUN_LAST, TYPE_NONE, (TYPE_STRING, TYPE_BOOLEAN)) 79 signal_new('button-press-event', gtk.TreeViewColumn, SIGNAL_RUN_LAST, 80 TYPE_NONE, (gdk.Event, )) 81 82 83 class ExtListViewColumn(gtk.TreeViewColumn): 69 class ExtListViewColumn(Gtk.TreeViewColumn): 84 70 """ 85 71 TreeViewColumn does not signal right-click events, and we need them 86 72 This subclass is equivalent to TreeViewColumn, but it signals these … … class ExtListViewColumn(gtk.TreeViewColumn): 90 76 (http://www.sacredchao.net/quodlibet) 91 77 """ 92 78 79 __gsignals__ = { 80 'button-press-event': (GObject.SignalFlags.RUN_FIRST, None, 81 (object,)), 82 } 83 93 84 def __init__(self, title=None, cell_renderer=None, **args): 94 """ Constructor, see gtk.TreeViewColumn """95 gtk.TreeViewColumn.__init__(self, title, cell_renderer, **args)96 label = gtk.Label(title)85 """ Constructor, see Gtk.TreeViewColumn """ 86 GObject.GObject.__init__(self) 87 label = Gtk.Label(label=title) 97 88 self.set_widget(label) 98 89 label.show() 99 90 label.__realize = label.connect('realize', self.onRealize) … … class ExtListViewColumn(gtk.TreeViewColumn): 101 92 def onRealize(self, widget): 102 93 widget.disconnect(widget.__realize) 103 94 del widget.__realize 104 button = widget.get_ancestor( gtk.Button)95 button = widget.get_ancestor(Gtk.Button) 105 96 if button is not None: 106 97 button.connect('button-press-event', self.onButtonPressed) 107 98 … … class ExtListViewColumn(gtk.TreeViewColumn): 109 100 self.emit('button-press-event', event) 110 101 111 102 112 class ExtListView(gtk.TreeView): 103 class ExtListView(Gtk.TreeView): 104 105 __gsignals__ = { 106 'extlistview-modified': (GObject.SignalFlags.RUN_FIRST, None, 107 ()), 108 'extlistview-button-pressed': (GObject.SignalFlags.RUN_FIRST, None, 109 (object, bool)), 110 } 113 111 114 112 def __init__(self, columns, sortable=True, dndTargets=[], useMarkup=False, 115 113 canShowHideColumns=True): … … class ExtListView(gtk.TreeView): 125 123 If useMarkup is True, the 'markup' attributes is used instead of 126 124 'text' for CellRendererTexts 127 125 """ 128 gtk.TreeView.__init__(self)126 GObject.GObject.__init__(self) 129 127 130 128 self.selection = self.get_selection() 131 129 … … class ExtListView(gtk.TreeView): 140 138 self.set_rules_hint(True) 141 139 self.set_headers_visible(True) 142 140 143 self.selection.set_mode( gtk.SELECTION_MULTIPLE)141 self.selection.set_mode(Gtk.SelectionMode.MULTIPLE) 144 142 145 143 # Create the columns 146 144 nbEntries = 0 … … class ExtListView(gtk.TreeView): 152 150 else: 153 151 column = ExtListViewColumn(title) 154 152 column.set_resizable(True) 155 #column.set_sizing( gtk.TREE_VIEW_COLUMN_AUTOSIZE)153 #column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) 156 154 column.set_expand(expandable) 157 155 column.set_visible(visible) 158 156 if canShowHideColumns: … … class ExtListView(gtk.TreeView): 169 167 nbEntries += 1 170 168 dataTypes.append(type) 171 169 column.pack_start(renderer, False) 172 if isinstance(renderer, gtk.CellRendererToggle):170 if isinstance(renderer, Gtk.CellRendererToggle): 173 171 column.add_attribute(renderer, 'active', nbEntries - 1) 174 elif isinstance(renderer, gtk.CellRendererPixbuf):172 elif isinstance(renderer, Gtk.CellRendererPixbuf): 175 173 column.add_attribute(renderer, 'pixbuf', nbEntries - 1) 176 elif isinstance(renderer, gtk.CellRendererText):174 elif isinstance(renderer, Gtk.CellRendererText): 177 175 if useMarkup: 178 176 column.add_attribute(renderer, 'markup', 179 177 nbEntries - 1) … … class ExtListView(gtk.TreeView): 184 182 # Mark management 185 183 self.markedRow = None 186 184 self.markColumn = len(dataTypes) 187 dataTypes.append( TYPE_BOOLEAN) # When there's no other solution,188 189 185 dataTypes.append(bool) # When there's no other solution, 186 # this additional entry helps in 187 # finding the marked row 190 188 191 189 # Create the ListStore associated with this tree 192 self.store = gtk.ListStore(*dataTypes)190 self.store = Gtk.ListStore(*dataTypes) 193 191 self.set_model(self.store) 194 192 195 193 # Drag'n'drop management … … class ExtListView(gtk.TreeView): 200 198 self.dndReordering = False 201 199 202 200 if len(dndTargets) != 0: 203 self.enable_model_drag_dest(dndTargets, gdk.ACTION_DEFAULT)201 self.enable_model_drag_dest(dndTargets, Gdk.DragAction.DEFAULT) 204 202 205 203 self.connect('drag-begin', self.onDragBegin) 206 204 self.connect('drag-motion', self.onDragMotion) … … class ExtListView(gtk.TreeView): 314 312 criteria = self.sortColCriteria[column] 315 313 rows.sort(lambda r1, r2: \ 316 314 self.__cmpRows(r1, r2, criteria, self.sortAscending)) 315 # FIXME: AttributeError: 'ListStore' object has no attribute 'reorder' 317 316 self.store.reorder([r[-1] for r in rows]) 318 317 319 318 # Move the mark if needed … … class ExtListView(gtk.TreeView): 322 321 323 322 column.set_sort_indicator(True) 324 323 if self.sortAscending: 325 column.set_sort_order( gtk.SORT_ASCENDING)324 column.set_sort_order(Gtk.SortType.ASCENDING) 326 325 else: 327 column.set_sort_order( gtk.SORT_DESCENDING)326 column.set_sort_order(Gtk.SortType.DESCENDING) 328 327 329 328 self.emit('extlistview-modified') 330 329 … … class ExtListView(gtk.TreeView): 461 460 self.freeze_child_notify() 462 461 if position is None: 463 462 for row in rows: 463 # FIXME: I had to remove an element from the row (False) 464 logging.debug('ROW: %s', row) 464 465 self.store.append(row) 465 466 else: 466 467 for row in rows: … … class ExtListView(gtk.TreeView): 502 503 """ Enable the use of Drag'n'Drop to reorder the list """ 503 504 self.dndReordering = True 504 505 self.dndTargets.append(DND_INTERNAL_TARGET) 505 self.enable_model_drag_dest(self.dndTargets, gdk.ACTION_DEFAULT)506 self.enable_model_drag_dest(self.dndTargets, Gdk.DragAction.DEFAULT) 506 507 507 508 def __isDropAfter(self, pos): 508 """ Helper function, True if pos is gtk.TREE_VIEW_DROP_AFTER or509 gtk.TREE_VIEW_DROP_INTO_OR_AFTER """510 return pos == gtk.TREE_VIEW_DROP_AFTER or \511 pos == gtk.TREE_VIEW_DROP_INTO_OR_AFTER509 """ Helper function, True if pos is Gtk.TreeViewDropPosition.AFTER or 510 Gtk.TreeViewDropPosition.INTO_OR_AFTER """ 511 return pos == Gtk.TreeViewDropPosition.AFTER or \ 512 pos == Gtk.TreeViewDropPosition.INTO_OR_AFTER 512 513 513 514 def __moveSelectedRows(self, x, y): 514 515 """ Internal function used for drag'n'drop """ … … class ExtListView(gtk.TreeView): 516 517 dropInfo = self.get_dest_row_at_pos(int(x), int(y)) 517 518 518 519 if dropInfo is None: 519 pos, path = gtk.TREE_VIEW_DROP_INTO_OR_AFTER, len(self.store) - 1520 pos, path = Gtk.TreeViewDropPosition.INTO_OR_AFTER, len(self.store) - 1 520 521 else: 521 522 pos, path = dropInfo[1], dropInfo[0][0] 522 523 if self.__isDropAfter(pos) and path < len(self.store) - 1: 523 pos = gtk.TREE_VIEW_DROP_INTO_OR_BEFORE524 pos = Gtk.TreeViewDropPosition.INTO_OR_BEFORE 524 525 path += 1 525 526 526 527 self.freeze_child_notify() … … class ExtListView(gtk.TreeView): 573 574 if self.dndReordering and self.motionEvtId is None \ 574 575 and event.button == 1: 575 576 self.dndStartPos = (int(event.x), int(event.y)) 576 self.motionEvtId = gtk.TreeView.connect(self, \577 self.motionEvtId = Gtk.TreeView.connect(self, \ 577 578 'motion-notify-event', self.onMouseMotion) 578 579 579 stateClear = not (event.state & \ 580 (gdk.SHIFT_MASK | gdk.CONTROL_MASK)) 580 stateClear = not (event.get_state() & \ 581 (Gdk.ModifierType.SHIFT_MASK | 582 Gdk.ModifierType.CONTROL_MASK)) 581 583 582 584 if stateClear and not self.selection.path_is_selected(path): 583 585 self.selection.unselect_all() … … class ExtListView(gtk.TreeView): 586 588 retVal = (stateClear and self.getSelectedRowsCount() > 1 \ 587 589 and self.selection.path_is_selected(path)) 588 590 591 logging.debug('TYPE: %s', type(event)) 592 # FIXME: I'm getting this error: 593 # TypeError: could not convert type EventButton to GdkEvent 594 # required for parameter 0 589 595 self.emit('extlistview-button-pressed', event, path) 590 596 591 597 return retVal … … class ExtListView(gtk.TreeView): 599 605 600 606 if len(self.dndTargets) != 0: 601 607 self.enable_model_drag_dest(self.dndTargets, 602 gdk.ACTION_DEFAULT)608 Gdk.DragAction.DEFAULT) 603 609 604 stateClear = not (event.state & (gdk.SHIFT_MASK | gdk.CONTROL_MASK)) 610 stateClear = not (event.get_state() & \ 611 (Gdk.ModifierType.SHIFT_MASK | 612 Gdk.ModifierType.CONTROL_MASK)) 605 613 606 if stateClear and event. state & gdk.BUTTON1_MASK \614 if stateClear and event.get_state() & Gdk.ModifierType.BUTTON1_MASK \ 607 615 and self.getSelectedRowsCount() > 1: 608 616 pathInfo = self.get_path_at_pos(int(event.x), int(event.y)) 609 617 if pathInfo is not None: … … class ExtListView(gtk.TreeView): 616 624 self.drag_check_threshold(self.dndStartPos[0], self.dndStartPos[1], 617 625 int(event.x), int(event.y)): 618 626 self.dndContext = self.drag_begin([DND_INTERNAL_TARGET], 619 gdk.ACTION_COPY, 1, event)627 Gdk.DragAction.COPY, 1, event) 620 628 621 629 def onDragBegin(self, tree, context): 622 630 """ A drag'n'drop operation has begun """ 623 631 if self.getSelectedRowsCount() == 1: 624 context.set_icon_stock( gtk.STOCK_DND, 0, 0)632 context.set_icon_stock(Gtk.STOCK_DND, 0, 0) 625 633 else: 626 context.set_icon_stock( gtk.STOCK_DND_MULTIPLE, 0, 0)634 context.set_icon_stock(Gtk.STOCK_DND_MULTIPLE, 0, 0) 627 635 628 636 def onDragDataReceived(self, tree, context, x, y, selection, dndId, time): 629 637 """ Some data has been dropped into the list """ … … class ExtListView(gtk.TreeView): 639 647 drop = self.get_dest_row_at_pos(int(x), int(y)) 640 648 641 649 if drop is not None and \ 642 (drop[1] == gtk.TREE_VIEW_DROP_INTO_OR_AFTER or \643 drop[1] == gtk.TREE_VIEW_DROP_INTO_OR_BEFORE):650 (drop[1] == Gtk.TreeViewDropPosition.INTO_OR_AFTER or \ 651 drop[1] == Gtk.TreeViewDropPosition.INTO_OR_BEFORE): 644 652 self.enable_model_drag_dest([('invalid-position', 0, -1)], 645 gdk.ACTION_DEFAULT)653 Gdk.DragAction.DEFAULT) 646 654 else: 647 self.enable_model_drag_dest(self.dndTargets, gdk.ACTION_DEFAULT) 655 self.enable_model_drag_dest(self.dndTargets, 656 Gdk.DragAction.DEFAULT) 648 657 649 658 def onColumnHeaderClicked(self, column, event): 650 659 """ A column header has been clicked """ 660 logging.debug('CLICK: %s', event.button) 661 651 662 if event.button == 3: 652 663 # Create a menu with a CheckMenuItem per column 653 menu = gtk.Menu()664 menu = Gtk.Menu() 654 665 nbVisibleItems = 0 655 666 lastVisibleItem = None 656 667 for column in self.get_columns(): 657 item = gtk.CheckMenuItem(column.get_title())668 item = Gtk.CheckMenuItem(column.get_title()) 658 669 item.set_active(column.get_visible()) 659 670 item.connect('toggled', self.onShowHideColumn, column) 660 671 item.show() … … class ExtListView(gtk.TreeView): 669 680 if nbVisibleItems == 1: 670 681 lastVisibleItem.set_sensitive(False) 671 682 672 menu.popup(None, None, None, event.button, event.get_time()) 683 logging.debug('CLICK') 684 685 # README: a new argument is needed 686 # http://developer.gnome.org/gtk3/3.5/GtkMenu.html#gtk-menu-popup 687 menu.popup(None, None, None, None, event.button, event.get_time()) 688 689 # FIXME: for some reason this menu.popup call is not 690 # showing the popup 673 691 674 692 def onShowHideColumn(self, menuItem, column): 675 693 """ Switch the visibility of the given column """ 676 694 column.set_visible(not column.get_visible()) 695 logging.debug('CALL: onShowHideColumn') 677 696 self.emit('extlistview-column-visibility-changed', \ 678 697 column.get_title(), column.get_visible()) -
get-books.cfg
diff --git a/get-books.cfg b/get-books.cfg index dd07716..e340855 100644
a b 1 1 [GetBooks] 2 show_images = yes2 show_images = no 3 3 languages = en,es,fr,de 4 4 5 5 [Feedbooks] -
listview.py
diff --git a/listview.py b/listview.py index 7a1769a..f170b55 100644
a b 16 16 # along with this program; if not, write to the Free Software 17 17 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 18 18 19 import gobject20 import gtk21 import pango22 19 import sys 23 from gettext import gettext as _24 20 import logging 25 21 22 from gi.repository import GObject 23 from gi.repository import Gtk 24 from gi.repository import Pango 25 26 from gettext import gettext as _ 26 27 from extListview import ExtListView 27 28 28 29 _logger = logging.getLogger('get-ia-books-activity') 29 30 30 31 31 32 class ListView(ExtListView): 32 __txtRdr = gtk.CellRendererText()33 __txtRdr.props.wrap_mode = pango.WRAP_WORD33 __txtRdr = Gtk.CellRendererText() 34 __txtRdr.props.wrap_mode = Pango.WrapMode.WORD 34 35 __txtRdr.props.wrap_width = 500 35 36 __txtRdr.props.width = 500 36 37 (ROW_TITLE, ROW_AUTHOR, ROW_PUBLISHER, 37 38 ROW_LANGUAGE, ROW_PUB_DATE, ROW_BOOK) = range(6) 38 39 39 columns = ((_('Title'), [(__txtRdr, gobject.TYPE_STRING)],40 columns = ((_('Title'), [(__txtRdr, GObject.TYPE_STRING)], 40 41 (ROW_TITLE,), False, True), 41 (_('Author'), [(__txtRdr, gobject.TYPE_STRING)],42 (_('Author'), [(__txtRdr, GObject.TYPE_STRING)], 42 43 (ROW_AUTHOR, ROW_TITLE), False, True), 43 (_('Publisher'), [(__txtRdr, gobject.TYPE_STRING)],44 (_('Publisher'), [(__txtRdr, GObject.TYPE_STRING)], 44 45 (ROW_AUTHOR, ROW_TITLE), False, False), 45 (_('Language'), [(__txtRdr, gobject.TYPE_STRING)],46 (_('Language'), [(__txtRdr, GObject.TYPE_STRING)], 46 47 (ROW_AUTHOR, ROW_TITLE), False, False), 47 (_('Publish Date'), [(__txtRdr, gobject.TYPE_STRING)],48 (_('Publish Date'), [(__txtRdr, GObject.TYPE_STRING)], 48 49 (ROW_AUTHOR, ROW_TITLE), False, False), 49 (None, [(None, gobject.TYPE_PYOBJECT)], (None,), False, False)) 50 (None, [(None, GObject.TYPE_PYOBJECT)], (None,), False, False)) 51 50 52 __gsignals__ = { 51 'selection-changed': ( gobject.SIGNAL_RUN_FIRST,52 gobject.TYPE_NONE,53 ([])),54 }53 'selection-changed': (GObject.SignalFlags.RUN_FIRST, 54 None, 55 ([])), 56 } 55 57 56 58 def __init__(self, lang_code_handler): 57 59 ExtListView.__init__(self, self.columns, sortable=True, 58 useMarkup=False, canShowHideColumns=True)60 useMarkup=False, canShowHideColumns=True) 59 61 #self.enableDNDReordering() # Is this needed ? 60 62 61 63 self._lang_code_handler = lang_code_handler 62 64 63 65 selection = self.get_selection() 64 selection.set_mode( gtk.SELECTION_SINGLE)66 selection.set_mode(Gtk.SelectionMode.SINGLE) 65 67 selection.connect("changed", self.__selection_changed_cb) 66 68 67 69 def __selection_changed_cb(self, selection): … … class ListView(ExtListView): 94 96 try: 95 97 ret = self.getFirstSelectedRow()[self.ROW_BOOK] 96 98 except IndexError: 99 logging.debug('self.getFirstSelectedRow: %s', 100 self.getFirstSelectedRow()) 97 101 ret = None 98 102 return ret -
opds.py
diff --git a/opds.py b/opds.py index fc536f3..aad9919 100644
a b 16 16 # along with this program; if not, write to the Free Software 17 17 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 18 18 19 import logging 19 from gi.repository import GObject 20 from gi.repository import Gtk 21 22 from sugar3 import network 20 23 24 import logging 21 25 import threading 22 26 import os 23 27 import urllib 24 import gobject25 import gtk26 28 import time 27 29 import csv 28 30 29 from sugar import network30 31 31 import sys 32 32 sys.path.insert(0, './') 33 33 import feedparser … … _REL_SUBSECTION = 'subsection' 39 39 _REL_OPDS_POPULAR = u'http://opds-spec.org/sort/popular' 40 40 _REL_OPDS_NEW = u'http://opds-spec.org/sort/new' 41 41 42 gobject.threads_init()42 GObject.threads_init() 43 43 44 44 45 45 class ReadURLDownloader(network.GlibURLDownloader): … … class DownloadThread(threading.Thread): 100 100 101 101 self.obj._feedobj = feedobj 102 102 self.obj._ready = True 103 gobject.idle_add(self.obj.notify_updated, self.midway)103 GObject.idle_add(self.obj.notify_updated, self.midway) 104 104 return False 105 105 106 106 def run(self): … … class Book(object): 222 222 return False 223 223 224 224 225 class QueryResult( gobject.GObject):225 class QueryResult(GObject.GObject): 226 226 227 227 __gsignals__ = { 228 'updated': ( gobject.SIGNAL_RUN_FIRST,229 gobject.TYPE_NONE,230 ([ gobject.TYPE_BOOLEAN])),228 'updated': (GObject.SignalFlags.RUN_FIRST, 229 None, 230 ([GObject.TYPE_BOOLEAN])), 231 231 } 232 232 233 233 def __init__(self, configuration, queryterm, language): 234 gobject.GObject.__init__(self)234 GObject.GObject.__init__(self) 235 235 self._configuration = configuration 236 236 self._uri = self._configuration['query_uri'] 237 237 self._queryterm = queryterm … … class DownloadIAThread(threading.Thread): 369 369 self._download_content_type = None 370 370 self._booklist = [] 371 371 queryterm = self.obj._queryterm 372 search_tuple = queryterm.lower().split()372 # search_tuple = queryterm.lower().split() 373 373 FL = urllib.quote('fl[]') 374 374 SORT = urllib.quote('sort[]') 375 375 self.search_url = 'http://www.archive.org/advancedsearch.php?q=' + \ … … class DownloadIAThread(threading.Thread): 384 384 self.stopthread = threading.Event() 385 385 386 386 def _download(self): 387 gobject.idle_add(self.download_csv, self.search_url)387 GObject.idle_add(self.download_csv, self.search_url) 388 388 389 389 def download_csv(self, url): 390 390 logging.error('get csv from %s', url) … … class DownloadIAThread(threading.Thread): 461 461 self.obj._booklist.append(IABook(None, entry, '')) 462 462 463 463 os.remove(tempfile) 464 gobject.idle_add(self.obj.notify_updated, self.midway)464 GObject.idle_add(self.obj.notify_updated, self.midway) 465 465 self.obj._ready = True 466 466 return False 467 467 … … class InternetArchiveQueryResult(QueryResult): 478 478 # because the server implementation is not working very well 479 479 480 480 def __init__(self, queryterm, language, activity): 481 gobject.GObject.__init__(self)481 GObject.GObject.__init__(self) 482 482 self._activity = activity 483 483 self._queryterm = queryterm 484 484 self._language = language … … class ImageDownloaderThread(threading.Thread): 519 519 self._getter.start(path) 520 520 except: 521 521 _logger.debug("Connection timed out for") 522 gobject.idle_add(self.obj.notify_updated, None)522 GObject.idle_add(self.obj.notify_updated, None) 523 523 524 524 self._download_content_length = \ 525 525 self._getter.get_content_length() … … class ImageDownloaderThread(threading.Thread): 529 529 _logger.debug("Got Cover Image %s (%s)", tempfile, suggested_name) 530 530 self._getter = None 531 531 if not self.stopthread.is_set(): 532 gobject.idle_add(self.obj.notify_updated, tempfile)532 GObject.idle_add(self.obj.notify_updated, tempfile) 533 533 534 534 def _get_image_progress_cb(self, getter, bytes_downloaded): 535 535 if self.stopthread.is_set(): … … class ImageDownloaderThread(threading.Thread): 545 545 else: 546 546 _logger.debug("Downloaded %u bytes...", 547 547 bytes_downloaded) 548 while gtk.events_pending():549 gtk.main_iteration()548 while Gtk.events_pending(): 549 Gtk.main_iteration() 550 550 551 551 def _get_image_error_cb(self, getter, err): 552 552 _logger.debug("Error getting image: %s", err) 553 553 self._download_content_length = 0 554 554 self._download_content_type = None 555 555 self._getter = None 556 gobject.idle_add(self.obj.notify_updated, None)556 GObject.idle_add(self.obj.notify_updated, None) 557 557 558 558 def run(self): 559 559 self._download_image() … … class ImageDownloaderThread(threading.Thread): 562 562 self.stopthread.set() 563 563 564 564 565 class ImageDownloader( gobject.GObject):565 class ImageDownloader(GObject.GObject): 566 566 567 567 __gsignals__ = { 568 'updated': ( gobject.SIGNAL_RUN_FIRST,569 gobject.TYPE_NONE,570 ([ gobject.TYPE_STRING])),568 'updated': (GObject.SignalFlags.RUN_FIRST, 569 None, 570 ([GObject.TYPE_STRING])), 571 571 } 572 572 573 573 def __init__(self, activity, url): 574 gobject.GObject.__init__(self)574 GObject.GObject.__init__(self) 575 575 self.threads = [] 576 576 self._activity = activity 577 577 self._url = url -
setup.py
diff --git a/setup.py b/setup.py index d3ab3a3..2f2c143 100755
a b 16 16 # along with this program; if not, write to the Free Software 17 17 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 18 18 19 from sugar .activity import bundlebuilder19 from sugar3.activity import bundlebuilder 20 20 21 21 bundlebuilder.start()