make a function for the common code for opening/plumbing a feed or item - sfeed… | |
git clone git://git.codemadness.org/sfeed_curses | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 263fecaf915f6ae1ea2b2fea1f599502c9500b20 | |
parent 031a577c39cdd4fcf518569d2ca7e869e646313f | |
Author: Hiltjo Posthuma <[email protected]> | |
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(-) | |
--- | |
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 }, plu… | |
+} | |
+ | |
/* 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… | |
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… | |
- } | |
- } | |
+ 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].nrow… | |
- row = pane_row_get(p, p->pos); | |
- item = (struct item *)row->data; | |
- markread(p, p->pos, p->pos, 1); | |
- forkexec((char *[]) { plumbercmd, item->fields… | |
- } | |
+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': |