Support batch abandon/restore

Change-Id: Ic3cfef29f3ba6326249a3058b7e5a3e4dd3bfb36
This commit is contained in:
James E. Blair 2016-03-09 13:00:37 -08:00
parent b33cbc0a7a
commit 6b73b7a5ce
1 changed files with 44 additions and 0 deletions

View File

@ -20,6 +20,7 @@ import six
import urwid import urwid
from gertty import keymap from gertty import keymap
from gertty import mywid
from gertty import sync from gertty import sync
from gertty.view import change as view_change from gertty.view import change as view_change
from gertty.view import mouse_scroll_decorator from gertty.view import mouse_scroll_decorator
@ -182,8 +183,12 @@ class ChangeListView(urwid.WidgetWrap):
"Toggle the process mark for the currently selected change"), "Toggle the process mark for the currently selected change"),
(key(keymap.REFINE_CHANGE_SEARCH), (key(keymap.REFINE_CHANGE_SEARCH),
"Refine the current search query"), "Refine the current search query"),
(key(keymap.ABANDON_CHANGE),
"Abandon the marked changes"),
(key(keymap.EDIT_TOPIC), (key(keymap.EDIT_TOPIC),
"Set the topic of the marked changes"), "Set the topic of the marked changes"),
(key(keymap.RESTORE_CHANGE),
"Restore the marked changes"),
(key(keymap.REFRESH), (key(keymap.REFRESH),
refresh_help), refresh_help),
(key(keymap.REVIEW), (key(keymap.REVIEW),
@ -581,6 +586,12 @@ class ChangeListView(urwid.WidgetWrap):
default = self.getQueryString() default = self.getQueryString()
self.app.searchDialog(default) self.app.searchDialog(default)
return True return True
if keymap.ABANDON_CHANGE in commands:
self.abandonChange()
return True
if keymap.RESTORE_CHANGE in commands:
self.restoreChange()
return True
return False return False
def onSelect(self, button, change_key): def onSelect(self, button, change_key):
@ -638,3 +649,36 @@ class ChangeListView(urwid.WidgetWrap):
sync.SetTopicTask(change_key, sync.HIGH_PRIORITY)) sync.SetTopicTask(change_key, sync.HIGH_PRIORITY))
self.app.backScreen() self.app.backScreen()
self.refresh() self.refresh()
def abandonChange(self):
dialog = mywid.TextEditDialog(u'Abandon Change', u'Abandon message:',
u'Abandon Change', u'')
urwid.connect_signal(dialog, 'cancel', self.app.backScreen)
urwid.connect_signal(dialog, 'save', lambda button:
self.doAbandonRestoreChange(dialog, 'ABANDONED'))
self.app.popup(dialog)
def restoreChange(self):
dialog = mywid.TextEditDialog(u'Restore Change', u'Restore message:',
u'Restore Change', u'')
urwid.connect_signal(dialog, 'cancel', self.app.backScreen)
urwid.connect_signal(dialog, 'save', lambda button:
self.doAbandonRestoreChange(dialog, 'NEW'))
self.app.popup(dialog)
def doAbandonRestoreChange(self, dialog, state):
rows = [row for row in self.change_rows.values() if row.mark]
if not rows:
pos = self.listbox.focus_position
rows = [self.listbox.body[pos]]
change_keys = [row.change_key for row in rows]
with self.app.db.getSession() as session:
for change_key in change_keys:
change = session.getChange(change_key)
change.status = state
change.pending_status = True
change.pending_status_message = dialog.entry.edit_text
self.app.sync.submitTask(
sync.ChangeStatusTask(change_key, sync.HIGH_PRIORITY))
self.app.backScreen()
self.refresh()