diff --git a/download.c b/download.c index 19c5da5..ccc35c5 100644 --- a/download.c +++ b/download.c @@ -283,6 +283,12 @@ void yg_download_free(gpointer data, gpointer user_data) free(d_ptr); } +/* wait for the download to finish */ +void yg_download_wait(YGD *d_ptr) +{ + pthread_join(d_ptr->thread, NULL); +} + /* get the download status */ int yg_download_status(YGD *d_ptr) { diff --git a/include/download.h b/include/download.h index 1a63d98..b45ec3f 100644 --- a/include/download.h +++ b/include/download.h @@ -44,6 +44,9 @@ extern YGD *yg_download_new(YGC *, char *); /* free download resources (GFunc() type function) */ extern void yg_download_free(gpointer, gpointer); +/* wait for the download to finish */ +extern void yg_download_wait(YGD *); + /* get the download status */ extern int yg_download_status(YGD *); diff --git a/main.c b/main.c index 4d4c96b..42b63bf 100644 --- a/main.c +++ b/main.c @@ -26,16 +26,23 @@ int main(int argc, char **argv) { GList *d_list = NULL; + YGD *d_ptr = NULL; YGC *c_ptr = NULL; YGI *i_ptr = NULL; pthread_t login; + int quiet = 0; int i; setlocale (LC_ALL, ""); - if (argc < 2) + if (argc >= 2 && !strcmp(argv[1], "-q")) { + quiet = 1; argv++; argc--; + } + + if (argc < 2 || (quiet && argc != 2)) { - yg_print("Usage: yg [URL]..."); + yg_print("Usage: yg [URL]...\n" + " yg -q [URL]"); return EXIT_SUCCESS; } @@ -51,39 +58,67 @@ int main(int argc, char **argv) for (i = 1; i < argc; ++i) { - YGD *d_ptr = NULL; - d_ptr = yg_download_new(c_ptr, argv[i]); if (d_ptr) d_list = g_list_append(d_list, d_ptr); } - if ((i_ptr = yg_interface_new(c_ptr, d_list)) == NULL) + if (!quiet && (i_ptr = yg_interface_new(c_ptr, d_list)) == NULL) { - g_list_foreach(d_list, yg_download_free, NULL); - g_list_free(d_list); - - yg_config_free(c_ptr); - yg_print("Insufficient memory to start the user interface"); - - return EXIT_FAILURE; + goto fail_d_list; } if (pthread_create(&login, NULL, (void *) yg_config_login_perform, c_ptr)) { - yg_interface_free(i_ptr); - yg_print("Unable to create the login thread"); - return EXIT_FAILURE; + if (quiet) + goto fail_d_list; + else + goto fail_interface; } - yg_interface_main_loop(i_ptr); + if (!quiet) + yg_interface_main_loop(i_ptr); pthread_join(login, NULL); - yg_interface_free(i_ptr); + + if (quiet) + { + if (!d_ptr) + { + yg_print("No download in quiet-mode."); + goto fail_d_list; + } + + yg_download_wait(d_ptr); + + if (yg_download_status(d_ptr) == YG_DOWNLOAD_OK_FINISHED) + fprintf(stdout, "%s\n", yg_download_file_name(d_ptr)); + else + { + fprintf(stderr, "YG: Download failed! (Status=%d)\n", yg_download_status(d_ptr)); + goto fail_d_list; + } + + g_list_foreach(d_list, yg_download_free, NULL); + g_list_free(d_list); + yg_config_free(c_ptr); + } + else + yg_interface_free(i_ptr); return EXIT_SUCCESS; + +fail_interface: + yg_interface_free(i_ptr); + return EXIT_FAILURE; + +fail_d_list: + g_list_foreach(d_list, yg_download_free, NULL); + g_list_free(d_list); + yg_config_free(c_ptr); + return EXIT_FAILURE; }