98 lines
2.2 KiB
Objective-C
98 lines
2.2 KiB
Objective-C
//
|
|
// QNUploadServerFreezeManager.m
|
|
// QiniuSDK
|
|
//
|
|
// Created by yangsen on 2020/6/2.
|
|
// Copyright © 2020 Qiniu. All rights reserved.
|
|
//
|
|
|
|
#import "QNConfiguration.h"
|
|
#import "QNUploadServerFreezeManager.h"
|
|
|
|
@interface QNUploadServerFreezeItem : NSObject
|
|
@property(nonatomic, copy)NSString *type;
|
|
@property(nonatomic, strong)NSDate *freezeDate;
|
|
@end
|
|
@implementation QNUploadServerFreezeItem
|
|
+ (instancetype)item:(NSString *)type{
|
|
QNUploadServerFreezeItem *item = [[QNUploadServerFreezeItem alloc] init];
|
|
item.type = type;
|
|
return item;
|
|
}
|
|
- (BOOL)isFrozenByDate:(NSDate *)date{
|
|
BOOL isFrozen = YES;
|
|
@synchronized (self) {
|
|
if (!self.freezeDate || [self.freezeDate timeIntervalSinceDate:date] < 0){
|
|
isFrozen = NO;
|
|
}
|
|
}
|
|
return isFrozen;
|
|
}
|
|
- (void)freeze:(NSInteger)frozenTime{
|
|
@synchronized (self) {
|
|
self.freezeDate = [NSDate dateWithTimeIntervalSinceNow:frozenTime];
|
|
}
|
|
}
|
|
@end
|
|
|
|
@interface QNUploadServerFreezeManager()
|
|
|
|
@property(nonatomic, strong)NSMutableDictionary *freezeInfo;
|
|
|
|
@end
|
|
@implementation QNUploadServerFreezeManager
|
|
|
|
- (instancetype)init{
|
|
if (self = [super init]) {
|
|
_freezeInfo = [NSMutableDictionary dictionary];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (BOOL)isTypeFrozen:(NSString * _Nullable)type {
|
|
if (!type || type.length == 0) {
|
|
return true;
|
|
}
|
|
|
|
BOOL isFrozen = true;
|
|
QNUploadServerFreezeItem *item = nil;
|
|
@synchronized (self) {
|
|
item = self.freezeInfo[type];
|
|
}
|
|
|
|
if (!item || ![item isFrozenByDate:[NSDate date]]) {
|
|
isFrozen = false;
|
|
}
|
|
|
|
return isFrozen;
|
|
}
|
|
|
|
- (void)freezeType:(NSString * _Nullable)type frozenTime:(NSInteger)frozenTime {
|
|
if (!type || type.length == 0) {
|
|
return;
|
|
}
|
|
|
|
QNUploadServerFreezeItem *item = nil;
|
|
@synchronized (self) {
|
|
item = self.freezeInfo[type];
|
|
if (!item) {
|
|
item = [QNUploadServerFreezeItem item:type];
|
|
self.freezeInfo[type] = item;
|
|
}
|
|
}
|
|
|
|
[item freeze:frozenTime];
|
|
}
|
|
|
|
- (void)unfreezeType:(NSString * _Nullable)type {
|
|
if (!type || type.length == 0) {
|
|
return;
|
|
}
|
|
|
|
@synchronized (self) {
|
|
[self.freezeInfo removeObjectForKey:type];
|
|
}
|
|
}
|
|
|
|
@end
|