Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
import Foundation
import UIKit
import Display
import TelegramCore
import ContextUI
import AppBundle
import SwiftSignalKit
import SGSimpleSettings
import SGStrings

public func sgHiddenChatListFilterIdsSignal() -> Signal<Set<Int32>, NoError> {
let key = SGSimpleSettings.Keys.hiddenChatListFilterIds
let read: () -> Set<Int32> = {
let raw = UserDefaults.standard.stringArray(forKey: key.rawValue) ?? []
return Set(raw.compactMap { Int32($0) })
}
let initial = Signal<Set<Int32>, NoError>.single(read())
let changes = Signal<Set<Int32>, NoError> { subscriber in
let observer = NotificationCenter.default.addObserver(
forName: UserDefaults.didChangeNotification,
object: UserDefaults.standard,
queue: nil
) { _ in
subscriber.putNext(read())
}
return ActionDisposable {
NotificationCenter.default.removeObserver(observer)
}
}
return (initial |> then(changes)) |> distinctUntilChanged
}

public func sgVisibleFilters(_ filters: [ChatListContainerNodeFilter]) -> [ChatListContainerNodeFilter] {
var filters = filters
if SGSimpleSettings.shared.allChatsHidden {
filters.removeAll { $0 == .all }
}
let sgHiddenFilterIds = SGSimpleSettings.shared.hiddenChatListFilterIds
if !sgHiddenFilterIds.isEmpty {
filters.removeAll {
if case let .filter(filter) = $0, case let .filter(id, _, _, _) = filter {
return sgHiddenFilterIds.contains(id)
}
return false
}
}
return filters
}

public func sgFilterBadge(for id: Int32, filterItems: [(ChatListFilter, Int, Bool)]) -> ContextMenuActionBadge? {
for item in filterItems {
if item.0.id == id && item.1 != 0 {
return ContextMenuActionBadge(value: "\(item.1)", color: item.2 ? .accent : .inactive)
}
}
return nil
}

public func sgHiddenFoldersDrillDownItems(presetList: [ChatListFilter], sgHiddenIds: Set<Int32>, filterItems: [(ChatListFilter, Int, Bool)], backTitle: String, onBack: @escaping () -> Void, onSelect: @escaping (Int32) -> Void) -> [ContextMenuItem] {
var items: [ContextMenuItem] = []
items.append(.action(ContextMenuActionItem(text: backTitle, icon: { theme in
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Back"), color: theme.contextMenu.primaryColor)
}, action: { _, _ in
onBack()
})))
items.append(.separator)

for case let .filter(id, title, _, _) in presetList where sgHiddenIds.contains(id) {
items.append(.action(ContextMenuActionItem(text: title.text, entities: title.entities, enableEntityAnimations: title.enableAnimations, badge: sgFilterBadge(for: id, filterItems: filterItems), icon: { theme in
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Folder"), color: theme.contextMenu.primaryColor)
}, action: { _, f in
f(.dismissWithoutContent)
onSelect(id)
})))
}
return items
}

public func sgHiddenFoldersSummaryItem(presetList: [ChatListFilter], sgHiddenIds: Set<Int32>, filterItems: [(ChatListFilter, Int, Bool)], baseLanguageCode: String, onTap: @escaping () -> Void) -> ContextMenuItem? {
var hiddenUnreadTotal = 0
var hasHidden = false
for case let .filter(id, _, _, _) in presetList where sgHiddenIds.contains(id) {
hasHidden = true
for item in filterItems where item.0.id == id {
hiddenUnreadTotal += item.1
}
}
guard hasHidden else {
return nil
}
return .action(ContextMenuActionItem(text: i18n("ContextMenu.HiddenFolders", baseLanguageCode), badge: hiddenUnreadTotal != 0 ? ContextMenuActionBadge(value: "\(hiddenUnreadTotal)", color: .accent) : nil, icon: { theme in
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Eye"), color: theme.contextMenu.primaryColor)
}, action: { _, _ in
onTap()
}))
}
15 changes: 15 additions & 0 deletions Swiftgram/SGSimpleSettings/Sources/SimpleSettings.swift
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ public class SGSimpleSettings {
case allChatsTitleLengthOverride
// case allChatsFolderPositionOverride
case allChatsHidden
case hiddenChatListFilterIds
case defaultEmojisFirst
case messageDoubleTapActionOutgoing
case wideChannelPosts
Expand Down Expand Up @@ -304,6 +305,7 @@ public class SGSimpleSettings {
Keys.allChatsTitleLengthOverride.rawValue: AllChatsTitleLengthOverride.none.rawValue,
// Keys.allChatsFolderPositionOverride.rawValue: AllChatsFolderPositionOverride.none.rawValue
Keys.allChatsHidden.rawValue: false,
Keys.hiddenChatListFilterIds.rawValue: [],
Keys.defaultEmojisFirst.rawValue: false,
Keys.messageDoubleTapActionOutgoing.rawValue: MessageDoubleTapAction.default.rawValue,
Keys.wideChannelPosts.rawValue: false,
Expand Down Expand Up @@ -510,6 +512,19 @@ public class SGSimpleSettings {
@UserDefault(key: Keys.allChatsHidden.rawValue)
public var allChatsHidden: Bool

// Stored as stringified Int32 filter ids (UserDefault wrapper has no Array<Int32> case)
@UserDefault(key: Keys.hiddenChatListFilterIds.rawValue)
public var hiddenChatListFilterIdsRaw: [String]

public var hiddenChatListFilterIds: Set<Int32> {
get {
return Set(self.hiddenChatListFilterIdsRaw.compactMap { Int32($0) })
}
set {
self.hiddenChatListFilterIdsRaw = newValue.map { String($0) }
}
}

@UserDefault(key: Keys.defaultEmojisFirst.rawValue)
public var defaultEmojisFirst: Bool

Expand Down
6 changes: 6 additions & 0 deletions Swiftgram/SGStrings/Strings/en.lproj/SGLocalizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@
"Settings.Folders.AllChatsTitle.long" = "Long";
/* Default behaviour for All Chats Folder Title. "All Chats" title: Default */
"Settings.Folders.AllChatsTitle.none" = "Default";
"Settings.Folders.Hide" = "Hide";
"Settings.Folders.Show" = "Show";
"Settings.Folders.Hidden" = "Hidden";


"Settings.ChatList.Header" = "CHAT LIST";
Expand Down Expand Up @@ -118,6 +121,9 @@
"Settings.SmallReactions" = "Small Reactions";
"Settings.HideReactions" = "Hide Reactions";

"ContextMenu.HideFolder" = "Hide Folder";
"ContextMenu.ShowFolder" = "Show Folder";
"ContextMenu.HiddenFolders" = "Hidden Folders";
"ContextMenu.SaveToCloud" = "Save to Cloud";
"ContextMenu.SelectFromUser" = "Select from Author";

Expand Down
3 changes: 2 additions & 1 deletion submodules/ChatListUI/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library")
sgdeps = [
"//Swiftgram/SGSimpleSettings:SGSimpleSettings",
"//Swiftgram/SGAPIWebSettings:SGAPIWebSettings",
"//Swiftgram/SGAPIToken:SGAPIToken"
"//Swiftgram/SGAPIToken:SGAPIToken",
"//Swiftgram/SGStrings:SGStrings"
]
sgsrcs = [
"//Swiftgram/SGChatListSimpleSettingsSignal:SGChatListSimpleSettingsSignal",
Expand Down
Loading