// // TimeIntervalToStringTransformer.m // Preferences // // Created by Christopher Snowhill on 7/1/22. // #import "TimeIntervalToStringTransformer.h" #import @implementation TimeIntervalToStringTransformer + (Class)transformedValueClass { return [NSString class]; } + (BOOL)allowsReverseTransformation { return YES; } // Convert from string to NSURL - (id)reverseTransformedValue:(id)value { if(value == nil) return nil; if([value isKindOfClass:[NSString class]]) { NSString *theString = (NSString *)value; NSArray *components = [theString componentsSeparatedByString:@":"]; double interval = 0.0; for(size_t i = 0, j = [components count]; i < j; ++i) { interval += ([components[j - i - 1] doubleValue]) * pow(60.0, i); } return @(interval); } return nil; } - (id)transformedValue:(id)value { if(value == nil) return @""; if([value isKindOfClass:[NSNumber class]]) { NSDateComponentsFormatter *formatter = [[NSDateComponentsFormatter alloc] init]; [formatter setAllowedUnits:NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond]; double secondsValue = [value doubleValue]; double fractionValue = fmod(secondsValue, 1.0); secondsValue = (double)(int)secondsValue; NSString *wholePart = [formatter stringFromTimeInterval:(NSTimeInterval)secondsValue]; NSUInteger fractionMillis = (int)(fractionValue * 1000.0); if(fractionMillis >= 1) { NSString *fractionPart = [NSString stringWithFormat:@".%03lu", fractionMillis]; fractionPart = [fractionPart stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithRange:NSMakeRange('0', 1)]]; return [wholePart stringByAppendingString:fractionPart]; } return wholePart; } return @""; } @end