Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- - (nullable __kindof VFDIncomingDialogPresentableModel *)dialogPresentableModelFromDialog:(nullable VFDDialog *)aDialog {
- __kindof VFDIncomingDialogPresentableModel * returned = nil;
- guardvar(VFDDialog, dialog, aDialog, else { return nil; })
- guardvar(VFDMessage, message, dialog.lastMessage, else { return nil; })
- guardvar(NSNumber, lastMessageIdentifier, message.identifier, else { return nil; })
- VFDDialogType type = dialog.type;
- guardvar(NSNumber, dialogIdentifier, dialog.identifier, else { return nil; })
- guardvar(NSNumber, userIdentifier, dialog.userIdentifier, else { return nil; })
- VFDUser * _Nullable user = nil;
- VFDGroup * _Nullable group = nil;
- if (userIdentifier.integerValue > 0) {
- user = [VFDUser objectForPrimaryKey:userIdentifier];
- if (user == nil) { return nil; }
- } else {
- group = [VFDGroup objectForPrimaryKey:userIdentifier];
- if (group == nil) {
- group = [VFDGroup objectForPrimaryKey:@(-userIdentifier.integerValue)];
- if (group == nil) { return nil; }
- }
- }
- /********************************* title *********************************/
- NSString *title = nil;
- switch (type) {
- case VFDDialogTypeSingleWithUser: {
- guard(user != nil) else { return nil; }
- title = user.fullName;
- break;
- }
- case VFDDialogTypeSingleWithGroup: {
- guard(group != nil) else { return nil; }
- title = group.name;
- break;
- }
- case VFDDialogTypeConference: {
- title = dialog.title;
- break;
- }
- default: return nil;
- }
- guard([title isKindOfClass:NSString.class]) else { return nil; }
- /********************************* date *********************************/
- guardvar(NSNumber, date, message.date, else { return nil; })
- /********************************* unreadCount *********************************/
- NSNumber *unreadCount = nil;
- if (isKindOfNumber(dialog.unreadCount)) {
- unreadCount = dialog.unreadCount;
- }
- /********************************* text/isHighlightText *********************************/
- NSString *text = nil;
- BOOL isHighlightText = NO;
- if (type == VFDDialogTypeConference) {
- if ([message.action isKindOfClass:VFDMessageAction.class]) {
- VFDMessageAction * _Nonnull messageAction = message.action;
- switch (messageAction.action) {
- default: return nil;
- case VFDMessageActionTypePhotoUpdate:
- case VFDMessageActionTypePhotoRemove:
- guard(user != nil) else { return nil; }
- text = [NSString stringWithFormat:@"%@ %@", user.fullName, VFDMessageActionTypeToHumanReadableFormat(messageAction.action, VFDSexTypeIsMale(user.sex), NO)];
- break;
- case VFDMessageActionTypeCreate:
- case VFDMessageActionTypeTitleUpdate:
- guard([messageAction.text isKindOfClass:NSString.class]) else { return nil; }
- guard(user != nil) else { return nil; }
- text = [NSString stringWithFormat:@"%@ %@ '%@'", user.fullName, VFDMessageActionTypeToHumanReadableFormat(messageAction.action, VFDSexTypeIsMale(user.sex), NO), messageAction.text];
- break;
- case VFDMessageActionTypeInviteUser:
- case VFDMessageActionTypeKickUser:
- case VFDMessageActionTypeChatPinMessage:
- case VFDMessageActionTypeChatUnpinMessage:
- guard([messageAction.mid isKindOfClass:NSNumber.class]) else { return nil; }
- VFDUser *usedUser = [VFDUser objectForPrimaryKey:messageAction.mid];
- guard(usedUser != nil) else { return nil; }
- guard(user != nil) else { return nil; }
- if ([user.id isEqualToNumber:usedUser.id]) {
- text = [NSString stringWithFormat:@"%@ %@", user.fullName, VFDMessageActionTypeToHumanReadableFormat(messageAction.action,
- VFDSexTypeIsMale(user.sex),
- YES)];
- } else {
- text = [NSString stringWithFormat:@"%@ %@ %@", user.fullName, VFDMessageActionTypeToHumanReadableFormat(messageAction.action,
- VFDSexTypeIsMale(user.sex),
- NO),
- usedUser.fullName];
- }
- break;
- }
- isHighlightText = YES;
- }
- }
- if (message.forwardedMessages.count > 0) {
- text = @"Пересланное сообщение";
- isHighlightText = YES;
- }
- if (message.geoAttachment != nil) {
- text = @"Местоположение";
- isHighlightText = YES;
- }
- if (!isHighlightText) {
- if (message.attachments.count > 0) {
- guardvar(VFDAttachment, attachment, message.attachments.firstObject, else { return nil; })
- switch (attachment.type) {
- case VFDAttachmentTypePhoto:
- text = @"Фотография";
- break;
- case VFDAttachmentTypeVideo:
- text = @"Видеозапись";
- break;
- case VFDAttachmentTypeAudio:
- text = @"Аудиозапись";
- break;
- case VFDAttachmentTypeDoc:
- text = @"Документ";
- if (isKindOf(attachment.doc, VFDDocAttachment)) {
- if (isKindOf(attachment.doc.voiceMessage, VFDAudioDocAttachment)) {
- text = @"Аудиосообщение";
- }
- }
- break;
- case VFDAttachmentTypeWall:
- text = @"Запись со стены";
- break;
- case VFDAttachmentTypeSticker:
- text = @"Стикер";
- break;
- case VFDAttachmentTypeLink:
- text = @"Ссылка";
- break;
- case VFDAttachmentTypeMarket:
- text = @"Товар";
- break;
- case VFDAttachmentTypeGift:
- text = @"Подарок";
- break;
- default:
- text = @"Вложение";
- break;
- }
- isHighlightText = YES;
- }
- }
- if (isKindOfString(message.text) && message.text.length > 0) {
- text = message.text;
- isHighlightText = NO;
- }
- guard([text isKindOfClass:NSString.class]) else { return nil; }
- /********************************* isOut *********************************/
- guardvar(NSNumber, isOut, message.isOut, else { return nil; })
- /********************************* isRead *********************************/
- guardvar(NSNumber, isRead, message.readState, else { return nil; })
- /********************************* onlineStatus *********************************/
- VFDDialogPresentableModelOnlineStatus onlineStatus = VFDDialogPresentableModelOnlineStatusMake(NO, NO, 0);
- if (type == VFDDialogTypeSingleWithUser) {
- if (user != nil) {
- if ([user.online isKindOfClass:NSNumber.class]) {
- if ([user.last_seen isKindOfClass:VFDLastSeen.class]) {
- NSTimeInterval time = 0;
- if ([user.last_seen.time isKindOfClass:NSNumber.class]) {
- time = user.last_seen.time.doubleValue;
- }
- if ([user.last_seen.platform isKindOfClass:NSNumber.class]) {
- BOOL fromMobile = onlineFromMobileFromVFDLastSeenPlatformType(user.last_seen.platform.unsignedIntegerValue);
- onlineStatus = VFDDialogPresentableModelOnlineStatusMake(user.online.boolValue, fromMobile , time);
- }
- }
- }
- }
- }
- /********************************* avatarURL *********************************/
- NSURL * _Nullable avatarURL = nil;
- NSString * _Nullable avatarURLString = nil;
- switch (type) {
- case VFDDialogTypeSingleWithUser:
- if (user != nil) {
- avatarURLString = user.photo_100 ? user.photo_100 : user.photo_50;
- }
- break;
- case VFDDialogTypeSingleWithGroup:
- if (group != nil) {
- avatarURLString = group.photo_100 ? group.photo_100 : group.photo_50;
- }
- break;
- case VFDDialogTypeConference:
- avatarURLString = dialog.photo100 ? dialog.photo100 : dialog.photo50;
- break;
- default: return nil;
- }
- if ([avatarURLString isKindOfClass:NSString.class]) {
- avatarURL = [NSURL URLWithString:avatarURLString];
- }
- /********************************* avatarURL *********************************/
- NSNumber * _Nonnull membersCount;
- if (type == VFDDialogTypeConference) {
- safeBind(NSNumber, membersCount, dialog.membersCount) else { return nil; }
- }
- /********************************* answerAvatarURL *********************************/
- NSURL * _Nullable answerAvatarURL = nil;
- NSString * _Nullable answerAvatarURLString = nil;
- switch (type) {
- case VFDDialogTypeSingleWithUser:
- if (isOut) {
- if ([VKSERVICE.currentUser isKindOfClass:VFDCurrentUser.class]) {
- if ([VKSERVICE.currentUser.user isKindOfClass:VFDUser.class]) {
- answerAvatarURLString = VKSERVICE.currentUser.user.photo_50;
- }
- }
- } else {
- if (user != nil) {
- answerAvatarURLString = user.photo_50;
- }
- }
- break;
- case VFDDialogTypeSingleWithGroup:
- if (isOut) {
- if ([VKSERVICE.currentUser isKindOfClass:VFDCurrentUser.class]) {
- if ([VKSERVICE.currentUser.user isKindOfClass:VFDUser.class]) {
- answerAvatarURLString = VKSERVICE.currentUser.user.photo_50;
- }
- }
- } else {
- if (group != nil) {
- answerAvatarURLString = group.photo_50;
- }
- }
- break;
- case VFDDialogTypeConference:
- if (user != nil) {
- answerAvatarURLString = user.photo_50;
- }
- break;
- default: return nil;
- }
- if ([answerAvatarURLString isKindOfClass:NSString.class]) {
- answerAvatarURL = [NSURL URLWithString:answerAvatarURLString];
- }
- /********************************* creatings new values *********************************/
- switch (type) {
- case VFDDialogTypeSingleWithUser:
- case VFDDialogTypeSingleWithGroup:
- returned = (isOut.boolValue) ? [VFDOutgoingDialogPresentableModel new] : [VFDIncomingDialogPresentableModel new];
- break;
- case VFDDialogTypeConference:
- returned = [VFDConferenceDialogPresentableModel new];
- break;
- default: return nil;
- }
- /********************************* binding *********************************/
- if ([returned respondsToSelector:@selector(setAnswerAvatarURL:)]) {
- [(VFDOutgoingDialogPresentableModel *)returned setAnswerAvatarURL:answerAvatarURL];
- }
- if ([returned respondsToSelector:@selector(setMembersCount:)]) {
- ((VFDConferenceDialogPresentableModel *)returned).membersCount = membersCount;
- }
- returned.lastMessageIdentifier = lastMessageIdentifier;
- returned.type = type;
- returned.dialogIdentifier = dialogIdentifier;
- returned.title = title;
- returned.date = date;
- returned.text = text;
- returned.isHighlightText = isHighlightText;
- returned.isRead = isRead.boolValue;
- returned.unreadCount = unreadCount;
- returned.onlineStatus = onlineStatus;
- returned.avatarURL = avatarURL;
- return returned;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement