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 |