youtube: when clicking a channel, show the latest videos - frontends - front-ends for some sites (experiment)
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit f47b9452628b9a68e527b7872771b08ef47e38c4
 (DIR) parent 2be30b4f834c64d4478e8cff231ee9b29601edc0
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Sat, 18 Feb 2023 11:32:41 +0100
       
       youtube: when clicking a channel, show the latest videos
       
       Diffstat:
         M youtube/cgi.c                       |      34 +++++++++++++++++++++----------
       
       1 file changed, 23 insertions(+), 11 deletions(-)
       ---
 (DIR) diff --git a/youtube/cgi.c b/youtube/cgi.c
       @@ -21,7 +21,7 @@ extern char **environ;
        static int curpage = 1;
        
        /* CGI parameters */
       -static char rawsearch[4096], search[4096], order[16], page[64];
       +static char rawsearch[4096], search[4096], order[16], page[64], channelid[256];
        
        void
        parsecgi(void)
       @@ -69,6 +69,12 @@ parsecgi(void)
                                exit(1);
                        }
                }
       +
       +        /* channel ID */
       +        if ((p = getparam(query, "chan"))) {
       +                if (decodeparam(channelid, sizeof(channelid), p) == -1)
       +                        channelid[0] = '\0';
       +        }
        }
        
        int
       @@ -177,13 +183,16 @@ render(struct search_response *r)
                                        "</span><br/>\n"
                                        "\t\t<span class=\"channel\">");
        
       -                        OUT("<a href=\"?q=");
       -                        xmlencode(videos[i].channeltitle);
       -                        OUT("&amp;o=");
       -                        xmlencode(order);
       -                        OUT("\">");
       -                        xmlencode(videos[i].channeltitle);
       -                        OUT("</a>");
       +                        if (videos[i].channelid[0]) {
       +                                OUT("<a href=\"?chan=");
       +                                xmlencode(videos[i].channelid);
       +                                OUT("\">");
       +                                xmlencode(videos[i].channeltitle);
       +                                OUT("</a>");
       +                        } else {
       +                                xmlencode(videos[i].channeltitle);
       +                        }
       +
                                if (videos[i].channelid[0] || videos[i].userid[0]) {
                                        OUT(" | <a title=\"");
                                        xmlencode(videos[i].channeltitle);
       @@ -197,6 +206,7 @@ render(struct search_response *r)
                                        }
                                        OUT("\">Atom feed</a>");
                                }
       +
                                OUT("</span><br/>\n");
                                if (videos[i].publishedat[0]) {
                                        OUT("                <span class=\"publishedat\">Published: ");
       @@ -272,10 +282,12 @@ main(void)
        
                parsecgi();
        
       -        if (!rawsearch[0])
       +        if (rawsearch[0])
       +                r = youtube_search(rawsearch, page, order);
       +        else if (channelid[0])
       +                r = youtube_channel_videos(channelid);
       +        else
                        goto show;
       -
       -        r = youtube_search(rawsearch, page, order);
                if (!r || r->nitems == 0) {
                        OUT("Status: 500 Internal Server Error\r\n\r\n");
                        exit(1);