mattermost-mobile/ios/MattermostShare/Services/ChannelService.swift
Elias Nahum 3a3123674a
[Gekidou] iOS Share extension (#6432)
* iOS Share extension

* Add Fastlane steps for iOS Share Extension

* new multi file layout

* Add recent label

* Refactor code & identation

* ux feedback

* downsample images

* remove options horizontal padding
2022-07-27 10:31:45 -04:00

70 lines
2.2 KiB
Swift

//
// ChannelService.swift
// MattermostShare
//
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
//
import Gekidou
import Foundation
class ChannelService: ObservableObject {
private var serverUrl: String
@Published var selected: ChannelModel?
@Published var channels: [ChannelModel] = []
init() {
self.serverUrl = ""
}
init(_ serverUrl: String) {
self.serverUrl = serverUrl
setServerUrl(serverUrl)
}
func setServerUrl(_ url: String) {
self.serverUrl = url
getCurrentChannel()
getChannels()
}
func getCurrentChannel() {
selected = Gekidou.Database.default.getCurrentChannelWithTeam(self.serverUrl)
}
func getChannels() {
channels = Gekidou.Database.default.getChannelsWithTeam(self.serverUrl)
.filter { channel in
if let deactivated = channel.deactivated {
return !deactivated || (deactivated && channel.type != "D")
}
return true
}
if selected == nil || ((selected!.deactivated ?? false) && selected?.type == "D") {
selected = channels.first
}
}
func searchChannels(_ term: String) -> [ChannelModel] {
let joinedChannelsMatchStart: [ChannelModel] = Gekidou.Database.default.searchJoinedChannels(serverUrl, term: term)
let directChannelsMatchStart: [ChannelModel] = Gekidou.Database.default.searchDirectChannels(serverUrl, term: term)
let channelsMatchStart = (joinedChannelsMatchStart + directChannelsMatchStart).sorted { ($0.lastViewedAt ?? 0) > ($1.lastViewedAt ?? 0)}
let joinedChannelsMatch: [ChannelModel] = Gekidou.Database.default.searchJoinedChannels(serverUrl, term: term, matchStart: false)
let directChannelsMatch: [ChannelModel] = Gekidou.Database.default.searchDirectChannels(serverUrl, term: term, matchStart: false)
let channelsMatch = (joinedChannelsMatch + directChannelsMatch).sorted { ($0.lastViewedAt ?? 0) > ($1.lastViewedAt ?? 0)}
return (channelsMatchStart + channelsMatch)
.filter { channel in
if let deactivated = channel.deactivated {
return !deactivated || (deactivated && channel.type != "D")
}
return true
}
}
}