diff --git a/Language/pixiv_downloader.pot b/Language/pixiv_downloader.pot index 87e4ece..8bf8ce7 100644 --- a/Language/pixiv_downloader.pot +++ b/Language/pixiv_downloader.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: pixiv_downloader\n" -"POT-Creation-Date: 2022-03-10 22:29+0800\n" +"POT-Creation-Date: 2022-03-16 20:03+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -98,15 +98,15 @@ msgstr "" msgid "Can not parse expired time:" msgstr "" -#: cookies.rs:366 data/json.rs:53 settings.rs:418 webclient.rs:288 +#: cookies.rs:366 data/json.rs:53 settings.rs:418 webclient.rs:283 msgid "Failed to remove file:" msgstr "" -#: cookies.rs:372 data/json.rs:64 settings.rs:425 webclient.rs:294 +#: cookies.rs:372 data/json.rs:64 settings.rs:425 webclient.rs:289 msgid "Failed to create file:" msgstr "" -#: cookies.rs:379 data/json.rs:70 settings.rs:431 webclient.rs:307 +#: cookies.rs:379 data/json.rs:70 settings.rs:431 webclient.rs:302 msgid "Failed to write file:" msgstr "" @@ -114,136 +114,140 @@ msgstr "" msgid "Failed to unescape string:" msgstr "" -#: download.rs:18 pixiv_web.rs:58 +#: download.rs:19 pixiv_web.rs:58 msgid "Failed to initialize pixiv web api client." msgstr "" -#: download.rs:27 +#: download.rs:28 msgid "Warning: Web api client not logined, some future may not work." msgstr "" -#: download.rs:63 +#: download.rs:64 msgid "Failed to get page count." msgstr "" -#: download.rs:72 +#: download.rs:73 msgid "Failed to get pages' data." msgstr "" -#: download.rs:85 +#: download.rs:86 msgid "Failed to save metadata to JSON file." msgstr "" -#: download.rs:95 download.rs:142 +#: download.rs:96 download.rs:170 msgid "Failed to get original picture's link." msgstr "" -#: download.rs:101 download.rs:148 +#: download.rs:102 download.rs:176 msgid "Failed to get file name from url:" msgstr "" -#: download.rs:108 download.rs:114 download.rs:155 download.rs:161 +#: download.rs:117 download.rs:156 download.rs:195 download.rs:225 +msgid "Failed to add exif data to image:" +msgstr "" + +#: download.rs:136 download.rs:142 download.rs:205 download.rs:211 #: pixiv_web.rs:153 msgid "Failed to download image:" msgstr "" -#: download.rs:119 download.rs:166 +#: download.rs:147 download.rs:216 msgid "Downloaded image:" msgstr "" -#: download.rs:128 download.rs:175 -msgid "Failed to add exif data to image:" -msgstr "" - #: dur.rs:73 msgid "Failed to parse duration from string." msgstr "" -#: opts.rs:88 +#: opts.rs:91 msgid "Warning: The specified config file not found." msgstr "" -#: opts.rs:112 +#: opts.rs:115 msgid "Usage:" msgstr "" -#: opts.rs:114 +#: opts.rs:117 msgid "Download an artwork" msgstr "" -#: opts.rs:116 +#: opts.rs:119 msgid "Fix the config file" msgstr "" -#: opts.rs:118 +#: opts.rs:121 msgid "Print all available settings" msgstr "" -#: opts.rs:126 +#: opts.rs:129 msgid "Print help message." msgstr "" -#: opts.rs:130 +#: opts.rs:133 msgid "The location of config file." msgstr "" -#: opts.rs:136 settings_list.rs:11 +#: opts.rs:139 settings_list.rs:11 msgid "The location of cookies file. Used for web API." msgstr "" -#: opts.rs:142 settings_list.rs:12 +#: opts.rs:145 settings_list.rs:12 msgid "The language of translated tags." msgstr "" -#: opts.rs:145 +#: opts.rs:148 msgid "Verbose logging." msgstr "" -#: opts.rs:146 +#: opts.rs:149 msgid "Overwrite existing file." msgstr "" -#: opts.rs:147 +#: opts.rs:150 msgid "Skip overwrite existing file." msgstr "" -#: opts.rs:151 settings_list.rs:13 +#: opts.rs:154 settings_list.rs:13 msgid "Max retry count if request failed." msgstr "" -#: opts.rs:157 settings_list.rs:14 +#: opts.rs:160 settings_list.rs:14 msgid "The interval (in seconds) between two retries." msgstr "" -#: opts.rs:160 settings_list.rs:15 +#: opts.rs:163 settings_list.rs:15 msgid "Use data from webpage first." msgstr "" -#: opts.rs:180 +#: opts.rs:167 settings_list.rs:18 +msgid "Add/Update exif information to image files even when overwrite are disabled." +msgstr "" + +#: opts.rs:188 msgid "Unknown command." msgstr "" -#: opts.rs:190 +#: opts.rs:198 msgid "Failed to parse ID:" msgstr "" -#: opts.rs:196 +#: opts.rs:204 msgid "No URL or ID specified." msgstr "" -#: opts.rs:204 +#: opts.rs:212 msgid "No detailed command specified." msgstr "" -#: opts.rs:217 +#: opts.rs:225 msgid "Unknown config subcommand." msgstr "" -#: opts.rs:253 +#: opts.rs:261 msgid "Retry count must be an non-negative integer:" msgstr "" -#: opts.rs:262 +#: opts.rs:270 msgid "Failed to parse retry interval:" msgstr "" @@ -355,7 +359,7 @@ msgstr "" msgid "Do you want to delete file \"\"?" msgstr "" -#: utils.rs:51 webclient.rs:152 +#: utils.rs:51 webclient.rs:151 msgid "Can not parse URL:" msgstr "" @@ -363,39 +367,39 @@ msgstr "" msgid "Failed to get file name from path:" msgstr "" -#: webclient.rs:112 +#: webclient.rs:111 msgid "Failed to parse Set-Cookie header." msgstr "" -#: webclient.rs:117 +#: webclient.rs:116 msgid "Failed to convert to string:" msgstr "" -#: webclient.rs:159 +#: webclient.rs:158 msgid "Parameters should be object or array:" msgstr "" -#: webclient.rs:179 +#: webclient.rs:178 msgid "Parameters should be array:" msgstr "" -#: webclient.rs:183 +#: webclient.rs:182 msgid "Parameters need at least a value:" msgstr "" -#: webclient.rs:222 +#: webclient.rs:221 msgid "Retry after seconds." msgstr "" -#: webclient.rs:226 +#: webclient.rs:225 msgid "Retry times now." msgstr "" -#: webclient.rs:240 +#: webclient.rs:239 msgid "Error when request:" msgstr "" -#: webclient.rs:301 +#: webclient.rs:296 msgid "Error when downloading file:" msgstr "" diff --git a/Language/pixiv_downloader.zh_CN.po b/Language/pixiv_downloader.zh_CN.po index d58bc85..2717394 100644 --- a/Language/pixiv_downloader.zh_CN.po +++ b/Language/pixiv_downloader.zh_CN.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: pixiv_downloader\n" -"POT-Creation-Date: 2022-03-10 22:29+0800\n" -"PO-Revision-Date: 2022-03-10 22:30+0800\n" +"POT-Creation-Date: 2022-03-16 20:03+0800\n" +"PO-Revision-Date: 2022-03-16 20:05+0800\n" "Last-Translator: lifegpc \n" "Language-Team: \n" "Language: zh_CN\n" @@ -99,15 +99,15 @@ msgstr "无效的Cookie:" msgid "Can not parse expired time:" msgstr "无法解析过期时间:" -#: cookies.rs:366 data/json.rs:53 settings.rs:418 webclient.rs:288 +#: cookies.rs:366 data/json.rs:53 settings.rs:418 webclient.rs:283 msgid "Failed to remove file:" msgstr "无法删除文件:" -#: cookies.rs:372 data/json.rs:64 settings.rs:425 webclient.rs:294 +#: cookies.rs:372 data/json.rs:64 settings.rs:425 webclient.rs:289 msgid "Failed to create file:" msgstr "无法创建文件:" -#: cookies.rs:379 data/json.rs:70 settings.rs:431 webclient.rs:307 +#: cookies.rs:379 data/json.rs:70 settings.rs:431 webclient.rs:302 msgid "Failed to write file:" msgstr "无法写入文件:" @@ -115,136 +115,141 @@ msgstr "无法写入文件:" msgid "Failed to unescape string:" msgstr "无法反转义字符串:" -#: download.rs:18 pixiv_web.rs:58 +#: download.rs:19 pixiv_web.rs:58 msgid "Failed to initialize pixiv web api client." msgstr "无法初始化 Pixiv 网页 API 客户端。" -#: download.rs:27 +#: download.rs:28 msgid "Warning: Web api client not logined, some future may not work." msgstr "警告:Web API 客户端未登录,一些功能可能无法工作。" -#: download.rs:63 +#: download.rs:64 msgid "Failed to get page count." msgstr "无法获取页数。" -#: download.rs:72 +#: download.rs:73 msgid "Failed to get pages' data." msgstr "无法获取每页数据。" -#: download.rs:85 +#: download.rs:86 msgid "Failed to save metadata to JSON file." msgstr "无法将元数据保存到 JSON 文件。" -#: download.rs:95 download.rs:142 +#: download.rs:96 download.rs:170 msgid "Failed to get original picture's link." msgstr "无法获取原图链接。" -#: download.rs:101 download.rs:148 +#: download.rs:102 download.rs:176 msgid "Failed to get file name from url:" msgstr "无法从 URL 获取文件名:" -#: download.rs:108 download.rs:114 download.rs:155 download.rs:161 +#: download.rs:117 download.rs:156 download.rs:195 download.rs:225 +msgid "Failed to add exif data to image:" +msgstr "无法往图片增加 EXIF 数据:" + +#: download.rs:136 download.rs:142 download.rs:205 download.rs:211 #: pixiv_web.rs:153 msgid "Failed to download image:" msgstr "无法下载图片:" -#: download.rs:119 download.rs:166 +#: download.rs:147 download.rs:216 msgid "Downloaded image:" msgstr "已下载图片:" -#: download.rs:128 download.rs:175 -msgid "Failed to add exif data to image:" -msgstr "无法往图片增加 EXIF 数据:" - #: dur.rs:73 msgid "Failed to parse duration from string." msgstr "无法解析从字符串解析时长。" -#: opts.rs:88 +#: opts.rs:91 msgid "Warning: The specified config file not found." msgstr "警告:没有找到指定的设置文件。" -#: opts.rs:112 +#: opts.rs:115 msgid "Usage:" msgstr "使用方法:" -#: opts.rs:114 +#: opts.rs:117 msgid "Download an artwork" msgstr "下载一个作品" -#: opts.rs:116 +#: opts.rs:119 msgid "Fix the config file" msgstr "修复设置文件" -#: opts.rs:118 +#: opts.rs:121 msgid "Print all available settings" msgstr "打印所有可用的设置" -#: opts.rs:126 +#: opts.rs:129 msgid "Print help message." msgstr "打印帮助信息。" -#: opts.rs:130 +#: opts.rs:133 msgid "The location of config file." msgstr "设置文件的位置。" -#: opts.rs:136 settings_list.rs:11 +#: opts.rs:139 settings_list.rs:11 msgid "The location of cookies file. Used for web API." msgstr "cookies 文件的位置。用于网页 API。" -#: opts.rs:142 settings_list.rs:12 +#: opts.rs:145 settings_list.rs:12 msgid "The language of translated tags." msgstr "翻译后的标签语言。" -#: opts.rs:145 +#: opts.rs:148 msgid "Verbose logging." msgstr "启用详细内容输出。" -#: opts.rs:146 +#: opts.rs:149 msgid "Overwrite existing file." msgstr "覆盖已有文件。" -#: opts.rs:147 +#: opts.rs:150 msgid "Skip overwrite existing file." msgstr "跳过覆盖已有文件。" -#: opts.rs:151 settings_list.rs:13 +#: opts.rs:154 settings_list.rs:13 msgid "Max retry count if request failed." msgstr "请求失败时最大重试次数。" -#: opts.rs:157 settings_list.rs:14 +#: opts.rs:160 settings_list.rs:14 msgid "The interval (in seconds) between two retries." msgstr "两次尝试的间隔时间(单位:秒)。" -#: opts.rs:160 settings_list.rs:15 +#: opts.rs:163 settings_list.rs:15 msgid "Use data from webpage first." msgstr "优先使用来自网页的数据。" -#: opts.rs:180 +#: opts.rs:167 settings_list.rs:18 +msgid "" +"Add/Update exif information to image files even when overwrite are disabled." +msgstr "添加或更新图片的 EXIF 信息,即使不覆盖图片文件。" + +#: opts.rs:188 msgid "Unknown command." msgstr "未知指令。" -#: opts.rs:190 +#: opts.rs:198 msgid "Failed to parse ID:" msgstr "无法解析 ID:" -#: opts.rs:196 +#: opts.rs:204 msgid "No URL or ID specified." msgstr "没有指定网址或 ID。" -#: opts.rs:204 +#: opts.rs:212 msgid "No detailed command specified." msgstr "没有指定更详细的指令。" -#: opts.rs:217 +#: opts.rs:225 msgid "Unknown config subcommand." msgstr "未知的 config 子指令。" -#: opts.rs:253 +#: opts.rs:261 msgid "Retry count must be an non-negative integer:" msgstr "重试次数不能是负数:" -#: opts.rs:262 +#: opts.rs:270 msgid "Failed to parse retry interval:" msgstr "无法解析间隔时间:" @@ -360,7 +365,7 @@ msgstr "移除匹配的部分。" msgid "Do you want to delete file \"\"?" msgstr "你想要删除文件 吗?" -#: utils.rs:51 webclient.rs:152 +#: utils.rs:51 webclient.rs:151 msgid "Can not parse URL:" msgstr "无法解析 URL:" @@ -368,39 +373,39 @@ msgstr "无法解析 URL:" msgid "Failed to get file name from path:" msgstr "无法从路径获取文件名:" -#: webclient.rs:112 +#: webclient.rs:111 msgid "Failed to parse Set-Cookie header." msgstr "无法解析 Set-Cookie 头部。" -#: webclient.rs:117 +#: webclient.rs:116 msgid "Failed to convert to string:" msgstr "无法转换为字符串:" -#: webclient.rs:159 +#: webclient.rs:158 msgid "Parameters should be object or array:" msgstr "参数应该是对象或数组:" -#: webclient.rs:179 +#: webclient.rs:178 msgid "Parameters should be array:" msgstr "参数应该是数组:" -#: webclient.rs:183 +#: webclient.rs:182 msgid "Parameters need at least a value:" msgstr "参数需要至少含有一个值:" -#: webclient.rs:222 +#: webclient.rs:221 msgid "Retry after seconds." msgstr " 秒后重试。" -#: webclient.rs:226 +#: webclient.rs:225 msgid "Retry times now." msgstr "正在进行第 次重试。" -#: webclient.rs:240 +#: webclient.rs:239 msgid "Error when request:" msgstr "请求时发生错误:" -#: webclient.rs:301 +#: webclient.rs:296 msgid "Error when downloading file:" msgstr "下载文件时发生错误:" diff --git a/src/download.rs b/src/download.rs index 76f6d1e..86ddb02 100644 --- a/src/download.rs +++ b/src/download.rs @@ -110,6 +110,15 @@ impl Main { if !overwrite { #[cfg(feature = "exif")] { + if pw.helper.update_exif() { + if add_exifdata_to_image(&file_name, &datas, np).is_err() { + println!( + "{} {}", + gettext("Failed to add exif data to image:"), + file_name.to_str().unwrap_or("(null)") + ); + } + } np += 1; } continue; @@ -179,6 +188,15 @@ impl Main { } }; if !overwrite { + if pw.helper.update_exif() { + if add_exifdata_to_image(&file_name, &datas, 0).is_err() { + println!( + "{} {}", + gettext("Failed to add exif data to image:"), + file_name.to_str().unwrap_or("(null)") + ); + } + } return 0; } } diff --git a/src/opthelper.rs b/src/opthelper.rs index 4fee114..af33d97 100644 --- a/src/opthelper.rs +++ b/src/opthelper.rs @@ -104,4 +104,16 @@ impl<'a> OptHelper<'a> { } false } + + /// Return whether to add/update exif information to image files even + /// when overwrite are disabled. + pub fn update_exif(&self) -> bool { + if self.opt.update_exif { + return true; + } + if self.settings.have_bool("update-exif") { + return self.settings.get_bool("update-exif").unwrap(); + } + false + } } diff --git a/src/opts.rs b/src/opts.rs index ff1c541..3494a2f 100644 --- a/src/opts.rs +++ b/src/opts.rs @@ -59,6 +59,8 @@ pub struct CommandOpts { pub retry_interval: Option>, /// Use data from webpage first pub use_webpage: bool, + /// Add/Update exif information to image files even when overwrite are disabled + pub update_exif: bool, } impl CommandOpts { @@ -75,6 +77,7 @@ impl CommandOpts { retry: None, retry_interval: None, use_webpage: false, + update_exif: false, } } @@ -158,6 +161,11 @@ pub fn parse_cmd() -> Option { "LIST", ); opts.optflag("", "use-webpage", gettext("Use data from webpage first.")); + opts.optflag( + "", + "update-exif", + gettext("Add/Update exif information to image files even when overwrite are disabled."), + ); let result = match opts.parse(&argv[1..]) { Ok(m) => m, Err(err) => { @@ -265,5 +273,6 @@ pub fn parse_cmd() -> Option { re.as_mut().unwrap().retry_interval = Some(r.unwrap()); } re.as_mut().unwrap().use_webpage = result.opt_present("use-webpage"); + re.as_mut().unwrap().update_exif = result.opt_present("update-exif"); re } diff --git a/src/settings_list.rs b/src/settings_list.rs index ed7a427..f70907e 100644 --- a/src/settings_list.rs +++ b/src/settings_list.rs @@ -14,6 +14,8 @@ pub fn get_settings_list() -> Vec { SettingDes::new("retry-interval", gettext("The interval (in seconds) between two retries."), JsonValueType::Multiple, Some(check_retry_interval)).unwrap(), SettingDes::new("use-webpage", gettext("Use data from webpage first."), JsonValueType::Boolean, None).unwrap(), SettingDes::new("author-name-filters", gettext("Remove the part which after these parttens."), JsonValueType::Array, Some(check_author_name_filters)).unwrap(), + #[cfg(feature = "exif")] + SettingDes::new("update-exif", gettext("Add/Update exif information to image files even when overwrite are disabled."), JsonValueType::Boolean, None).unwrap(), ] }