2020-02-24 19:23:09 +04:00

251 lines
9.3 KiB
Objective-C

#import <LegacyDataImportImpl/TGAutoDownloadPreferences.h>
@implementation TGAutoDownloadPreferences
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self != nil)
{
_disabled = [aDecoder decodeBoolForKey:@"disabled"];
_photos = [aDecoder decodeInt32ForKey:@"photos"];
_videos = [aDecoder decodeInt32ForKey:@"videos"];
_maximumVideoSize = [aDecoder decodeInt32ForKey:@"maxVideoSize"];
_documents = [aDecoder decodeInt32ForKey:@"documents"];
_maximumDocumentSize = [aDecoder decodeInt32ForKey:@"maxDocumentSize"];
_voiceMessages = [aDecoder decodeInt32ForKey:@"voiceMessages"];
_videoMessages = [aDecoder decodeInt32ForKey:@"videoMessages"];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeBool:_disabled forKey:@"disabled"];
[aCoder encodeInt32:_photos forKey:@"photos"];
[aCoder encodeInt32:_videos forKey:@"videos"];
[aCoder encodeInt32:_maximumVideoSize forKey:@"maxVideoSize"];
[aCoder encodeInt32:_documents forKey:@"documents"];
[aCoder encodeInt32:_maximumDocumentSize forKey:@"maxDocumentSize"];
[aCoder encodeInt32:_voiceMessages forKey:@"voiceMessages"];
[aCoder encodeInt32:_videoMessages forKey:@"videoMessages"];
}
+ (instancetype)defaultPreferences
{
TGAutoDownloadPreferences *preferences = [[TGAutoDownloadPreferences alloc] init];
preferences->_photos = TGAutoDownloadModeAll;
preferences->_videos = TGAutoDownloadModeNone;
preferences->_maximumVideoSize = 10;
preferences->_documents = TGAutoDownloadModeNone;
preferences->_maximumDocumentSize = 10;
preferences->_voiceMessages = TGAutoDownloadModeAll;
preferences->_videoMessages = TGAutoDownloadModeAll;
return preferences;
}
+ (instancetype)preferencesWithLegacyDownloadPrivatePhotos:(bool)privatePhotos groupPhotos:(bool)groupPhotos privateVoiceMessages:(bool)privateVoiceMessages groupVoiceMessages:(bool)groupVoiceMessages privateVideoMessages:(bool)privateVideoMessages groupVideoMessages:(bool)groupVideoMessages
{
TGAutoDownloadPreferences *preferences = [[TGAutoDownloadPreferences alloc] init];
if (privatePhotos)
preferences->_photos |= TGAutoDownloadModeAllPrivateChats;
if (groupPhotos)
preferences->_photos |= TGAutoDownloadModeAllGroups;
if (privateVoiceMessages)
preferences->_voiceMessages |= TGAutoDownloadModeAllPrivateChats;
if (groupVoiceMessages)
preferences->_voiceMessages |= TGAutoDownloadModeAllGroups;
if (privateVideoMessages)
preferences->_videoMessages |= TGAutoDownloadModeAllPrivateChats;
if (groupVideoMessages)
preferences->_videoMessages |= TGAutoDownloadModeAllGroups;
preferences->_maximumVideoSize = 10;
preferences->_maximumDocumentSize = 10;
return preferences;
}
- (instancetype)updateDisabled:(bool)disabled
{
TGAutoDownloadPreferences *preferences = [[TGAutoDownloadPreferences alloc] init];
preferences->_disabled = disabled;
preferences->_photos = _photos;
preferences->_videos = _videos;
preferences->_maximumVideoSize = _maximumVideoSize;
preferences->_documents = _documents;
preferences->_maximumDocumentSize = _maximumDocumentSize;
preferences->_voiceMessages = _voiceMessages;
preferences->_videoMessages = _videoMessages;
return preferences;
}
- (instancetype)updatePhotosMode:(TGAutoDownloadMode)mode
{
TGAutoDownloadPreferences *preferences = [[TGAutoDownloadPreferences alloc] init];
preferences->_photos = mode;
preferences->_videos = _videos;
preferences->_maximumVideoSize = _maximumVideoSize;
preferences->_documents = _documents;
preferences->_maximumDocumentSize = _maximumDocumentSize;
preferences->_voiceMessages = _voiceMessages;
preferences->_videoMessages = _videoMessages;
return preferences;
}
- (instancetype)updateVideosMode:(TGAutoDownloadMode)mode maximumSize:(int32_t)maximumSize
{
TGAutoDownloadPreferences *preferences = [[TGAutoDownloadPreferences alloc] init];
preferences->_photos = _photos;
preferences->_videos = mode;
preferences->_maximumVideoSize = maximumSize;
preferences->_documents = _documents;
preferences->_maximumDocumentSize = _maximumDocumentSize;
preferences->_voiceMessages = _voiceMessages;
preferences->_videoMessages = _videoMessages;
return preferences;
}
- (instancetype)updateDocumentsMode:(TGAutoDownloadMode)mode maximumSize:(int32_t)maximumSize
{
TGAutoDownloadPreferences *preferences = [[TGAutoDownloadPreferences alloc] init];
preferences->_photos = _photos;
preferences->_videos = _videos;
preferences->_maximumVideoSize = _maximumVideoSize;
preferences->_documents = mode;
preferences->_maximumDocumentSize = maximumSize;
preferences->_voiceMessages = _voiceMessages;
preferences->_videoMessages = _videoMessages;
return preferences;
}
- (instancetype)updateVoiceMessagesMode:(TGAutoDownloadMode)mode
{
TGAutoDownloadPreferences *preferences = [[TGAutoDownloadPreferences alloc] init];
preferences->_photos = _photos;
preferences->_videos = _videos;
preferences->_maximumVideoSize = _maximumVideoSize;
preferences->_documents = _documents;
preferences->_maximumDocumentSize = _maximumDocumentSize;
preferences->_voiceMessages = mode;
preferences->_videoMessages = _videoMessages;
return preferences;
}
- (instancetype)updateVideoMessagesMode:(TGAutoDownloadMode)mode
{
TGAutoDownloadPreferences *preferences = [[TGAutoDownloadPreferences alloc] init];
preferences->_photos = _photos;
preferences->_videos = _videos;
preferences->_maximumVideoSize = _maximumVideoSize;
preferences->_documents = _documents;
preferences->_maximumDocumentSize = _maximumDocumentSize;
preferences->_voiceMessages = _voiceMessages;
preferences->_videoMessages = mode;
return preferences;
}
+ (bool)shouldDownload:(TGAutoDownloadMode)mode inChat:(TGAutoDownloadChat)chat networkType:(TGNetworkType)networkType
{
bool isWiFi = networkType == TGNetworkTypeWiFi;
bool isCellular = !isWiFi && networkType != TGNetworkTypeNone;
bool shouldDownload = false;
switch (chat)
{
case TGAutoDownloadChatContact:
if (isCellular)
shouldDownload = (mode & TGAutoDownloadModeCellularContacts) != 0;
else if (isWiFi)
shouldDownload = (mode & TGAutoDownloadModeWifiContacts) != 0;
break;
case TGAutoDownloadChatOtherPrivateChat:
if (isCellular)
shouldDownload = (mode & TGAutoDownloadModeCellularPrivateChats) != 0;
else if (isWiFi)
shouldDownload = (mode & TGAutoDownloadModeWifiPrivateChats) != 0;
break;
case TGAutoDownloadChatGroup:
if (isCellular)
shouldDownload = (mode & TGAutoDownloadModeCellularGroups) != 0;
else if (isWiFi)
shouldDownload = (mode & TGAutoDownloadModeWifiGroups) != 0;
break;
case TGAutoDownloadChatChannel:
if (isCellular)
shouldDownload = (mode & TGAutoDownloadModeCellularChannels) != 0;
else if (isWiFi)
shouldDownload = (mode & TGAutoDownloadModeWifiChannels) != 0;
break;
default:
break;
}
return shouldDownload;
}
- (bool)shouldDownloadPhotoInChat:(TGAutoDownloadChat)chat networkType:(TGNetworkType)networkType
{
if (self.disabled)
return false;
return [TGAutoDownloadPreferences shouldDownload:_photos inChat:chat networkType:networkType];
}
- (bool)shouldDownloadVideoInChat:(TGAutoDownloadChat)chat networkType:(TGNetworkType)networkType
{
if (self.disabled)
return false;
return [TGAutoDownloadPreferences shouldDownload:_videos inChat:chat networkType:networkType];
}
- (bool)shouldDownloadDocumentInChat:(TGAutoDownloadChat)chat networkType:(TGNetworkType)networkType
{
if (self.disabled)
return false;
return [TGAutoDownloadPreferences shouldDownload:_documents inChat:chat networkType:networkType];
}
- (bool)shouldDownloadVoiceMessageInChat:(TGAutoDownloadChat)chat networkType:(TGNetworkType)networkType
{
if (self.disabled)
return false;
return [TGAutoDownloadPreferences shouldDownload:_voiceMessages inChat:chat networkType:networkType];
}
- (bool)shouldDownloadVideoMessageInChat:(TGAutoDownloadChat)chat networkType:(TGNetworkType)networkType
{
if (self.disabled)
return false;
return [TGAutoDownloadPreferences shouldDownload:_videoMessages inChat:chat networkType:networkType];
}
- (bool)isDefaultPreferences
{
return [self isEqual:[TGAutoDownloadPreferences defaultPreferences]];
}
- (BOOL)isEqual:(id)object
{
if (object == self)
return YES;
if (!object || ![object isKindOfClass:[self class]])
return NO;
TGAutoDownloadPreferences *preferences = (TGAutoDownloadPreferences *)object;
return preferences.photos == _photos && preferences.videos == _videos && preferences.documents == _documents && preferences.voiceMessages == _voiceMessages && preferences.videoMessages == _videoMessages && preferences.maximumVideoSize == _maximumVideoSize && preferences.maximumDocumentSize == _maximumDocumentSize && preferences.disabled == _disabled;
}
@end