1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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
91
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
|
/* HBRange+UIAdditions.m $
This file is part of the HandBrake source code.
Homepage: <http://handbrake.fr/>.
It may be used under the terms of the GNU General Public License. */
#import "HBRange+UIAdditions.h"
#import "HBTitle.h"
#import "HBLocalizationUtilities.h"
@implementation HBRange (UIAdditions)
- (NSArray *)chapters
{
NSMutableArray *chapters = [NSMutableArray array];
[self.title.chapters enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[chapters addObject:[NSString stringWithFormat: @"%lu", idx + 1]];
}];
return chapters;
}
- (NSArray *)types
{
return @[HBKitLocalizedString(@"Chapters", @"HBRange -> display name"),
HBKitLocalizedString(@"Seconds", @"HBRange -> display name"),
HBKitLocalizedString(@"Frames", @"HBRange -> display name")];
}
- (BOOL)chaptersSelected
{
return self.type == HBRangeTypeChapters;
}
+ (NSSet<NSString *> *)keyPathsForValuesAffectingChaptersSelected
{
return [NSSet setWithObjects:@"type", nil];
}
- (BOOL)secondsSelected
{
return self.type == HBRangeTypeSeconds;
}
+ (NSSet<NSString *> *)keyPathsForValuesAffectingSecondsSelected
{
return [NSSet setWithObjects:@"type", nil];
}
- (BOOL)framesSelected
{
return self.type == HBRangeTypeFrames;
}
+ (NSSet<NSString *> *)keyPathsForValuesAffectingFramesSelected
{
return [NSSet setWithObjects:@"type", nil];
}
@end
@implementation HBTimeTransformer
+ (Class)transformedValueClass
{
return [NSString class];
}
- (id)transformedValue:(id)value
{
uint64_t duration = [value integerValue];
uint64_t hours = duration / 90000 / 3600;
uint64_t minutes = ((duration / 90000 ) % 3600) / 60;
uint64_t seconds = (duration / 90000 ) % 60;
return [NSString stringWithFormat:@"%02llu:%02llu:%02llu", hours, minutes, seconds];
}
+ (BOOL)allowsReverseTransformation
{
return NO;
}
- (id)reverseTransformedValue:(id)value
{
return nil;
}
@end
@implementation HBTimeInSecondsTransformer
+ (Class)transformedValueClass
{
return [NSString class];
}
- (id)transformedValue:(id)value
{
uint64_t duration = [value integerValue];
uint64_t hours = duration / 3600;
uint64_t minutes = (duration % 3600) / 60;
uint64_t seconds = duration % 60;
NSString *result = [NSString stringWithFormat:@"%02llu:%02llu:%02llu", hours, minutes, seconds];
return result;
}
+ (BOOL)allowsReverseTransformation
{
return YES;
}
- (id)reverseTransformedValue:(id)value
{
const char *time = [value UTF8String];
if (time)
{
unsigned hour, minute, second, timeval;
if (sscanf(time, "%2u:%u:%u", &hour, &minute, &second) < 3) {
if (sscanf(time, "%u:%u:%u", &hour, &minute, &second) < 3) {
return 0;
}
}
if (second > 60) {
second = 0;
}
timeval = hour * 60 * 60 + minute * 60 + second;
return @(timeval);
}
return @"00:00:00";
}
@end
|