mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-10-09 03:20:48 +00:00
Saved music reordering
This commit is contained in:
parent
bdaf5f5a02
commit
927d6ad0a8
@ -98,11 +98,15 @@ func managedSavedMusicIdsUpdates(postbox: Postbox, network: Network, accountPeer
|
|||||||
return (poll |> then(.complete() |> suspendAwareDelay(0.5 * 60.0 * 60.0, queue: Queue.concurrentDefaultQueue()))) |> restart
|
return (poll |> then(.complete() |> suspendAwareDelay(0.5 * 60.0 * 60.0, queue: Queue.concurrentDefaultQueue()))) |> restart
|
||||||
}
|
}
|
||||||
|
|
||||||
func _internal_addSavedMusic(account: Account, file: FileMediaReference) -> Signal<Never, AddSavedMusicError> {
|
func _internal_addSavedMusic(account: Account, file: FileMediaReference, afterFile: FileMediaReference?) -> Signal<Never, AddSavedMusicError> {
|
||||||
return account.postbox.transaction { transaction in
|
return account.postbox.transaction { transaction in
|
||||||
if let cachedSavedMusic = transaction.retrieveItemCacheEntry(id: entryId(peerId: account.peerId))?.get(CachedProfileSavedMusic.self) {
|
if let cachedSavedMusic = transaction.retrieveItemCacheEntry(id: entryId(peerId: account.peerId))?.get(CachedProfileSavedMusic.self) {
|
||||||
var updatedFiles = cachedSavedMusic.files
|
var updatedFiles = cachedSavedMusic.files
|
||||||
updatedFiles.insert(file.media, at: 0)
|
if let afterFile, let index = updatedFiles.firstIndex(where: { $0.fileId == afterFile.media.fileId }) {
|
||||||
|
updatedFiles.insert(file.media, at: index + 1)
|
||||||
|
} else {
|
||||||
|
updatedFiles.insert(file.media, at: 0)
|
||||||
|
}
|
||||||
let updatedCount = max(0, cachedSavedMusic.count + 1)
|
let updatedCount = max(0, cachedSavedMusic.count + 1)
|
||||||
if let entry = CodableEntry(CachedProfileSavedMusic(files: updatedFiles, count: updatedCount)) {
|
if let entry = CodableEntry(CachedProfileSavedMusic(files: updatedFiles, count: updatedCount)) {
|
||||||
transaction.putItemCacheEntry(id: entryId(peerId: account.peerId), entry: entry)
|
transaction.putItemCacheEntry(id: entryId(peerId: account.peerId), entry: entry)
|
||||||
@ -126,7 +130,13 @@ func _internal_addSavedMusic(account: Account, file: FileMediaReference) -> Sign
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
return revalidatedMusic(account: account, file: file, signal: { resource in
|
return revalidatedMusic(account: account, file: file, signal: { resource in
|
||||||
return account.network.request(Api.functions.account.saveMusic(flags: 0, id: .inputDocument(id: resource.fileId, accessHash: resource.accessHash, fileReference: Buffer(data: resource.fileReference)), afterId: nil))
|
var flags: Int32 = 0
|
||||||
|
var afterId: Api.InputDocument?
|
||||||
|
if let afterFile, let resource = afterFile.media.resource as? CloudDocumentMediaResource {
|
||||||
|
flags = 1 << 1
|
||||||
|
afterId = .inputDocument(id: resource.fileId, accessHash: resource.accessHash, fileReference: Buffer(data: resource.fileReference))
|
||||||
|
}
|
||||||
|
return account.network.request(Api.functions.account.saveMusic(flags: flags, id: .inputDocument(id: resource.fileId, accessHash: resource.accessHash, fileReference: Buffer(data: resource.fileReference)), afterId: afterId))
|
||||||
})
|
})
|
||||||
|> mapError { _ -> AddSavedMusicError in
|
|> mapError { _ -> AddSavedMusicError in
|
||||||
return .generic
|
return .generic
|
||||||
@ -331,18 +341,18 @@ public final class ProfileSavedMusicContext {
|
|||||||
self.pushState()
|
self.pushState()
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
public func reorderMusic(file: FileMediaReference, afterFile: FileMediaReference?) -> Signal<Never, NoError> {
|
public func addMusic(file: FileMediaReference, afterFile: FileMediaReference? = nil) -> Signal<Never, AddSavedMusicError> {
|
||||||
return .complete()
|
return _internal_addSavedMusic(account: self.account, file: file, afterFile: nil)
|
||||||
}
|
|
||||||
|
|
||||||
public func addMusic(file: FileMediaReference) -> Signal<Never, AddSavedMusicError> {
|
|
||||||
return _internal_addSavedMusic(account: self.account, file: file)
|
|
||||||
|> afterCompleted { [weak self] in
|
|> afterCompleted { [weak self] in
|
||||||
guard let self else {
|
guard let self else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
self.files.insert(file.media, at: 0)
|
if let afterFile, let index = self.files.firstIndex(where: { $0.fileId == afterFile.media.fileId }) {
|
||||||
|
self.files.insert(file.media, at: index + 1)
|
||||||
|
} else {
|
||||||
|
self.files.insert(file.media, at: 0)
|
||||||
|
}
|
||||||
if let count = self.count {
|
if let count = self.count {
|
||||||
self.count = count + 1
|
self.count = count + 1
|
||||||
}
|
}
|
||||||
|
@ -916,8 +916,8 @@ public extension TelegramEngine {
|
|||||||
return _internal_savedMusicIds(postbox: self.account.postbox)
|
return _internal_savedMusicIds(postbox: self.account.postbox)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func addSavedMusic(file: FileMediaReference) -> Signal<Never, AddSavedMusicError> {
|
public func addSavedMusic(file: FileMediaReference, afterFile: FileMediaReference? = nil) -> Signal<Never, AddSavedMusicError> {
|
||||||
return _internal_addSavedMusic(account: self.account, file: file)
|
return _internal_addSavedMusic(account: self.account, file: file, afterFile: afterFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func removeSavedMusic(file: FileMediaReference) -> Signal<Never, NoError> {
|
public func removeSavedMusic(file: FileMediaReference) -> Signal<Never, NoError> {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user