Commit e28db8c7 authored by Felix Paul Kühne's avatar Felix Paul Kühne

Watch extension: add VLCTime class from VLCKit as we can't hack the build system anymore

parent fe9664ad
/*****************************************************************************
* VLCTime.h: VLCKit.framework VLCTime header
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#import <Foundation/Foundation.h>
/**
* Provides an object to define VLCMedia's time.
*/
@interface VLCTime : NSObject
/* Factories */
+ (VLCTime *)nullTime;
+ (VLCTime *)timeWithNumber:(NSNumber *)aNumber;
+ (VLCTime *)timeWithInt:(int)aInt;
/* Initializers */
- (instancetype)initWithNumber:(NSNumber *)aNumber;
- (instancetype)initWithInt:(int)aInt;
/* Properties */
@property (nonatomic, readonly) NSNumber * value; //< Holds, in milliseconds, the VLCTime value
@property (readonly) NSNumber * numberValue; // here for backwards compatibility
@property (readonly) NSString * stringValue;
@property (readonly) NSString * verboseStringValue;
@property (readonly) NSString * minuteStringValue;
@property (readonly) int intValue;
/* Comparators */
- (NSComparisonResult)compare:(VLCTime *)aTime;
- (BOOL)isEqual:(id)object;
- (NSUInteger)hash;
@end
/*****************************************************************************
* VLCTime.m: VLCKit.framework VLCTime implementation
*****************************************************************************
* Copyright (C) 2007 Pierre d'Herbemont
* Copyright (C) 2007 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#import "VLCTime.h"
@implementation VLCTime
/* Factories */
+ (VLCTime *)nullTime
{
static VLCTime * nullTime = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
nullTime = [VLCTime timeWithNumber:nil];
});
return nullTime;
}
+ (VLCTime *)timeWithNumber:(NSNumber *)aNumber
{
return [[VLCTime alloc] initWithNumber:aNumber];
}
+ (VLCTime *)timeWithInt:(int)aInt
{
return [[VLCTime alloc] initWithInt:aInt];
}
/* Initializers */
- (instancetype)initWithNumber:(NSNumber *)aNumber
{
if (self = [super init]) {
_value = aNumber;
}
return self;
}
- (instancetype)initWithInt:(int)aInt
{
if (self = [super init]) {
if (aInt)
_value = @(aInt);
}
return self;
}
/* NSObject Overrides */
- (NSString *)description
{
return self.stringValue;
}
- (NSNumber *)numberValue
{
return _value;
}
- (NSString *)stringValue
{
if (_value) {
long long duration = [_value longLongValue];
if (duration == INT_MAX || duration == INT_MIN) {
// Return a string that represents an undefined time.
return @"--:--";
}
duration = duration / 1000;
long long positiveDuration = llabs(duration);
if (positiveDuration > 3600)
return [NSString stringWithFormat:@"%s%01ld:%02ld:%02ld",
duration < 0 ? "-" : "",
(long) (positiveDuration / 3600),
(long)((positiveDuration / 60) % 60),
(long) (positiveDuration % 60)];
else
return [NSString stringWithFormat:@"%s%02ld:%02ld",
duration < 0 ? "-" : "",
(long)((positiveDuration / 60) % 60),
(long) (positiveDuration % 60)];
} else {
// Return a string that represents an undefined time.
return @"--:--";
}
}
- (NSString *)verboseStringValue
{
if (!_value)
return @"";
long long duration = [_value longLongValue] / 1000;
long long positiveDuration = llabs(duration);
long hours = (long)(positiveDuration / 3600);
long mins = (long)((positiveDuration / 60) % 60);
long seconds = (long)(positiveDuration % 60);
BOOL remaining = duration < 0;
NSString *format;
if (hours > 0) {
format = remaining ? NSLocalizedString(@"%ld hours %ld minutes remaining", nil) : NSLocalizedString(@"%ld hours %ld minutes", nil);
return [NSString stringWithFormat:format, hours, mins, remaining];
}
if (mins > 5) {
format = remaining ? NSLocalizedString(@"%ld minutes remaining", nil) : NSLocalizedString(@"%ld minutes", nil);
return [NSString stringWithFormat:format, mins, remaining];
}
if (mins > 0) {
format = remaining ? NSLocalizedString(@"%ld minutes %ld seconds remaining", nil) : NSLocalizedString(@"%ld minutes %ld seconds", nil);
return [NSString stringWithFormat:format, mins, seconds, remaining];
}
format = remaining ? NSLocalizedString(@"%ld seconds remaining", nil) : NSLocalizedString(@"%ld seconds", nil);
return [NSString stringWithFormat:format, seconds, remaining];
}
- (NSString *)minuteStringValue
{
if (_value) {
long long positiveDuration = llabs([_value longLongValue]);
long minutes = (long)(positiveDuration / 60000);
return [NSString stringWithFormat:@"%ld", minutes];
}
return @"";
}
- (int)intValue
{
return [_value intValue];
}
- (NSComparisonResult)compare:(VLCTime *)aTime
{
NSInteger a = [_value integerValue];
NSInteger b = [aTime.value integerValue];
return (a > b) ? NSOrderedDescending :
(a < b) ? NSOrderedAscending :
NSOrderedSame;
}
- (BOOL)isEqual:(id)object
{
if (![object isKindOfClass:[VLCTime class]])
return NO;
return [[self description] isEqual:[object description]];
}
- (NSUInteger)hash
{
return [[self description] hash];
}
@end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment