mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			63 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
		
		
			
		
	
	
			63 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
| 
								 
											5 years ago
										 
									 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  Copyright (c) 2018 Open Whisper Systems. All rights reserved.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#import <Foundation/Foundation.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_ASSUME_NONNULL_BEGIN
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef NS_ENUM(NSUInteger, BackgroundTaskState) {
							 | 
						||
| 
								 | 
							
								    BackgroundTaskState_Success,
							 | 
						||
| 
								 | 
							
								    BackgroundTaskState_CouldNotStart,
							 | 
						||
| 
								 | 
							
								    BackgroundTaskState_Expired,
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef void (^BackgroundTaskCompletionBlock)(BackgroundTaskState backgroundTaskState);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// This class can be safely accessed and used from any thread.
							 | 
						||
| 
								 | 
							
								@interface OWSBackgroundTaskManager : NSObject
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (instancetype)init NS_UNAVAILABLE;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								+ (instancetype)sharedManager;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (void)observeNotifications;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#pragma mark -
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// This class makes it easier and safer to use background tasks.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// * Uses RAII (Resource Acquisition Is Initialization) pattern.
							 | 
						||
| 
								 | 
							
								// * Ensures completion block is called exactly once and on main thread,
							 | 
						||
| 
								 | 
							
								//   to facilitate handling "background task timed out" case, for example.
							 | 
						||
| 
								 | 
							
								// * Ensures we properly handle the "background task could not be created"
							 | 
						||
| 
								 | 
							
								//   case.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Usage:
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// * Use factory method to start a background task.
							 | 
						||
| 
								 | 
							
								// * Retain a strong reference to the OWSBackgroundTask during the "work".
							 | 
						||
| 
								 | 
							
								// * Clear all references to the OWSBackgroundTask when the work is done,
							 | 
						||
| 
								 | 
							
								//   if possible.
							 | 
						||
| 
								 | 
							
								@interface OWSBackgroundTask : NSObject
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (instancetype)init NS_UNAVAILABLE;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								+ (OWSBackgroundTask *)backgroundTaskWithLabelStr:(const char *)labelStr;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// completionBlock will be called exactly once on the main thread.
							 | 
						||
| 
								 | 
							
								+ (OWSBackgroundTask *)backgroundTaskWithLabelStr:(const char *)labelStr
							 | 
						||
| 
								 | 
							
								                                  completionBlock:(BackgroundTaskCompletionBlock)completionBlock;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								+ (OWSBackgroundTask *)backgroundTaskWithLabel:(NSString *)label;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// completionBlock will be called exactly once on the main thread.
							 | 
						||
| 
								 | 
							
								+ (OWSBackgroundTask *)backgroundTaskWithLabel:(NSString *)label
							 | 
						||
| 
								 | 
							
								                               completionBlock:(BackgroundTaskCompletionBlock)completionBlock;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_ASSUME_NONNULL_END
							 |