ecdict 1.2.alpha3 → 1.2

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 +93 -60
  3. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 333ca8bfcd36397b8dcbc4d73052e497ff76f3e243aeca6af93828a3e45e9f20
4
- data.tar.gz: b8250c7e80b76b0f42d3e46e2dc01fc23b69d2c8546fb71323801cf97f24fcd1
3
+ metadata.gz: 65556d859da91e4cb0c380d0e2ce0281492d5b76c8c19e6f5c2d15e437abc630
4
+ data.tar.gz: bd7cb7ccef41256d2e9aa77e2071463f72a80cded391535066bcc494ec37d309
5
5
  SHA512:
6
- metadata.gz: 9c57d33dcc3503908527f3af5afcd7175073ff1225d3a81e004f723e18445f27b1d1f7a5808711bda4984aac396801f19d2cd10941e2301b4fa2bf1f9dea295b
7
- data.tar.gz: 3df6d4d09ca0e9494a5a1e290665cce693a198ab1ddb270018dc571414dd87e830630272178283afe75d25e538166c06d2076edf324a5e42f156107de5498e59
6
+ metadata.gz: 9496f766abef8779f58e4e4d755cf424ed33f6b6915f5c061d2b36a2e84907a318c2802912193e2d62766a917665927d4e462f01a38372bace44e6ba94dae4a1
7
+ data.tar.gz: 65e8fbc1e88028e92c8e37976201e554427aa875791335f5b44ebaa3482e846a35dae975344c40f2dd6c8c46d91ceb946d06324097465dabb8287ffa169b1dd6
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.alpha3"
36
+ ECDICT_GEM_VERSION = "1.2"
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,7 +84,8 @@ def cyan(str) "\e[36m#{str}\e[0m" end
65
84
 
66
85
  def check_download_integrity
67
86
  require 'digest'
68
- sha256 = Digest::SHA256.file(ECDictRAWDATA).hexdigest
87
+ return false if !File.exists?(ECDICT_RAW_DATA)
88
+ sha256 = Digest::SHA256.file(ECDICT_RAW_DATA).hexdigest
69
89
  if ECDICT_DICT_SHA256 == sha256
70
90
  true
71
91
  else
@@ -74,31 +94,47 @@ def check_download_integrity
74
94
  end
75
95
 
76
96
 
77
- def download_ecdict_data
97
+ def download_ecdict_raw_data
78
98
 
79
- if File.exists?(ECDictRAWDATA) && check_download_integrity
80
- puts "=> 已存在原始数据文件#{ECDictRAWDATA}, 无需再次下载"
99
+ if File.exists?(ECDICT_RAW_DATA) && check_download_integrity
100
+ puts "=> 已存在原始数据文件#{ECDICT_RAW_DATA}, 无需再次下载"
81
101
  else
82
102
 
83
- if File.exists?(ECDictRAWDATA)
84
- puts "=> 删除已存在但不完整的数据"
85
- 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)
86
123
  end
87
124
 
88
125
  begin
89
126
  puts "=> 使用Git从#{ECDICT_DICT_DOWNLOAD_LINK}获取原始数据库文件"
90
- system("git -C #{ECDICT_STORAGE} clone #{ECDICT_DICT_DOWNLOAD_LINK} ")
91
- FileUtils.cp(File.join(ECDICT_STORAGE, 'ecdict-data', 'ecdict-csv.7z'), ECDICT_STORAGE)
92
- 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)
93
130
  rescue StandardError => e
94
131
  puts "=> #{e.message}"
95
- puts "=> Git获取原始数据库文件失败"
96
- FileUtils.rm(ECDictRAWDATA)
132
+ FileUtils.rm(ECDICT_RAW_DATA) rescue nil
133
+ return false
97
134
  else
98
135
  puts "=> 下载完成!"
99
136
  end
100
137
  end
101
-
102
138
  true
103
139
  end
104
140
 
@@ -118,12 +154,12 @@ def decompress_7z_to_csv()
118
154
  end
119
155
 
120
156
 
121
- File.open(ECDictRAWDATA, "rb") do |file|
122
- 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)"
123
159
  SevenZipRuby::Reader.extract_all(file, ECDICT_STORAGE)
124
160
  end
125
161
 
126
- puts "=> 已成功解压出ecdict.csv(#{File.size(ECDictCSV)/1024/1024}MB)"
162
+ puts "=> 已成功解压出ecdict.csv(#{ '%.2f' % (File.size(ECDictCSV)/1024.0/1024) }MB)"
127
163
  true
128
164
  end
129
165
 
@@ -152,9 +188,6 @@ end
152
188
  # 2. create table in the db
153
189
  # 3. insert data from CSV into the table
154
190
  #
155
- # exit 1 : create db failed
156
- # exit 2 : insert data failed
157
- #
158
191
  def generate_sqlite_db()
159
192
 
160
193
  # SQLite3::Database.new已经生成了该文件,所以需要提前判断到底是否存在
@@ -171,9 +204,6 @@ def generate_sqlite_db()
171
204
  end
172
205
  end
173
206
 
174
- def db_close
175
- $DB.close if $DB
176
- end
177
207
 
178
208
  # 共15个字段,存的时候只需要14个
179
209
  # 1.id 主键,自增
@@ -223,9 +253,9 @@ EOF
223
253
  rescue Exception => e
224
254
  puts "=> #{e.message}"
225
255
  puts "=> 创建数据库文件#{ECDictDB}失败,或表`ecdict`生成失败"
226
- db_close
256
+ close_db
227
257
  File.delete(ECDictDB)
228
- exit 1
258
+ return false
229
259
  end
230
260
 
231
261
 
@@ -288,18 +318,19 @@ EOF
288
318
  rescue Exception => e
289
319
  puts "=> #{e.message}"
290
320
  puts "=> 数据库插入信息失败"
321
+ close_db
291
322
  File.delete(ECDictDB)
292
- db_close
293
- exit 2
323
+ return false
294
324
  end
295
325
  puts
296
326
  puts "=> 数据库#{ECDictDB}已完整生成"
297
- db_close
327
+ close_db
328
+ return true
298
329
  end
299
330
 
300
331
 
301
332
  def download_and_install_ecdict_data
302
- download_ecdict_data || ( puts("\e[31m=> 下载失败,安装取消!\e[0m") || exit(-1) )
333
+ download_ecdict_raw_data || ( puts("\e[31m=> 下载失败,安装取消!\e[0m") || exit(-1) )
303
334
  decompress_7z_to_csv || ( puts("\e[31m=> 解压失败,安装取消!\e[0m") || exit(-2) )
304
335
  generate_sqlite_db || ( puts("\e[31m=> 生成数据库失败,安装取消!\e[0m") || exit(-3) )
305
336
  puts
@@ -328,8 +359,8 @@ end
328
359
  def reply_once(query)
329
360
 
330
361
  if !check_db_integrity
331
- puts "ecdict: 数据库不存在或数据库不完整,请使用ecdict -i来下载安装词典数据"
332
- exit -1
362
+ puts "ecdict: 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
363
+ close_db_and_exit(1)
333
364
  end
334
365
 
335
366
  tables = []
@@ -348,8 +379,9 @@ def reply_once(query)
348
379
  end
349
380
 
350
381
  if rows.empty?
351
- puts "ecdict: 未找到结果,请检查单词拼写是否正确",""
352
- exit 2
382
+ puts "ecdict: 未找到结果,请检查单词拼写是否正确"
383
+ close_db
384
+ return
353
385
  else
354
386
  line = rows[0]
355
387
  phonetic,trans,definition,exchange = line[0],line[1],line[2],line[3]
@@ -395,11 +427,11 @@ def chinese_search(cn_word, support_phrase: false)
395
427
 
396
428
  if cn_word.empty?
397
429
  puts "ecdict: 请输入要查询的中文,或使用`ecdict -h`查看帮助"
398
- exit 1
430
+ close_db_and_exit(2)
399
431
  end
400
432
  if !check_db_integrity
401
433
  puts "=> 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
402
- exit -1
434
+ close_db_and_exit(1)
403
435
  end
404
436
 
405
437
  if support_phrase
@@ -420,7 +452,8 @@ def chinese_search(cn_word, support_phrase: false)
420
452
  end
421
453
  if rows.empty?
422
454
  puts "ecdict: 未找到相关英文,请不要输入中文短语或短句,仅支持词的搜索"
423
- exit 2
455
+ close_db
456
+ return
424
457
  else
425
458
  # 有的时候并不是没有结果,而是被我们过滤掉了,对此确认一下
426
459
  found_a_word = false
@@ -473,7 +506,8 @@ def chinese_search(cn_word, support_phrase: false)
473
506
  if found_a_word
474
507
  puts
475
508
  else
476
- puts "ecdict: 抱歉,为了防止显示内容过多,已将可能的答案过滤了",""
509
+ puts "ecdict: 抱歉,为了防止显示内容过多,已将可能的答案过滤了"
510
+ puts "ecdict: 您可尝试使用`ecdict -cp`来搜索短语,扩大搜索范围"
477
511
  end
478
512
  # end of else
479
513
  end
@@ -543,12 +577,7 @@ def start_ecrepl
543
577
 
544
578
  if !check_db_integrity
545
579
  puts "ecdict: 数据库不存在或数据库不完整,请使用`ecdict -i`来下载安装词典数据"
546
- exit -1
547
- end
548
-
549
- def db_close_and_exit
550
- $DB.close if $DB
551
- exit 0
580
+ close_db_and_exit(1)
552
581
  end
553
582
 
554
583
  begin
@@ -563,7 +592,7 @@ def start_ecrepl
563
592
  require 'reline'
564
593
  Reline.completion_proc = lambda do |word|
565
594
  if word.strip.empty?
566
- return %w{1.输入单词查询 2.输入exit或按Ctrl-C退出}
595
+ return %w{1.输入单词并回车查询含义 2.输入单词时按一次tab键反馈搜索建议 3.输入exit或按Ctrl-C或Ctrl-D退出}
567
596
  end
568
597
 
569
598
  max_len = word.length + 4
@@ -606,7 +635,8 @@ def start_ecrepl
606
635
  while line = Reline.readline("\e[32mecdict> \e[0m", true)
607
636
  case word = line.chomp
608
637
  when 'exit'
609
- db_close_and_exit
638
+ close_db
639
+ return
610
640
  when ''
611
641
  # NOOP
612
642
  else
@@ -614,9 +644,10 @@ def start_ecrepl
614
644
  end
615
645
  end
616
646
  rescue Interrupt
617
- puts '^C'
647
+ # puts '^C'
618
648
  `stty #{stty_save}` if stty_save
619
- db_close_and_exit
649
+ close_db
650
+ return
620
651
  end
621
652
 
622
653
  end
@@ -626,14 +657,14 @@ end
626
657
  # remove everything in #{ECDICT_STORAGE}
627
658
  #
628
659
  def delete_cache
629
-
660
+ close_db
630
661
  begin
631
662
  FileUtils.rm_rf(ECDICT_STORAGE)
632
663
  rescue => e
633
- puts "=> #{e.message}"
634
- puts "=> 清空词典数据失败"
664
+ puts "ecdict: #{e.message}"
665
+ puts "ecdict: 清空词典数据失败"
635
666
  else
636
- puts "=> 清空词典数据完成"
667
+ puts "ecdict: 清空词典数据完成"
637
668
  end
638
669
  puts
639
670
  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.alpha3
4
+ version: '1.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - ccmywish
@@ -94,9 +94,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
94
94
  version: '0'
95
95
  required_rubygems_version: !ruby/object:Gem::Requirement
96
96
  requirements:
97
- - - ">"
97
+ - - ">="
98
98
  - !ruby/object:Gem::Version
99
- version: 1.3.1
99
+ version: '0'
100
100
  requirements: []
101
101
  rubygems_version: 3.3.7
102
102
  signing_key: