NCUserStatus.m 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. /**
  2. * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
  3. * SPDX-License-Identifier: GPL-3.0-or-later
  4. */
  5. #import "NCUserStatus.h"
  6. NSString * const kUserStatusOnline = @"online";
  7. NSString * const kUserStatusAway = @"away";
  8. NSString * const kUserStatusDND = @"dnd";
  9. NSString * const kUserStatusInvisible = @"invisible";
  10. NSString * const kUserStatusOffline = @"offline";
  11. @implementation NCUserStatus
  12. + (instancetype)userStatusWithDictionary:(NSDictionary *)userStatusDict
  13. {
  14. if (!userStatusDict) {
  15. return nil;
  16. }
  17. NCUserStatus *userStatus = [[NCUserStatus alloc] init];
  18. userStatus.userId = [userStatusDict objectForKey:@"userId"];
  19. userStatus.status = [userStatusDict objectForKey:@"status"];
  20. userStatus.statusIsUserDefined = [[userStatusDict objectForKey:@"statusIsUserDefined"] boolValue];
  21. userStatus.messageId = [userStatusDict objectForKey:@"messageId"];
  22. userStatus.messageIsPredefined = [[userStatusDict objectForKey:@"messageIsPredefined"] boolValue];
  23. id message = [userStatusDict objectForKey:@"message"];
  24. if ([message isKindOfClass:[NSString class]]) {
  25. userStatus.message = message;
  26. }
  27. id icon = [userStatusDict objectForKey:@"icon"];
  28. if ([icon isKindOfClass:[NSString class]]) {
  29. userStatus.icon = icon;
  30. }
  31. id clearAt = [userStatusDict objectForKey:@"clearAt"];
  32. if ([clearAt isKindOfClass:[NSNull class]]) {
  33. userStatus.clearAt = 0;
  34. } else {
  35. userStatus.clearAt = [[userStatusDict objectForKey:@"clearAt"] integerValue];
  36. }
  37. return userStatus;
  38. }
  39. + (NSString *)readableUserStatusFromUserStatus:(NSString *)userStatus
  40. {
  41. NSString *readableUserStatus = nil;
  42. if ([userStatus isEqualToString:kUserStatusOnline]) {
  43. readableUserStatus = NSLocalizedString(@"Online", nil);
  44. } else if ([userStatus isEqualToString:kUserStatusAway]) {
  45. readableUserStatus = NSLocalizedString(@"Away", nil);
  46. } else if ([userStatus isEqualToString:kUserStatusDND]) {
  47. readableUserStatus = NSLocalizedString(@"Do not disturb", nil);
  48. } else if ([userStatus isEqualToString:kUserStatusInvisible]) {
  49. readableUserStatus = NSLocalizedString(@"Invisible", nil);
  50. } else if ([userStatus isEqualToString:kUserStatusOffline]) {
  51. readableUserStatus = NSLocalizedString(@"Offline", nil);
  52. }
  53. return readableUserStatus;
  54. }
  55. + (UIImage *)getOnlineSFIcon
  56. {
  57. return [[UIImage systemImageNamed:@"circle.fill"] imageWithTintColor:[UIColor systemGreenColor] renderingMode:UIImageRenderingModeAlwaysOriginal];
  58. }
  59. + (UIImage *)getAwaySFIcon
  60. {
  61. return [[UIImage systemImageNamed:@"moon.fill"] imageWithTintColor:[UIColor systemYellowColor] renderingMode:UIImageRenderingModeAlwaysOriginal];
  62. }
  63. + (UIImage *)getDoNotDisturbSFIcon
  64. {
  65. UIImageSymbolConfiguration *conf = [UIImageSymbolConfiguration configurationWithPaletteColors:@[[UIColor whiteColor], [UIColor systemRedColor]]];
  66. if (@available(iOS 16.1, *)) {
  67. return [[UIImage systemImageNamed:@"wrongwaysign.fill"] imageByApplyingSymbolConfiguration:conf];
  68. }
  69. return [[UIImage systemImageNamed:@"minus.circle.fill"] imageByApplyingSymbolConfiguration:conf];
  70. }
  71. + (UIImage *)getInvisibleSFIcon
  72. {
  73. UIImageSymbolConfiguration *conf = [UIImageSymbolConfiguration configurationWithWeight:UIImageSymbolWeightBlack];
  74. return [[[UIImage systemImageNamed:@"circle"] imageByApplyingSymbolConfiguration:conf] imageWithTintColor:[UIColor labelColor] renderingMode:UIImageRenderingModeAlwaysOriginal];
  75. }
  76. - (NSString *)readableUserStatus
  77. {
  78. return [NCUserStatus readableUserStatusFromUserStatus:_status];
  79. }
  80. - (NSString *)readableUserStatusMessage
  81. {
  82. NSString *userStatusIcon = nil;
  83. if (_icon && ![_icon isEqualToString:@""]) {
  84. userStatusIcon = _icon;
  85. }
  86. NSString *userStatusMessage = nil;
  87. if (_message && ![_message isEqualToString:@""]) {
  88. userStatusMessage = _message;
  89. }
  90. return userStatusIcon ? [NSString stringWithFormat:@"%@ %@", userStatusIcon, _message] : userStatusMessage;
  91. }
  92. - (NSString *)readableUserStatusOrMessage
  93. {
  94. NSString *userStatusMessage = [self readableUserStatusMessage];
  95. if ([userStatusMessage length] > 0) {
  96. return userStatusMessage;
  97. }
  98. return [self readableUserStatus];
  99. }
  100. - (UIImage *)getSFUserStatusIcon
  101. {
  102. if ([_status isEqualToString:kUserStatusOnline]) {
  103. return [NCUserStatus getOnlineSFIcon];
  104. } else if ([_status isEqualToString:kUserStatusAway]) {
  105. return [NCUserStatus getAwaySFIcon];
  106. } else if ([_status isEqualToString:kUserStatusDND]) {
  107. return [NCUserStatus getDoNotDisturbSFIcon];
  108. } else if ([_status isEqualToString:kUserStatusInvisible]) {
  109. return [NCUserStatus getInvisibleSFIcon];
  110. }
  111. return [UIImage systemImageNamed:@"person.fill.questionmark"];
  112. }
  113. - (BOOL)hasVisibleStatusIcon
  114. {
  115. return [_status isEqualToString:kUserStatusOnline] ||
  116. [_status isEqualToString:kUserStatusAway] ||
  117. [_status isEqualToString:kUserStatusDND] ||
  118. [_status isEqualToString:kUserStatusInvisible];
  119. }
  120. @end