Class: VictoriaFresh

Inherits:
Object
  • Object
show all
Defined in:
lib/victoriafresh.rb

Overview

require File.dirname(__FILE__)+‘/VictoriaFreSh/filemessage_pb.rb’

Instance Method Summary collapse

Instance Method Details

#checkOnce(directoryPath, startIndex = 0) ⇒ Object

def releaseFile(packagedFile, contentString) #释放一个文件



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# File 'lib/victoriafresh.rb', line 92

def checkOnce(directoryPath,startIndex=0) #打包一个目录树。
#     packagedFile=Com::Stupidbeauty::Victoriafresh::FileMessage.new #创建文件消息对象。
  packagedFile={} #创建文件消息对象。

#     packagedFile.sub_files=[] #初始化数组。
  packagedFile['sub_files'] = [] #加入到子文件列表中。
  
#     packagedFile.sub_files=Google::Protobuf::RepeatedField.new(Com::Stupidbeauty::Victoriafresh::FileMessage, []) #初始化数组
#     packagedFile.sub_files=Google::Protobuf::RepeatedField.new(Google::Protobuf::DescriptorPool.generated_pool.lookup("com.stupidbeauty.victoriafresh.FileMessage").msgclass, []) #初始化数组
  
  
  directoryPathName=Pathname.new(directoryPath) #构造路径名字对象。
  
  baseName=directoryPathName.basename.to_s #基本文件名。
  
#     packagedFile.name=baseName #设置文件名。
  packagedFile['name']=baseName #设置文件名。
  
  isFile=directoryPathName.file? #是否是文件。

#     packagedFile.is_file=isFile #设置属性,是否是文件。
  packagedFile['is_file']=isFile #设置属性,是否是文件。

#     packagedFile.file_start_index=startIndex #记录文件内容的开始位置。
  packagedFile['file_start_index']=startIndex #记录文件内容的开始位置。
  
  
  #记录时间戳:
  mtimeStamp=File.mtime(directoryPath) #获取时间戳
  puts directoryPath #Dbug.
  puts mtimeStamp #Debug
  puts mtimeStamp.tv_sec #Debug
  puts mtimeStamp.tv_nsec #Debug
  
#     packagedFile.timestamp=Google::Protobuf::Timestamp.new #时间戳
  packagedFile['timestamp']={} #时间戳

#     packagedFile.timestamp.seconds=mtimeStamp.tv_sec #设置秒数
  packagedFile['timestamp']['seconds']=mtimeStamp.tv_sec #设置秒数
  
  
#     packagedFile.timestamp.nanos=mtimeStamp.tv_nsec #设置纳秒数
  packagedFile['timestamp']['nanos']=mtimeStamp.tv_nsec #设置纳秒数
  
  if (isFile) #是文件,不用再列出其子文件了。
#       packagedFile.file_length=directoryPathName.size #记录文件的内容长度。
    packagedFile['file_length']=directoryPathName.size #记录文件的内容长度。
    
    #读取文件内容:
    fileToReadContent=File.new(directoryPath,"rb") #创建文件。
    contentString=fileToReadContent.read #全部读取。
    
  else #是目录。
    contentString="" #容纳内容的字符串。
    subFileStartIndex=startIndex #子文件的起始位置,以此目录的起始位置为基准。

#       packagedFile.file_length=0 #本目录的内容长度。
    packagedFile['file_length']=0 #本目录的内容长度。

    directoryPathName.each_child do |subFile| #一个个文件地处理。
      realPath=subFile.realpath #获取绝对路径。
      
      
      packagedSubFile,subFileContent=checkOnce(realPath,subFileStartIndex) #打包这个子文件。
      
#         packagedFile.sub_files << packagedSubFile #加入到子文件列表中。
      packagedFile['sub_files'] << packagedSubFile #加入到子文件列表中。
      
      contentString = contentString + subFileContent #串接文件内容。
      
#         subFileStartIndex+=packagedSubFile.file_length #记录打包的子文件的长度,更新下一个要打包的子文件的起始位置。
      subFileStartIndex+=packagedSubFile['file_length'] #记录打包的子文件的长度,更新下一个要打包的子文件的起始位置。
      
#         packagedFile.file_length+=packagedSubFile.file_length #随着子文件的打包而更新本目录的总长度。
      packagedFile['file_length']+=packagedSubFile['file_length'] #随着子文件的打包而更新本目录的总长度。
    end #directoryPathName.each_child do |subFile| #一个个文件地处理。
  end #if (isFile) #是文件,不用再列出其子文件了。
  
  return packagedFile,contentString #返回打包之后的对象。和文件内容字节数组。
end

#getTimeObject(packagedFile) ⇒ Object

writeFile(pathPrefix, packagedFile, contentString) #写入文件



36
37
38
39
40
41
42
43
44
# File 'lib/victoriafresh.rb', line 36

def getTimeObject(packagedFile) #构造时间戳对象
    puts packagedFile.timestamp #Debug
    
    seconds=packagedFile.timestamp.seconds #获取秒数
    microSeconds=packagedFile.timestamp.nanos/ 1000.0 #获取毫秒数
    
    timeObject=Time.at(seconds, microSeconds) #构造时间对象

end

#makeDirectory(pathPrefix, packagedFile) ⇒ Object

getTimeObject(packagedFile) #构造时间戳对象



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/victoriafresh.rb', line 46

def makeDirectory(pathPrefix, packagedFile) #创建目录
    timeObject=getTimeObject(packagedFile) #构造时间戳对象

    
    puts 'mkdir' #Debug
    
    pathToMake=File.join(pathPrefix, packagedFile.name)
    
    puts  pathToMake #Debug.
    
    if (Dir.exist?(pathToMake)) #目录已经存在
    else #目录 不存在
        Dir.mkdir(pathToMake) #=> 0
    end #if (Dir.exist?(pathToMake)) #目录已经存在
    

    FileUtils.touch pathToMake, :mtime => timeObject #设置修改时间

end

#releaseFile(pathPrefix, packagedFile, contentString) ⇒ Object

makeDirectory(pathPrefix, packagedFile) #创建目录



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/victoriafresh.rb', line 66

def releaseFile( pathPrefix, packagedFile, contentString) #释放一个文件 
#         puts packagedFile.name #Debug
    puts packagedFile['name'] #Debug
    
#         puts packagedFile.timestamp #Debug
    puts packagedFile['timestamp'] #Debug
    
#         if packagedFile.is_file #是文件,则直接写入文件
    if packagedFile['is_file'] #是文件,则直接写入文件
        writeFile(pathPrefix, packagedFile, contentString) #写入文件
    else #是目录,则创建目录,并递归处理
        makeDirectory(pathPrefix, packagedFile) #创建目录
        
#             direcotryPathPrefix=pathPrefix  + '/' + packagedFile.name #构造针对该目录的路径前缀
        direcotryPathPrefix=pathPrefix  + '/' + packagedFile['name'] #构造针对该目录的路径前缀
        
#             subFiles=packagedFile.sub_files #获取子文件列表。
        subFiles=packagedFile['sub_files'] #获取子文件列表。
        
        subFiles.each do |currentSubFile| #一个个子文件地释放
            releaseFile(direcotryPathPrefix, currentSubFile, contentString) #释放子文件
        end #subFiles.each do |currentSubFile| #一个个子文件地释放
        
    end #if packagedFile.is_file #是文件,则直接写入文件
end

#releaseFiles(victoriaFreshPackagedFileString, contentString) ⇒ Object

释放目录树



10
11
12
13
14
15
16
17
18
# File 'lib/victoriafresh.rb', line 10

def releaseFiles(victoriaFreshPackagedFileString, contentString) #释放目录树
#         packagedFile=Com::Stupidbeauty::Victoriafresh::FileMessage.decode(victoriaFreshPackagedFileString) #解码文件消息对象。
    packagedFile=CBOR.decode(victoriaFreshPackagedFileString) #解码

    
    puts packagedFile #Debug
    
    releaseFile('.', packagedFile, contentString) #释放一个文件 
end

#writeFile(pathPrefix, packagedFile, contentString) ⇒ Object

def releaseFiles(victoriaFreshPackagedFile, contentString) #释放目录树



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/victoriafresh.rb', line 20

def writeFile(pathPrefix, packagedFile, contentString) #写入文件
    
    timeObject=getTimeObject(packagedFile) #构造时间戳对象
    
    victoriaFreshData=contentString[packagedFile.file_start_index, packagedFile.file_length] #获取内容
    
    pathToMake=pathPrefix + '/' + packagedFile.name #构造文件名
    
      victoriaFreshDataFile=File.new(pathToMake , "wb") #数据文件。
        victoriaFreshDataFile.syswrite(victoriaFreshData) #写入文件。
    victoriaFreshDataFile.close #关闭文件。

    FileUtils.touch pathToMake, :mtime => timeObject #设置修改时间

end