2222from sclack .store import Store
2323from sclack .themes import themes
2424
25+ from sclack .widgets .set_snooze import SetSnoozeWidget
26+
2527loop = asyncio .get_event_loop ()
2628
2729SCLACK_SUBTYPE = 'sclack_message'
@@ -54,6 +56,8 @@ def _exception_handler(self, loop, context):
5456 def __init__ (self , config ):
5557 self ._loading = False
5658 self .config = config
59+ self .quick_switcher = None
60+ self .set_snooze_widget = None
5761 self .workspaces = list (config ['workspaces' ].items ())
5862 self .store = Store (self .workspaces , self .config )
5963 Store .instance = self .store
@@ -75,7 +79,7 @@ def __init__(self, config):
7579 urwid .AttrWrap (chatbox , 'chatbox' )
7680 ])
7781 self ._body = urwid .Frame (self .columns , header = self .workspaces_line )
78- self . quick_switcher = None
82+
7983 self .urwid_loop = urwid .MainLoop (
8084 self ._body ,
8185 palette = palette ,
@@ -253,6 +257,7 @@ def mount_chatbox(self, executor, channel):
253257 urwid .connect_signal (self .chatbox , 'set_insert_mode' , self .set_insert_mode )
254258 urwid .connect_signal (self .chatbox , 'mark_read' , self .handle_mark_read )
255259 urwid .connect_signal (self .chatbox , 'open_quick_switcher' , self .open_quick_switcher )
260+ urwid .connect_signal (self .chatbox , 'open_set_snooze' , self .open_set_snooze )
256261
257262 urwid .connect_signal (self .message_box .prompt_widget , 'submit_message' , self .submit_message )
258263 urwid .connect_signal (self .message_box .prompt_widget , 'go_to_last_message' , self .go_to_last_message )
@@ -587,6 +592,24 @@ def go_to_channel(self, channel_id):
587592 self .quick_switcher = None
588593 loop .create_task (self ._go_to_channel (channel_id ))
589594
595+ def handle_set_snooze_time (self , snoozed_time ):
596+ loop .create_task (self .dispatch_snooze_time (snoozed_time ))
597+
598+ def handle_close_set_snooze (self ):
599+ """
600+ Close set_snooze
601+ :return:
602+ """
603+ if self .set_snooze_widget :
604+ urwid .disconnect_signal (self .set_snooze_widget , 'set_snooze_time' , self .handle_set_snooze_time )
605+ urwid .disconnect_signal (self .set_snooze_widget , 'close_set_snooze' , self .handle_close_set_snooze )
606+ self .urwid_loop .widget = self ._body
607+ self .set_snooze_widget = None
608+
609+ @asyncio .coroutine
610+ def dispatch_snooze_time (self , snoozed_time ):
611+ self .store .set_snooze (snoozed_time )
612+
590613 @asyncio .coroutine
591614 def load_picture_async (self , url , width , message_widget , auth = True ):
592615 width = min (width , 800 )
@@ -716,8 +739,10 @@ def go_to_sidebar(self):
716739 if len (self .columns .contents ) > 2 :
717740 self .columns .contents .pop ()
718741 self .columns .focus_position = 0
742+
719743 if self .store .state .editing_widget :
720744 self .leave_edit_mode ()
745+
721746 if self .quick_switcher :
722747 urwid .disconnect_signal (self .quick_switcher , 'go_to_channel' , self .go_to_channel )
723748 self .urwid_loop .widget = self ._body
@@ -743,6 +768,11 @@ def go_to_last_message(self):
743768 self .chatbox .body .go_to_last_message ()
744769
745770 def unhandled_input (self , key ):
771+ """
772+ Handle shortcut key press
773+ :param key:
774+ :return:
775+ """
746776 keymap = self .store .config ['keymap' ]
747777
748778 if key == keymap ['go_to_chatbox' ] or key == keymap ['cursor_right' ] and self .message_box :
@@ -763,13 +793,22 @@ def unhandled_input(self, key):
763793 # Stop rtm to switch workspace
764794 self .real_time_task .cancel ()
765795 return self .switch_to_workspace (int (key ))
796+ elif key == keymap ['set_snooze' ]:
797+ return self .open_set_snooze ()
766798
767799 def open_quick_switcher (self ):
768800 if not self .quick_switcher :
769801 self .quick_switcher = QuickSwitcher (self .urwid_loop .widget , self .urwid_loop )
770802 urwid .connect_signal (self .quick_switcher , 'go_to_channel' , self .go_to_channel )
771803 self .urwid_loop .widget = self .quick_switcher
772804
805+ def open_set_snooze (self ):
806+ if not self .set_snooze_widget :
807+ self .set_snooze_widget = SetSnoozeWidget (self .urwid_loop .widget , self .urwid_loop )
808+ urwid .connect_signal (self .set_snooze_widget , 'set_snooze_time' , self .handle_set_snooze_time )
809+ urwid .connect_signal (self .set_snooze_widget , 'close_set_snooze' , self .handle_close_set_snooze )
810+ self .urwid_loop .widget = self .set_snooze_widget
811+
773812 def configure_screen (self , screen ):
774813 screen .set_terminal_properties (colors = self .store .config ['colors' ])
775814 screen .set_mouse_tracking ()
0 commit comments