mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 14:20:20 +00:00
Update themes
This commit is contained in:
@@ -279,56 +279,91 @@ public enum CreateThemeResult {
|
||||
case progress(Float)
|
||||
}
|
||||
|
||||
public func createTheme(account: Account, title: String, resource: MediaResource, thumbnailData: Data? = nil, settings: TelegramThemeSettings?) -> Signal<CreateThemeResult, CreateThemeError> {
|
||||
public func createTheme(account: Account, title: String, resource: MediaResource? = nil, thumbnailData: Data? = nil, settings: TelegramThemeSettings?) -> Signal<CreateThemeResult, CreateThemeError> {
|
||||
var flags: Int32 = 0
|
||||
|
||||
var inputSettings: Api.InputThemeSettings?
|
||||
if let _ = resource {
|
||||
flags |= 1 << 2
|
||||
}
|
||||
if let settings = settings {
|
||||
flags |= 1 << 3
|
||||
inputSettings = settings.apiInputThemeSettings
|
||||
}
|
||||
|
||||
return uploadTheme(account: account, resource: resource, thumbnailData: thumbnailData)
|
||||
|> mapError { _ in return CreateThemeError.generic }
|
||||
|> mapToSignal { result -> Signal<CreateThemeResult, CreateThemeError> in
|
||||
switch result {
|
||||
case let .complete(file):
|
||||
if let resource = file.resource as? CloudDocumentMediaResource {
|
||||
return account.network.request(Api.functions.account.createTheme(flags: flags, slug: "", title: title, document: .inputDocument(id: resource.fileId, accessHash: resource.accessHash, fileReference: Buffer(data: resource.fileReference)), settings: inputSettings))
|
||||
|> mapError { error in
|
||||
if error.errorDescription == "THEME_SLUG_INVALID" {
|
||||
return .slugInvalid
|
||||
} else if error.errorDescription == "THEME_SLUG_OCCUPIED" {
|
||||
return .slugOccupied
|
||||
}
|
||||
return .generic
|
||||
}
|
||||
|> mapToSignal { apiTheme -> Signal<CreateThemeResult, CreateThemeError> in
|
||||
if let theme = TelegramTheme(apiTheme: apiTheme) {
|
||||
return account.postbox.transaction { transaction -> CreateThemeResult in
|
||||
let entries = transaction.getOrderedListItems(collectionId: Namespaces.OrderedItemList.CloudThemes)
|
||||
var items = entries.map { $0.contents as! TelegramTheme }
|
||||
items.insert(theme, at: 0)
|
||||
var updatedEntries: [OrderedItemListEntry] = []
|
||||
for item in items {
|
||||
var intValue = Int32(updatedEntries.count)
|
||||
let id = MemoryBuffer(data: Data(bytes: &intValue, count: 4))
|
||||
updatedEntries.append(OrderedItemListEntry(id: id, contents: item))
|
||||
}
|
||||
transaction.replaceOrderedItemListItems(collectionId: Namespaces.OrderedItemList.CloudThemes, items: updatedEntries)
|
||||
return .result(theme)
|
||||
if let resource = resource {
|
||||
return uploadTheme(account: account, resource: resource, thumbnailData: thumbnailData)
|
||||
|> mapError { _ in return CreateThemeError.generic }
|
||||
|> mapToSignal { result -> Signal<CreateThemeResult, CreateThemeError> in
|
||||
switch result {
|
||||
case let .complete(file):
|
||||
if let resource = file.resource as? CloudDocumentMediaResource {
|
||||
return account.network.request(Api.functions.account.createTheme(flags: flags, slug: "", title: title, document: .inputDocument(id: resource.fileId, accessHash: resource.accessHash, fileReference: Buffer(data: resource.fileReference)), settings: inputSettings))
|
||||
|> mapError { error in
|
||||
if error.errorDescription == "THEME_SLUG_INVALID" {
|
||||
return .slugInvalid
|
||||
} else if error.errorDescription == "THEME_SLUG_OCCUPIED" {
|
||||
return .slugOccupied
|
||||
}
|
||||
return .generic
|
||||
}
|
||||
|> mapToSignal { apiTheme -> Signal<CreateThemeResult, CreateThemeError> in
|
||||
if let theme = TelegramTheme(apiTheme: apiTheme) {
|
||||
return account.postbox.transaction { transaction -> CreateThemeResult in
|
||||
let entries = transaction.getOrderedListItems(collectionId: Namespaces.OrderedItemList.CloudThemes)
|
||||
var items = entries.map { $0.contents as! TelegramTheme }
|
||||
items.insert(theme, at: 0)
|
||||
var updatedEntries: [OrderedItemListEntry] = []
|
||||
for item in items {
|
||||
var intValue = Int32(updatedEntries.count)
|
||||
let id = MemoryBuffer(data: Data(bytes: &intValue, count: 4))
|
||||
updatedEntries.append(OrderedItemListEntry(id: id, contents: item))
|
||||
}
|
||||
transaction.replaceOrderedItemListItems(collectionId: Namespaces.OrderedItemList.CloudThemes, items: updatedEntries)
|
||||
return .result(theme)
|
||||
}
|
||||
|> castError(CreateThemeError.self)
|
||||
} else {
|
||||
return .fail(.generic)
|
||||
}
|
||||
|> castError(CreateThemeError.self)
|
||||
} else {
|
||||
return .fail(.generic)
|
||||
}
|
||||
}
|
||||
else {
|
||||
return .fail(.generic)
|
||||
}
|
||||
case let .progress(progress):
|
||||
return .single(.progress(progress))
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return account.network.request(Api.functions.account.createTheme(flags: flags, slug: "", title: title, document: .inputDocumentEmpty, settings: inputSettings))
|
||||
|> mapError { error in
|
||||
if error.errorDescription == "THEME_SLUG_INVALID" {
|
||||
return .slugInvalid
|
||||
} else if error.errorDescription == "THEME_SLUG_OCCUPIED" {
|
||||
return .slugOccupied
|
||||
}
|
||||
else {
|
||||
return .generic
|
||||
}
|
||||
|> mapToSignal { apiTheme -> Signal<CreateThemeResult, CreateThemeError> in
|
||||
if let theme = TelegramTheme(apiTheme: apiTheme) {
|
||||
return account.postbox.transaction { transaction -> CreateThemeResult in
|
||||
let entries = transaction.getOrderedListItems(collectionId: Namespaces.OrderedItemList.CloudThemes)
|
||||
var items = entries.map { $0.contents as! TelegramTheme }
|
||||
items.insert(theme, at: 0)
|
||||
var updatedEntries: [OrderedItemListEntry] = []
|
||||
for item in items {
|
||||
var intValue = Int32(updatedEntries.count)
|
||||
let id = MemoryBuffer(data: Data(bytes: &intValue, count: 4))
|
||||
updatedEntries.append(OrderedItemListEntry(id: id, contents: item))
|
||||
}
|
||||
transaction.replaceOrderedItemListItems(collectionId: Namespaces.OrderedItemList.CloudThemes, items: updatedEntries)
|
||||
return .result(theme)
|
||||
}
|
||||
|> castError(CreateThemeError.self)
|
||||
} else {
|
||||
return .fail(.generic)
|
||||
}
|
||||
case let .progress(progress):
|
||||
return .single(.progress(progress))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -350,6 +385,7 @@ public func updateTheme(account: Account, accountManager: AccountManager, theme:
|
||||
var inputSettings: Api.InputThemeSettings?
|
||||
if let settings = settings {
|
||||
flags |= 1 << 3
|
||||
inputSettings = settings.apiInputThemeSettings
|
||||
}
|
||||
let uploadSignal: Signal<UploadThemeResult?, UploadThemeError>
|
||||
if let resource = resource {
|
||||
@@ -379,7 +415,7 @@ public func updateTheme(account: Account, accountManager: AccountManager, theme:
|
||||
inputDocument = nil
|
||||
}
|
||||
|
||||
return account.network.request(Api.functions.account.updateTheme(flags: flags, format: telegramThemeFormat, theme: .inputTheme(id: theme.id, accessHash: theme.accessHash), slug: slug, title: title, document: inputDocument, settings: nil))
|
||||
return account.network.request(Api.functions.account.updateTheme(flags: flags, format: telegramThemeFormat, theme: .inputTheme(id: theme.id, accessHash: theme.accessHash), slug: slug, title: title, document: inputDocument, settings: inputSettings))
|
||||
|> mapError { error in
|
||||
if error.errorDescription == "THEME_SLUG_INVALID" {
|
||||
return .slugInvalid
|
||||
|
||||
Reference in New Issue
Block a user