ecdict 1.2.alpha4 → 1.2.alpha5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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