mirror of
https://github.com/danog/Telegram.git
synced 2024-12-03 09:57:46 +01:00
196 lines
7.0 KiB
Objective-C
196 lines
7.0 KiB
Objective-C
#import "TGUser+Telegraph.h"
|
|
|
|
#import "TGSchema.h"
|
|
|
|
#import "TGDatabase.h"
|
|
|
|
#import "TGTelegraph.h"
|
|
|
|
#import "TGImageInfo+Telegraph.h"
|
|
|
|
#import "TGStringUtils.h"
|
|
|
|
#import "TLUser$modernUser.h"
|
|
|
|
void extractUserPhoto(TLUserProfilePhoto *photo, TGUser *target)
|
|
{
|
|
if ([photo isKindOfClass:[TLUserProfilePhoto$userProfilePhoto class]])
|
|
{
|
|
TLUserProfilePhoto$userProfilePhoto *profilePhoto = (TLUserProfilePhoto$userProfilePhoto *)photo;
|
|
target.photoUrlSmall = extractFileUrl(profilePhoto.photo_small);
|
|
target.photoUrlMedium = nil;
|
|
target.photoUrlBig = extractFileUrl(profilePhoto.photo_big);
|
|
}
|
|
else
|
|
{
|
|
target.photoUrlSmall = nil;
|
|
target.photoUrlMedium = nil;
|
|
target.photoUrlBig = nil;
|
|
}
|
|
}
|
|
|
|
TGUserPresence extractUserPresence(TLUserStatus *status)
|
|
{
|
|
if ([status isKindOfClass:[TLUserStatus$userStatusOnline class]])
|
|
{
|
|
TGUserPresence presence;
|
|
presence.online = true;
|
|
presence.lastSeen = ((TLUserStatus$userStatusOnline *)status).expires;
|
|
presence.temporaryLastSeen = 0;
|
|
return presence;
|
|
}
|
|
else if ([status isKindOfClass:[TLUserStatus$userStatusOffline class]])
|
|
{
|
|
TGUserPresence presence;
|
|
presence.online = false;
|
|
presence.lastSeen = ((TLUserStatus$userStatusOffline *)status).was_online;
|
|
presence.temporaryLastSeen = 0;
|
|
|
|
return presence;
|
|
}
|
|
else if ([status isKindOfClass:[TLUserStatus$userStatusRecently class]])
|
|
{
|
|
TGUserPresence presence;
|
|
presence.online = false;
|
|
presence.lastSeen = TGUserPresenceValueLately;
|
|
presence.temporaryLastSeen = 0;
|
|
return presence;
|
|
}
|
|
else if ([status isKindOfClass:[TLUserStatus$userStatusLastWeek class]])
|
|
{
|
|
TGUserPresence presence;
|
|
presence.online = false;
|
|
presence.lastSeen = TGUserPresenceValueWithinAWeek;
|
|
presence.temporaryLastSeen = 0;
|
|
return presence;
|
|
}
|
|
else if ([status isKindOfClass:[TLUserStatus$userStatusLastMonth class]])
|
|
{
|
|
TGUserPresence presence;
|
|
presence.online = false;
|
|
presence.lastSeen = TGUserPresenceValueWithinAMonth;
|
|
presence.temporaryLastSeen = 0;
|
|
return presence;
|
|
}
|
|
else
|
|
{
|
|
TGUserPresence presence;
|
|
presence.online = false;
|
|
presence.lastSeen = TGUserPresenceValueALongTimeAgo;
|
|
presence.temporaryLastSeen = 0;
|
|
return presence;
|
|
}
|
|
}
|
|
|
|
int extractUserLink(TLcontacts_Link *link)
|
|
{
|
|
int value = 0;
|
|
|
|
if ([link.my_link isKindOfClass:[TLContactLink$contactLinkContact class]])
|
|
value |= TGUserLinkMyContact | TGUserLinkKnown;
|
|
else if ([link.my_link isKindOfClass:[TLContactLink$contactLinkHasPhone class]])
|
|
value |= TGUserLinkForeignHasPhone | TGUserLinkKnown;
|
|
else if ([link.my_link isKindOfClass:[TLContactLink$contactLinkNone class]])
|
|
value |= TGUserLinkKnown;
|
|
|
|
if ([link.foreign_link isKindOfClass:[TLContactLink$contactLinkContact class]])
|
|
value |= TGUserLinkForeignHasPhone | TGUserLinkKnown;
|
|
else if ([link.foreign_link isKindOfClass:[TLContactLink$contactLinkHasPhone class]])
|
|
value |= TGUserLinkForeignHasPhone | TGUserLinkKnown;
|
|
else if ([link.foreign_link isKindOfClass:[TLContactLink$contactLinkNone class]])
|
|
value |= TGUserLinkKnown;
|
|
|
|
return value;
|
|
}
|
|
|
|
int extractUserLinkFromUpdate(TLUpdate$updateContactLink *linkUpdate)
|
|
{
|
|
int value = 0;
|
|
|
|
if ([linkUpdate.my_link isKindOfClass:[TLContactLink$contactLinkContact class]])
|
|
value |= TGUserLinkMyContact | TGUserLinkKnown;
|
|
else if ([linkUpdate.my_link isKindOfClass:[TLContactLink$contactLinkHasPhone class]])
|
|
value |= TGUserLinkForeignHasPhone | TGUserLinkKnown;
|
|
else if ([linkUpdate.my_link isKindOfClass:[TLContactLink$contactLinkNone class]])
|
|
value |= TGUserLinkKnown;
|
|
|
|
if ([linkUpdate.foreign_link isKindOfClass:[TLContactLink$contactLinkContact class]])
|
|
value |= TGUserLinkForeignHasPhone | TGUserLinkKnown;
|
|
else if ([linkUpdate.foreign_link isKindOfClass:[TLContactLink$contactLinkHasPhone class]])
|
|
value |= TGUserLinkForeignHasPhone | TGUserLinkKnown;
|
|
else if ([linkUpdate.foreign_link isKindOfClass:[TLContactLink$contactLinkNone class]])
|
|
value |= TGUserLinkKnown;
|
|
|
|
return value;
|
|
}
|
|
|
|
@implementation TGUser (Telegraph)
|
|
|
|
//user flags:# id:int access_hash:flags.0?long first_name:flags.1?string last_name:flags.2?string username:flags.3?string phone:flags.4?string photo:flags.5?UserProfilePhoto status:flags.6?UserStatus bot_info_version:flags.14?int = User;
|
|
|
|
- (id)initWithTelegraphUserDesc:(TLUser *)user
|
|
{
|
|
self = [super init];
|
|
if (self != nil)
|
|
{
|
|
int32_t uid = 0;
|
|
NSString *userPhone = nil;
|
|
if ([user isKindOfClass:[TLUser$modernUser class]])
|
|
{
|
|
TLUser$modernUser *concreteUser = (TLUser$modernUser *)user;
|
|
|
|
uid = concreteUser.n_id;
|
|
self.uid = uid;
|
|
self.phoneNumberHash = concreteUser.access_hash;
|
|
self.firstName = concreteUser.first_name;
|
|
self.lastName = concreteUser.last_name;
|
|
self.userName = concreteUser.username;
|
|
userPhone = concreteUser.phone;
|
|
extractUserPhoto(concreteUser.photo, self);
|
|
self.presence = extractUserPresence(concreteUser.status);
|
|
|
|
if (concreteUser.flags & (1 << 14))
|
|
self.kind = TGUserKindBot;
|
|
if (concreteUser.flags & (1 << 15))
|
|
self.kind = TGUserKindSmartBot;
|
|
self.botKind = (concreteUser.flags & (1 << 16)) ? TGBotKindPrivate : TGBotKindGeneric;
|
|
self.botInfoVersion = concreteUser.bot_info_version;
|
|
|
|
self.isVerified = concreteUser.flags & (1 << 17);
|
|
self.hasExplicitContent = concreteUser.flags & (1 << 18);
|
|
self.restrictionReason = concreteUser.restriction_reason;
|
|
self.contextBotPlaceholder = concreteUser.inlineBotPlaceholder;
|
|
self.isContextBot = concreteUser.flags & (1 << 19);
|
|
self.minimalRepresentation = concreteUser.flags & (1 << 20);
|
|
}
|
|
else if ([user isKindOfClass:[TLUser$userEmpty class]])
|
|
{
|
|
uid = ((TLUser$userEmpty *)user).n_id;
|
|
self.minimalRepresentation = true;
|
|
}
|
|
|
|
if (userPhone.length != 0)
|
|
{
|
|
if (![userPhone hasPrefix:@"+"])
|
|
userPhone = [[NSString alloc] initWithFormat:@"+%@", userPhone];
|
|
self.phoneNumber = userPhone;
|
|
}
|
|
|
|
if (uid != 0 && userPhone.length != 0)
|
|
{
|
|
TGContactBinding *binding = [TGDatabaseInstance() contactBindingWithId:self.contactId];
|
|
if (binding != nil)
|
|
{
|
|
if (uid != TGTelegraphInstance.clientUserId)
|
|
{
|
|
self.phonebookFirstName = binding.firstName;
|
|
self.phonebookLastName = binding.lastName;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return self;
|
|
}
|
|
|
|
@end
|