From 43b6f0b6497459485636889364dd21169af10eec Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Thu, 18 Aug 2022 17:11:08 +1000 Subject: [PATCH] WIP: unsupported emojis --- Scripts/EmojiGenerator.swift | 2 +- Session/Emoji/EmojiWithSkinTones+String.swift | 2 +- Session/Emoji/EmojiWithSkinTones.swift | 38 +++++++++++++------ 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/Scripts/EmojiGenerator.swift b/Scripts/EmojiGenerator.swift index c52fedd5d..35d2b8ae8 100755 --- a/Scripts/EmojiGenerator.swift +++ b/Scripts/EmojiGenerator.swift @@ -301,7 +301,7 @@ extension EmojiGenerator { fileHandle.writeLine("} else {") fileHandle.indent { - fileHandle.writeLine("return nil") + fileHandle.writeLine("self.init(unsupportedValue: rawValue)") } fileHandle.writeLine("}") } diff --git a/Session/Emoji/EmojiWithSkinTones+String.swift b/Session/Emoji/EmojiWithSkinTones+String.swift index 9eeac6495..218048c86 100644 --- a/Session/Emoji/EmojiWithSkinTones+String.swift +++ b/Session/Emoji/EmojiWithSkinTones+String.swift @@ -7263,7 +7263,7 @@ extension EmojiWithSkinTones { } else if rawValue == "🏴󠁧󠁢󠁷󠁬󠁳󠁿" { self.init(baseEmoji: .flagWales, skinTones: nil) } else { - return nil + self.init(unsupportedValue: rawValue) } } } diff --git a/Session/Emoji/EmojiWithSkinTones.swift b/Session/Emoji/EmojiWithSkinTones.swift index 44fd4e8a3..293a9c9c2 100644 --- a/Session/Emoji/EmojiWithSkinTones.swift +++ b/Session/Emoji/EmojiWithSkinTones.swift @@ -6,8 +6,9 @@ import DifferenceKit import SessionMessagingKit public struct EmojiWithSkinTones: Hashable, Equatable, ContentEquatable, ContentIdentifiable { - let baseEmoji: Emoji + let baseEmoji: Emoji? let skinTones: [Emoji.SkinTone]? + let unsupportedValue: String? init(baseEmoji: Emoji, skinTones: [Emoji.SkinTone]? = nil) { self.baseEmoji = baseEmoji @@ -20,23 +21,34 @@ public struct EmojiWithSkinTones: Hashable, Equatable, ContentEquatable, Content guard !result.contains(skinTone) else { return } result.append(skinTone) } + self.unsupportedValue = nil + } + + init(unsupportedValue: String) { + self.unsupportedValue = unsupportedValue + self.baseEmoji = nil + self.skinTones = nil } var rawValue: String { - if let skinTones = skinTones { - return baseEmoji.emojiPerSkinTonePermutation?[skinTones] ?? baseEmoji.rawValue - } else { - return baseEmoji.rawValue + if let baseEmoji = baseEmoji { + if let skinTones = skinTones { + return baseEmoji.emojiPerSkinTonePermutation?[skinTones] ?? baseEmoji.rawValue + } else { + return baseEmoji.rawValue + } } + if let unsupportedValue = unsupportedValue { + return unsupportedValue + } + return "" // Should not happen } var normalized: EmojiWithSkinTones { - switch (baseEmoji, skinTones) { - case (let base, nil) where base.normalized != base: - return EmojiWithSkinTones(baseEmoji: base.normalized) - default: - return self + if let baseEmoji = baseEmoji, baseEmoji.normalized != baseEmoji { + return EmojiWithSkinTones(baseEmoji: baseEmoji.normalized) } + return self } var isNormalized: Bool { self == normalized } @@ -104,7 +116,11 @@ extension Emoji { init?(_ string: String) { guard let emojiWithSkinTonePermutation = EmojiWithSkinTones(rawValue: string) else { return nil } - self = emojiWithSkinTonePermutation.baseEmoji + if let baseEmoji = emojiWithSkinTonePermutation.baseEmoji { + self = baseEmoji + } else { + return nil + } } }