def __init__(self, parent=None): super().__init__(parent=parent) self.displayed_email_label = None font = QFont(QApplication.font()) font.setPixelSize(14) self.label_title = QLabel('') self.label_title.setFont(font) mlayout = QVBoxLayout() mlayout.setContentsMargins(0, 0, 0, 0) mlayout.addWidget(self.label_title) self.setLayout(mlayout) generic = EmailLabel() sent = SentEmailLabel() trash = TrashEmailLabel() self.email_label_map = { EmailLabel: generic, SentEmailLabel: sent, TrashEmailLabel: trash } # Any label id that is not in the special_label_map should use generic EmailLabel self.special_label_map = { GMAIL_LABEL_SENT: SentEmailLabel, GMAIL_LABEL_TRASH: TrashEmailLabel } self.labels = {} EmailEventChannel.subscribe('show_label', self.show_label) EmailEventChannel.subscribe('labels_sync', self.process_labels)
def __init__(self, label_id, request_callback_delay, data=None): super().__init__(data) self.page_length = options.emails_per_page self.label_id = label_id self.delay_request = request_callback_delay EmailEventChannel.subscribe('email_list_response', self.add_new_page) EmailEventChannel.subscribe('email_trashed', self.handle_email_trashed) EmailEventChannel.subscribe('email_restored', self.handle_email_restored) EmailEventChannel.subscribe('email_deleted', self.handle_email_deleted) EmailEventChannel.subscribe('email_sent', self.handle_email_sent) OptionEventChannel.subscribe('emails_per_page', self.change_page_length) self.sync_helper = SyncHelper() # Register this model to synchronizer in order to be able to receive short sync updates. EmailSynchronizer.get_instance().register(self, label_id) limit = self.page_length offset = len(self) self.sync_helper.push_event(EmailEventChannel, 'email_list_request', { 'label_id': self.label_id, 'limit': limit, 'offset': offset }, None) self._backoff = 1 # fully_loaded just means that database is done with full syncing. self.fully_loaded = False # _load_next_page indicates whether or not we should load the next page, mostly # used by add_new_page method when processing new data. self._load_next_page = False
def __init__(self): self.registered_models = {} self.last_history_id = None EmailEventChannel.subscribe('synced', self.dispatch_updates)
def __init__(self): super().__init__() self.c = AppController() self.c.on_themechanged.connect(self.set_theme) self.c.on_fontsizechanged.connect(self.set_font_size) # TODO: Put shortcuts in page manager ??? self.shortcuts = Shortcuts(self) self.api_service = APIService() EmailEventChannel.subscribe( 'labels_request', lambda **kwargs: self.handle_request(EmailEventChannel, 'labels_request', 'labels_sync', **kwargs) ) EmailEventChannel.subscribe( 'email_request', lambda **kwargs: self.handle_request(EmailEventChannel, 'email_request', 'email_response', **kwargs) ) EmailEventChannel.subscribe( 'email_list_request', lambda **kwargs: self.handle_request(EmailEventChannel, 'email_list_request', 'email_list_response', **kwargs) ) EmailEventChannel.subscribe( 'send_email', lambda **kwargs: self.handle_request(EmailEventChannel, 'send_email', 'email_sent', **kwargs) ) EmailEventChannel.subscribe( 'trash_email', lambda **kwargs: self.handle_request(EmailEventChannel, 'trash_email', 'email_trashed', **kwargs) ) EmailEventChannel.subscribe( 'restore_email', lambda **kwargs: self.handle_request(EmailEventChannel, 'restore_email', 'email_restored', **kwargs) ) EmailEventChannel.subscribe( 'delete_email', lambda **kwargs: self.handle_request(EmailEventChannel, 'delete_email', 'email_deleted', **kwargs) ) EmailEventChannel.subscribe( 'short_sync', lambda **kwargs: self.handle_request(EmailEventChannel, 'short_sync', 'synced', **kwargs) ) EmailEventChannel.subscribe( 'modify_labels', lambda **kwargs: self.handle_request(EmailEventChannel, 'modify_labels', 'labels_modified', **kwargs) ) ContactEventChannel.subscribe( 'page_request', lambda **kwargs: self.handle_request(ContactEventChannel, 'page_request', 'page_response', **kwargs) ) ContactEventChannel.subscribe( 'remove_contact', lambda **kwargs: self.handle_request(ContactEventChannel, 'remove_contact', 'contact_removed', **kwargs) ) ContactEventChannel.subscribe( 'add_contact', lambda **kwargs: self.handle_request(ContactEventChannel, 'add_contact', 'contact_added', **kwargs) ) ContactEventChannel.subscribe( 'edit_contact', lambda **kwargs: self.handle_request(ContactEventChannel, 'edit_contact', 'contact_edited', **kwargs) ) self.setWindowTitle('QGmailer') icon = QIcon(QPixmap(':/images/qgmailer_logo.png')) self.setWindowIcon(icon) win_width, win_height = options.resolution.split('x') self.resize(int(win_width), int(win_height)) # This allows main window to be resized to the smallest possible size. # Instead of being limited(in minimum size) by layouts. self.setMinimumSize(1, 1) # cw - central widget self.cw = QWidget(self) self.page_manager = PageManagerView(parent=self.cw) mlayout = QHBoxLayout() mlayout.setContentsMargins(0, 0, 0, 0) mlayout.addWidget(self.page_manager) self.cw.setLayout(mlayout) self.set_theme(options.theme) self.set_font_size(options.font_size) self.setCentralWidget(self.cw) self.syncer = EmailSynchronizer.get_instance() self.timer = QTimer() self.timer.singleShot(1000 * 8, lambda: self.syncer.send_sync_request()) self.timer.timeout.connect(lambda: self.syncer.send_sync_request()) self.timer.start(1000 * 60)
def __init__(self, parent=None): super().__init__(parent) self.switch = QStackedWidget(self) label_view_page = self.add_page(LabelView()) send_email_page = self.add_page(SendEmailPageView()) contacts_page = self.add_page(ContactsPageView()) settings_page = self.add_page(OptionsPageView()) email_viewer_page = self.add_page(EmailViewerPageView()) self.sidebar = Sidebar(self) personal_wid = self.sidebar.add_item('Personal', ':images/personal_image.png') social_wid = self.sidebar.add_item('Social', ':images/social_image.png') updates_wid = self.sidebar.add_item('Updates', ':images/updates_image.png') promotions_wid = self.sidebar.add_item('Promotions', ':images/promotions_image.png') forums_wid = self.sidebar.add_item('Forums', ':images/forums_image.png') categories_label_ids = [ GMAIL_LABEL_PERSONAL, GMAIL_LABEL_SOCIAL, GMAIL_LABEL_UPDATES, GMAIL_LABEL_PROMOTIONS, GMAIL_LABEL_FORUMS ] group_id = self.sidebar.add_group('Other Labels') sent_wid = self.sidebar.add_item_to_group(group_id, 'Sent', ':images/sent_image.png') unread_wid = self.sidebar.add_item_to_group(group_id, 'Unread', ':images/unread_image.png') important_wid = self.sidebar.add_item_to_group(group_id, 'Important', ':images/important_image.png') starred_wid = self.sidebar.add_item_to_group(group_id, 'Starred', ':images/starred_image.png') trash_wid = self.sidebar.add_item_to_group(group_id, 'Trash', ':images/trash_image.png') spam_wid = self.sidebar.add_item_to_group(group_id, 'Spam', ':images/spam_image.png') other_labels_label_ids = [ GMAIL_LABEL_SENT, GMAIL_LABEL_UNREAD, GMAIL_LABEL_IMPORTANT, GMAIL_LABEL_STARRED, GMAIL_LABEL_TRASH, GMAIL_LABEL_SPAM ] self.item_id_to_label_id = {} self.label_id_to_item_id = {} send_email_wid = self.sidebar.add_item('Send Email', ':images/send_email_image.png') contacts_wid = self.sidebar.add_item('Contacts', ':images/contacts_image.png') self.sidebar.add_stretch() settings_wid = self.sidebar.add_item('Settings', ':images/options_button.png') def item_pressed_handler(widget_id, switch, item_id_to_label_id): if widget_id > settings_wid: # User defined label switch.setCurrentIndex(label_view_page) EmailEventChannel.publish( 'show_label', label_id=item_id_to_label_id[widget_id]) elif personal_wid <= widget_id <= forums_wid: switch.setCurrentIndex(label_view_page) EmailEventChannel.publish('show_label', label_id=categories_label_ids[widget_id]) elif sent_wid <= widget_id <= spam_wid: switch.setCurrentIndex(label_view_page) EmailEventChannel.publish( 'show_label', label_id=other_labels_label_ids[widget_id - group_id - 1]) elif widget_id == send_email_wid: switch.setCurrentIndex(send_email_page) elif widget_id == contacts_wid: switch.setCurrentIndex(contacts_page) elif widget_id == settings_wid: switch.setCurrentIndex(settings_page) self.item_pressed_handler = item_pressed_handler self.sidebar.on_item_pressed.connect(self.handle_item_pressed) def index_changed_handler(page_index, sidebar): if page_index == send_email_page: sidebar.select_item(send_email_wid) elif page_index == contacts_page: sidebar.select_item(contacts_wid) elif page_index == settings_page: sidebar.select_item(settings_wid) elif page_index == email_viewer_page: sidebar.select_item(None) else: assert False self.index_changed_handler = index_changed_handler main_layout = QHBoxLayout() main_layout.addWidget(self.sidebar) main_layout.addWidget(self.switch) main_layout.setContentsMargins(0, 0, 0, 0) self.setLayout(main_layout) EmailEventChannel.subscribe( 'email_response', lambda **kwargs: self.change_to_index(email_viewer_page)) ContactEventChannel.subscribe( 'contact_picked', lambda **kwargs: self.change_to_index(send_email_page)) ContactEventChannel.subscribe( 'pick_contact', lambda **kwargs: self.change_to_index(contacts_page)) ShortcutEventChannel.subscribe('personal', lambda **kwargs: self.show_label(personal_wid)) ShortcutEventChannel.subscribe('social', lambda **kwargs: self.show_label(social_wid)) ShortcutEventChannel.subscribe('updates', lambda **kwargs: self.show_label(updates_wid)) ShortcutEventChannel.subscribe('promotions', lambda **kwargs: self.show_label(promotions_wid)) ShortcutEventChannel.subscribe('forums', lambda **kwargs: self.show_label(forums_wid)) ShortcutEventChannel.subscribe('sent', lambda **kwargs: self.show_label(sent_wid)) ShortcutEventChannel.subscribe('unread', lambda **kwargs: self.show_label(unread_wid)) ShortcutEventChannel.subscribe('important', lambda **kwargs: self.show_label(important_wid)) ShortcutEventChannel.subscribe('starred', lambda **kwargs: self.show_label(starred_wid)) ShortcutEventChannel.subscribe('trash', lambda **kwargs: self.show_label(trash_wid)) ShortcutEventChannel.subscribe( 'spam', lambda **kwargs: self.show_label(spam_wid)) ShortcutEventChannel.subscribe('send_email', lambda **kwargs: self.show_label(send_email_wid)) ShortcutEventChannel.subscribe('contacts', lambda **kwargs: self.show_label(contacts_wid)) ShortcutEventChannel.subscribe('settings', lambda **kwargs: self.show_label(settings_wid)) self.other_labels_group_id = group_id EmailEventChannel.subscribe('labels_sync', self.handle_labels_sync) EmailEventChannel.publish('labels_request')
def __init__(self): EmailEventChannel.subscribe('email_response', self.handle_email_response) EmailEventChannel.subscribe('email_request', self.handle_email_request)
def __init__(self): EmailEventChannel.subscribe('email_sent', self.handle_email_sent) ContactEventChannel.subscribe('contact_picked', self.handle_contact_picked)