Class: Command::Clean
Instance Attribute Summary
Attributes inherited from CommandBase
#stream_io
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from CommandBase
#disable_logging, #display_help!, execute!, #execute!, #force_change_settings_function, help, #hook_call, #load_local_settings, #tagname_to_ids
Constructor Details
#initialize ⇒ Clean
Returns a new instance of Clean.
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# File 'lib/command/clean.rb', line 18
def initialize
super("[<target> ...] [options]")
@opt.separator <<-EOS
・サブタイトルの変更等により参照されなくなったゴミファイルを削除します。
・対象小説を指定しなかった場合は直前に変換した小説について検査します。
Examples:
narou clean # 直前に変換した小説について検査
narou clean 6
narou clean 6 -f # 実際に削除
narou clean --all # 全小説について検査
narou clean -af # 全小説について検査して、実際に削除
Options:
EOS
@opt.on("-f", "--force", "指定した小説のゴミファイルを実際に削除する") {
@options["force"] = true
}
@opt.on("-n", "--dry-run", "指定した小説のゴミファイルを表示する") {
@options["force"] = false
}
@opt.on("-a", "--all", "全小説を検査する") {
@options["all"] = true
}
end
|
Class Method Details
.oneline_help ⇒ Object
14
15
16
|
# File 'lib/command/clean.rb', line 14
def self.oneline_help
"ゴミファイルを削除します"
end
|
Instance Method Details
#clean_all_directories(is_remove) ⇒ Object
#clean_directory(dir, is_remove) ⇒ Object
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/command/clean.rb', line 82
def clean_directory(dir, is_remove)
return unless dir
return unless File.directory?(dir)
return unless File.exist?(File.join(dir, Downloader::TOC_FILE_NAME))
orphans = find_orphans(dir)
orphans.each do |path|
puts path
FileUtils.remove_entry_secure(path) if is_remove
end
end
|
#execute(argv) ⇒ Object
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# File 'lib/command/clean.rb', line 45
def execute(argv)
super
if @options["all"]
clean_all_directories(@options["force"])
return
end
if argv.empty?
latest_id = Inventory.load("latest_convert")["id"]
if latest_id
dir = Downloader.get_novel_data_dir_by_target(latest_id)
if dir
clean_directory(dir, @options["force"])
else
error "#{latest_id} は存在しません"
end
end
return
end
tagname_to_ids(argv)
argv.each do |target|
dir = Downloader.get_novel_data_dir_by_target(target)
if dir
clean_directory(dir, @options["force"])
else
error "#{target} は存在しません"
end
end
end
|
#find_orphans(dir) ⇒ Object
93
94
95
96
97
98
99
100
101
102
103
104
|
# File 'lib/command/clean.rb', line 93
def find_orphans(dir)
orphans = []
toc = Downloader.get_toc_data(dir)
items = toc["subtitles"].map { |item| "#{item['index']} #{item['file_subtitle']}" }
Dir.glob(File.join(dir, Downloader::RAW_DATA_DIR_NAME, "*.txt")).each do |path|
orphans.push(path) unless items.include?(File.basename(path, ".*"))
end
Dir.glob(File.join(dir, Downloader::SECTION_SAVE_DIR_NAME, "*.yaml")).each do |path|
orphans.push(path) unless items.include?(File.basename(path, ".*"))
end
orphans
end
|