sekka 1.7.0 → 1.7.1
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.
- checksums.yaml +4 -4
- data/.gitignore +4 -0
- data/.travis.yml +8 -0
- data/COPYING +16 -0
- data/README.md +1 -1
- data/Rakefile +19 -6
- data/VERSION.yml +1 -1
- data/bin/sekka-jisyo +5 -0
- data/bin/sekka-server +65 -34
- data/data/.gitignore +1 -0
- data/emacs/sekka.el +2 -2
- data/lib/sekka/downloader.rb +102 -0
- data/lib/sekka/jar/eclipse-collections-8.2.0.jar +0 -0
- data/lib/sekka/jar/eclipse-collections-api-8.2.0.jar +0 -0
- data/lib/sekka/jar/elsa-3.0.0-M7.jar +0 -0
- data/lib/sekka/jar/google-collections-1.0.jar +0 -0
- data/lib/sekka/jar/guava-19.0.jar +0 -0
- data/lib/sekka/jar/kotlin-compiler-1.1.2-3.jar +0 -0
- data/lib/sekka/jar/kotlin-stdlib-jre8-1.1.2-3.jar +0 -0
- data/lib/sekka/jar/lz4-1.3.0.jar +0 -0
- data/lib/sekka/jar/mapdb-3.1.0-SNAPSHOT.jar +0 -0
- data/lib/sekka/jisyo-db.nnd +36 -30
- data/lib/sekka/jruby_mapdb.rb +113 -0
- data/lib/sekka/kvs.rb +26 -3
- data/lib/sekka/sekkaversion.rb +1 -1
- data/public_dict/1.6.2/SEKKA-JISYO-1.6.2.N.mapdb.md5 +1 -0
- data/public_dict/1.6.2/SEKKA-JISYO-1.6.2.N.mapdb.url +1 -0
- data/test/downloader.nnd +82 -0
- data/test/henkan-main.nnd +4 -0
- data/test/jruby_mapdb.nnd +105 -0
- data/tool/MapDBImpoter/.classpath +15 -0
- data/tool/MapDBImpoter/.project +17 -0
- data/tool/MapDBImpoter/src/MapDBImporter.java +80 -0
- metadata +44 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68e39f2abd18a04dded3aa414d166935798ea4b7
|
4
|
+
data.tar.gz: dd3c4f863160bc9d7d7310f5783f1ffbfcfdeba3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a476ff53c1f26fe54f027916db088c7acbf4bad6a26874869f33e3b57045de9ff280c3364ade55af903846e68ef966faf9e9b032e31da3134dc8e10662d4ff0b
|
7
|
+
data.tar.gz: e74a861ddaaf1177b97f75f58a4236946c694375da1aee3c050965927d5751f218ecfdb6fcea5a17a885fa229c85788594c440caeb443bf50a31dbd3a61e16b4
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/COPYING
CHANGED
@@ -54,4 +54,20 @@ Copyright of test/skk-azik-table.nnd ----------------------------------------
|
|
54
54
|
This file is covered by GPL version 2
|
55
55
|
ported from DDSKK-14.1.90
|
56
56
|
|
57
|
+
Copy right of lib/sekka/jar/lz4-1.3.0.jar ---------------------------------
|
58
|
+
Copy right of lib/sekka/jar/elsa-3.0.0-M7.jar
|
59
|
+
Copy right of lib/sekka/jar/kotlin-compiler-1.1.2-3.jar
|
60
|
+
Copy right of lib/sekka/jar/kotlin-stdlib-jre8-1.1.2-3.jar
|
61
|
+
Copy right of lib/sekka/jar/guava-19.0.jar
|
62
|
+
Copy right of lib/sekka/jar/google-collections-1.0.jar
|
63
|
+
Copy right of lib/sekka/jar/mapdb-3.1.0-SNAPSHOT.jar
|
64
|
+
|
65
|
+
This file is covered by Apache License Version 2.0
|
66
|
+
|
67
|
+
Copy right of lib/sekka/jar/eclipse-collections-8.2.0.jar -------------------
|
68
|
+
Copy right of lib/sekka/jar/eclipse-collections-api-8.2.0.jar
|
69
|
+
|
70
|
+
Eclipse Collections is open sourced under the Eclipse Public License v1.0
|
71
|
+
and the Eclipse Distribution License v1.0.
|
72
|
+
|
57
73
|
-----------------------------------------------------------------------------
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Sekka (石火) SKK like Japanese input method
|
2
2
|
|
3
|
-
|
3
|
+
 [](https://travis-ci.org/kiyoka/sekka)
|
4
4
|
|
5
5
|
----
|
6
6
|
|
data/Rakefile
CHANGED
@@ -15,6 +15,8 @@
|
|
15
15
|
# DB=gdbm
|
16
16
|
# DB=tokyocabinet
|
17
17
|
# DB=redis
|
18
|
+
# DB=pure pure Ruby(for travis-ci)
|
19
|
+
# DB=mapdb for Java platform
|
18
20
|
# DB= (default)
|
19
21
|
# DB=all gdbm/tokyocabinet/redis
|
20
22
|
#
|
@@ -76,13 +78,17 @@ task :test do
|
|
76
78
|
exit 1
|
77
79
|
end
|
78
80
|
|
79
|
-
["test.record", "test.tch", "test.db" ].each {|name|
|
81
|
+
["test.record", "test.tch", "test.db", "test1.mapdb", "test2.mapdb"].each {|name|
|
80
82
|
File.unlink( name ) if File.exist?( name )
|
81
83
|
}
|
82
84
|
["test.ldb"].each {|name|
|
83
85
|
FileUtils.rm_rf( name ) if File.exist?( name )
|
84
86
|
}
|
85
87
|
files = []
|
88
|
+
if RUBY_PLATFORM == 'java'
|
89
|
+
files << "./test/jruby_mapdb.nnd"
|
90
|
+
end
|
91
|
+
files << "./test/downloader.nnd"
|
86
92
|
files << "./test/memcache.nnd"
|
87
93
|
files << "./test/util.nnd"
|
88
94
|
files << "./test/alphabet-lib.nnd"
|
@@ -102,6 +108,8 @@ task :test do
|
|
102
108
|
when 'redis'
|
103
109
|
files << "./test/redis.nnd"
|
104
110
|
files << "./test/henkan-main.nnd redis"
|
111
|
+
when 'mapdb'
|
112
|
+
files << "./test/henkan-main.nnd mapdb"
|
105
113
|
when 'pure'
|
106
114
|
files << "./test/henkan-main.nnd pure"
|
107
115
|
when 'all'
|
@@ -111,9 +119,14 @@ task :test do
|
|
111
119
|
files << "./test/henkan-main.nnd pure"
|
112
120
|
files << "./test/henkan-main.nnd leveldb"
|
113
121
|
else # default
|
114
|
-
|
115
|
-
|
116
|
-
|
122
|
+
if RUBY_PLATFORM == 'java'
|
123
|
+
files << "./test/henkan-main.nnd mapdb"
|
124
|
+
files << "./test/henkan-main.nnd pure"
|
125
|
+
else
|
126
|
+
files << "./test/henkan-main.nnd tokyocabinet"
|
127
|
+
files << "./test/henkan-main.nnd pure"
|
128
|
+
files << "./test/henkan-main.nnd leveldb"
|
129
|
+
end
|
117
130
|
end
|
118
131
|
files.each {|filename|
|
119
132
|
sh sprintf( "export RUBY_THREAD_VM_STACK_SIZE=100000 ; ruby -I ./lib -S nendo -I ./lib -d %s", filename )
|
@@ -149,11 +162,11 @@ task :load do
|
|
149
162
|
end
|
150
163
|
|
151
164
|
task :dump do
|
152
|
-
sh sprintf( "ruby ./bin/sekka-jisyo dump ./data/SEKKA-JISYO.N.
|
165
|
+
sh sprintf( "ruby ./bin/sekka-jisyo dump ./data/SEKKA-JISYO-%s.N.mapdb > ./data/SEKKA-JISYO-%s.N.tsv", dictVersion, dictVersion )
|
153
166
|
end
|
154
167
|
|
155
168
|
task :restore do
|
156
|
-
sh sprintf("export RUBY_THREAD_VM_STACK_SIZE=100000 ; ruby -I ./lib ./bin/sekka-jisyo restore ./data/SEKKA-JISYO-%s.N.tsv
|
169
|
+
sh sprintf("export RUBY_THREAD_VM_STACK_SIZE=100000 ; ruby -I ./lib ./bin/sekka-jisyo restore ./data/SEKKA-JISYO-%s.N.tsv ./data/SEKKA-JISYO-%s.N.mapdb", dictVersion, dictVersion )
|
157
170
|
end
|
158
171
|
|
159
172
|
task :load_leveldb do
|
data/VERSION.yml
CHANGED
data/bin/sekka-jisyo
CHANGED
@@ -85,14 +85,17 @@ core.evalStr( <<";;END-OF-SCRIPT" )
|
|
85
85
|
(print " sekka-jisyo load SEKKA-JISYO.X SEKKA-JISYO.X.tch ... load SEKKA-JISYO to Tokyo Cabinet DB")
|
86
86
|
(print " sekka-jisyo load SEKKA-JISYO.X SEKKA-JISYO.X.db ... load SEKKA-JISYO to gdbm DB")
|
87
87
|
(print " sekka-jisyo load SEKKA-JISYO.X SEKKA-JISYO.X.ldb ... load SEKKA-JISYO to LevelDB")
|
88
|
+
(print " sekka-jisyo load SEKKA-JISYO.X SEKKA-JISYO.X.mapdb ... load SEKKA-JISYO to MapDB")
|
88
89
|
(print " sekka-jisyo load SEKKA-JISYO.X redis:[hostname] ... load SEKKA-JISYO to redis DB on [hostname]")
|
89
90
|
(print " sekka-jisyo load SEKKA-JISYO.X redis: ... load SEKKA-JISYO to redis DB on localhost")
|
90
91
|
(print " sekka-jisyo dump SEKKA-JISYO.X.tch ... dump Tokyo Cabinet DB to DUMPDATA(STDOUT)")
|
91
92
|
(print " sekka-jisyo dump SEKKA-JISYO.X.db ... dump gdbm to DUMPDATA(STDOUT)")
|
92
93
|
(print " sekka-jisyo dump SEKKA-JISYO.X.ldb ... dump LevelDB to DUMPDATA(STDOUT)")
|
94
|
+
(print " sekka-jisyo dump SEKKA-JISYO.X.mapdb ... dump MapDB to DUMPDATA(STDOUT)")
|
93
95
|
(print " sekka-jisyo dump redis:[hostname] ... dump redis DB on [hostname] to DUMPDATA(STDOUT)")
|
94
96
|
(print " sekka-jisyo dump redis: ... dump redis DB on localhost to DUMPDATE(STDOUT)")
|
95
97
|
(print " sekka-jisyo restore SEKKA-JISYO.X.tsv SEKKA-JISYO.X.tch ... restore Tokyo Cabinet DB from tsv-file")
|
98
|
+
(print " sekka-jisyo restore SEKKA-JISYO.X.tsv SEKKA-JISYO.X.mapdb ... restore MapDB from tsv-file")
|
96
99
|
(print " sekka-jisyo restore SEKKA-JISYO.X.tsv redis:[hostname] ... restore redis DB on [hostname] from tsv-file")
|
97
100
|
(print " sekka-jisyo restore SEKKA-JISYO.X.tsv redis: ... restore redis DB on localhost from tsv-file"))
|
98
101
|
|
@@ -105,6 +108,8 @@ core.evalStr( <<";;END-OF-SCRIPT" )
|
|
105
108
|
(values 'gdbm filename))
|
106
109
|
((rxmatch #/[.]ldb$/ filename)
|
107
110
|
(values 'leveldb filename))
|
111
|
+
((rxmatch #/[.]mapdb$/ filename)
|
112
|
+
(values 'mapdb filename))
|
108
113
|
((rxmatch #/^redis:(.*)$/ filename)
|
109
114
|
=> (lambda (m)
|
110
115
|
(let1 str (rxmatch-substring m 1)
|
data/bin/sekka-server
CHANGED
@@ -7,6 +7,7 @@ require 'rack'
|
|
7
7
|
require 'uri'
|
8
8
|
require 'sekkaconfig'
|
9
9
|
require 'sekka/sekkaversion'
|
10
|
+
require 'sekka/downloader'
|
10
11
|
|
11
12
|
|
12
13
|
|
@@ -21,14 +22,18 @@ TSV_FILE = sprintf( "%s/SEKKA-JISYO-%s.N.tsv", DICTDIR, SekkaVer
|
|
21
22
|
TSV_SUMFILE = sprintf( "%s/SEKKA-JISYO-%s.N.md5", DICTDIR, SekkaVersion.dictVersion )
|
22
23
|
LDB_FILE = sprintf( "%s/SEKKA-JISYO-%s.N.ldb.tar.gz", DICTDIR, SekkaVersion.dictVersion )
|
23
24
|
LDB_SUMFILE = sprintf( "%s/SEKKA-JISYO-%s.N.ldb.tar.gz.md5", DICTDIR, SekkaVersion.dictVersion )
|
25
|
+
MAPDB_FILE = sprintf( "%s/SEKKA-JISYO-%s.N.mapdb", DICTDIR, SekkaVersion.dictVersion )
|
26
|
+
MAPDB_SUMFILE = sprintf( "%s/SEKKA-JISYO-%s.N.mapdb.md5", DICTDIR, SekkaVersion.dictVersion )
|
24
27
|
|
25
|
-
GDBM_FILE = sprintf( "%s/SEKKA-JISYO-%s.N.db",
|
26
|
-
LEVELDB_FILE = sprintf( "%s/SEKKA-JISYO-%s.N.ldb",
|
28
|
+
GDBM_FILE = sprintf( "%s/SEKKA-JISYO-%s.N.db", DICTDIR, SekkaVersion.dictVersion )
|
29
|
+
LEVELDB_FILE = sprintf( "%s/SEKKA-JISYO-%s.N.ldb", DICTDIR, SekkaVersion.dictVersion )
|
27
30
|
|
28
31
|
TSV_URLURL = sprintf( "%s/SEKKA-JISYO-%s.N.url", DICTURL, SekkaVersion.dictVersion )
|
29
32
|
TSV_SUMURL = sprintf( "%s/SEKKA-JISYO-%s.N.md5", DICTURL, SekkaVersion.dictVersion )
|
30
33
|
LDB_URLURL = sprintf( "%s/SEKKA-JISYO-%s.N.ldb.tar.gz.url", DICTURL, SekkaVersion.dictVersion )
|
31
34
|
LDB_SUMURL = sprintf( "%s/SEKKA-JISYO-%s.N.ldb.tar.gz.md5", DICTURL, SekkaVersion.dictVersion )
|
35
|
+
MAPDB_URLURL = sprintf( "%s/SEKKA-JISYO-%s.N.mapdb.url", DICTURL, SekkaVersion.dictVersion )
|
36
|
+
MAPDB_SUMURL = sprintf( "%s/SEKKA-JISYO-%s.N.mapdb.md5", DICTURL, SekkaVersion.dictVersion )
|
32
37
|
|
33
38
|
MEMCACHED = "localhost:11211" # memcahced
|
34
39
|
|
@@ -48,11 +53,17 @@ def getSekkaDbInfo( env )
|
|
48
53
|
[ :gdbm, nil ]
|
49
54
|
elsif m = ENV['SEKKA_DB'].match( /^level[a-z]+$/i )
|
50
55
|
[ :leveldb, nil ]
|
56
|
+
elsif m = ENV['SEKKA_DB'].match( /^map[a-z]+$/i )
|
57
|
+
[ :mapdb, nil ]
|
51
58
|
else
|
52
|
-
raise RuntimeError, "Error: env var SEKKA_DB requires [redis:hostname] or [redis:] or [tokyocabinet] or [leveldb]"
|
59
|
+
raise RuntimeError, "Error: env var SEKKA_DB requires [redis:hostname] or [redis:] or [tokyocabinet] or [leveldb] or [mapdb]"
|
53
60
|
end
|
54
61
|
else
|
55
|
-
|
62
|
+
if RUBY_PLATFORM == 'java'
|
63
|
+
[ :mapdb, nil ]
|
64
|
+
else
|
65
|
+
[ :tokyocabinet, nil ]
|
66
|
+
end
|
56
67
|
end
|
57
68
|
end
|
58
69
|
|
@@ -83,6 +94,13 @@ def checkJisyoIsInstalled( dictType, dictSource )
|
|
83
94
|
ret = kvs.get( key )
|
84
95
|
kvs.close()
|
85
96
|
ret
|
97
|
+
when :mapdb
|
98
|
+
require 'sekka/kvs'
|
99
|
+
kvs = Kvs.new( :mapdb )
|
100
|
+
kvs.open( dictSource )
|
101
|
+
ret = kvs.get( key )
|
102
|
+
kvs.close()
|
103
|
+
ret
|
86
104
|
when :redis
|
87
105
|
begin
|
88
106
|
require 'redis'
|
@@ -103,38 +121,38 @@ end
|
|
103
121
|
def downloadFile( targetfile, sumfile, urlurl, sumurl )
|
104
122
|
if not File.exist?( targetfile )
|
105
123
|
STDERR.printf( "Info: Downloading SEKKA-JISYO\n" )
|
106
|
-
#
|
107
|
-
|
108
|
-
|
109
|
-
targeturl =
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
124
|
+
# 辞書のURLをダウンロードする
|
125
|
+
dl = Downloader.new( urlurl )
|
126
|
+
dl.download()
|
127
|
+
targeturl = dl.getBody().chomp
|
128
|
+
dl.clearBody()
|
129
|
+
|
130
|
+
# md5記載ファイルをダウンロード
|
131
|
+
dl = Downloader.new( sumurl )
|
132
|
+
dl.download()
|
133
|
+
md5body = dl.getBody()
|
134
|
+
correctSum = md5body.chomp.split[0]
|
135
|
+
dl.clearBody()
|
136
|
+
|
137
|
+
# 辞書ファイル本体をダウンロード
|
138
|
+
STDERR.printf( " downloading URL : %s ...\n", targeturl );
|
139
|
+
dl = Downloader.new( targeturl )
|
140
|
+
dl.downloadToFile( targetfile )
|
141
|
+
dl.clearBody()
|
119
142
|
|
120
143
|
# チェックサムを確認する
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
STDERR.printf( "
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
STDERR.printf( "Error: downloaded file [%s] verify NG.\n", targetfile )
|
134
|
-
File.unlink( targetfile )
|
135
|
-
exit( 1 )
|
136
|
-
end
|
137
|
-
}
|
144
|
+
md5 = Digest::MD5.file( targetfile )
|
145
|
+
downloadSum = md5.hexdigest
|
146
|
+
|
147
|
+
STDERR.printf( " downloaded file's MD5 : %s\n", downloadSum )
|
148
|
+
STDERR.printf( " correct MD5 : %s\n", correctSum )
|
149
|
+
if downloadSum == correctSum
|
150
|
+
STDERR.printf( "Info: downloaded file [%s] verify OK.\n", targetfile )
|
151
|
+
else
|
152
|
+
STDERR.printf( "Error: downloaded file [%s] verify NG.\n", targetfile )
|
153
|
+
File.unlink( targetfile )
|
154
|
+
exit( 1 )
|
155
|
+
end
|
138
156
|
end
|
139
157
|
end
|
140
158
|
|
@@ -165,6 +183,8 @@ def main
|
|
165
183
|
case dictType
|
166
184
|
when :leveldb
|
167
185
|
downloadFile( LDB_FILE, LDB_SUMFILE, LDB_URLURL, LDB_SUMURL )
|
186
|
+
when :mapdb
|
187
|
+
downloadFile( MAPDB_FILE, MAPDB_SUMFILE, MAPDB_URLURL, MAPDB_SUMURL )
|
168
188
|
else
|
169
189
|
downloadFile( TSV_FILE, TSV_SUMFILE, TSV_URLURL, TSV_SUMURL )
|
170
190
|
end
|
@@ -209,6 +229,17 @@ def main
|
|
209
229
|
STDERR.printf( "Info: [OK]\n" )
|
210
230
|
dictSource = TC_FILE
|
211
231
|
|
232
|
+
when :mapdb
|
233
|
+
# MapDBに辞書が投入済みか確認する
|
234
|
+
ok = checkJisyoIsInstalled( dictType, MAPDB_FILE )
|
235
|
+
unless ok
|
236
|
+
# tsvファイルをuploadする
|
237
|
+
STDERR.printf( "Error: mapdb file is not installed.\n" )
|
238
|
+
exit(1)
|
239
|
+
end
|
240
|
+
STDERR.printf( "Info: [OK]\n" )
|
241
|
+
dictSource = MAPDB_FILE
|
242
|
+
|
212
243
|
when :redis
|
213
244
|
# redisサーバーに辞書が投入済みか確認する
|
214
245
|
ok = checkJisyoIsInstalled( dictType, dictSource )
|
data/data/.gitignore
CHANGED
data/emacs/sekka.el
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
;; Copyright (C) 2010-2014 Kiyoka Nishiyama
|
4
4
|
;;
|
5
5
|
;; Author: Kiyoka Nishiyama <kiyoka@sumibi.org>
|
6
|
-
;; Version: 1.7.
|
6
|
+
;; Version: 1.7.1 ;;SEKKA-VERSION
|
7
7
|
;; Keywords: ime, skk, japanese
|
8
8
|
;; Package-Requires: ((cl-lib "0.3") (concurrent "0.3.1") (popup "0.5.2"))
|
9
9
|
;; URL: https://github.com/kiyoka/sekka
|
@@ -1756,7 +1756,7 @@ point から行頭方向に同種の文字列が続く間を漢字変換しま
|
|
1756
1756
|
(setq default-input-method "japanese-sekka")
|
1757
1757
|
|
1758
1758
|
(defconst sekka-version
|
1759
|
-
"1.7.
|
1759
|
+
"1.7.1" ;;SEKKA-VERSION
|
1760
1760
|
)
|
1761
1761
|
(defun sekka-version (&optional arg)
|
1762
1762
|
"入力モード変更"
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# downloader.rb - "downloader for SEKKA-JISYO data"
|
2
|
+
#
|
3
|
+
# Copyright (c) 2017 Kiyoka Nishiyama <kiyoka@sumibi.org>
|
4
|
+
#
|
5
|
+
# Redistribution and use in source and binary forms, with or without
|
6
|
+
# modification, are permitted provided that the following conditions
|
7
|
+
# are met:
|
8
|
+
#
|
9
|
+
# 1. Redistributions of source code must retain the above copyright
|
10
|
+
# notice, this list of conditions and the following disclaimer.
|
11
|
+
#
|
12
|
+
# 2. Redistributions in binary form must reproduce the above copyright
|
13
|
+
# notice, this list of conditions and the following disclaimer in the
|
14
|
+
# documentation and/or other materials provided with the distribution.
|
15
|
+
#
|
16
|
+
# 3. Neither the name of the authors nor the names of its contributors
|
17
|
+
# may be used to endorse or promote products derived from this
|
18
|
+
# software without specific prior written permission.
|
19
|
+
#
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
+
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
+
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
26
|
+
# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
27
|
+
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
28
|
+
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
29
|
+
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
30
|
+
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
#
|
32
|
+
# $Id:
|
33
|
+
#
|
34
|
+
|
35
|
+
require 'net/http'
|
36
|
+
require 'uri'
|
37
|
+
require 'tmpdir'
|
38
|
+
require 'digest'
|
39
|
+
|
40
|
+
class Downloader
|
41
|
+
def initialize( url, savepath = nil )
|
42
|
+
@url_str = url
|
43
|
+
@body = nil
|
44
|
+
end
|
45
|
+
|
46
|
+
def download()
|
47
|
+
url = URI.parse(@url_str)
|
48
|
+
if(url)
|
49
|
+
req = Net::HTTP::Get.new(url.path)
|
50
|
+
http = Net::HTTP.new(url.host,url.port)
|
51
|
+
if url.scheme == 'https'
|
52
|
+
http.use_ssl = true
|
53
|
+
end
|
54
|
+
res = http.request(req)
|
55
|
+
@body = res.body
|
56
|
+
end
|
57
|
+
return @body
|
58
|
+
end
|
59
|
+
|
60
|
+
def downloadToFile(path)
|
61
|
+
url = URI.parse(@url_str)
|
62
|
+
req = Net::HTTP::Get.new url.path
|
63
|
+
http = Net::HTTP.new(url.host, url.port)
|
64
|
+
if url.scheme == 'https'
|
65
|
+
http.use_ssl = true
|
66
|
+
end
|
67
|
+
http.request req do |response|
|
68
|
+
open path, 'wb' do |io|
|
69
|
+
response.read_body do |chunk|
|
70
|
+
io.write chunk
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def getBodySize()
|
77
|
+
size = 0
|
78
|
+
if @body
|
79
|
+
size = @body.size
|
80
|
+
end
|
81
|
+
return size
|
82
|
+
end
|
83
|
+
|
84
|
+
def getBody()
|
85
|
+
return @body
|
86
|
+
end
|
87
|
+
|
88
|
+
def saveAs(path)
|
89
|
+
open(path,"w") {|f|
|
90
|
+
f.write(@body)
|
91
|
+
}
|
92
|
+
end
|
93
|
+
|
94
|
+
def clearBody()
|
95
|
+
@body = nil
|
96
|
+
end
|
97
|
+
|
98
|
+
def calcMD5()
|
99
|
+
Digest::MD5.hexdigest @body
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|