forked from zelo72/mastodon-ios
152 lines
4.9 KiB
Swift
152 lines
4.9 KiB
Swift
//
|
|
// CategoryPickerItem.swift
|
|
// Mastodon
|
|
//
|
|
// Created by Cirno MainasuK on 2021/3/5.
|
|
//
|
|
|
|
import Foundation
|
|
import MastodonSDK
|
|
import MastodonAsset
|
|
import MastodonLocalization
|
|
|
|
/// Note: update Equatable when change case
|
|
enum CategoryPickerItem {
|
|
case all
|
|
case category(category: Mastodon.Entity.Category)
|
|
}
|
|
|
|
extension CategoryPickerItem {
|
|
|
|
var emoji: String {
|
|
switch self {
|
|
case .all:
|
|
return "💬"
|
|
case .category(let category):
|
|
switch category.category {
|
|
case .academia:
|
|
return "📚"
|
|
case .activism:
|
|
return "✊"
|
|
case .food:
|
|
return "🍕"
|
|
case .furry:
|
|
return "🦁"
|
|
case .games:
|
|
return "🕹"
|
|
case .general:
|
|
return "🐘"
|
|
case .journalism:
|
|
return "📰"
|
|
case .lgbt:
|
|
return "🏳️🌈"
|
|
case .regional:
|
|
return "📍"
|
|
case .art:
|
|
return "🎨"
|
|
case .music:
|
|
return "🎼"
|
|
case .tech:
|
|
return "📱"
|
|
case ._other:
|
|
return "❓"
|
|
}
|
|
}
|
|
}
|
|
var title: String {
|
|
switch self {
|
|
case .all:
|
|
return L10n.Scene.ServerPicker.Button.Category.all
|
|
case .category(let category):
|
|
switch category.category {
|
|
case .academia:
|
|
return L10n.Scene.ServerPicker.Button.Category.academia
|
|
case .activism:
|
|
return L10n.Scene.ServerPicker.Button.Category.activism
|
|
case .food:
|
|
return L10n.Scene.ServerPicker.Button.Category.food
|
|
case .furry:
|
|
return L10n.Scene.ServerPicker.Button.Category.furry
|
|
case .games:
|
|
return L10n.Scene.ServerPicker.Button.Category.games
|
|
case .general:
|
|
return L10n.Scene.ServerPicker.Button.Category.general
|
|
case .journalism:
|
|
return L10n.Scene.ServerPicker.Button.Category.journalism
|
|
case .lgbt:
|
|
return L10n.Scene.ServerPicker.Button.Category.lgbt
|
|
case .regional:
|
|
return L10n.Scene.ServerPicker.Button.Category.regional
|
|
case .art:
|
|
return L10n.Scene.ServerPicker.Button.Category.art
|
|
case .music:
|
|
return L10n.Scene.ServerPicker.Button.Category.music
|
|
case .tech:
|
|
return L10n.Scene.ServerPicker.Button.Category.tech
|
|
case ._other:
|
|
return "-" // FIXME:
|
|
}
|
|
}
|
|
}
|
|
|
|
var accessibilityDescription: String {
|
|
switch self {
|
|
case .all:
|
|
return L10n.Scene.ServerPicker.Button.Category.allAccessiblityDescription
|
|
case .category(let category):
|
|
switch category.category {
|
|
case .academia:
|
|
return L10n.Scene.ServerPicker.Button.Category.academia
|
|
case .activism:
|
|
return L10n.Scene.ServerPicker.Button.Category.activism
|
|
case .food:
|
|
return L10n.Scene.ServerPicker.Button.Category.food
|
|
case .furry:
|
|
return L10n.Scene.ServerPicker.Button.Category.furry
|
|
case .games:
|
|
return L10n.Scene.ServerPicker.Button.Category.games
|
|
case .general:
|
|
return L10n.Scene.ServerPicker.Button.Category.general
|
|
case .journalism:
|
|
return L10n.Scene.ServerPicker.Button.Category.journalism
|
|
case .lgbt:
|
|
return L10n.Scene.ServerPicker.Button.Category.lgbt
|
|
case .regional:
|
|
return L10n.Scene.ServerPicker.Button.Category.regional
|
|
case .art:
|
|
return L10n.Scene.ServerPicker.Button.Category.art
|
|
case .music:
|
|
return L10n.Scene.ServerPicker.Button.Category.music
|
|
case .tech:
|
|
return L10n.Scene.ServerPicker.Button.Category.tech
|
|
case ._other:
|
|
return "-" // FIXME:
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
extension CategoryPickerItem: Equatable {
|
|
static func == (lhs: CategoryPickerItem, rhs: CategoryPickerItem) -> Bool {
|
|
switch (lhs, rhs) {
|
|
case (.all, .all):
|
|
return true
|
|
case (.category(let categoryLeft), .category(let categoryRight)):
|
|
return categoryLeft.category.rawValue == categoryRight.category.rawValue
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
|
|
extension CategoryPickerItem: Hashable {
|
|
func hash(into hasher: inout Hasher) {
|
|
switch self {
|
|
case .all:
|
|
hasher.combine(String(describing: CategoryPickerItem.all.self))
|
|
case .category(let category):
|
|
hasher.combine(category.category.rawValue)
|
|
}
|
|
}
|
|
}
|