ecdict 1.2.alpha2 → 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 +99 -66
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 473f0731744d4a659730af33b6f716f0b84469b1ad00d209b84cadc5993113e4
4
- data.tar.gz: 59dc212296d826b0b64f44b8167bed14024db904cc50fb58ed17efc49d1814ed
3
+ metadata.gz: 5d3b7af98d6ca07e5b9228c8ed515af5250f194b74ff1b5b8a15cc4a53418d48
4
+ data.tar.gz: 0ac17588afaa66aaddc89b65a870ccebf7d8318dfdc8526f1d2ba804d4624897
5
5
  SHA512:
6
- metadata.gz: 1d049b3ced8252ca2cece8f46c797bcff109ea32c4762d21ff401aab071e2f0f71643bb1c22d0224dc6255440dda08ac0a0f317b0b45b05a67c1b368c0ef24b1
7
- data.tar.gz: 235716b3c4589ae628ec798ef7b367d4a78aedd663182410b88be38872e564afb95bc1509b62e35e46f33f9509f0209c0ca3934961aa7ce70072e19e95ca09d1
6
+ metadata.gz: f8e715abe0412e94f79739a43cbabd063211d50977c4d7d8dbb49851cdedfd51f9ab4847b91d046a817c64c240baff591a37fd00d7ea45ee13c119c9afce61c8
7
+ data.tar.gz: ab5ec984d53c633ce72f5a557e5f7f7aab91f395cf24d8706562bbeef5a4efd9d3c653879a28170a0b6ea1dc1b05c819022656e29b97c8977e734a5508940d0e
data/bin/ecdict CHANGED
@@ -15,16 +15,25 @@
15
15
  # 1. ecdict installer
16
16
  # 2. ecdict cmd
17
17
  # 3. ecdict repl
18
+ #
19
+ # Exit -1: 下载原始数据失败
20
+ # Exit -2: 解压原始数据至CSV失败
21
+ # EXit -3: 从CSV生成数据库失败
22
+ # Exit 1: 无词典
23
+ # Exit 2: 缺少参数
24
+ #
25
+ # 未搜索到结果并不认为是错误
18
26
  # ------------------------------------------------------
19
27
 
20
28
  require 'sqlite3'
21
29
 
22
- ECDICT_STORAGE = File.expand_path("~/.local/share/ecdict")
23
- 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
+
24
33
  ECDictDB = File.join(ECDICT_STORAGE, 'ecdict.db')
25
34
  ECDictCSV = File.join(ECDICT_STORAGE, 'ecdict.csv')
26
35
 
27
- ECDICT_GEM_VERSION = "1.2.alpha2"
36
+ ECDICT_GEM_VERSION = "1.2.alpha5"
28
37
 
29
38
  # 这个版本是我从上游下载的CSV后自己压缩的
30
39
  # 这个文件的实际创建日期(上游作者创建)是2017/06/04
@@ -38,6 +47,16 @@ require 'fileutils'
38
47
  FileUtils.mkdir_p(ECDICT_STORAGE)
39
48
  $DB = SQLite3::Database.new ECDictDB
40
49
 
50
+ def close_db
51
+ $DB.close if $DB
52
+ end
53
+
54
+ def close_db_and_exit(num = 0)
55
+ close_db
56
+ exit num
57
+ end
58
+
59
+
41
60
 
42
61
  ####################
43
62
  # helper: for color
@@ -65,8 +84,8 @@ def cyan(str) "\e[36m#{str}\e[0m" end
65
84
 
66
85
  def check_download_integrity
67
86
  require 'digest'
68
- cont = File.read(ECDictRAWDATA)
69
- sha256 = Digest::SHA256.hexdigest(cont)
87
+ return false if !File.exists?(ECDICT_RAW_DATA)
88
+ sha256 = Digest::SHA256.file(ECDICT_RAW_DATA).hexdigest
70
89
  if ECDICT_DICT_SHA256 == sha256
71
90
  true
72
91
  else
@@ -75,31 +94,47 @@ def check_download_integrity
75
94
  end
76
95
 
77
96
 
78
- def download_ecdict_data
97
+ def download_ecdict_raw_data
79
98
 
80
- if File.exists?(ECDictRAWDATA) && check_download_integrity
81
- puts "=> 已存在原始数据文件#{ECDictRAWDATA}, 无需再次下载"
99
+ if File.exists?(ECDICT_RAW_DATA) && check_download_integrity
100
+ puts "=> 已存在原始数据文件#{ECDICT_RAW_DATA}, 无需再次下载"
82
101
  else
83
102
 
84
- if File.exists?(ECDictRAWDATA)
85
- puts "=> 删除已存在但不完整的数据"
86
- 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)
87
123
  end
88
124
 
89
125
  begin
90
126
  puts "=> 使用Git从#{ECDICT_DICT_DOWNLOAD_LINK}获取原始数据库文件"
91
- system("git -C #{ECDICT_STORAGE} clone #{ECDICT_DICT_DOWNLOAD_LINK} ")
92
- FileUtils.cp(File.join(ECDICT_STORAGE, 'ecdict-data', 'ecdict-csv.7z'), ECDICT_STORAGE)
93
- 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)
94
130
  rescue StandardError => e
95
131
  puts "=> #{e.message}"
96
- puts "=> Git获取原始数据库文件失败"
97
- FileUtils.rm(ECDictRAWDATA)
132
+ FileUtils.rm(ECDICT_RAW_DATA) rescue nil
133
+ return false
98
134
  else
99
135
  puts "=> 下载完成!"
100
136
  end
101
137
  end
102
-
103
138
  true
104
139
  end
105
140
 
@@ -119,12 +154,12 @@ def decompress_7z_to_csv()
119
154
  end
120
155
 
121
156
 
122
- File.open(ECDictRAWDATA, "rb") do |file|
123
- 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)"
124
159
  SevenZipRuby::Reader.extract_all(file, ECDICT_STORAGE)
125
160
  end
126
161
 
127
- puts "=> 已成功解压出ecdict.csv(#{File.size(ECDictCSV)/1024/1024}MB)"
162
+ puts "=> 已成功解压出ecdict.csv(#{ '%.2f' % (File.size(ECDictCSV)/1024.0/1024) }MB)"
128
163
  true
129
164
  end
130
165
 
@@ -153,9 +188,6 @@ end
153
188
  # 2. create table in the db
154
189
  # 3. insert data from CSV into the table
155
190
  #
156
- # exit 1 : create db failed
157
- # exit 2 : insert data failed
158
- #
159
191
  def generate_sqlite_db()
160
192
 
161
193
  # SQLite3::Database.new已经生成了该文件,所以需要提前判断到底是否存在
@@ -172,9 +204,6 @@ def generate_sqlite_db()
172
204
  end
173
205
  end
174
206
 
175
- def db_close
176
- $DB.close if $DB
177
- end
178
207
 
179
208
  # 共15个字段,存的时候只需要14个
180
209
  # 1.id 主键,自增
@@ -224,9 +253,9 @@ EOF
224
253
  rescue Exception => e
225
254
  puts "=> #{e.message}"
226
255
  puts "=> 创建数据库文件#{ECDictDB}失败,或表`ecdict`生成失败"
227
- db_close
256
+ close_db
228
257
  File.delete(ECDictDB)
229
- exit 1
258
+ return false
230
259
  end
231
260
 
232
261
 
@@ -289,24 +318,28 @@ EOF
289
318
  rescue Exception => e
290
319
  puts "=> #{e.message}"
291
320
  puts "=> 数据库插入信息失败"
321
+ close_db
292
322
  File.delete(ECDictDB)
293
- db_close
294
- exit 2
323
+ return false
295
324
  end
296
325
  puts
297
326
  puts "=> 数据库#{ECDictDB}已完整生成"
298
- db_close
327
+ close_db
328
+ return true
299
329
  end
300
330
 
301
331
 
302
332
  def download_and_install_ecdict_data
303
- download_ecdict_data || ( puts("\e[31m=> 下载失败,安装取消!\e[0m") || exit(-1) )
333
+ download_ecdict_raw_data || ( puts("\e[31m=> 下载失败,安装取消!\e[0m") || exit(-1) )
304
334
  decompress_7z_to_csv || ( puts("\e[31m=> 解压失败,安装取消!\e[0m") || exit(-2) )
305
335
  generate_sqlite_db || ( puts("\e[31m=> 生成数据库失败,安装取消!\e[0m") || exit(-3) )
306
336
  puts
307
- puts "=> Hooray! 词典数据下载安装完成! 请尝试使用:"
308
- puts "=> 1. ecdict word 查询单词 "
309
- puts "=> 2. ecdict -r 进入交互式查询REPL"
337
+ puts "Hooray! 词典数据下载安装完成! 请尝试使用:\n\n"
338
+ puts " 1. ecdict word 查询单词 "
339
+ puts " 2. ecdict -r 进入交互式查询REPL"
340
+ puts " 3. ecdict -c 中文 搜索中文单词"
341
+ puts " 4. ecdict -cp 中文 搜索中文短语"
342
+ puts
310
343
  end
311
344
 
312
345
 
@@ -326,8 +359,8 @@ end
326
359
  def reply_once(query)
327
360
 
328
361
  if !check_db_integrity
329
- puts "ecdict: 数据库不存在或数据库不完整,请使用ecdict -i来下载安装词典数据"
330
- exit -1
362
+ puts "ecdict: 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
363
+ close_db_and_exit(1)
331
364
  end
332
365
 
333
366
  tables = []
@@ -346,8 +379,9 @@ def reply_once(query)
346
379
  end
347
380
 
348
381
  if rows.empty?
349
- puts "ecdict: 未找到结果,请检查单词拼写是否正确",""
350
- exit 2
382
+ puts "ecdict: 未找到结果,请检查单词拼写是否正确"
383
+ close_db
384
+ return
351
385
  else
352
386
  line = rows[0]
353
387
  phonetic,trans,definition,exchange = line[0],line[1],line[2],line[3]
@@ -393,11 +427,11 @@ def chinese_search(cn_word, support_phrase: false)
393
427
 
394
428
  if cn_word.empty?
395
429
  puts "ecdict: 请输入要查询的中文,或使用`ecdict -h`查看帮助"
396
- exit 1
430
+ close_db_and_exit(2)
397
431
  end
398
432
  if !check_db_integrity
399
433
  puts "=> 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
400
- exit -1
434
+ close_db_and_exit(1)
401
435
  end
402
436
 
403
437
  if support_phrase
@@ -418,7 +452,8 @@ def chinese_search(cn_word, support_phrase: false)
418
452
  end
419
453
  if rows.empty?
420
454
  puts "ecdict: 未找到相关英文,请不要输入中文短语或短句,仅支持词的搜索"
421
- exit 2
455
+ close_db
456
+ return
422
457
  else
423
458
  # 有的时候并不是没有结果,而是被我们过滤掉了,对此确认一下
424
459
  found_a_word = false
@@ -471,7 +506,8 @@ def chinese_search(cn_word, support_phrase: false)
471
506
  if found_a_word
472
507
  puts
473
508
  else
474
- puts "ecdict: 抱歉,为了防止显示内容过多,已将可能的答案过滤了",""
509
+ puts "ecdict: 抱歉,为了防止显示内容过多,已将可能的答案过滤了"
510
+ puts "ecdict: 您可尝试使用`ecdict -cp`来搜索短语,扩大搜索范围"
475
511
  end
476
512
  # end of else
477
513
  end
@@ -541,12 +577,7 @@ def start_ecrepl
541
577
 
542
578
  if !check_db_integrity
543
579
  puts "ecdict: 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
544
- exit -1
545
- end
546
-
547
- def db_close_and_exit
548
- $DB.close if $DB
549
- exit 0
580
+ close_db_and_exit(1)
550
581
  end
551
582
 
552
583
  begin
@@ -561,7 +592,7 @@ def start_ecrepl
561
592
  require 'reline'
562
593
  Reline.completion_proc = lambda do |word|
563
594
  if word.strip.empty?
564
- return %w{1.输入单词查询 2.输入exit或按Ctrl-C退出}
595
+ return %w{1.输入单词并回车查询含义 2.输入单词时按一次tab键反馈搜索建议 3.输入exit或按Ctrl-C或Ctrl-D退出}
565
596
  end
566
597
 
567
598
  max_len = word.length + 4
@@ -604,7 +635,8 @@ def start_ecrepl
604
635
  while line = Reline.readline("\e[32mecdict> \e[0m", true)
605
636
  case word = line.chomp
606
637
  when 'exit'
607
- db_close_and_exit
638
+ close_db
639
+ return
608
640
  when ''
609
641
  # NOOP
610
642
  else
@@ -612,9 +644,10 @@ def start_ecrepl
612
644
  end
613
645
  end
614
646
  rescue Interrupt
615
- puts '^C'
647
+ # puts '^C'
616
648
  `stty #{stty_save}` if stty_save
617
- db_close_and_exit
649
+ close_db
650
+ return
618
651
  end
619
652
 
620
653
  end
@@ -624,14 +657,14 @@ end
624
657
  # remove everything in #{ECDICT_STORAGE}
625
658
  #
626
659
  def delete_cache
627
-
660
+ close_db
628
661
  begin
629
662
  FileUtils.rm_rf(ECDICT_STORAGE)
630
663
  rescue => e
631
- puts "=> #{e.message}"
632
- puts "=> 清空词典数据失败"
664
+ puts "ecdict: #{e.message}"
665
+ puts "ecdict: 清空词典数据失败"
633
666
  else
634
- puts "=> 清空词典数据完成"
667
+ puts "ecdict: 清空词典数据完成"
635
668
  end
636
669
  puts
637
670
  end
@@ -644,8 +677,6 @@ end
644
677
  def print_version
645
678
  puts <<EOH
646
679
  ecdict (v#{ECDICT_GEM_VERSION}): A courteous cli translator.
647
-
648
-
649
680
  EOH
650
681
 
651
682
  end
@@ -657,12 +688,12 @@ ecdict (v#{ECDICT_GEM_VERSION}): A courteous cli translator.
657
688
 
658
689
  usage:
659
690
 
660
- ecdict word => 查询单词 word
661
- ecdict -r => 启动ecdict repl交互式查询,输入exit或Ctrl-C退出
662
- ecdict -c 中文 => 搜索中文对应的英文单词
663
- ecdict -cp 中文 => 搜索中文对应的英文单词以及短语(结果可能很多)
691
+ ecdict word => 查询单词word
692
+ ecdict -r => 启动ecdict repl交互式查询,输入exit或Ctrl-C/D退出
693
+ ecdict -c 中文 => 搜索中文单词对应的英文单词
694
+ ecdict -cp 中文 => 搜索中文短语对应的英文短语
664
695
  ecdict -i => 下载ecdict词典数据并安装
665
- ecdict -v => 打印此Gem与词典版本号
696
+ ecdict -v => 打印此Gem版本号
666
697
  ecdict -h => 打印此帮助
667
698
  ecdict -d => 清空词典数据
668
699
 
@@ -678,10 +709,10 @@ end
678
709
  if ARGV.empty?
679
710
  if !check_db_integrity
680
711
  puts "ecdict: 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
681
- exit -1
712
+ close_db_and_exit(1)
682
713
  end
683
714
  puts "ecdict: 请输入要查询的词/词组 或使用`ecdict -h`查看帮助"
684
- exit 1
715
+ close_db_and_exit(2)
685
716
  end
686
717
 
687
718
  query = ARGV.shift
@@ -697,3 +728,5 @@ else
697
728
  reply_once(query)
698
729
  end
699
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.alpha2
4
+ version: 1.2.alpha5
5
5
  platform: ruby
6
6
  authors:
7
7
  - ccmywish