diff --git a/README.md b/README.md index b1ef8e1..9c3391d 100644 --- a/README.md +++ b/README.md @@ -40,4 +40,5 @@ make - After some time passes between now and cache moddate and it's not watched, then query and update it - Update cache entry is modify is used - Pretty hashing with color and progress bars and the other fancy stuff +- Keep track of files not in AniDB. Maybe with a NULL lid? - Write -h page, and maybe a man page too diff --git a/src/api.c b/src/api.c index c58012c..47c8f55 100644 --- a/src/api.c +++ b/src/api.c @@ -446,7 +446,7 @@ static void api_ratelimit_sent() clock_gettime(API_CLOCK, &api_last_packet); } -static void api_ratelimit() +static enum error api_ratelimit() { struct timespec ts = {0}; uint64_t msdiff, mswait; @@ -457,7 +457,7 @@ static void api_ratelimit() if (api_packet_count <= API_FREESEND) { uio_debug("This packet is for free! Yay :D (%d/%d)", api_packet_count, API_FREESEND); - return; + return NOERR; } clock_gettime(API_CLOCK, &ts); @@ -465,7 +465,7 @@ static void api_ratelimit() uio_debug("Time since last packet: %ld ms", msdiff); if (msdiff >= msrate) - return; /* No ratelimiting is needed */ + return NOERR; /* No ratelimiting is needed */ /* Need ratelimit, so do it here for now */ mswait = msrate - msdiff; @@ -473,11 +473,15 @@ static void api_ratelimit() MS_TO_TIMESPEC_L(ts, mswait); if (nanosleep(&ts, NULL) == -1) { - if (errno == EINTR) + if (errno == EINTR) { uio_error("Nanosleep got interrupted"); - else + return ERR_SHOULD_EXIT; + } else { uio_error("Nanosleep failed"); + } } + + return NOERR; } /* @@ -489,7 +493,8 @@ static ssize_t api_send(char *buffer, size_t data_len, size_t buf_size) ssize_t read_len; int en; - api_ratelimit(); + if (api_ratelimit() == ERR_SHOULD_EXIT) + return -2; uio_debug("{Api}: Sending: %.*s", (int)data_len, buffer); if (api_encryption) data_len = api_encrypt(buffer, data_len); diff --git a/src/cmd_add.c b/src/cmd_add.c index 2f2cbdf..af534aa 100644 --- a/src/cmd_add.c +++ b/src/cmd_add.c @@ -103,6 +103,11 @@ static enum error cmd_add_apisend(const char *path, const uint8_t *hash, free(x->other); return NOERR; } + if (r.code == APICODE_NO_SUCH_FILE) { + uio_error("This file does not exists in the AniDB databse: %s", + path); + return NOERR; + } if (r.code != APICODE_MYLIST_ENTRY_ADDED) { uio_error("Mylistadd failure: %hu", r.code); return ERR_CMD_FAILED;