make a function for the common code for opening/plumbing a feed or item - sfeed_curses - sfeed curses UI (now part of sfeed, development is in sfeed)
(HTM) git clone git://git.codemadness.org/sfeed_curses
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 263fecaf915f6ae1ea2b2fea1f599502c9500b20
(DIR) parent 031a577c39cdd4fcf518569d2ca7e869e646313f
(HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Thu, 25 Mar 2021 22:38:21 +0100
make a function for the common code for opening/plumbing a feed or item
The common code was in the mouse handling and key handling and it is large
enough to be a separate function also.
Diffstat:
M sfeed_curses.c | 92 +++++++++++++++----------------
1 file changed, 44 insertions(+), 48 deletions(-)
---
(DIR) diff --git a/sfeed_curses.c b/sfeed_curses.c
@@ -1476,6 +1476,41 @@ feeds_reloadall(void)
updatetitle();
}
+void
+feed_open_selected(struct pane *p)
+{
+ struct feed *f;
+ struct row *row;
+
+ row = pane_row_get(p, p->pos);
+ f = (struct feed *)row->data;
+ feeds_set(f);
+ urls_read();
+ if (f->fp)
+ feed_load(f, f->fp);
+ urls_free();
+ /* redraw row: counts could be changed */
+ updatesidebar();
+ updatetitle();
+
+ if (layout == LayoutMonocle) {
+ selpane = PaneItems;
+ updategeom();
+ }
+}
+
+void
+feed_plumb_selected_item(struct pane *p)
+{
+ struct row *row;
+ struct item *item;
+
+ row = pane_row_get(p, p->pos);
+ item = (struct item *)row->data;
+ markread(p, p->pos, p->pos, 1);
+ forkexec((char *[]) { plumbercmd, item->fields[FieldLink], NULL }, plumberia);
+}
+
/* calculate optimal (default) size */
int
getsidebarsizedefault(void)
@@ -1670,7 +1705,6 @@ void
mousereport(int button, int release, int keymask, int x, int y)
{
struct pane *p;
- struct feed *f;
struct row *row;
struct item *item;
size_t i;
@@ -1718,30 +1752,10 @@ mousereport(int button, int release, int keymask, int x, int y)
if (!p->nrows || pos >= p->nrows)
break;
pane_setpos(p, pos);
- if (i == PaneFeeds) {
- row = pane_row_get(p, p->pos);
- f = (struct feed *)row->data;
- feeds_set(f);
- urls_read();
- if (f->fp)
- feed_load(f, f->fp);
- urls_free();
- /* redraw row: counts could be changed */
- updatesidebar();
- updatetitle();
-
- if (layout == LayoutMonocle) {
- selpane = PaneItems;
- updategeom();
- }
- } else if (i == PaneItems) {
- if (dblclick && !changedpane) {
- row = pane_row_get(p, p->pos);
- item = (struct item *)row->data;
- markread(p, p->pos, p->pos, 1);
- forkexec((char *[]) { plumbercmd, item->fields[FieldLink], NULL }, plumberia);
- }
- }
+ if (i == PaneFeeds)
+ feed_open_selected(&panes[PaneFeeds]);
+ else if (i == PaneItems && dblclick && !changedpane)
+ feed_plumb_selected_item(&panes[PaneItems]);
break;
case 2: /* right-click */
if (!p->nrows || pos >= p->nrows)
@@ -2300,29 +2314,11 @@ nextpage:
break;
case 'o': /* feeds: load, items: plumb URL */
case '\n':
- p = &panes[selpane];
- if (selpane == PaneFeeds && panes[selpane].nrows) {
- row = pane_row_get(p, p->pos);
- f = (struct feed *)row->data;
- feeds_set(f);
- urls_read();
- if (f->fp)
- feed_load(f, f->fp);
- urls_free();
- /* redraw row: counts could be changed */
- updatesidebar();
- updatetitle();
-
- if (layout == LayoutMonocle) {
- selpane = PaneItems;
- updategeom();
- }
- } else if (selpane == PaneItems && panes[selpane].nrows) {
- row = pane_row_get(p, p->pos);
- item = (struct item *)row->data;
- markread(p, p->pos, p->pos, 1);
- forkexec((char *[]) { plumbercmd, item->fields[FieldLink], NULL }, plumberia);
- }
+openitem:
+ if (selpane == PaneFeeds && panes[selpane].nrows)
+ feed_open_selected(&panes[PaneFeeds]);
+ else if (selpane == PaneItems && panes[selpane].nrows)
+ feed_plumb_selected_item(&panes[PaneItems]);
break;
case 'c': /* items: pipe TSV line to program */
case 'p':