From 9bec27a01d6302c39b95893923bca00c5d447114 Mon Sep 17 00:00:00 2001 From: Ben Kibbey Date: Fri, 31 Aug 2007 19:23:40 -0400 Subject: [PATCH] The DELETE key in the genre window will delete a genre or entire section from the menu. --- src/ncast.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++-------------- src/ncast.h | 44 ++++++++++++++++---------------- 2 files changed, 86 insertions(+), 41 deletions(-) diff --git a/src/ncast.c b/src/ncast.c index 3c59163..16762b5 100644 --- a/src/ncast.c +++ b/src/ncast.c @@ -445,32 +445,36 @@ static void usage(char *pn, FILE * fp) exit((fp == stdout) ? EXIT_SUCCESS : EXIT_FAILURE); } -static void free_genres_data() +static void free_genre_data_once(struct genre_s *g) { - int i; + if (g->ch) + curl_easy_cleanup(g->ch); - for (i = 0; i < ginfo.total; i++) { - if (genres[i].ch) - curl_easy_cleanup(genres[i].ch); + if (g->urldata) + free(g->urldata); - if (genres[i].urldata) - free(genres[i].urldata); + if (g->pick) { + free_picks(g->picks, g->pick); + free(g->picks); + } - if (genres[i].pick) { - free_picks(genres[i].picks, genres[i].pick); - free(genres[i].picks); - } + if (g->bookmark) { + free_picks(g->bookmarks, g->bookmark); + free(g->bookmarks); + } - if (genres[i].bookmark) { - free_picks(genres[i].bookmarks, genres[i].bookmark); - free(genres[i].bookmarks); - } + free(g->title); - free(genres[i].title); + if (g->url) + free(g->url); +} - if (genres[i].url) - free(genres[i].url); - } +static void free_genres_data() +{ + int i; + + for (i = 0; i < ginfo.total; i++) + free_genre_data_once(&genres[i]); ginfo.total = 0; } @@ -2810,6 +2814,44 @@ static void remove_bookmark() } } +static void delete_genre() +{ + int i, n; + + if (genres[ginfo.y].flags & GENRE_SECTION) { + int x; + + while (1) { + if (ginfo.total-1 == 0) + break; + + free_genre_data_once(&genres[ginfo.y]); + + for (i = ginfo.y; i < ginfo.total; i++) + memcpy(&genres[i], &genres[i+1], sizeof(struct genre_s)); + + genres = realloc(genres, ginfo.total-- * sizeof(struct genre_s)); + + if (genres[ginfo.y].flags & GENRE_SECTION || ginfo.y >= ginfo.total) + break; + } + } + else { + free_genre_data_once(&genres[ginfo.y]); + + for (i = ginfo.y; i < ginfo.total; i++) + memcpy(&genres[i], &genres[i+1], sizeof(struct genre_s)); + + genres = realloc(genres, ginfo.total * sizeof(struct genre_s)); + ginfo.total--; + } + + if (ginfo.y >= ginfo.total) + ginfo.y = ginfo.total - 1; + + update_genres_win(); +} + static void *progloop(void *data) { ncast_plugin *ncp = NULL; @@ -3024,6 +3066,9 @@ again: switch (focus) { case GENRE: switch (c) { + case KEY_DC: + delete_genre(); + break; case ' ': if (!(gp->flags & GENRE_SECTION)) break; diff --git a/src/ncast.h b/src/ncast.h index 6e34744..1a20b84 100644 --- a/src/ncast.h +++ b/src/ncast.h @@ -89,28 +89,28 @@ static struct binding_s { char *keyname; char *desc; } bindings[] = { - { - KEY_UP, "Up Arrow", "Previous menu entry"}, { - KEY_DOWN, "Down Arrow", "Next menu entry"}, { - KEY_END, "End", "Last menu entry"}, { - KEY_HOME, "Home", "First menu entry"}, { - KEY_NPAGE, "Page Down", "Next menu page"}, { - KEY_PPAGE, "Page Up", "Previous menu page"}, { - ' ', "Space", "Collapse/Uncollapse genre tree"}, { - KEY_RIGHT, "Right Arrow", "Show bookmarks for this genre"}, { - '\n', "Enter", "Select menu entry"}, { - '\t', "Tab", "Toggle window focus"}, { - '/', NULL, "Search the pick window/New pattern"}, { - 'n', NULL, "Next pattern match"}, { - 'N', NULL, "Previous pattern match"}, { - 'o', NULL, "Cycle sorting method of pick window"}, { - 'O', NULL, "Toggle reverse sorting"}, { - '?', NULL, "Pick information"}, { - '=', NULL, "Toggle pick Playing/Description"}, { - '-', NULL, NULL}, { - KEY_F(1), NULL, NULL}, { - 'Q', NULL, "Quit"}, { - -1, NULL, NULL} + { KEY_UP, "Up Arrow", "Previous menu entry"}, + { KEY_DOWN, "Down Arrow", "Next menu entry"}, + { KEY_END, "End", "Last menu entry"}, + { KEY_HOME, "Home", "First menu entry"}, + { KEY_NPAGE, "Page Down", "Next menu page"}, + { KEY_PPAGE, "Page Up", "Previous menu page"}, + { ' ', "Space", "Collapse/Uncollapse genre tree"}, + { KEY_DC, "Delete", "Remove selected genre"}, + { KEY_RIGHT, "Right Arrow", "Show bookmarks for this genre"}, + { '\n', "Enter", "Select menu entry"}, + { '\t', "Tab", "Toggle window focus"}, + { '/', NULL, "Search the pick window/New pattern"}, + { 'n', NULL, "Next pattern match"}, + { 'N', NULL, "Previous pattern match"}, + { 'o', NULL, "Cycle sorting method of pick window"}, + { 'O', NULL, "Toggle reverse sorting"}, + { '?', NULL, "Pick information"}, + { '=', NULL, "Toggle pick Playing/Description"}, + { '-', NULL, NULL}, + { KEY_F(1), NULL, NULL}, + { 'Q', NULL, "Quit"}, + { -1, NULL, NULL} }; static struct binding_s mainbindings[] = { -- 2.11.4.GIT