Skip to content

Commit a9a83a5

Browse files
author
Hxcan Cai
committed
初始版本
0 parents  commit a9a83a5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+1330
-0
lines changed

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
issues.zzaqta/
2+
ReleaseVfs/extremezip.Miso/.hg/
3+
EXtremeZip.rb.zzaqsw/*.gem
4+
.hg/
5+
.hg_archival.txt
6+
.hgignore
7+
.directory
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
Gem::Specification.new do |s|
2+
s.name = 'EXtremeZip'
3+
s.version = '2021.6.10'
4+
s.date = '2021-06-10'
5+
s.summary = "EXtremeZip"
6+
s.description = "Extreme zip."
7+
s.authors = ["Hxcan Cai"]
8+
s.email = 'caihuosheng@gmail.com'
9+
s.files = ["lib/extremezip.zzaqsv.rb", "lib/extremeunzip.zzaqsu.rb", "bin/exz", "bin/exuz"]
10+
s.homepage = 'http://rubygems.org/gems/EXtremeZip'
11+
s.license = 'MIT'
12+
13+
s.add_runtime_dependency 'VictoriaFreSh', '~>2021.5.28', '>= 2021.5.28'
14+
s.add_runtime_dependency 'ruby-lzma', '>= 0.4.3'
15+
s.add_runtime_dependency 'get_process_mem', '>= 0.2.7'
16+
s.add_runtime_dependency 'cod', '>= 0.6.0'
17+
s.add_runtime_dependency 'uuid', '>= 2.3.9'
18+
19+
s.executables << 'exz' << 'exuz'
20+
end

EXtremeZip.rb.zzaqsw/bin/exuz

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/usr/bin/env ruby
2+
3+
require 'extremeunzip.zzaqsu'
4+
5+
if (ARGV.empty? ) #未指定命令行参数。
6+
else #指定了命令行参数。
7+
$rootPath=ARGV[0] #记录要打包的目录树的根目录。
8+
9+
exuzObject=ExtremeUnZip.new #解压对象
10+
11+
exuzObject.exuz($rootPath) #解压
12+
end

EXtremeZip.rb.zzaqsw/bin/exz

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/usr/bin/ruby
2+
3+
require 'extremezip.zzaqsv'
4+
5+
if (ARGV.empty? ) #未指定命令行参数。
6+
else #指定了命令行参数。
7+
$rootPath=ARGV[0] #记录要打包的目录树的根目录。
8+
9+
exzObject=ExtremeZip.new #创建压缩对象
10+
11+
exzObject.exz($rootPath) #压缩
12+
end
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
#!/usr/bin/env ruby
2+
3+
# require 'pathname'
4+
# require File.dirname(__FILE__)+'/filemessage.pb.rb'
5+
require 'victoriafresh'
6+
require 'cbor'
7+
require 'lzma'
8+
require 'get_process_mem'
9+
10+
def checkMemoryUsage(lineNumber)
11+
mem= GetProcessMem.new
12+
13+
puts("#{lineNumber} , Memory: #{mem.mb}"); #Debug
14+
15+
end #def checkMemoryUsage
16+
17+
#根据版本号,提取VFS数据内容
18+
def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion)
19+
victoriaFreshData='' #解压后的数据块整体
20+
dataFileName='victoriafreshdata.w' #数据文件名
21+
dataFile={} #数据文件对象
22+
23+
if (fileVersion==14) #14版本
24+
compressedVfsData=wholeCbor['vfsData'] #获取压缩后的数据内容
25+
26+
victoriaFreshData=LZMA.decompress(compressedVfsData) #解压缩数据内容
27+
28+
dataFile=File.open(dataFileName, 'wb') #打开文件
29+
30+
dataFile.syswrite(victoriaFreshData) #写入内容
31+
32+
dataFile.close #关闭文件
33+
elsif (fileVersion>=30) #30以上版本
34+
compressedVfsDataList=wholeCbor['vfsDataList'] #获取压缩后的数据块列表
35+
36+
puts("data block amont: #{compressedVfsDataList.length}") #Debug
37+
38+
dataBlockCounter=0 #Data block counter
39+
40+
dataFile=File.open(dataFileName, 'wb') #打开文件
41+
42+
43+
compressedVfsDataList.each do |currentCompressed| #一块块地解压
44+
puts("data block counter: #{dataBlockCounter}") #Debug
45+
checkMemoryUsage(34)
46+
47+
currentRawData=LZMA.decompress(currentCompressed) #解压这一块
48+
49+
dataFile.syswrite(currentRawData) #写入内容
50+
51+
# victoriaFreshData=victoriaFreshData+currentRawData #追加
52+
# victoriaFreshData << currentRawData #追加
53+
54+
puts("byte size: #{victoriaFreshData.bytesize}") #debug.
55+
56+
dataBlockCounter=dataBlockCounter+1 #count
57+
end #compressedVfsDataList.each do |currentCompressed|
58+
59+
dataFile.close #关闭文件
60+
end #if (fileVersion==14) #14版本
61+
62+
return dataFileName #返回解压后的数据块整体
63+
end #def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion) #根据版本号,提取VFS数据内容
64+
65+
def extractVfsDataWithVersion(wholeCbor, fileVersion) #根据版本号,提取VFS数据内容
66+
victoriaFreshData='' #解压后的数据块整体
67+
68+
if (fileVersion==14) #14版本
69+
compressedVfsData=wholeCbor['vfsData'] #获取压缩后的数据内容
70+
71+
victoriaFreshData=LZMA.decompress(compressedVfsData) #解压缩数据内容
72+
elsif (fileVersion>=30) #30以上版本
73+
compressedVfsDataList=wholeCbor['vfsDataList'] #获取压缩后的数据块列表
74+
75+
puts("data block amont: #{compressedVfsDataList.length}") #Debug
76+
77+
dataBlockCounter=0 #Data block counter
78+
79+
compressedVfsDataList.each do |currentCompressed| #一块块地解压
80+
puts("data block counter: #{dataBlockCounter}") #Debug
81+
checkMemoryUsage(34)
82+
83+
currentRawData=LZMA.decompress(currentCompressed) #解压这一块
84+
85+
# victoriaFreshData=victoriaFreshData+currentRawData #追加
86+
victoriaFreshData << currentRawData #追加
87+
88+
puts("byte size: #{victoriaFreshData.bytesize}") #debug.
89+
90+
dataBlockCounter=dataBlockCounter+1 #count
91+
end #compressedVfsDataList.each do |currentCompressed|
92+
end #if (fileVersion==14) #14版本
93+
94+
return victoriaFreshData #返回解压后的数据块整体
95+
end # extractVfsDataWithVersion(wholeCbor, fileVersion) #根据版本号,提取VFS数据内容
96+
97+
class ExtremeUnZip
98+
#解压
99+
def exuz(rootPath)
100+
wholeFileContent=File.read(rootPath) #最终文件内容
101+
102+
checkMemoryUsage(60)
103+
104+
puts wholeFileContent.class #debug
105+
106+
wholeCborByteArray=wholeFileContent[4..-1] #从第5个到末尾
107+
checkMemoryUsage(65)
108+
109+
110+
# puts wholeCborByteArray #Debug.
111+
112+
checkMemoryUsage(70)
113+
wholeCbor=CBOR.decode(wholeCborByteArray) #解码
114+
# wholeCbor=wholeCborByteArray.from_cbor #解码CBOR
115+
116+
# puts wholeCbor #Debug.
117+
checkMemoryUsage(75)
118+
119+
fileVersion=wholeCbor['version'] #获取版本号
120+
121+
puts 'fileVersion:' #Debug
122+
checkMemoryUsage(80)
123+
puts fileVersion #Debug.
124+
125+
126+
if (fileVersion<14) #版本号过小
127+
checkMemoryUsage(85)
128+
puts 'file version too old' #报告错误
129+
else #版本号够大
130+
compressedVfsMenu=wholeCbor['vfsMenu'] #获取压缩后的目录内容
131+
132+
checkMemoryUsage(90)
133+
replyByteArray=LZMA.decompress(compressedVfsMenu) #解码目录VFS字节数组内容
134+
135+
# puts replyByteArray #Debug
136+
137+
checkMemoryUsage(95)
138+
# victoriaFreshData=extractVfsDataWithVersion(wholeCbor, fileVersion) #根据版本号,提取VFS数据内容
139+
victoriaFreshDataFile=extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion) #根据版本号,提取VFS数据内容
140+
141+
# puts victoriaFreshData #Debug
142+
143+
checkMemoryUsage(100)
144+
$clipDownloader=VictoriaFresh.new #创建下载器。
145+
146+
147+
$clipDownloader.releaseFilesExternalDataFile(replyByteArray, victoriaFreshDataFile) #释放各个文件
148+
149+
fileToRemove=File.new(victoriaFreshDataFile) #要删除的文件
150+
151+
File.delete(fileToRemove) #删除文件
152+
153+
end #if (fileVersion<14) #版本号过小
154+
155+
end #def exuz(rootPath)
156+
end #class ExtremeUnZip
157+

0 commit comments

Comments
 (0)