youtube/cli: enable to sort via the command-line - frontends - front-ends for some sites (experiment)
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit d76cca97c957bab0b2a8dca7554837831522a8b6
 (DIR) parent 3079e32c8a2abdcb8b896e9fd32c0c0f6a407e59
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Fri,  5 May 2023 11:37:43 +0200
       
       youtube/cli: enable to sort via the command-line
       
       Only works with keywords search.
       
       Diffstat:
         M youtube/cli.c                       |      18 ++++++++++++++++--
       
       1 file changed, 16 insertions(+), 2 deletions(-)
       ---
 (DIR) diff --git a/youtube/cli.c b/youtube/cli.c
       @@ -320,7 +320,7 @@ render_video(struct video_response *r)
        static void
        usage(const char *argv0)
        {
       -        fprintf(stderr, "usage: %s [-t] <keyword> | <-c channelid> | <-u user> | <-i videoid>\n", argv0);
       +        fprintf(stderr, "usage: %s [-t] <keyword> | <-c channelid> | <-u user> | <-i videoid> | [-o relevance|views|rating]\n", argv0);
                exit(1);
        }
        
       @@ -331,6 +331,7 @@ main(int argc, char *argv[])
                struct video_response *vr = NULL;
                char search[1024];
                const char *keywords = NULL, *channelid = NULL, *user = NULL, *videoid = NULL;
       +        const char *order = "relevance";
                int i, usetsv = 0;
        
                if (pledge("stdio dns inet rpath unveil", NULL) == -1) {
       @@ -353,6 +354,12 @@ main(int argc, char *argv[])
                                        videoid = argv[i + 1];
                                        i++;
                                        break;
       +                        case 'o':
       +                                if (i + 1 >= argc)
       +                                        usage(argv[0]);
       +                                order = argv[i + 1];
       +                                i++;
       +                                break;
                                case 'u':
                                        if (i + 1 >= argc)
                                                usage(argv[0]);
       @@ -381,6 +388,13 @@ main(int argc, char *argv[])
        
                if (argc < 2 || !argv[1][0])
                        usage(argv[0]);
       +
       +        /* check order options */
       +        if (strcmp(order, "relevance") &&
       +            strcmp(order, "views") &&
       +            strcmp(order, "rating"))
       +                usage(argv[0]);
       +
                if (channelid) {
                        r = youtube_channel_videos(channelid);
                } else if (user) {
       @@ -396,7 +410,7 @@ main(int argc, char *argv[])
                } else if (keywords) {
                        if (!uriencode(keywords, search, sizeof(search)))
                                usage(argv[0]);
       -                r = youtube_search(search, "", "relevance");
       +                r = youtube_search(search, "", order);
                }
                if (!r || r->nitems == 0) {
                        OUT("No videos found\n");