lib/command/remove.rb in narou-1.7.1 vs lib/command/remove.rb in narou-1.7.2

- old
+ new

@@ -1,87 +1,87 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2013 whiteleaf. All rights reserved. -# - -require_relative "../narou" -require_relative "../helper" - -module Command - class Remove < CommandBase - def self.oneline_help - "小説を削除します" - end - - def initialize - super("<target> [<target2> ...] [options]") - @opt.separator <<-EOS - - ・削除したい小説のNコード、URL、タイトルもしくはIDを指定して下さい。 - IDは #{@opt.program_name} list を参照して下さい。 - ・一度に複数の小説を指定する場合は空白で区切って下さい。 - ・削除確認をスキップするには -y オプションを有効にして下さい。 - ・削除するのはデータベースのインデックスだけで、変換済みテキストファイルやMOBIファイル等はそのまま残ります。ファイルをすべて削除する場合は --with-file オプションを指定して下さい。 - - Examples: - narou remove n9669bk - narou remove http://ncode.syosetu.com/n9669bk/ - narou remove n9669bk http://ncode.syosetu.com/n4259s/ - narou remove 0 1 -y - narou remove n9669bk --with-file # ファイルも完全に削除する - narou remove --all-ss # 連載小説をすべて削除する - narou remove --all-ss --with-file # 短編小説をファイルも含めてすべて削除 - narou r 0 -wy # ID:0を確認メッセージなしにファイルも含めて完全に削除する - - Options: - EOS - @opt.on("-y", "--yes", "削除確認メッセージを表示しない") { - @options["yes"] = true - } - @opt.on("-w", "--with-file", "小説の保存フォルダ・ファイルも全て削除する") { - @options["with-file"] = true - } - @opt.on("--all-ss", "短編小説をすべて削除する") { - @options["all-ss"] = true - } - end - - def get_all_short_story - Database.instance.get_object.values.select { |v| v["novel_type"] == 2 } - end - - def execute(argv) - super - if @options["all-ss"] - novels = get_all_short_story - if novels.size == 0 - puts "短編小説がひとつもありません" - return - end - argv += novels.map { |n| n["id"].to_s } - end - if argv.empty? - puts @opt.help - return - end - tagname_to_ids(argv) - argv.each_with_index do |target, i| - Helper.print_horizontal_rule if i > 0 - data = Downloader.get_data_by_target(target) - unless data - error "#{target} は存在しません" - next - end - title = data["title"] - if Narou.novel_frozen?(target) - puts "#{title} は凍結中です\n削除を中止しました" - next - end - unless @options["yes"] - next unless Helper.confirm("#{title} を#{(@options["with-file"] ? "“完全に”" : "")}削除しますか") - end - Downloader.remove_novel(target, @options["with-file"]) - puts "<bold><green>#{TermColorLight.escape(title)} を削除しました</green></bold>".termcolor - end - end - end -end +# -*- coding: utf-8 -*- +# +# Copyright 2013 whiteleaf. All rights reserved. +# + +require_relative "../narou" +require_relative "../helper" + +module Command + class Remove < CommandBase + def self.oneline_help + "小説を削除します" + end + + def initialize + super("<target> [<target2> ...] [options]") + @opt.separator <<-EOS + + ・削除したい小説のNコード、URL、タイトルもしくはIDを指定して下さい。 + IDは #{@opt.program_name} list を参照して下さい。 + ・一度に複数の小説を指定する場合は空白で区切って下さい。 + ・削除確認をスキップするには -y オプションを有効にして下さい。 + ・削除するのはデータベースのインデックスだけで、変換済みテキストファイルやMOBIファイル等はそのまま残ります。ファイルをすべて削除する場合は --with-file オプションを指定して下さい。 + + Examples: + narou remove n9669bk + narou remove http://ncode.syosetu.com/n9669bk/ + narou remove n9669bk http://ncode.syosetu.com/n4259s/ + narou remove 0 1 -y + narou remove n9669bk --with-file # ファイルも完全に削除する + narou remove --all-ss # 連載小説をすべて削除する + narou remove --all-ss --with-file # 短編小説をファイルも含めてすべて削除 + narou r 0 -wy # ID:0を確認メッセージなしにファイルも含めて完全に削除する + + Options: + EOS + @opt.on("-y", "--yes", "削除確認メッセージを表示しない") { + @options["yes"] = true + } + @opt.on("-w", "--with-file", "小説の保存フォルダ・ファイルも全て削除する") { + @options["with-file"] = true + } + @opt.on("--all-ss", "短編小説をすべて削除する") { + @options["all-ss"] = true + } + end + + def get_all_short_story + Database.instance.get_object.values.select { |v| v["novel_type"] == 2 } + end + + def execute(argv) + super + if @options["all-ss"] + novels = get_all_short_story + if novels.size == 0 + puts "短編小説がひとつもありません" + return + end + argv += novels.map { |n| n["id"].to_s } + end + if argv.empty? + puts @opt.help + return + end + tagname_to_ids(argv) + argv.each_with_index do |target, i| + Helper.print_horizontal_rule if i > 0 + data = Downloader.get_data_by_target(target) + unless data + error "#{target} は存在しません" + next + end + title = data["title"] + if Narou.novel_frozen?(target) + puts "#{title} は凍結中です\n削除を中止しました" + next + end + unless @options["yes"] + next unless Helper.confirm("#{title} を#{(@options["with-file"] ? "“完全に”" : "")}削除しますか") + end + Downloader.remove_novel(target, @options["with-file"]) + puts "<bold><green>#{TermColorLight.escape(title)} を削除しました</green></bold>".termcolor + end + end + end +end