Theme fixes

This commit is contained in:
Ilya Laktyushin 2019-12-27 15:36:15 +03:00
parent 604d215f0e
commit 8518bc5e32
4 changed files with 38 additions and 8 deletions

View File

@ -14,6 +14,7 @@ import PresentationDataUtils
import LegacyMediaPickerUI import LegacyMediaPickerUI
import WallpaperResources import WallpaperResources
import AccountContext import AccountContext
import MediaResources
private final class EditThemeControllerArguments { private final class EditThemeControllerArguments {
let context: AccountContext let context: AccountContext
@ -503,11 +504,40 @@ public func editThemeController(context: AccountContext, mode: EditThemeControll
resolvedWallpaper = nil resolvedWallpaper = nil
} }
let prepare: Signal<CreateThemeResult, CreateThemeError>
if let resolvedWallpaper = resolvedWallpaper, case let .file(file) = resolvedWallpaper, resolvedWallpaper.isPattern {
let resource = file.file.resource
let representation = CachedPatternWallpaperRepresentation(color: file.settings.color ?? 0xd6e2ee, bottomColor: file.settings.bottomColor, intensity: file.settings.intensity ?? 50, rotation: file.settings.rotation)
var data: Data?
if let path = context.account.postbox.mediaBox.completedResourcePath(resource), let maybeData = try? Data(contentsOf: URL(fileURLWithPath: path), options: .mappedRead) {
data = maybeData
} else if let path = context.sharedContext.accountManager.mediaBox.completedResourcePath(resource), let maybeData = try? Data(contentsOf: URL(fileURLWithPath: path), options: .mappedRead) {
data = maybeData
}
if let data = data {
context.sharedContext.accountManager.mediaBox.storeResourceData(resource.id, data: data, synchronous: true)
prepare = (context.sharedContext.accountManager.mediaBox.cachedResourceRepresentation(resource, representation: representation, complete: true, fetch: true)
|> filter({ $0.complete })
|> take(1)
|> castError(CreateThemeError.self)
|> mapToSignal { _ -> Signal<CreateThemeResult, CreateThemeError> in
return .complete()
})
} else {
prepare = .complete()
}
} else {
prepare = .complete()
}
switch mode { switch mode {
case .create: case .create:
if let themeResource = themeResource { if let themeResource = themeResource {
let _ = (createTheme(account: context.account, title: state.title, resource: themeResource, thumbnailData: themeThumbnailData, settings: settings) let _ = (prepare |> then(createTheme(account: context.account, title: state.title, resource: themeResource, thumbnailData: themeThumbnailData, settings: settings)
|> deliverOnMainQueue).start(next: { next in |> deliverOnMainQueue)).start(next: { next in
if case let .result(resultTheme) = next { if case let .result(resultTheme) = next {
let _ = applyTheme(accountManager: context.sharedContext.accountManager, account: context.account, theme: resultTheme).start() let _ = applyTheme(accountManager: context.sharedContext.accountManager, account: context.account, theme: resultTheme).start()
let _ = (updatePresentationThemeSettingsInteractively(accountManager: context.sharedContext.accountManager, { current in let _ = (updatePresentationThemeSettingsInteractively(accountManager: context.sharedContext.accountManager, { current in
@ -540,8 +570,8 @@ public func editThemeController(context: AccountContext, mode: EditThemeControll
}) })
} }
case let .edit(info): case let .edit(info):
let _ = (updateTheme(account: context.account, accountManager: context.sharedContext.accountManager, theme: info.theme, title: state.title, slug: state.slug, resource: themeResource, settings: settings) let _ = (prepare |> then(updateTheme(account: context.account, accountManager: context.sharedContext.accountManager, theme: info.theme, title: state.title, slug: state.slug, resource: themeResource, settings: settings)
|> deliverOnMainQueue).start(next: { next in |> deliverOnMainQueue)).start(next: { next in
if case let .result(resultTheme) = next { if case let .result(resultTheme) = next {
let _ = applyTheme(accountManager: context.sharedContext.accountManager, account: context.account, theme: resultTheme).start() let _ = applyTheme(accountManager: context.sharedContext.accountManager, account: context.account, theme: resultTheme).start()
let _ = (updatePresentationThemeSettingsInteractively(accountManager: context.sharedContext.accountManager, { current in let _ = (updatePresentationThemeSettingsInteractively(accountManager: context.sharedContext.accountManager, { current in

View File

@ -41,7 +41,7 @@ extension TelegramWallpaper: Codable {
default: default:
let optionKeys = ["motion", "blur"] let optionKeys = ["motion", "blur"]
if value.count == 6, let color = UIColor(hexString: value) { if [6, 8].contains(value.count), let color = UIColor(hexString: value) {
self = .color(color.argb) self = .color(color.argb)
} else { } else {
let components = value.components(separatedBy: " ") let components = value.components(separatedBy: " ")
@ -80,7 +80,7 @@ extension TelegramWallpaper: Codable {
if optionKeys.contains(component) { if optionKeys.contains(component) {
continue continue
} }
if component.count == 6, let value = UIColor(hexString: component) { if [6, 8].contains(component.count), let value = UIColor(hexString: component) {
if color == nil { if color == nil {
color = value.argb color = value.argb
} else if bottomColor == nil { } else if bottomColor == nil {

View File

@ -1766,7 +1766,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode {
self.selectionScrollDisplayLink = ConstantDisplayLinkAnimator(update: { [weak self] in self.selectionScrollDisplayLink = ConstantDisplayLinkAnimator(update: { [weak self] in
self?.selectionScrollActivationTimer = nil self?.selectionScrollActivationTimer = nil
if let strongSelf = self, let delta = strongSelf.selectionScrollDelta { if let strongSelf = self, let delta = strongSelf.selectionScrollDelta {
let distance: CGFloat = 10.0 * min(1.0, 0.15 + abs(delta * delta)) let distance: CGFloat = 15.0 * min(1.0, 0.15 + abs(delta * delta))
let direction: ListViewScrollDirection = delta > 0.0 ? .up : .down let direction: ListViewScrollDirection = delta > 0.0 ? .up : .down
strongSelf.scrollWithDirection(direction, distance: distance) strongSelf.scrollWithDirection(direction, distance: distance)

View File

@ -153,7 +153,7 @@ final class UndoOverlayControllerNode: ViewControllerTracingNode {
self.textNode.attributedText = attributedText self.textNode.attributedText = attributedText
displayUndo = true displayUndo = true
undoText = cancel undoText = cancel
self.originalRemainingSeconds = 3 self.originalRemainingSeconds = 5
case let .emoji(path, text): case let .emoji(path, text):
self.iconNode = nil self.iconNode = nil
self.iconCheckNode = nil self.iconCheckNode = nil