ecdict 1.2.alpha4 → 1.2.alpha5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/ecdict +69 -45
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f8bbfbe1dbd141fc1eecda848fa890fd0e4d85001a6d8e090ca735203786b7dd
4
- data.tar.gz: c499d33a61ff61d7000538043fcf6691dd34310ccf5076e45c0e4054367708c3
3
+ metadata.gz: 5d3b7af98d6ca07e5b9228c8ed515af5250f194b74ff1b5b8a15cc4a53418d48
4
+ data.tar.gz: 0ac17588afaa66aaddc89b65a870ccebf7d8318dfdc8526f1d2ba804d4624897
5
5
  SHA512:
6
- metadata.gz: c8e94e4a5dd550cf36dc3e7820b7920c8b45a743a493ff10e1a68e7940d7a536a53078416efe9a984c7aaadb20e1ffc98414c9474d88bf584ccd48bb4e30167c
7
- data.tar.gz: cf720681affcbf4a6233bcb04f5bfd8d036a91133b06d73b0f4c4f4a79f96b350f8fc76189dce4cbecf042595d6f89130cd7a97bc43ed94f4ad0e295d7ac4034
6
+ metadata.gz: f8e715abe0412e94f79739a43cbabd063211d50977c4d7d8dbb49851cdedfd51f9ab4847b91d046a817c64c240baff591a37fd00d7ea45ee13c119c9afce61c8
7
+ data.tar.gz: ab5ec984d53c633ce72f5a557e5f7f7aab91f395cf24d8706562bbeef5a4efd9d3c653879a28170a0b6ea1dc1b05c819022656e29b97c8977e734a5508940d0e
data/bin/ecdict CHANGED
@@ -21,16 +21,19 @@
21
21
  # EXit -3: 从CSV生成数据库失败
22
22
  # Exit 1: 无词典
23
23
  # Exit 2: 缺少参数
24
+ #
25
+ # 未搜索到结果并不认为是错误
24
26
  # ------------------------------------------------------
25
27
 
26
28
  require 'sqlite3'
27
29
 
28
- ECDICT_STORAGE = File.expand_path("~/.local/share/ecdict")
29
- ECDictRAWDATA = File.join(ECDICT_STORAGE, 'ecdict-csv.7z')
30
+ ECDICT_STORAGE = File.expand_path("~/.local/share/ecdict")
31
+ ECDICT_RAW_DATA = File.join(ECDICT_STORAGE, 'ecdict-csv.7z')
32
+
30
33
  ECDictDB = File.join(ECDICT_STORAGE, 'ecdict.db')
31
34
  ECDictCSV = File.join(ECDICT_STORAGE, 'ecdict.csv')
32
35
 
33
- ECDICT_GEM_VERSION = "1.2.alpha4"
36
+ ECDICT_GEM_VERSION = "1.2.alpha5"
34
37
 
35
38
  # 这个版本是我从上游下载的CSV后自己压缩的
36
39
  # 这个文件的实际创建日期(上游作者创建)是2017/06/04
@@ -44,12 +47,12 @@ require 'fileutils'
44
47
  FileUtils.mkdir_p(ECDICT_STORAGE)
45
48
  $DB = SQLite3::Database.new ECDictDB
46
49
 
47
- def db_close
50
+ def close_db
48
51
  $DB.close if $DB
49
52
  end
50
53
 
51
- def db_close_and_exit(num = 0)
52
- db_close
54
+ def close_db_and_exit(num = 0)
55
+ close_db
53
56
  exit num
54
57
  end
55
58
 
@@ -81,7 +84,8 @@ def cyan(str) "\e[36m#{str}\e[0m" end
81
84
 
82
85
  def check_download_integrity
83
86
  require 'digest'
84
- sha256 = Digest::SHA256.file(ECDictRAWDATA).hexdigest
87
+ return false if !File.exists?(ECDICT_RAW_DATA)
88
+ sha256 = Digest::SHA256.file(ECDICT_RAW_DATA).hexdigest
85
89
  if ECDICT_DICT_SHA256 == sha256
86
90
  true
87
91
  else
@@ -90,31 +94,47 @@ def check_download_integrity
90
94
  end
91
95
 
92
96
 
93
- def download_ecdict_data
97
+ def download_ecdict_raw_data
94
98
 
95
- if File.exists?(ECDictRAWDATA) && check_download_integrity
96
- puts "=> 已存在原始数据文件#{ECDictRAWDATA}, 无需再次下载"
99
+ if File.exists?(ECDICT_RAW_DATA) && check_download_integrity
100
+ puts "=> 已存在原始数据文件#{ECDICT_RAW_DATA}, 无需再次下载"
97
101
  else
98
102
 
99
- if File.exists?(ECDictRAWDATA)
100
- puts "=> 删除已存在但不完整的数据"
101
- FileUtils.rm ECDictRAWDATA
103
+ if File.exists?(ECDICT_RAW_DATA)
104
+ puts "=> 删除已存在但不完整的原始数据文件"
105
+ FileUtils.rm ECDICT_RAW_DATA
106
+ end
107
+
108
+ # 若已经有拉取的仓库,先检查里面的数据是否可用
109
+ raw_data_git_dir = File.join(ECDICT_STORAGE, 'ecdict-data')
110
+ raw_data_git_dir_data = File.join(raw_data_git_dir, 'ecdict-csv.7z')
111
+
112
+ if Dir.exists?(raw_data_git_dir)
113
+ if File.exists?(raw_data_git_dir_data)
114
+ FileUtils.cp(raw_data_git_dir_data, ECDICT_STORAGE)
115
+ if check_download_integrity
116
+ puts "=> 从已经Git pull到的仓库中获取原始数据文件"
117
+ return true
118
+ else
119
+ FileUtils.rm ECDICT_RAW_DATA
120
+ end
121
+ end
122
+ FileUtils.rm_rf(raw_data_git_dir)
102
123
  end
103
124
 
104
125
  begin
105
126
  puts "=> 使用Git从#{ECDICT_DICT_DOWNLOAD_LINK}获取原始数据库文件"
106
- system("git -C #{ECDICT_STORAGE} clone #{ECDICT_DICT_DOWNLOAD_LINK} ")
107
- FileUtils.cp(File.join(ECDICT_STORAGE, 'ecdict-data', 'ecdict-csv.7z'), ECDICT_STORAGE)
108
- raise "Git拉取仓库数据不完整!" if !check_download_integrity
127
+ ret = system("git -C #{ECDICT_STORAGE} clone #{ECDICT_DICT_DOWNLOAD_LINK} ")
128
+ FileUtils.cp(File.join(ECDICT_STORAGE, 'ecdict-data', 'ecdict-csv.7z'), ECDICT_STORAGE) rescue nil
129
+ raise "Git拉取仓库过程失败,原始数据文件不完整!" if (ret != true || !check_download_integrity)
109
130
  rescue StandardError => e
110
131
  puts "=> #{e.message}"
111
- puts "=> Git获取原始数据库文件失败"
112
- FileUtils.rm(ECDictRAWDATA)
132
+ FileUtils.rm(ECDICT_RAW_DATA) rescue nil
133
+ return false
113
134
  else
114
135
  puts "=> 下载完成!"
115
136
  end
116
137
  end
117
-
118
138
  true
119
139
  end
120
140
 
@@ -134,12 +154,12 @@ def decompress_7z_to_csv()
134
154
  end
135
155
 
136
156
 
137
- File.open(ECDictRAWDATA, "rb") do |file|
138
- puts "=> 正在解压ecdict-csv.7z(#{file.size/1024/1024}MB)"
157
+ File.open(ECDICT_RAW_DATA, "rb") do |file|
158
+ puts "=> 正在解压ecdict-csv.7z(#{ '%.2f' % (file.size/1024.0/1024) }MB)"
139
159
  SevenZipRuby::Reader.extract_all(file, ECDICT_STORAGE)
140
160
  end
141
161
 
142
- puts "=> 已成功解压出ecdict.csv(#{File.size(ECDictCSV)/1024/1024}MB)"
162
+ puts "=> 已成功解压出ecdict.csv(#{ '%.2f' % (File.size(ECDictCSV)/1024.0/1024) }MB)"
143
163
  true
144
164
  end
145
165
 
@@ -233,7 +253,7 @@ EOF
233
253
  rescue Exception => e
234
254
  puts "=> #{e.message}"
235
255
  puts "=> 创建数据库文件#{ECDictDB}失败,或表`ecdict`生成失败"
236
- db_close
256
+ close_db
237
257
  File.delete(ECDictDB)
238
258
  return false
239
259
  end
@@ -298,19 +318,19 @@ EOF
298
318
  rescue Exception => e
299
319
  puts "=> #{e.message}"
300
320
  puts "=> 数据库插入信息失败"
301
- db_close
321
+ close_db
302
322
  File.delete(ECDictDB)
303
323
  return false
304
324
  end
305
325
  puts
306
326
  puts "=> 数据库#{ECDictDB}已完整生成"
307
- db_close
327
+ close_db
308
328
  return true
309
329
  end
310
330
 
311
331
 
312
332
  def download_and_install_ecdict_data
313
- download_ecdict_data || ( puts("\e[31m=> 下载失败,安装取消!\e[0m") || exit(-1) )
333
+ download_ecdict_raw_data || ( puts("\e[31m=> 下载失败,安装取消!\e[0m") || exit(-1) )
314
334
  decompress_7z_to_csv || ( puts("\e[31m=> 解压失败,安装取消!\e[0m") || exit(-2) )
315
335
  generate_sqlite_db || ( puts("\e[31m=> 生成数据库失败,安装取消!\e[0m") || exit(-3) )
316
336
  puts
@@ -340,7 +360,7 @@ def reply_once(query)
340
360
 
341
361
  if !check_db_integrity
342
362
  puts "ecdict: 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
343
- db_close_and_exit(1)
363
+ close_db_and_exit(1)
344
364
  end
345
365
 
346
366
  tables = []
@@ -360,7 +380,7 @@ def reply_once(query)
360
380
 
361
381
  if rows.empty?
362
382
  puts "ecdict: 未找到结果,请检查单词拼写是否正确"
363
- db_close
383
+ close_db
364
384
  return
365
385
  else
366
386
  line = rows[0]
@@ -407,11 +427,11 @@ def chinese_search(cn_word, support_phrase: false)
407
427
 
408
428
  if cn_word.empty?
409
429
  puts "ecdict: 请输入要查询的中文,或使用`ecdict -h`查看帮助"
410
- db_close_and_exit(2)
430
+ close_db_and_exit(2)
411
431
  end
412
432
  if !check_db_integrity
413
433
  puts "=> 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
414
- db_close_and_exit(1)
434
+ close_db_and_exit(1)
415
435
  end
416
436
 
417
437
  if support_phrase
@@ -432,7 +452,7 @@ def chinese_search(cn_word, support_phrase: false)
432
452
  end
433
453
  if rows.empty?
434
454
  puts "ecdict: 未找到相关英文,请不要输入中文短语或短句,仅支持词的搜索"
435
- db_close
455
+ close_db
436
456
  return
437
457
  else
438
458
  # 有的时候并不是没有结果,而是被我们过滤掉了,对此确认一下
@@ -486,7 +506,8 @@ def chinese_search(cn_word, support_phrase: false)
486
506
  if found_a_word
487
507
  puts
488
508
  else
489
- puts "ecdict: 抱歉,为了防止显示内容过多,已将可能的答案过滤了",""
509
+ puts "ecdict: 抱歉,为了防止显示内容过多,已将可能的答案过滤了"
510
+ puts "ecdict: 您可尝试使用`ecdict -cp`来搜索短语,扩大搜索范围"
490
511
  end
491
512
  # end of else
492
513
  end
@@ -556,7 +577,7 @@ def start_ecrepl
556
577
 
557
578
  if !check_db_integrity
558
579
  puts "ecdict: 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
559
- db_close_and_exit(1)
580
+ close_db_and_exit(1)
560
581
  end
561
582
 
562
583
  begin
@@ -571,7 +592,7 @@ def start_ecrepl
571
592
  require 'reline'
572
593
  Reline.completion_proc = lambda do |word|
573
594
  if word.strip.empty?
574
- return %w{1.输入单词查询 2.输入exit或按Ctrl-C退出}
595
+ return %w{1.输入单词并回车查询含义 2.输入单词时按一次tab键反馈搜索建议 3.输入exit或按Ctrl-C或Ctrl-D退出}
575
596
  end
576
597
 
577
598
  max_len = word.length + 4
@@ -614,7 +635,7 @@ def start_ecrepl
614
635
  while line = Reline.readline("\e[32mecdict> \e[0m", true)
615
636
  case word = line.chomp
616
637
  when 'exit'
617
- db_close
638
+ close_db
618
639
  return
619
640
  when ''
620
641
  # NOOP
@@ -623,9 +644,9 @@ def start_ecrepl
623
644
  end
624
645
  end
625
646
  rescue Interrupt
626
- puts '^C'
647
+ # puts '^C'
627
648
  `stty #{stty_save}` if stty_save
628
- db_close
649
+ close_db
629
650
  return
630
651
  end
631
652
 
@@ -636,7 +657,7 @@ end
636
657
  # remove everything in #{ECDICT_STORAGE}
637
658
  #
638
659
  def delete_cache
639
-
660
+ close_db
640
661
  begin
641
662
  FileUtils.rm_rf(ECDICT_STORAGE)
642
663
  rescue => e
@@ -667,12 +688,12 @@ ecdict (v#{ECDICT_GEM_VERSION}): A courteous cli translator.
667
688
 
668
689
  usage:
669
690
 
670
- ecdict word => 查询单词 word
671
- ecdict -r => 启动ecdict repl交互式查询,输入exit或Ctrl-C退出
672
- ecdict -c 中文 => 搜索中文对应的英文单词
673
- ecdict -cp 中文 => 搜索中文对应的英文单词以及短语(结果可能很多)
691
+ ecdict word => 查询单词word
692
+ ecdict -r => 启动ecdict repl交互式查询,输入exit或Ctrl-C/D退出
693
+ ecdict -c 中文 => 搜索中文单词对应的英文单词
694
+ ecdict -cp 中文 => 搜索中文短语对应的英文短语
674
695
  ecdict -i => 下载ecdict词典数据并安装
675
- ecdict -v => 打印此Gem与词典版本号
696
+ ecdict -v => 打印此Gem版本号
676
697
  ecdict -h => 打印此帮助
677
698
  ecdict -d => 清空词典数据
678
699
 
@@ -688,10 +709,10 @@ end
688
709
  if ARGV.empty?
689
710
  if !check_db_integrity
690
711
  puts "ecdict: 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
691
- db_close_and_exit(1)
712
+ close_db_and_exit(1)
692
713
  end
693
714
  puts "ecdict: 请输入要查询的词/词组 或使用`ecdict -h`查看帮助"
694
- db_close_and_exit
715
+ close_db_and_exit(2)
695
716
  end
696
717
 
697
718
  query = ARGV.shift
@@ -706,3 +727,6 @@ when "-cp" then chinese_search(ARGV.join, support_phrase: true)
706
727
  else
707
728
  reply_once(query)
708
729
  end
730
+
731
+ # ensure close db
732
+ close_db
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ecdict
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.alpha4
4
+ version: 1.2.alpha5
5
5
  platform: ruby
6
6
  authors:
7
7
  - ccmywish