Skip to content

Commit

Permalink
Filter tasks
Browse files Browse the repository at this point in the history
  • Loading branch information
leonspok committed Mar 20, 2017
1 parent 7fa124b commit a5eec19
Show file tree
Hide file tree
Showing 7 changed files with 108 additions and 11 deletions.
21 changes: 21 additions & 0 deletions Menubar TrackingTime/AppDelegate.m
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,19 @@ - (IBAction)startTracking:(NSMenuItem *)sender {
}];
}

- (IBAction)toggleTasksFiltering:(id)sender {
[TTTimeManager sharedInstance].showOnlyMyTasks = ![TTTimeManager sharedInstance].showOnlyMyTasks;
[[TTTimeManager sharedInstance] loadAllDataCompletion:^(BOOL success) {
if (success) {
dispatch_async(dispatch_get_main_queue(), ^{
NSUserNotification *notification = [[NSUserNotification alloc] init];
notification.title = @"TrackingTime is ready";
[self postNotification:notification];
});
}
}];
}

- (IBAction)createNewTask:(NSMenuItem *)sender {
NSAlert *alert = [[NSAlert alloc] init];
alert.alertStyle = NSAlertStyleInformational;
Expand Down Expand Up @@ -461,6 +474,14 @@ - (void)menuNeedsUpdate:(NSMenu *)menu {

[self.menu addItem:[NSMenuItem separatorItem]];

NSMenuItem *filterTasksItem = [NSMenuItem new];
filterTasksItem.title = @"Show only my tasks";
filterTasksItem.enabled = YES;
filterTasksItem.target = self;
filterTasksItem.action = @selector(toggleTasksFiltering:);
filterTasksItem.state = [TTTimeManager sharedInstance].showOnlyMyTasks? NSOnState : NSOffState;
[self.menu addItem:filterTasksItem];

NSMenuItem *logoutItem = [NSMenuItem new];
logoutItem.title = @"Log out";
logoutItem.enabled = YES;
Expand Down
4 changes: 2 additions & 2 deletions Menubar TrackingTime/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.1.2</string>
<string>0.1.3</string>
<key>CFBundleVersion</key>
<string>0120</string>
<string>0130</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.productivity</string>
<key>LSMinimumSystemVersion</key>
Expand Down
1 change: 1 addition & 0 deletions Menubar TrackingTime/TTTimeManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
@property (nonatomic, strong, readonly) NSDate *lastSyncTimerDate;

@property (nonatomic, readonly) NSArray<TTTask *> *alltasks;
@property (nonatomic) BOOL showOnlyMyTasks;

+ (instancetype)sharedInstance;

Expand Down
34 changes: 27 additions & 7 deletions Menubar TrackingTime/TTTimeManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,15 @@ - (id)init {
return self;
}

- (void)setShowOnlyMyTasks:(BOOL)showOnlyMyTasks {
[[NSUserDefaults standardUserDefaults] setBool:showOnlyMyTasks forKey:@"Show only my tasks"];
[[NSUserDefaults standardUserDefaults] synchronize];
}

- (BOOL)showOnlyMyTasks {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"Show only my tasks"];
}

- (void)loadAllDataCompletion:(void (^)(BOOL success))completion {
self.ready = NO;
self.loading = YES;
Expand All @@ -57,7 +66,7 @@ - (void)loadAllDataCompletion:(void (^)(BOOL success))completion {
completion(YES);
}
} else {
[self.api getListOfTasks:^(NSArray<TTTask *> *tasks) {
void (^tasksLoaded)(NSArray<TTTask *> *tasks) = ^(NSArray<TTTask *> *tasks) {
self.alltasks = tasks;
[self.api getTrackingTask:^(TTTask *task, TTTrackingEvent *event) {
self.currentTrackingEvent = event;
Expand All @@ -73,12 +82,23 @@ - (void)loadAllDataCompletion:(void (^)(BOOL success))completion {
completion(NO);
}
}];
} failure:^(NSError *error) {
self.loading = NO;
if (completion) {
completion(NO);
}
}];
};

if (self.showOnlyMyTasks) {
[self.api getListOfTasksOfUser:self.api.authedUser success:tasksLoaded failure:^(NSError *error) {
self.loading = NO;
if (completion) {
completion(NO);
}
}];
} else {
[self.api getListOfTasks:tasksLoaded failure:^(NSError *error) {
self.loading = NO;
if (completion) {
completion(NO);
}
}];
}
}
}];
}
Expand Down
4 changes: 4 additions & 0 deletions Menubar TrackingTime/TrackingTimeAPI.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@
- (void)getListOfUsers:(void (^)(NSArray<TTUser *> *users))success
failure:(void (^)(NSError *error))failure;

- (void)getListOfTasksOfUser:(TTUser *)user
success:(void (^)(NSArray<TTTask *> *tasks))success
failure:(void (^)(NSError *error))failure;

- (void)getListOfTasks:(void (^)(NSArray<TTTask *> *tasks))success
failure:(void (^)(NSError *error))failure;

Expand Down
51 changes: 51 additions & 0 deletions Menubar TrackingTime/TrackingTimeAPI.m
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,57 @@ - (void)getListOfUsers:(void (^)(NSArray<TTUser *> *users))success
}] resume];
}

- (void)getListOfTasksOfUser:(TTUser *)user
success:(void (^)(NSArray<TTTask *> *tasks))success
failure:(void (^)(NSError *error))failure {
if (!user.uid) {
if (failure) {
failure([NSError errorWithDomain:NSStringFromClass(self.class) code:2 userInfo:@{@"message": @"no user id"}]);
}
return;
}

NSMutableURLRequest *request = [self requestWithMethod:@"GET" url:[NSURL URLWithString:[NSString stringWithFormat:@"%@/users/%@/tasks", kBaseURL, [user.uid stringValue]]] params:@{@"filter": @"ACTIVE"}];

[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error) {
if (failure) {
failure(error);
}
} else {
NSError *jsonError;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&jsonError];
if (jsonError) {
if (failure) {
failure(jsonError);
}
} else {
if ([[json objectForKey:@"response"] isKindOfClass:NSDictionary.class]) {
NSDictionary *response = [json objectForKey:@"response"];
if (![[response objectForKey:@"status"] isEqual:@200]) {
if (failure) {
failure([NSError errorWithDomain:NSStringFromClass(self.class) code:[[response objectForKey:@"status"] integerValue] userInfo:response]);
}
return;
}

NSArray<NSDictionary *> *projects = [[json objectForKey:@"data"] objectForKey:@"projects"];
NSMutableArray *tasks = [NSMutableArray array];
for (NSDictionary *project in projects) {
if ([[project objectForKey:@"tasks"] isKindOfClass:NSArray.class]) {
[tasks addObjectsFromArray:[TTTask createObjectsFromJSON:[project objectForKey:@"tasks"]]];
}
}

if (success) {
success(tasks);
}
}
}
}
}] resume];
}

- (void)getListOfTasks:(void (^)(NSArray<TTTask *> *tasks))success
failure:(void (^)(NSError *error))failure {

Expand Down
4 changes: 2 additions & 2 deletions Tracking Time.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,7 @@
DEVELOPMENT_TEAM = L27TBEH57A;
INFOPLIST_FILE = "Menubar TrackingTime/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.11;
MACOSX_DEPLOYMENT_TARGET = 10.10;
PRODUCT_BUNDLE_IDENTIFIER = me.musicsense.osx.TrackingTime;
PRODUCT_NAME = "$(TARGET_NAME)";
};
Expand All @@ -407,7 +407,7 @@
DEVELOPMENT_TEAM = L27TBEH57A;
INFOPLIST_FILE = "Menubar TrackingTime/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.11;
MACOSX_DEPLOYMENT_TARGET = 10.10;
PRODUCT_BUNDLE_IDENTIFIER = me.musicsense.osx.TrackingTime;
PRODUCT_NAME = "$(TARGET_NAME)";
};
Expand Down

0 comments on commit a5eec19

Please sign in to comment.