File tree 1 file changed +25
-6
lines changed 1 file changed +25
-6
lines changed Original file line number Diff line number Diff line change @@ -4,24 +4,43 @@ class ExtraField::UniversalTime < ExtraField::Generic
4
4
HEADER_ID = 'UT'
5
5
register_map
6
6
7
+ ATIME_MASK = 0b010
8
+ CTIME_MASK = 0b100
9
+ MTIME_MASK = 0b001
10
+
7
11
def initialize ( binstr = nil )
8
12
@ctime = nil
9
13
@mtime = nil
10
14
@atime = nil
11
- @flag = nil
15
+ @flag = 0
12
16
binstr && merge ( binstr )
13
17
end
14
18
15
- attr_accessor :atime , :ctime , :mtime , :flag
19
+ attr_reader :atime , :ctime , :mtime , :flag
20
+
21
+ def atime = ( time )
22
+ @flag = time . nil? ? @flag & ~ATIME_MASK : @flag | ATIME_MASK
23
+ @atime = time
24
+ end
25
+
26
+ def ctime = ( time )
27
+ @flag = time . nil? ? @flag & ~CTIME_MASK : @flag | CTIME_MASK
28
+ @ctime = time
29
+ end
30
+
31
+ def mtime = ( time )
32
+ @flag = time . nil? ? @flag & ~MTIME_MASK : @flag | MTIME_MASK
33
+ @mtime = time
34
+ end
16
35
17
36
def merge ( binstr )
18
37
return if binstr . empty?
19
38
size , content = initial_parse ( binstr )
20
39
size || return
21
- @flag , mtime , atime , ctime = content . unpack ( 'CVVV' )
22
- mtime && @mtime ||= ::Zip ::DOSTime . at ( mtime )
23
- atime && @atime ||= ::Zip ::DOSTime . at ( atime )
24
- ctime && @ctime ||= ::Zip ::DOSTime . at ( ctime )
40
+ @flag , mt , at , ct = content . unpack ( 'CVVV' )
41
+ mt && @mtime ||= ::Zip ::DOSTime . at ( mt )
42
+ at && @atime ||= ::Zip ::DOSTime . at ( at )
43
+ ct && @ctime ||= ::Zip ::DOSTime . at ( ct )
25
44
end
26
45
27
46
def ==( other )
You can’t perform that action at this time.
0 commit comments