- some refactor

This commit is contained in:
overtake 2017-02-28 21:42:16 +03:00
parent 0549ec9cd5
commit e1d6329524
2 changed files with 47 additions and 16 deletions

View File

@ -17,8 +17,8 @@
C239BE981E62F0D200C2C453 /* LoadMessagesIfNecessary.swift in Sources */ = {isa = PBXBuildFile; fileRef = C239BE961E62EE1E00C2C453 /* LoadMessagesIfNecessary.swift */; };
C239BE9C1E630CA700C2C453 /* UpdatePinnedMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C239BE9B1E630CA700C2C453 /* UpdatePinnedMessage.swift */; };
C239BE9D1E630CB300C2C453 /* UpdatePinnedMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C239BE9B1E630CA700C2C453 /* UpdatePinnedMessage.swift */; };
C251D7431E65E50500283EDE /* StickersCloudInstallation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C251D7421E65E50500283EDE /* StickersCloudInstallation.swift */; };
C251D7441E65E50500283EDE /* StickersCloudInstallation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C251D7421E65E50500283EDE /* StickersCloudInstallation.swift */; };
C251D7431E65E50500283EDE /* StickerSetInstallation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C251D7421E65E50500283EDE /* StickerSetInstallation.swift */; };
C251D7441E65E50500283EDE /* StickerSetInstallation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C251D7421E65E50500283EDE /* StickerSetInstallation.swift */; };
C26A37EF1E5E0C41006977AC /* ChannelParticipants.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BB7C591E5C8074001527C3 /* ChannelParticipants.swift */; };
C2A315C01E2E776A00D89000 /* RequestStartBot.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01749581E1092BC0057C89A /* RequestStartBot.swift */; };
D001F3E81E128A1C007A8C60 /* ChannelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CFF1D62255C00955575 /* ChannelState.swift */; };
@ -429,7 +429,7 @@
C2366C881E4F40480097CCFF /* SupportPeerId.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SupportPeerId.swift; sourceTree = "<group>"; };
C239BE961E62EE1E00C2C453 /* LoadMessagesIfNecessary.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoadMessagesIfNecessary.swift; sourceTree = "<group>"; };
C239BE9B1E630CA700C2C453 /* UpdatePinnedMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdatePinnedMessage.swift; sourceTree = "<group>"; };
C251D7421E65E50500283EDE /* StickersCloudInstallation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickersCloudInstallation.swift; sourceTree = "<group>"; };
C251D7421E65E50500283EDE /* StickerSetInstallation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickerSetInstallation.swift; sourceTree = "<group>"; };
D003702A1DA42586004308D3 /* PhoneNumber.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhoneNumber.swift; sourceTree = "<group>"; };
D00C7CCB1E3620C30080C3D5 /* CachedChannelParticipants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CachedChannelParticipants.swift; sourceTree = "<group>"; };
D00C7CCE1E3628180080C3D5 /* UpdateCachedChannelParticipants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdateCachedChannelParticipants.swift; sourceTree = "<group>"; };
@ -709,7 +709,7 @@
D021E0E11DB5401A00C6B04F /* StickerManagement.swift */,
D01D6BF81E42A713006151C6 /* SearchStickers.swift */,
D049EAD71E43DAD200A2CD3A /* ManagedRecentStickers.swift */,
C251D7421E65E50500283EDE /* StickersCloudInstallation.swift */,
C251D7421E65E50500283EDE /* StickerSetInstallation.swift */,
);
name = "Sticker Management";
sourceTree = "<group>";
@ -1496,7 +1496,7 @@
D0B843C51DA7FF30005F29E1 /* NBPhoneNumber.m in Sources */,
D03B0D0D1D62255C00955575 /* SynchronizePeerReadState.swift in Sources */,
D03B0D081D62255C00955575 /* ChannelState.swift in Sources */,
C251D7431E65E50500283EDE /* StickersCloudInstallation.swift in Sources */,
C251D7431E65E50500283EDE /* StickerSetInstallation.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1693,7 +1693,7 @@
D073CE6F1DCBCF17007511FD /* OutgoingMessageInfoAttribute.swift in Sources */,
D0B844431DAB91FD005F29E1 /* Account.swift in Sources */,
D0448CA01E27F5EB005A61A7 /* Random.swift in Sources */,
C251D7441E65E50500283EDE /* StickersCloudInstallation.swift in Sources */,
C251D7441E65E50500283EDE /* StickerSetInstallation.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View File

@ -7,7 +7,8 @@ import Foundation
import SwiftSignalKit
#endif
public enum CloudStickersLoadingError {
public enum RequestStickerSetError {
case generic
case invalid
}
@ -30,32 +31,48 @@ fileprivate extension Api.StickerSet {
}
}
public func requestCloudStickerPack(account:Account, reference: StickerPackReference) -> Signal<(StickerPackCollectionInfo, [ItemCollectionItem], Bool), CloudStickersLoadingError> {
public enum RequestStickerSetResult {
case local(info: ItemCollectionInfo, items: [ItemCollectionItem])
case remote(info: ItemCollectionInfo, items: [ItemCollectionItem], installed: Bool)
}
public func requestStickerSet(account:Account, reference: StickerPackReference) -> Signal<RequestStickerSetResult, RequestStickerSetError> {
let collectionId:ItemCollectionId?
let input:Api.InputStickerSet
switch reference {
case let .name(name):
collectionId = nil
input = .inputStickerSetShortName(shortName: name)
case let .id(id, accessHash):
collectionId = ItemCollectionId(namespace: Namespaces.ItemCollection.CloudStickerPacks, id: id)
input = .inputStickerSetID(id: id, accessHash: accessHash)
}
return account.network.request(Api.functions.messages.getStickerSet(stickerset: input))
|> mapError { _ -> CloudStickersLoadingError in
let localSignal:(ItemCollectionId) -> Signal<(ItemCollectionInfo, [ItemCollectionItem])?, Void> = { collectionId in
return account.postbox.modify { modifier -> (ItemCollectionInfo, [ItemCollectionItem])? in
return modifier.getItemCollection(namespace: Namespaces.ItemCollection.CloudStickerPacks, id: collectionId)
}
}
let remoteSignal = account.network.request(Api.functions.messages.getStickerSet(stickerset: input))
|> mapError { _ -> RequestStickerSetError in
return .invalid
}
|> map { result -> (StickerPackCollectionInfo, [ItemCollectionItem], Bool) in
|> map { result -> RequestStickerSetResult in
var items: [ItemCollectionItem] = []
let info:StickerPackCollectionInfo
let info:ItemCollectionInfo
let installed:Bool
switch result {
case let .stickerSet(set, packs, documents):
info = set.info
switch set {
case let .stickerSet(data):
installed = (data.flags & (1 << 0) != 0)
}
info = set.info
var indexKeysByFile: [MediaId: [MemoryBuffer]] = [:]
for pack in packs {
@ -87,9 +104,23 @@ public func requestCloudStickerPack(account:Account, reference: StickerPackRefer
}
break
}
return (info, items, installed)
return .remote(info: info, items: items, installed: installed)
}
if let collectionId = collectionId {
return localSignal(collectionId) |> mapError {_ in return .generic} |> mapToSignal { result -> Signal<RequestStickerSetResult, RequestStickerSetError> in
if let result = result {
return .single(.local(info: result.0, items: result.1))
} else {
return remoteSignal
}
}
} else {
return remoteSignal
}
}
public enum InstallStickerSetError {
@ -171,11 +202,11 @@ public func installStickerSetInteractively(account:Account, info: StickerPackCol
for index in removableIndexes {
collections.remove(at: index)
}
collections.insert((info.id, info, items), at: 0)
modifier.replaceItemCollections(namespace: info.id.namespace, itemCollections: collections)
} |> map { _ in return addResult} |> mapError {_ in return .generic}
} |> map { _ in return addResult} |> mapError {_ in return .generic}
}
}