]> Nishi Git Mirror - odl.git/commitdiff
予行演習モード
author諏訪子 <suwako@076.moe>
Sun, 12 May 2024 08:23:49 +0000 (17:23 +0900)
committer諏訪子 <suwako@076.moe>
Sun, 12 May 2024 08:23:49 +0000 (17:23 +0900)
CHANGELOG.md
main.c
odl.1

index 349752d9094050fd9ceb4e8abe87bcaab341d35f..b2f98f897565c3636f9ceafa1786801b33504ad9 100644 (file)
@@ -5,6 +5,7 @@
 * HTTPステータス200だけの場合をダウンロードする様に
 * ダウンロードに失敗する場合、ファイルを消す
 * 1つ以上のファイルがダウンロードに失敗する場合、正しく状況を知らせる様に
+* 予行演習モード
 
 # 0.2.0
 * ファイル名はパラメートルを付いたら、ファイル名は拡張子に
diff --git a/main.c b/main.c
index 107522f78c353354af698ffa750576aa1425ddc4..4db1329abbf565c5ede0d4f7cd137335a10d4f96 100644 (file)
--- a/main.c
+++ b/main.c
@@ -8,10 +8,11 @@
 
 const char* sofname = "odl";
 const char* version = "0.3.0";
-const char* avalopt = "opv";
+const char* avalopt = "nopv";
 char* filename;
 
 int opt;
+int yokou_flag = 0;
 int output_flag = 0;
 int version_flag = 0;
 int already_flag = 0;
@@ -97,8 +98,20 @@ void handle_o(int argc, char* argv[]) {
   }
 }
 
+void dlsucmsg() {
+  if (yokou_flag == 0) printf("\nダウンロードに完了しました。\n");
+  else {
+    printf("\nダウンロードに完了しました。\n");
+    printf("予行演習モードですので、ファイルを保存していません。\n");
+    printf("保存するには、「-n」フラグを消して下さい。\n");
+  }
+}
+
 void flags(int opt, int argc, char* argv[]) {
   switch (opt) {
+    case 'n':
+      yokou_flag = 1;
+      break;
     case 'o':
       handle_o(argc, argv);
       break;
@@ -142,7 +155,14 @@ int downloader(CURL* curl, char* filename, const char* url) {
   curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_callback);
   curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
 
-  FILE* file = fopen(filename, "wb");
+  FILE* file = NULL;
+
+  if (yokou_flag == 0) {
+    file = fopen(filename, "wb");
+  } else {
+    file = fopen("/tmp/odl_test", "wb");
+  }
+
   if (!file) {
     perror("ファイルを開けません。");
     curl_easy_cleanup(curl);
@@ -150,20 +170,22 @@ int downloader(CURL* curl, char* filename, const char* url) {
   }
 
   curl_easy_setopt(curl, CURLOPT_WRITEDATA, file);
+
   long httpcode = 0;
   CURLcode res = curl_easy_perform(curl);
   curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpcode);
 
   fclose(file);
+  if (yokou_flag == 1) unlink("/tmp/odl_test");
 
   if (res != CURLE_OK) {
-    unlink(filename);
+    if (yokou_flag == 0) unlink(filename);
     fprintf(stderr, "\nダウンロードに失敗: %s\n", curl_easy_strerror(res));
     return -1;
   }
 
   if (res == CURLE_ABORTED_BY_CALLBACK || httpcode != 200) {
-    unlink(filename);
+    if (yokou_flag == 0) unlink(filename);
     fprintf(stderr, "\n%sをダウンロードに失敗: HTTP CODE: %ld\n", filename, httpcode);
     return -1;
   }
@@ -216,8 +238,9 @@ int main(int argc, char* argv[]) {
     if (dlstat == 0) onedlsuc = 1;
 
     curl_easy_cleanup(curl);
+
     if (onedlsuc == 1) {
-      printf("\nダウンロードに完了しました。\n");
+      dlsucmsg();
       return 0;
     }
 
@@ -239,7 +262,7 @@ int main(int argc, char* argv[]) {
 
   curl_easy_cleanup(curl);
   if (onedlsuc == 1) {
-    printf("\nダウンロードに完了しました。\n");
+    dlsucmsg();
     return 0;
   }
 
diff --git a/odl.1 b/odl.1
index ebee70a28064e7d32ba73dd35d604b3c88a13f90..f2ec362453f55ad1e0334612341a8db4b24094cc 100644 (file)
--- a/odl.1
+++ b/odl.1
@@ -3,11 +3,14 @@
 odl - onrain downloader
 .SH SYNOPSIS
 .B odl
-[-v] [-o \fI\,name\fR \fI\,file\fR] [-p] \fI\,file\fR [\fI\,...\fR]
+[-v] [-o \fI\,name\fR \fI\,file\fR] [-pn] \fI\,file\fR [\fI\,...\fR]
 .SH DESCRIPTION
 .PP
 ネットから簡単にファイルをダウンロード出来るツールです。
 .TP
+-\fB\,n\fR \fI\,file\fR \fI\,...\fR
+ファイル保存せずにダウンロードが可能かどうか確認出来る。
+.TP
 -\fB\,o\fR \fI\,name\fR \fI\,file\fR
 ファイル名を付いてダウンロードします。
 それで1回1つのファイルのみダウンロード可能です。