diff --git a/papersurfer/papersurfer.py b/papersurfer/papersurfer.py index 709dc8d86f0ce18b05fe0c9970a4d30ff297aae4..c09d4d0840733578378c2ae7cd67c81540682a17 100644 --- a/papersurfer/papersurfer.py +++ b/papersurfer/papersurfer.py @@ -251,7 +251,7 @@ class Papersurfer: """Open submit paper dialog.""" self._pile = urwid.Pile( [ - PostDialog(self.mtm, close=self.h_close_dialog) + PostDialog(self.mtm, self.h_close_dialog, self.mainloop) ] ) self._over = urwid.Overlay( @@ -322,7 +322,10 @@ class PostDialog(urwid.WidgetWrap): [Submit] [Close] """ - def __init__(self, mattermost, close): + def __init__(self, mattermost, close, loop): + self._loop = loop + self.alarm_handle = None + self.doi = None self.msg = None self.mattermost = mattermost @@ -371,11 +374,18 @@ class PostDialog(urwid.WidgetWrap): return msg def h_input(self, _, doi): - """Handle doi input field.""" - self.doi_result.set_text("... loading ...") + """Handle doi input field and debounce.""" + self.doi_result.set_text("") self.doi = None self.msg = None + self._loop.remove_alarm(self.alarm_handle) + self.alarm_handle = self._loop.set_alarm_in(.5, self.search_doi, doi) + + def search_doi(self, _loop, doi): + """Trigger search for paper ref by doi and update ui.""" + self.doi_result.set_text("... loading ...") + self._loop.draw_screen() if Doi().extract_doi(doi): paper = Doi().get_info(doi) if paper: @@ -386,6 +396,8 @@ class PostDialog(urwid.WidgetWrap): self.doi_result.set_text(self.create_mgs(paper)) self.doi = doi self.msg = self.create_mgs(paper) + else: + self.doi_result.set_text("Doi not found.") return self.doi_result.set_text("invalid doi")