youtube: cgi and gopher: add user parameter - frontends - front-ends for some sites (experiment)
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 50bc403fd51f83912085837515187a006b4d2dab
 (DIR) parent eec1de3aa027fd3e75101a4829658c2af844fb25
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Wed, 22 Feb 2023 18:17:36 +0100
       
       youtube: cgi and gopher: add user parameter
       
       Afaik this parameter is not used (much) anymore in the search listing though.
       
       Diffstat:
         M youtube/cgi.c                       |      16 +++++++++++++++-
         M youtube/gopher.c                    |      12 +++++++++++-
       
       2 files changed, 26 insertions(+), 2 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], channelid[256];
       +static char rawsearch[4096], search[4096], order[16], page[64], channelid[256], userid[256];
        
        void
        parsecgi(void)
       @@ -75,6 +75,12 @@ parsecgi(void)
                        if (decodeparam(channelid, sizeof(channelid), p) == -1)
                                channelid[0] = '\0';
                }
       +
       +        /* user ID */
       +        if ((p = getparam(query, "user"))) {
       +                if (decodeparam(userid, sizeof(userid), p) == -1)
       +                        userid[0] = '\0';
       +        }
        }
        
        int
       @@ -189,6 +195,12 @@ render(struct search_response *r)
                                        OUT("\">");
                                        xmlencode(videos[i].channeltitle);
                                        OUT("</a>");
       +                        } else if (videos[i].userid[0]) {
       +                                OUT("<a href=\"?user=");
       +                                xmlencode(videos[i].channelid);
       +                                OUT("\">");
       +                                xmlencode(videos[i].channeltitle);
       +                                OUT("</a>");
                                } else {
                                        xmlencode(videos[i].channeltitle);
                                }
       @@ -286,6 +298,8 @@ main(void)
                        r = youtube_search(rawsearch, page, order);
                else if (channelid[0])
                        r = youtube_channel_videos(channelid);
       +        else if (userid[0])
       +                r = youtube_user_videos(userid);
                else
                        goto show;
                if (!r || r->nitems == 0) {
 (DIR) diff --git a/youtube/gopher.c b/youtube/gopher.c
       @@ -98,6 +98,10 @@ render(struct search_response *r)
                                OUT("1");
                                OUT(videos[i].channeltitle);
                                printf("\t%s?c=%s\t%s\t%s\r\n", requestpath, videos[i].channelid, host, port);
       +                } else if (videos[i].userid[0]) {
       +                        OUT("1");
       +                        OUT(videos[i].channeltitle);
       +                        printf("\t%s?u=%s\t%s\t%s\r\n", requestpath, videos[i].userid, host, port);
                        } else if (videos[i].channeltitle[0]) {
                                OUT("i");
                                OUT(videos[i].channeltitle);
       @@ -145,7 +149,7 @@ int
        main(void)
        {
                struct search_response *r = NULL;
       -        const char *channelid = "", *querystring = "", *p;
       +        const char *channelid = "", *userid = "", *querystring = "", *p;
                char search[1024];
        
                if (pledge("stdio dns inet rpath unveil", NULL) == -1)
       @@ -169,7 +173,11 @@ main(void)
                if (querystring[0] == 'c' && querystring[1] == '=') {
                        channelid = querystring + 2;
                        p = querystring = "";
       +        } else if (querystring[0] == 'u' && querystring[1] == '=') {
       +                userid = querystring + 2;
       +                p = querystring = "";
                }
       +
                if (querystring[0])
                        p = querystring;
                if (!p)
       @@ -186,6 +194,8 @@ main(void)
                        r = youtube_search(search, "", "relevance");
                else if (channelid[0])
                        r = youtube_channel_videos(channelid);
       +        else if (userid[0])
       +                r = youtube_channel_videos(userid);
                if (!r || r->nitems == 0) {
                        error("No videos found");
                        printf(".\r\n");