diff --git a/ExactTime.xm b/ExactTime.xm new file mode 100644 index 0000000..bb2c7bf --- /dev/null +++ b/ExactTime.xm @@ -0,0 +1,319 @@ +//IOS 10 +@interface NCNotificationDateLabel +@property (assign,nonatomic) NSString *text; +-(void)sizeToFit; +@end +//IOS 10 +@interface NCLookHeaderContentView +-(void)_updateDateLabelFontForShortLook; +@end +//IOS 11 & 12 And Above +@interface BSUIRelativeDateLabel +@property (assign,nonatomic) NSString *text; +-(void)sizeToFit; +@end +//IOS 11 +@interface MTPlatterHeaderContentView +-(void)_updateTextAttributesForDateLabel; +@end +//IOS 12 And Above +@interface PLPlatterHeaderContentView +-(void)_updateTextAttributesForDateLabel; +@end + + + +static bool is24h; +static NSString *settingsPath = @"/var/mobile/Library/Preferences/com.gilshahar7.exacttimeprefs.plist"; + +%group iOS10 +%hook NCLookHeaderContentView +-(void)_updateDateLabelFontForShortLook{ + %orig; + NSMutableDictionary *prefs = [[NSMutableDictionary alloc] initWithContentsOfFile:settingsPath]; + bool enabled = [[prefs objectForKey:@"notifications"] boolValue]; + if(enabled){ + NSDate *date = MSHookIvar(self, "_date"); + NSInteger format = MSHookIvar(self, "_dateFormatStyle"); + CGFloat affectTime = [[prefs objectForKey:@"affectTime"] floatValue]; + if((date != nil) && (format == 1)){ + NCNotificationDateLabel *dateLabel = MSHookIvar(self, "_dateLabel"); + int timeSinceNow = (int)[date timeIntervalSinceNow]; + bool isFuture = false; + if (timeSinceNow > 0){ + isFuture = true; + }else{ + timeSinceNow = timeSinceNow*-1; + } + bool addMinutes = [[prefs objectForKey:@"addMinutes"] boolValue]; + bool addToCurrent = [[prefs objectForKey:@"addToCurrent"] boolValue]; + int hours = timeSinceNow / 3600; + int minutes = (timeSinceNow % 3600) / 60; + if(addMinutes){ + if(hours == 0){ + if(minutes == 0){ + }else{ + if(isFuture){ + dateLabel.text = [NSString stringWithFormat:@"in %im", minutes]; + }else{ + dateLabel.text = [NSString stringWithFormat:@"%im ago", minutes]; + } + } + }else{ + if(minutes == 0){ + if(isFuture){ + dateLabel.text = [NSString stringWithFormat:@"in %ih", hours]; + }else{ + dateLabel.text = [NSString stringWithFormat:@"%ih ago", hours]; + } + } else{ + if(isFuture){ + dateLabel.text = [NSString stringWithFormat:@"in %ih %im", hours, minutes]; + }else{ + dateLabel.text = [NSString stringWithFormat:@"%ih %im ago", hours, minutes]; + } + } + } + }else if(addToCurrent){ + if(hours == 0){ + if(minutes == 0){ + }else{ + if(isFuture){ + dateLabel.text = [NSString stringWithFormat:@"in %im", minutes]; + }else{ + dateLabel.text = [NSString stringWithFormat:@"%im ago", minutes]; + } + } + }else{ + if(isFuture){ + dateLabel.text = [NSString stringWithFormat:@"in %ih", hours]; + }else{ + dateLabel.text = [NSString stringWithFormat:@"%ih ago", hours]; + } + } + } + if((timeSinceNow/60) >= affectTime){ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + if(is24h){ + [dateFormatter setDateFormat:@"HH:mm"]; + }else{ + [dateFormatter setDateFormat:@"h:mm a"]; + } + if(addToCurrent && !([dateLabel.text isEqualToString:[dateFormatter stringFromDate:date]])){ + dateLabel.text = [[dateLabel.text stringByAppendingString:@" • "] stringByAppendingString:[dateFormatter stringFromDate:date]]; + }else{ + dateLabel.text =[dateFormatter stringFromDate:date]; + } + [dateLabel sizeToFit]; + [dateFormatter release]; + } + } + } +} +-(void)dateLabelDidChange:(id)arg1{ + %orig(arg1); + [self _updateDateLabelFontForShortLook]; +} +%end +%end + +%group iOS11 +%hook MTPlatterHeaderContentView +-(void)_updateTextAttributesForDateLabel{ + %orig; + NSMutableDictionary *prefs = [[NSMutableDictionary alloc] initWithContentsOfFile:settingsPath]; + bool enabled = [[prefs objectForKey:@"notifications"] boolValue]; + if(enabled){ + NSDate *date = MSHookIvar(self, "_date"); + NSInteger format = MSHookIvar(self, "_dateFormatStyle"); + CGFloat affectTime = [[prefs objectForKey:@"affectTime"] floatValue]; + if((date != nil) && (format == 1)){ + BSUIRelativeDateLabel *dateLabel = MSHookIvar(self, "_dateLabel"); + int timeSinceNow = (int)[date timeIntervalSinceNow]; + bool isFuture = false; + if (timeSinceNow > 0){ + isFuture = true; + }else{ + timeSinceNow = timeSinceNow*-1; + } + bool addMinutes = [[prefs objectForKey:@"addMinutes"] boolValue]; + bool addToCurrent = [[prefs objectForKey:@"addToCurrent"] boolValue]; + int hours = timeSinceNow / 3600; + int minutes = (timeSinceNow % 3600) / 60; + if(addMinutes){ + if(hours == 0){ + if(minutes == 0){ + }else{ + if(isFuture){ + dateLabel.text = [NSString stringWithFormat:@"in %im", minutes]; + }else{ + dateLabel.text = [NSString stringWithFormat:@"%im ago", minutes]; + } + } + }else{ + if(minutes == 0){ + if(isFuture){ + dateLabel.text = [NSString stringWithFormat:@"in %ih", hours]; + }else{ + dateLabel.text = [NSString stringWithFormat:@"%ih ago", hours]; + } + } else{ + if(isFuture){ + dateLabel.text = [NSString stringWithFormat:@"in %ih %im", hours, minutes]; + }else{ + dateLabel.text = [NSString stringWithFormat:@"%ih %im ago", hours, minutes]; + } + } + } + }else if(addToCurrent){ + if(hours == 0){ + if(minutes == 0){ + }else{ + if(isFuture){ + dateLabel.text = [NSString stringWithFormat:@"in %im", minutes]; + }else{ + dateLabel.text = [NSString stringWithFormat:@"%im ago", minutes]; + } + } + }else{ + if(isFuture){ + dateLabel.text = [NSString stringWithFormat:@"in %ih", hours]; + }else{ + dateLabel.text = [NSString stringWithFormat:@"%ih ago", hours]; + } + } + } + if((timeSinceNow/60) >= affectTime){ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + if(is24h){ + [dateFormatter setDateFormat:@"HH:mm"]; + }else{ + [dateFormatter setDateFormat:@"h:mm a"]; + } + if(addToCurrent && !([dateLabel.text isEqualToString:[dateFormatter stringFromDate:date]])){ + dateLabel.text = [[dateLabel.text stringByAppendingString:@" • "] stringByAppendingString:[dateFormatter stringFromDate:date]]; + }else{ + dateLabel.text =[dateFormatter stringFromDate:date]; + } + [dateLabel sizeToFit]; + [dateFormatter release]; + } + } + } +} +-(void)dateLabelDidChange:(id)arg1{ + %orig(arg1); + [self _updateTextAttributesForDateLabel]; +} +%end +%end + +%group iOS12AndAbove +%hook PLPlatterHeaderContentView +-(void)_updateTextAttributesForDateLabel{ + %orig; + NSMutableDictionary *prefs = [[NSMutableDictionary alloc] initWithContentsOfFile:settingsPath]; + bool enabled = [[prefs objectForKey:@"notifications"] boolValue]; + if(enabled){ + NSDate *date = MSHookIvar(self, "_date"); + NSInteger format = MSHookIvar(self, "_dateFormatStyle"); + CGFloat affectTime = [[prefs objectForKey:@"affectTime"] floatValue]; + if((date != nil) && (format == 1)){ + BSUIRelativeDateLabel *dateLabel = MSHookIvar(self, "_dateLabel"); + int timeSinceNow = (int)[date timeIntervalSinceNow]; + bool isFuture = false; + if (timeSinceNow > 0){ + isFuture = true; + }else{ + timeSinceNow = timeSinceNow*-1; + } + bool addMinutes = [[prefs objectForKey:@"addMinutes"] boolValue]; + bool addToCurrent = [[prefs objectForKey:@"addToCurrent"] boolValue]; + int hours = timeSinceNow / 3600; + int minutes = (timeSinceNow % 3600) / 60; + if(addMinutes){ + if(hours == 0){ + if(minutes == 0){ + }else{ + if(isFuture){ + dateLabel.text = [NSString stringWithFormat:@"in %im", minutes]; + }else{ + dateLabel.text = [NSString stringWithFormat:@"%im ago", minutes]; + } + } + }else{ + if(minutes == 0){ + if(isFuture){ + dateLabel.text = [NSString stringWithFormat:@"in %ih", hours]; + }else{ + dateLabel.text = [NSString stringWithFormat:@"%ih ago", hours]; + } + } else{ + if(isFuture){ + dateLabel.text = [NSString stringWithFormat:@"in %ih %im", hours, minutes]; + }else{ + dateLabel.text = [NSString stringWithFormat:@"%ih %im ago", hours, minutes]; + } + } + } + }else if(addToCurrent){ + if(hours == 0){ + if(minutes == 0){ + }else{ + if(isFuture){ + dateLabel.text = [NSString stringWithFormat:@"in %im", minutes]; + }else{ + dateLabel.text = [NSString stringWithFormat:@"%im ago", minutes]; + } + } + }else{ + if(isFuture){ + dateLabel.text = [NSString stringWithFormat:@"in %ih", hours]; + }else{ + dateLabel.text = [NSString stringWithFormat:@"%ih ago", hours]; + } + } + } + if((timeSinceNow/60) >= affectTime){ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + if(is24h){ + [dateFormatter setDateFormat:@"HH:mm"]; + }else{ + [dateFormatter setDateFormat:@"h:mm a"]; + } + if(addToCurrent && !([dateLabel.text isEqualToString:[dateFormatter stringFromDate:date]])){ + dateLabel.text = [[dateLabel.text stringByAppendingString:@" • "] stringByAppendingString:[dateFormatter stringFromDate:date]]; + }else{ + dateLabel.text =[dateFormatter stringFromDate:date]; + } + [dateLabel sizeToFit]; + [dateFormatter release]; + } + } + } +} +-(void)dateLabelDidChange:(id)arg1{ + %orig(arg1); + [self _updateTextAttributesForDateLabel]; +} +%end +%end + +%ctor{ + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + [formatter setLocale:[NSLocale currentLocale]]; + [formatter setDateStyle:NSDateFormatterNoStyle]; + [formatter setTimeStyle:NSDateFormatterShortStyle]; + NSString *dateString = [formatter stringFromDate:[NSDate date]]; + NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]]; + NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]]; + is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound); + [formatter release]; + if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0 && [[[UIDevice currentDevice] systemVersion] floatValue] < 11.0) { + %init(iOS10); + } else if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 11.0 && [[[UIDevice currentDevice] systemVersion] floatValue] < 12.0) { + %init(iOS11); + }else if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 12.0) { + %init(iOS12AndAbove); + } +} diff --git a/ExactTimeMail.plist b/ExactTimeMail.plist new file mode 100644 index 0000000..648b6ed --- /dev/null +++ b/ExactTimeMail.plist @@ -0,0 +1 @@ +{ Filter = { Bundles = ( "com.apple.mobilemail" ); }; } diff --git a/ExactTimeMail.x b/ExactTimeMail.x new file mode 100644 index 0000000..2a76a67 --- /dev/null +++ b/ExactTimeMail.x @@ -0,0 +1,49 @@ +@interface UIDateLabel : UILabel +@property (nonatomic, strong) NSDate *date; +@end + +@interface MessageListCellView : UIView +@property (nonatomic, strong) UIDateLabel *dateLabel; +@end + +static bool is24h; +static NSString *settingsPath = @"/var/mobile/Library/Preferences/com.gilshahar7.exacttimeprefs.plist"; +static bool enabled; + +%hook MessageListCellView +-(void)layoutSubviews{ + %orig; + if(enabled){ + if(![self.dateLabel.text containsString:@":"]){ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + if(is24h){ + [dateFormatter setDateFormat:@" • HH:mm"]; + }else{ + [dateFormatter setDateFormat:@" • h:mm a"]; + } + + self.dateLabel.textAlignment = 1; + self.dateLabel.numberOfLines = 1; + self.dateLabel.text = [self.dateLabel.text stringByAppendingString:[dateFormatter stringFromDate:self.dateLabel.date]]; + [self.dateLabel sizeToFit]; + //calling %orig again is not the best thing to do but the label was not positioned correctly after sizing it to fit the new string. If you feel like helping me with this, send a pull request! + %orig; + } + } +} +%end + +%ctor{ + + NSMutableDictionary *prefs = [[NSMutableDictionary alloc] initWithContentsOfFile:settingsPath]; + enabled = [[prefs objectForKey:@"mail"] boolValue]; + + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + [formatter setLocale:[NSLocale currentLocale]]; + [formatter setDateStyle:NSDateFormatterNoStyle]; + [formatter setTimeStyle:NSDateFormatterShortStyle]; + NSString *dateString = [formatter stringFromDate:[NSDate date]]; + NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]]; + NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]]; + is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound); +} diff --git a/ExactTimeMessages.plist b/ExactTimeMessages.plist new file mode 100644 index 0000000..b971366 --- /dev/null +++ b/ExactTimeMessages.plist @@ -0,0 +1 @@ +{ Filter = { Bundles = ( "com.apple.MobileSMS" ); }; } diff --git a/ExactTimeMessages.xm b/ExactTimeMessages.xm new file mode 100644 index 0000000..e3dc2d3 --- /dev/null +++ b/ExactTimeMessages.xm @@ -0,0 +1,41 @@ +@interface UIDateLabel : UILabel +@property (nonatomic, strong) NSDate *date; +@end +static bool is24h; +static NSString *settingsPath = @"/var/mobile/Library/Preferences/com.gilshahar7.exacttimeprefs.plist"; +static bool enabled; + +%hook CKConversationListCell +-(void)layoutSubviews{ + %orig; + if(enabled){ + if(MSHookIvar(self, "_dateLabel")){ + UIDateLabel *dateLabel = MSHookIvar(self, "_dateLabel"); + if(![dateLabel.text containsString:@":"]){ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + if(is24h){ + [dateFormatter setDateFormat:@" • HH:mm"]; + }else{ + [dateFormatter setDateFormat:@" • h:mm a"]; + } + dateLabel.text = [dateLabel.text stringByAppendingString:[dateFormatter stringFromDate:dateLabel.date]]; + } + } + } +} +%end + +%ctor{ + + NSMutableDictionary *prefs = [[NSMutableDictionary alloc] initWithContentsOfFile:settingsPath]; + enabled = [[prefs objectForKey:@"messages"] boolValue]; + + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + [formatter setLocale:[NSLocale currentLocale]]; + [formatter setDateStyle:NSDateFormatterNoStyle]; + [formatter setTimeStyle:NSDateFormatterShortStyle]; + NSString *dateString = [formatter stringFromDate:[NSDate date]]; + NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]]; + NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]]; + is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound); +} diff --git a/ExactTimePhone.plist b/ExactTimePhone.plist new file mode 100644 index 0000000..7a7fd62 --- /dev/null +++ b/ExactTimePhone.plist @@ -0,0 +1 @@ +{ Filter = { Bundles = ( "com.apple.mobilephone" ); }; } diff --git a/ExactTimePhone.x b/ExactTimePhone.x new file mode 100644 index 0000000..c4a7d01 --- /dev/null +++ b/ExactTimePhone.x @@ -0,0 +1,46 @@ +@interface UIDateLabel : UILabel +@property (nonatomic, strong) NSDate *date; +@end + +@interface MPRecentsTableViewCell +@property (nonatomic, strong) UIDateLabel *callerDateLabel; +@end + +static bool is24h; +static NSString *settingsPath = @"/var/mobile/Library/Preferences/com.gilshahar7.exacttimeprefs.plist"; +static bool enabled; + +%hook MPRecentsTableViewCell +-(void)layoutSubviews{ + %orig; + if(enabled){ + if(![self.callerDateLabel.text containsString:@":"]){ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + if(is24h){ + [dateFormatter setDateFormat:@"\nHH:mm"]; + }else{ + [dateFormatter setDateFormat:@"\nh:mm a"]; + } + + self.callerDateLabel.textAlignment = 2; + self.callerDateLabel.numberOfLines = 2; + self.callerDateLabel.text = [self.callerDateLabel.text stringByAppendingString:[dateFormatter stringFromDate:self.callerDateLabel.date]]; + } + } +} +%end + +%ctor{ + + NSMutableDictionary *prefs = [[NSMutableDictionary alloc] initWithContentsOfFile:settingsPath]; + enabled = [[prefs objectForKey:@"phone"] boolValue]; + + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + [formatter setLocale:[NSLocale currentLocale]]; + [formatter setDateStyle:NSDateFormatterNoStyle]; + [formatter setTimeStyle:NSDateFormatterShortStyle]; + NSString *dateString = [formatter stringFromDate:[NSDate date]]; + NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]]; + NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]]; + is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound); +} diff --git a/Makefile b/Makefile index 9913a62..e5663d8 100644 --- a/Makefile +++ b/Makefile @@ -2,8 +2,17 @@ ARCHS = armv7 arm64 arm64e export TARGET = iphone:clang:11.2:7.0 include $(THEOS)/makefiles/common.mk -TWEAK_NAME = ExactTime -ExactTime_FILES = Tweak.xm +DEBUG=0 + +TWEAK_NAME = ExactTime ExactTimeMail ExactTimePhone ExactTimeMessages +ExactTime_FILES = ExactTime.xm + +ExactTimeMail_FILES = ExactTimeMail.x + +ExactTimePhone_FILES = ExactTimePhone.x + +ExactTimeMessages_FILES = ExactTimeMessages.xm + include $(THEOS_MAKE_PATH)/tweak.mk diff --git a/Tweak.xm b/Tweak.xm deleted file mode 100644 index 62809f0..0000000 --- a/Tweak.xm +++ /dev/null @@ -1,310 +0,0 @@ -//IOS 10 -@interface NCNotificationDateLabel -@property (assign,nonatomic) NSString *text; --(void)sizeToFit; -@end -//IOS 10 -@interface NCLookHeaderContentView --(void)_updateDateLabelFontForShortLook; -@end -//IOS 11 & 12 And Above -@interface BSUIRelativeDateLabel -@property (assign,nonatomic) NSString *text; --(void)sizeToFit; -@end -//IOS 11 -@interface MTPlatterHeaderContentView --(void)_updateTextAttributesForDateLabel; -@end -//IOS 12 And Above -@interface PLPlatterHeaderContentView --(void)_updateTextAttributesForDateLabel; -@end - - - -static bool is24h; -static NSString *settingsPath = @"/var/mobile/Library/Preferences/com.gilshahar7.exacttimeprefs.plist"; - -%group iOS10 - %hook NCLookHeaderContentView - -(void)_updateDateLabelFontForShortLook{ - %orig; - NSDate *date = MSHookIvar(self, "_date"); - NSInteger format = MSHookIvar(self, "_dateFormatStyle"); - NSMutableDictionary *prefs = [[NSMutableDictionary alloc] initWithContentsOfFile:settingsPath]; - CGFloat affectTime = [[prefs objectForKey:@"affectTime"] floatValue]; - if((date != nil) && (format == 1)){ - NCNotificationDateLabel *dateLabel = MSHookIvar(self, "_dateLabel"); - int timeSinceNow = (int)[date timeIntervalSinceNow]; - bool isFuture = false; - if (timeSinceNow > 0){ - isFuture = true; - }else{ - timeSinceNow = timeSinceNow*-1; - } - bool addMinutes = [[prefs objectForKey:@"addMinutes"] boolValue]; - bool addToCurrent = [[prefs objectForKey:@"addToCurrent"] boolValue]; - int hours = timeSinceNow / 3600; - int minutes = (timeSinceNow % 3600) / 60; - if(addMinutes){ - if(hours == 0){ - if(minutes == 0){ - }else{ - if(isFuture){ - dateLabel.text = [NSString stringWithFormat:@"in %im", minutes]; - }else{ - dateLabel.text = [NSString stringWithFormat:@"%im ago", minutes]; - } - } - }else{ - if(minutes == 0){ - if(isFuture){ - dateLabel.text = [NSString stringWithFormat:@"in %ih", hours]; - }else{ - dateLabel.text = [NSString stringWithFormat:@"%ih ago", hours]; - } - } else{ - if(isFuture){ - dateLabel.text = [NSString stringWithFormat:@"in %ih %im", hours, minutes]; - }else{ - dateLabel.text = [NSString stringWithFormat:@"%ih %im ago", hours, minutes]; - } - } - } - }else if(addToCurrent){ - if(hours == 0){ - if(minutes == 0){ - }else{ - if(isFuture){ - dateLabel.text = [NSString stringWithFormat:@"in %im", minutes]; - }else{ - dateLabel.text = [NSString stringWithFormat:@"%im ago", minutes]; - } - } - }else{ - if(isFuture){ - dateLabel.text = [NSString stringWithFormat:@"in %ih", hours]; - }else{ - dateLabel.text = [NSString stringWithFormat:@"%ih ago", hours]; - } - } - } - if((timeSinceNow/60) >= affectTime){ - NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - if(is24h){ - [dateFormatter setDateFormat:@"HH:mm"]; - }else{ - [dateFormatter setDateFormat:@"h:mm a"]; - } - if(addToCurrent && !([dateLabel.text isEqualToString:[dateFormatter stringFromDate:date]])){ - dateLabel.text = [[dateLabel.text stringByAppendingString:@" • "] stringByAppendingString:[dateFormatter stringFromDate:date]]; - }else{ - dateLabel.text =[dateFormatter stringFromDate:date]; - } - [dateLabel sizeToFit]; - [dateFormatter release]; - } - } - } - -(void)dateLabelDidChange:(id)arg1{ - %orig(arg1); - [self _updateDateLabelFontForShortLook]; - } - %end -%end - -%group iOS11 - %hook MTPlatterHeaderContentView - -(void)_updateTextAttributesForDateLabel{ - %orig; - NSDate *date = MSHookIvar(self, "_date"); - NSInteger format = MSHookIvar(self, "_dateFormatStyle"); - NSMutableDictionary *prefs = [[NSMutableDictionary alloc] initWithContentsOfFile:settingsPath]; - CGFloat affectTime = [[prefs objectForKey:@"affectTime"] floatValue]; - if((date != nil) && (format == 1)){ - BSUIRelativeDateLabel *dateLabel = MSHookIvar(self, "_dateLabel"); - int timeSinceNow = (int)[date timeIntervalSinceNow]; - bool isFuture = false; - if (timeSinceNow > 0){ - isFuture = true; - }else{ - timeSinceNow = timeSinceNow*-1; - } - bool addMinutes = [[prefs objectForKey:@"addMinutes"] boolValue]; - bool addToCurrent = [[prefs objectForKey:@"addToCurrent"] boolValue]; - int hours = timeSinceNow / 3600; - int minutes = (timeSinceNow % 3600) / 60; - if(addMinutes){ - if(hours == 0){ - if(minutes == 0){ - }else{ - if(isFuture){ - dateLabel.text = [NSString stringWithFormat:@"in %im", minutes]; - }else{ - dateLabel.text = [NSString stringWithFormat:@"%im ago", minutes]; - } - } - }else{ - if(minutes == 0){ - if(isFuture){ - dateLabel.text = [NSString stringWithFormat:@"in %ih", hours]; - }else{ - dateLabel.text = [NSString stringWithFormat:@"%ih ago", hours]; - } - } else{ - if(isFuture){ - dateLabel.text = [NSString stringWithFormat:@"in %ih %im", hours, minutes]; - }else{ - dateLabel.text = [NSString stringWithFormat:@"%ih %im ago", hours, minutes]; - } - } - } - }else if(addToCurrent){ - if(hours == 0){ - if(minutes == 0){ - }else{ - if(isFuture){ - dateLabel.text = [NSString stringWithFormat:@"in %im", minutes]; - }else{ - dateLabel.text = [NSString stringWithFormat:@"%im ago", minutes]; - } - } - }else{ - if(isFuture){ - dateLabel.text = [NSString stringWithFormat:@"in %ih", hours]; - }else{ - dateLabel.text = [NSString stringWithFormat:@"%ih ago", hours]; - } - } - } - if((timeSinceNow/60) >= affectTime){ - NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - if(is24h){ - [dateFormatter setDateFormat:@"HH:mm"]; - }else{ - [dateFormatter setDateFormat:@"h:mm a"]; - } - if(addToCurrent && !([dateLabel.text isEqualToString:[dateFormatter stringFromDate:date]])){ - dateLabel.text = [[dateLabel.text stringByAppendingString:@" • "] stringByAppendingString:[dateFormatter stringFromDate:date]]; - }else{ - dateLabel.text =[dateFormatter stringFromDate:date]; - } - [dateLabel sizeToFit]; - [dateFormatter release]; - } - } - } - -(void)dateLabelDidChange:(id)arg1{ - %orig(arg1); - [self _updateTextAttributesForDateLabel]; - } - %end -%end - -%group iOS12AndAbove - %hook PLPlatterHeaderContentView - -(void)_updateTextAttributesForDateLabel{ - %orig; - NSDate *date = MSHookIvar(self, "_date"); - NSInteger format = MSHookIvar(self, "_dateFormatStyle"); - NSMutableDictionary *prefs = [[NSMutableDictionary alloc] initWithContentsOfFile:settingsPath]; - CGFloat affectTime = [[prefs objectForKey:@"affectTime"] floatValue]; - if((date != nil) && (format == 1)){ - BSUIRelativeDateLabel *dateLabel = MSHookIvar(self, "_dateLabel"); - int timeSinceNow = (int)[date timeIntervalSinceNow]; - bool isFuture = false; - if (timeSinceNow > 0){ - isFuture = true; - }else{ - timeSinceNow = timeSinceNow*-1; - } - bool addMinutes = [[prefs objectForKey:@"addMinutes"] boolValue]; - bool addToCurrent = [[prefs objectForKey:@"addToCurrent"] boolValue]; - int hours = timeSinceNow / 3600; - int minutes = (timeSinceNow % 3600) / 60; - if(addMinutes){ - if(hours == 0){ - if(minutes == 0){ - }else{ - if(isFuture){ - dateLabel.text = [NSString stringWithFormat:@"in %im", minutes]; - }else{ - dateLabel.text = [NSString stringWithFormat:@"%im ago", minutes]; - } - } - }else{ - if(minutes == 0){ - if(isFuture){ - dateLabel.text = [NSString stringWithFormat:@"in %ih", hours]; - }else{ - dateLabel.text = [NSString stringWithFormat:@"%ih ago", hours]; - } - } else{ - if(isFuture){ - dateLabel.text = [NSString stringWithFormat:@"in %ih %im", hours, minutes]; - }else{ - dateLabel.text = [NSString stringWithFormat:@"%ih %im ago", hours, minutes]; - } - } - } - }else if(addToCurrent){ - if(hours == 0){ - if(minutes == 0){ - }else{ - if(isFuture){ - dateLabel.text = [NSString stringWithFormat:@"in %im", minutes]; - }else{ - dateLabel.text = [NSString stringWithFormat:@"%im ago", minutes]; - } - } - }else{ - if(isFuture){ - dateLabel.text = [NSString stringWithFormat:@"in %ih", hours]; - }else{ - dateLabel.text = [NSString stringWithFormat:@"%ih ago", hours]; - } - } - } - if((timeSinceNow/60) >= affectTime){ - NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - if(is24h){ - [dateFormatter setDateFormat:@"HH:mm"]; - }else{ - [dateFormatter setDateFormat:@"h:mm a"]; - } - if(addToCurrent && !([dateLabel.text isEqualToString:[dateFormatter stringFromDate:date]])){ - dateLabel.text = [[dateLabel.text stringByAppendingString:@" • "] stringByAppendingString:[dateFormatter stringFromDate:date]]; - }else{ - dateLabel.text =[dateFormatter stringFromDate:date]; - } - [dateLabel sizeToFit]; - [dateFormatter release]; - } - } - } - -(void)dateLabelDidChange:(id)arg1{ - %orig(arg1); - [self _updateTextAttributesForDateLabel]; - } - %end -%end - -%ctor{ - NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; - [formatter setLocale:[NSLocale currentLocale]]; - [formatter setDateStyle:NSDateFormatterNoStyle]; - [formatter setTimeStyle:NSDateFormatterShortStyle]; - NSString *dateString = [formatter stringFromDate:[NSDate date]]; - NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]]; - NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]]; - is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound); - [formatter release]; - if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0 && [[[UIDevice currentDevice] systemVersion] floatValue] < 11.0) { - %init(iOS10); - } else if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 11.0 && [[[UIDevice currentDevice] systemVersion] floatValue] < 12.0) { - %init(iOS11); - }else if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 12.0) { - %init(iOS12AndAbove); - } -} diff --git a/control b/control index 7d208d8..93cea2b 100644 --- a/control +++ b/control @@ -1,9 +1,10 @@ Package: com.gilshahar7.exacttime Name: ExactTime Depends: mobilesubstrate -Version: 1.8 +Conflicts: com.gilshahar7.exacttimemail, com.gilshahar7.exacttimephone, com.gilshahar7.exacttimemessages +Version: 2.0 Architecture: iphoneos-arm -Description: Shows the exact time of a notification. +Description: Shows the exact time of notifications, messages, calls and emails. Maintainer: gilshahar7 Author: gilshahar7 Section: Tweaks diff --git a/exacttimeprefs/ExactTimeprefs.mm b/exacttimeprefs/ExactTimeprefs.mm index 742e87d..fe980c3 100644 --- a/exacttimeprefs/ExactTimeprefs.mm +++ b/exacttimeprefs/ExactTimeprefs.mm @@ -1,20 +1,148 @@ #import +#import -@interface ExactTimeprefsListController: PSListController { -} +@interface PSListController (iOS12Plus) +-(BOOL)containsSpecifier:(id)arg1; +@end + +@interface ExactTimeprefsListController : PSListController +@property (nonatomic, retain) NSMutableDictionary *savedSpecifiers; @end @implementation ExactTimeprefsListController + +- (id)readPreferenceValue:(PSSpecifier*)specifier { + NSString *path = [NSString stringWithFormat:@"/User/Library/Preferences/%@.plist", specifier.properties[@"defaults"]]; + NSMutableDictionary *settings = [NSMutableDictionary dictionary]; + [settings addEntriesFromDictionary:[NSDictionary dictionaryWithContentsOfFile:path]]; + return (settings[specifier.properties[@"key"]]) ?: specifier.properties[@"default"]; +} + +- (void)setPreferenceValue:(id)value specifier:(PSSpecifier*)specifier { + NSString *path = [NSString stringWithFormat:@"/User/Library/Preferences/%@.plist", specifier.properties[@"defaults"]]; + NSMutableDictionary *settings = [NSMutableDictionary dictionary]; + [settings addEntriesFromDictionary:[NSDictionary dictionaryWithContentsOfFile:path]]; + [settings setObject:value forKey:specifier.properties[@"key"]]; + [settings writeToFile:path atomically:YES]; + CFStringRef notificationName = (CFStringRef)specifier.properties[@"PostNotification"]; + if (notificationName) { + CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), notificationName, NULL, NULL, YES); + } + + //Here we check if the switch is on based of the key of the PSSwitchCell, then hide the specifier + //We then hide the cell using the id of it. If its already hidden we reinsert the cell below a certain specifier based on its ID + NSString *key = [specifier propertyForKey:@"key"]; + if([key isEqualToString:@"notifications"]) { + if([value boolValue]) { + [self insertContiguousSpecifiers:@[self.savedSpecifiers[@"96"]] afterSpecifierID:@"95" animated:YES]; + [self insertContiguousSpecifiers:@[self.savedSpecifiers[@"97"]] afterSpecifierID:@"96" animated:YES]; + [self insertContiguousSpecifiers:@[self.savedSpecifiers[@"98"]] afterSpecifierID:@"97" animated:YES]; + [self insertContiguousSpecifiers:@[self.savedSpecifiers[@"99"]] afterSpecifierID:@"98" animated:YES]; + [self insertContiguousSpecifiers:@[self.savedSpecifiers[@"100"]] afterSpecifierID:@"99" animated:YES]; + [self insertContiguousSpecifiers:@[self.savedSpecifiers[@"101"]] afterSpecifierID:@"100" animated:YES]; + [self insertContiguousSpecifiers:@[self.savedSpecifiers[@"102"]] afterSpecifierID:@"101" animated:YES]; + } else if([self containsSpecifier:self.savedSpecifiers[@"96"]]) { + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"96"]] animated:YES]; + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"97"]] animated:YES]; + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"98"]] animated:YES]; + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"99"]] animated:YES]; + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"100"]] animated:YES]; + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"101"]] animated:YES]; + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"102"]] animated:YES]; + } + } +} + - (id)specifiers { if(_specifiers == nil) { _specifiers = [[self loadSpecifiersFromPlistName:@"ExactTimeprefs" target:self] retain]; } + //Code to save certain specifiers + //Add the id of the specifier to the chosenIDs array. + //Only add the IDs of the specifiers you want to hide + NSArray *chosenIDs = @[@"96", @"97", @"98", @"99", @"100", @"101", @"102"]; + self.savedSpecifiers = (!self.savedSpecifiers) ? [[NSMutableDictionary alloc] init] : self.savedSpecifiers; + for(PSSpecifier *specifier in _specifiers) { + if([chosenIDs containsObject:[specifier propertyForKey:@"id"]]) { + [self.savedSpecifiers setObject:specifier forKey:[specifier propertyForKey:@"id"]]; + } + } return _specifiers; } --(void)apply{ -[self.view endEditing:YES]; +-(void)viewDidLoad { + [super viewDidLoad]; + + //From my testing, at this point we can't get the value of a specifier yet as they haven't loaded + //Instead you can just read your switch value from your preferences file + + NSDictionary *preferences = [NSDictionary dictionaryWithContentsOfFile:@"/var/mobile/Library/Preferences/com.gilshahar7.exacttimeprefs.plist"]; + if(![preferences[@"notifications"] boolValue] == true) { + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"96"]] animated:NO]; + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"97"]] animated:NO]; + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"98"]] animated:NO]; + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"99"]] animated:NO]; + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"100"]] animated:NO]; + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"101"]] animated:NO]; + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"102"]] animated:NO]; + } } + +-(void)reloadSpecifiers { + [super reloadSpecifiers]; + + //This will look the exact same as step 5, where we only check if specifiers need to be removed + NSDictionary *preferences = [NSDictionary dictionaryWithContentsOfFile:@"/var/mobile/Library/Preferences/com.gilshahar7.exacttimeprefs.plist"]; + if([preferences[@"notifications"] boolValue] == false) { + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"96"]] animated:NO]; + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"97"]] animated:NO]; + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"98"]] animated:NO]; + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"99"]] animated:NO]; + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"100"]] animated:NO]; + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"101"]] animated:NO]; + [self removeContiguousSpecifiers:@[self.savedSpecifiers[@"102"]] animated:NO]; + } +} + +- (void)loadView { + [super loadView]; + ((UITableView *)[self table]).keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag; +} + +-(void)_returnKeyPressed:(id)arg1 { [self.view endEditing:YES]; } + +-(void)apply{ + [self.view endEditing:YES]; +} + +- (void)sourceLink +{ + [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://github.com/gilshahar7/ExactTime"]]; +} + +- (void)donationLink +{ + [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.paypal.me/gilshahar7"]]; +} + + +- (void)openTwitterWithUsername:(NSString*)username +{ + [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://twitter.com/%@", username]]]; +} +- (void)openTwitter +{ + [self openTwitterWithUsername:@"gilshahar7"]; +} + +- (void)reddit { + [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.reddit.com/user/gilshahar7/"]]; +} + +- (void)sendEmail { + [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto:gilshahardex99@gmail.com?subject=ExactTime"]]; +} + @end // vim:ft=objc diff --git a/exacttimeprefs/Makefile b/exacttimeprefs/Makefile index c561de6..eea9787 100644 --- a/exacttimeprefs/Makefile +++ b/exacttimeprefs/Makefile @@ -2,6 +2,8 @@ ARCHS = armv7 arm64 arm64e export TARGET = iphone:clang:11.2:7.0 include $(THEOS)/makefiles/common.mk +DEBUG=0 + BUNDLE_NAME = ExactTimeprefs ExactTimeprefs_FILES = ExactTimeprefs.mm ExactTimeprefs_INSTALL_PATH = /Library/PreferenceBundles diff --git a/exacttimeprefs/Resources/Donate@2x.png b/exacttimeprefs/Resources/Donate@2x.png new file mode 100644 index 0000000..c5892fa Binary files /dev/null and b/exacttimeprefs/Resources/Donate@2x.png differ diff --git a/exacttimeprefs/Resources/Donate@3x.png b/exacttimeprefs/Resources/Donate@3x.png new file mode 100644 index 0000000..b17f13e Binary files /dev/null and b/exacttimeprefs/Resources/Donate@3x.png differ diff --git a/exacttimeprefs/Resources/Email@2x.png b/exacttimeprefs/Resources/Email@2x.png new file mode 100644 index 0000000..ccdb7b4 Binary files /dev/null and b/exacttimeprefs/Resources/Email@2x.png differ diff --git a/exacttimeprefs/Resources/Email@3x.png b/exacttimeprefs/Resources/Email@3x.png new file mode 100644 index 0000000..160a8cd Binary files /dev/null and b/exacttimeprefs/Resources/Email@3x.png differ diff --git a/exacttimeprefs/Resources/ExactTime@2x.png b/exacttimeprefs/Resources/ExactTime@2x.png index bb776e2..abdc0cc 100644 Binary files a/exacttimeprefs/Resources/ExactTime@2x.png and b/exacttimeprefs/Resources/ExactTime@2x.png differ diff --git a/exacttimeprefs/Resources/ExactTime@3x.png b/exacttimeprefs/Resources/ExactTime@3x.png new file mode 100644 index 0000000..156db8f Binary files /dev/null and b/exacttimeprefs/Resources/ExactTime@3x.png differ diff --git a/exacttimeprefs/Resources/ExactTimeprefs.plist b/exacttimeprefs/Resources/ExactTimeprefs.plist index 71fe062..1acea09 100644 --- a/exacttimeprefs/Resources/ExactTimeprefs.plist +++ b/exacttimeprefs/Resources/ExactTimeprefs.plist @@ -7,8 +7,70 @@ cell PSGroupCell + label + Choose extentions + footerText + + + + cell + PSSwitchCell + default + + defaults + com.gilshahar7.exacttimeprefs + key + notifications + label + Notifications + + + cell + PSSwitchCell + default + + defaults + com.gilshahar7.exacttimeprefs + key + messages + label + Messages + + + cell + PSSwitchCell + default + + defaults + com.gilshahar7.exacttimeprefs + key + phone + label + Phone + + + cell + PSSwitchCell + default + + defaults + com.gilshahar7.exacttimeprefs + key + mail + label + Mail + id + 95 + + + cell + PSGroupCell + label + Notifications settings footerText Only show the exact time for notifications older than this value (0~240). Default value for stock iOS is 240 minutes (4 hours) + id + 96 cell @@ -23,21 +85,28 @@ label Affect after (in minutes) + id + 97 cell PSButtonCell - defaults com.gilshahar7.exacttimeprefs + defaults + com.gilshahar7.exacttimeprefs label Apply action apply + id + 98 cell PSGroupCell footerText This will add "Xh ago" where there is an exact time, separated by a ' • ' Note: this will override any language + id + 99 cell @@ -50,12 +119,16 @@ addToCurrent label Add estimated time to exact time + id + 100 cell PSGroupCell footerText This will add minutes to all "Xh ago" Note: this will override any language + id + 101 cell @@ -68,12 +141,66 @@ addMinutes label Change "2h ago" to "2h 17m ago" + id + 102 cell PSGroupCell + label + About footerText - Made by: gilshahar7. + Made by gilshahar7 + + + action + reddit + cell + PSButtonCell + icon + Reddit + label + Reddit (u/gilshahar7) + + + action + sendEmail + cell + PSButtonCell + icon + Email + label + Email + + + action + openTwitter + cell + PSButtonCell + icon + Twitter + label + Twitter (@gilshahar7) + + + action + sourceLink + cell + PSButtonCell + icon + GitHub + label + Source Code + + + action + donationLink + cell + PSButtonCell + icon + Donate + label + Donate title diff --git a/exacttimeprefs/Resources/GitHub@2x.png b/exacttimeprefs/Resources/GitHub@2x.png new file mode 100644 index 0000000..bc4a373 Binary files /dev/null and b/exacttimeprefs/Resources/GitHub@2x.png differ diff --git a/exacttimeprefs/Resources/GitHub@3x.png b/exacttimeprefs/Resources/GitHub@3x.png new file mode 100644 index 0000000..9918941 Binary files /dev/null and b/exacttimeprefs/Resources/GitHub@3x.png differ diff --git a/exacttimeprefs/Resources/Reddit@2x.png b/exacttimeprefs/Resources/Reddit@2x.png new file mode 100644 index 0000000..fb22f13 Binary files /dev/null and b/exacttimeprefs/Resources/Reddit@2x.png differ diff --git a/exacttimeprefs/Resources/Reddit@3x.png b/exacttimeprefs/Resources/Reddit@3x.png new file mode 100644 index 0000000..9451593 Binary files /dev/null and b/exacttimeprefs/Resources/Reddit@3x.png differ diff --git a/exacttimeprefs/Resources/Root.plist b/exacttimeprefs/Resources/Root.plist deleted file mode 100644 index 71fe062..0000000 --- a/exacttimeprefs/Resources/Root.plist +++ /dev/null @@ -1,82 +0,0 @@ - - - - - items - - - cell - PSGroupCell - footerText - Only show the exact time for notifications older than this value (0~240). Default value for stock iOS is 240 minutes (4 hours) - - - cell - PSEditTextCell - defaults - com.gilshahar7.exacttimeprefs - key - affectTime - default - 10 - isNumeric - - label - Affect after (in minutes) - - - cell - PSButtonCell - defaults com.gilshahar7.exacttimeprefs - label - Apply - action - apply - - - cell - PSGroupCell - footerText - This will add "Xh ago" where there is an exact time, separated by a ' • ' Note: this will override any language - - - cell - PSSwitchCell - default - - defaults - com.gilshahar7.exacttimeprefs - key - addToCurrent - label - Add estimated time to exact time - - - cell - PSGroupCell - footerText - This will add minutes to all "Xh ago" Note: this will override any language - - - cell - PSSwitchCell - default - - defaults - com.gilshahar7.exacttimeprefs - key - addMinutes - label - Change "2h ago" to "2h 17m ago" - - - cell - PSGroupCell - footerText - Made by: gilshahar7. - - - title - ExactTime - - diff --git a/exacttimeprefs/Resources/Twitter@2x.png b/exacttimeprefs/Resources/Twitter@2x.png new file mode 100644 index 0000000..72cf57e Binary files /dev/null and b/exacttimeprefs/Resources/Twitter@2x.png differ diff --git a/exacttimeprefs/Resources/Twitter@3x.png b/exacttimeprefs/Resources/Twitter@3x.png new file mode 100644 index 0000000..ed324ce Binary files /dev/null and b/exacttimeprefs/Resources/Twitter@3x.png differ diff --git a/exacttimeprefs/RootListController.h b/exacttimeprefs/RootListController.h deleted file mode 100644 index 71a5fa5..0000000 --- a/exacttimeprefs/RootListController.h +++ /dev/null @@ -1,5 +0,0 @@ -#import - -@interface RootListController : PSListController - -@end diff --git a/exacttimeprefs/RootListController.m b/exacttimeprefs/RootListController.m deleted file mode 100644 index 382d482..0000000 --- a/exacttimeprefs/RootListController.m +++ /dev/null @@ -1,17 +0,0 @@ -#include "RootListController.h" - -@implementation RootListController - -- (NSArray *)specifiers { - if (!_specifiers) { - _specifiers = [[self loadSpecifiersFromPlistName:@"Root" target:self] retain]; - } - - return _specifiers; -} - --(void)apply{ - [self.view endEditing:YES]; -} - -@end diff --git a/icon.psd b/icon.psd new file mode 100644 index 0000000..fcdac88 Binary files /dev/null and b/icon.psd differ diff --git a/packages/com.gilshahar7.exacttime_2.0-4+debug_iphoneos-arm.deb b/packages/com.gilshahar7.exacttime_2.0-4+debug_iphoneos-arm.deb new file mode 100644 index 0000000..542c70d Binary files /dev/null and b/packages/com.gilshahar7.exacttime_2.0-4+debug_iphoneos-arm.deb differ diff --git a/packages/com.gilshahar7.exacttime_2.0-5+debug_iphoneos-arm.deb b/packages/com.gilshahar7.exacttime_2.0-5+debug_iphoneos-arm.deb new file mode 100644 index 0000000..4da270c Binary files /dev/null and b/packages/com.gilshahar7.exacttime_2.0-5+debug_iphoneos-arm.deb differ diff --git a/packages/com.gilshahar7.exacttime_2.0_iphoneos-arm.deb b/packages/com.gilshahar7.exacttime_2.0_iphoneos-arm.deb new file mode 100644 index 0000000..6ca1d6a Binary files /dev/null and b/packages/com.gilshahar7.exacttime_2.0_iphoneos-arm.deb differ