aboutsummaryrefslogtreecommitdiff
path: root/main.c
blob: 6655ed5e0e43f3bf03b5e5a0e2da2ddbc18dd5ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include "program.h"
#include "buffer.h"
#include "fileutils.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>

#include <dirent.h>

/*
static int program_buffer_write_callback(char *data, int size, void *userdata) {
    Buffer *buffer = userdata;
    buffer_append(buffer, data, size);
    return 0;
}
*/
static void usage(void) {
    fprintf(stderr, "usage: automedia COMMAND\n");
    fprintf(stderr, "\n");
    fprintf(stderr, "COMMANDS\n");
    fprintf(stderr, "  add           Add media to track\n");
    fprintf(stderr, "  sync          Start syncing tracked media\n");
    fprintf(stderr, "  downloaded    List downloaded media\n");
    exit(1);
}

static void usage_add(void) {
    fprintf(stderr, "usage: automedia add <type> <url|filename> [--name name] [--start-after start_after]\n");
    fprintf(stderr, "OPTIONS\n");
    fprintf(stderr, "  type             The type should be either rss or html\n");
    fprintf(stderr, "  url              The url to the rss or html\n");
    fprintf(stderr, "  filename         The filename of an episode of an existing serie to start track. Currently only works with rss on https://nyaa.si\n");
    fprintf(stderr, "  --name           The display name to be used for the media. Optional for rss, in which case the name will be retries from rss TITLE, required for html\n");
    fprintf(stderr, "  --start-after    The sync should start downloading media after this item. This --start-after value should be the title of the episode/chapter (Optional, default is to start from the first item)\n");
    fprintf(stderr, "EXAMPLES\n");
    fprintf(stderr, "  automedia add rss 'https://nyaa.si/?page=rss&q=Tejina-senpai+1080p&c=0_0&f=0&u=HorribleSubs'\n");
    fprintf(stderr, "  automedia add html 'https://manganelo.com/manga/read_naruto_manga_online_free3' --name Naruto\n");
    fprintf(stderr, "  automedia add rss '[Erai-raws] Saiki Kusuo no Psi Nan - Kanketsu-hen - 01 [1080p][Multiple Subtitle].mkv'\n");
    exit(1);
}

static void usage_sync(void) {
    fprintf(stderr, "usage: automedia sync <download_dir>\n");
    fprintf(stderr, "OPTIONS\n");
    fprintf(stderr, "  download_dir    The path where media should be downloaded to\n");
    fprintf(stderr, "EXAMPLES\n");
    fprintf(stderr, "  automedia sync /home/adam/Downloads/automedia\n");
    exit(1);
}

static void get_downloaded_items(const char *tracked_dir) {
    struct dirent *dir;
    DIR *d = opendir(tracked_dir);
    if(!d)
        return;

    char data_filepath[PATH_MAX] = {0};
    strcat(data_filepath, tracked_dir);
    strcat(data_filepath, "/");
    int data_filepath_length = strlen(data_filepath);

    while((dir = readdir(d)) != NULL) {
        /* We dont want hidden files (and . ..) */
        if(dir->d_name[0] == '.')
            continue;

        strcpy(data_filepath + data_filepath_length, dir->d_name);
        strcpy(data_filepath + data_filepath_length + strlen(dir->d_name), "/data");
        puts(data_filepath);
    }

    closedir(d);
}

static void command_downloaded(const char *rss_config_dir, const char *html_config_dir) {
    char rss_tracked_dir[PATH_MAX] = {0};
    strcat(rss_tracked_dir, rss_config_dir);
    strcat(rss_tracked_dir, "/tracked");

    char html_tracked_dir[PATH_MAX] = {0};
    strcat(html_tracked_dir, html_config_dir);
    strcat(html_tracked_dir, "/tracked");

    printf("files in %s: \n", rss_tracked_dir);
    get_downloaded_items(rss_tracked_dir);

    printf("files in %s: \n", html_tracked_dir);
    get_downloaded_items(html_tracked_dir);
}

int main(int argc, char **argv) {
    if(argc < 2)
        usage();

    const char *home_dir = get_home_dir();

    char rss_config_dir[PATH_MAX] = {0};
    strcat(rss_config_dir, home_dir);
    strcat(rss_config_dir, "/.config/automedia/rss");

    char html_config_dir[PATH_MAX] = {0};
    strcat(html_config_dir, home_dir);
    strcat(html_config_dir, "/.config/automedia/html");

    const char *command = argv[1];
    if(strcmp(command, "add") == 0) {
        usage_add();
    } else if(strcmp(command, "sync") == 0) {
        usage_sync();
    } else if(strcmp(command, "downloaded") == 0) {
        command_downloaded(rss_config_dir, html_config_dir);
    } else {
        fprintf(stderr, "Error: Invalid command %s\n", command);
        usage();
    }

/*
    Buffer buffer;
    buffer_init(&buffer);

    const char *args[] = { "curl", "-s", "-L", "-f", "https://google.com", NULL };
    program_exec(args, program_buffer_write_callback, &buffer);
    printf("program output: %.*s\n", (int)buffer.size, (char*)buffer.data);

    buffer_deinit(&buffer);
*/
    return 0;
}