mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-24 07:05:35 +00:00
Download list improvements
This commit is contained in:
@@ -496,7 +496,10 @@ public final class ListMessageFileItemNode: ListMessageNode {
|
||||
descriptionText = NSAttributedString(string: descriptionString, font: descriptionFont, textColor: item.presentationData.theme.theme.list.itemSecondaryTextColor)
|
||||
iconImage = .roundVideo(file)
|
||||
} else if !isAudio {
|
||||
let fileName: String = file.fileName ?? "File"
|
||||
var fileName: String = file.fileName ?? "File"
|
||||
if file.isVideo {
|
||||
fileName = item.presentationData.strings.Message_Video
|
||||
}
|
||||
titleText = NSAttributedString(string: fileName, font: titleFont, textColor: item.presentationData.theme.theme.list.itemPrimaryTextColor)
|
||||
|
||||
var fileExtension: String?
|
||||
@@ -543,8 +546,7 @@ public final class ListMessageFileItemNode: ListMessageNode {
|
||||
} else if let image = media as? TelegramMediaImage {
|
||||
selectedMedia = image
|
||||
|
||||
//TODO:localize
|
||||
let fileName: String = "Photo"
|
||||
let fileName: String = item.presentationData.strings.Message_Video
|
||||
titleText = NSAttributedString(string: fileName, font: titleFont, textColor: item.presentationData.theme.theme.list.itemPrimaryTextColor)
|
||||
|
||||
if let representation = smallestImageRepresentation(image.representations) {
|
||||
@@ -624,7 +626,7 @@ public final class ListMessageFileItemNode: ListMessageNode {
|
||||
|
||||
if statusUpdated {
|
||||
if let file = selectedMedia as? TelegramMediaFile {
|
||||
updatedStatusSignal = messageFileMediaResourceStatus(context: item.context, file: file, message: message, isRecentActions: false, isSharedMedia: true, isGlobalSearch: item.isGlobalSearchResult || item.isDownloadList)
|
||||
updatedStatusSignal = messageFileMediaResourceStatus(context: item.context, file: file, message: message, isRecentActions: false, isSharedMedia: true, isGlobalSearch: item.isGlobalSearchResult, isDownloadList: item.isDownloadList)
|
||||
|> mapToSignal { value -> Signal<FileMediaResourceStatus, NoError> in
|
||||
if case .Fetching = value.fetchStatus {
|
||||
return .single(value) |> delay(0.1, queue: Queue.concurrentDefaultQueue())
|
||||
@@ -638,16 +640,20 @@ public final class ListMessageFileItemNode: ListMessageNode {
|
||||
updatedStatusSignal = currentUpdatedStatusSignal
|
||||
|> map { status in
|
||||
switch status.mediaStatus {
|
||||
case .fetchStatus:
|
||||
case .fetchStatus:
|
||||
if item.isDownloadList {
|
||||
return FileMediaResourceStatus(mediaStatus: .fetchStatus(status.fetchStatus), fetchStatus: status.fetchStatus)
|
||||
} else {
|
||||
return FileMediaResourceStatus(mediaStatus: .fetchStatus(.Local), fetchStatus: status.fetchStatus)
|
||||
case .playbackStatus:
|
||||
return status
|
||||
}
|
||||
case .playbackStatus:
|
||||
return status
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if isVoice {
|
||||
updatedPlaybackStatusSignal = messageFileMediaPlaybackStatus(context: item.context, file: file, message: message, isRecentActions: false, isGlobalSearch: item.isGlobalSearchResult || item.isDownloadList)
|
||||
updatedPlaybackStatusSignal = messageFileMediaPlaybackStatus(context: item.context, file: file, message: message, isRecentActions: false, isGlobalSearch: item.isGlobalSearchResult, isDownloadList: item.isDownloadList)
|
||||
}
|
||||
} else if let image = selectedMedia as? TelegramMediaImage {
|
||||
updatedStatusSignal = messageImageMediaResourceStatus(context: item.context, image: image, message: message, isRecentActions: false, isSharedMedia: true, isGlobalSearch: item.isGlobalSearchResult || item.isDownloadList)
|
||||
@@ -996,27 +1002,32 @@ public final class ListMessageFileItemNode: ListMessageNode {
|
||||
if !isAudio && !isInstantVideo {
|
||||
self.updateProgressFrame(size: contentSize, leftInset: layoutParams.leftInset, rightInset: layoutParams.rightInset, transition: .immediate)
|
||||
} else {
|
||||
if item.isDownloadList {
|
||||
self.updateProgressFrame(size: contentSize, leftInset: layoutParams.leftInset, rightInset: layoutParams.rightInset, transition: .immediate)
|
||||
}
|
||||
switch status {
|
||||
case let .fetchStatus(fetchStatus):
|
||||
switch fetchStatus {
|
||||
case .Fetching:
|
||||
break
|
||||
case .Local:
|
||||
if isAudio || isInstantVideo {
|
||||
iconStatusState = .play
|
||||
}
|
||||
case .Remote, .Paused:
|
||||
if isAudio || isInstantVideo {
|
||||
iconStatusState = .play
|
||||
}
|
||||
case let .fetchStatus(fetchStatus):
|
||||
switch fetchStatus {
|
||||
case let .Fetching(_, progress):
|
||||
if item.isDownloadList {
|
||||
iconStatusState = .progress(value: CGFloat(progress), cancelEnabled: false, appearance: nil)
|
||||
}
|
||||
case let .playbackStatus(playbackStatus):
|
||||
switch playbackStatus {
|
||||
case .playing:
|
||||
iconStatusState = .pause
|
||||
case .paused:
|
||||
case .Local:
|
||||
if isAudio || isInstantVideo {
|
||||
iconStatusState = .play
|
||||
}
|
||||
case .Remote, .Paused:
|
||||
if isAudio || isInstantVideo {
|
||||
iconStatusState = .play
|
||||
}
|
||||
}
|
||||
case let .playbackStatus(playbackStatus):
|
||||
switch playbackStatus {
|
||||
case .playing:
|
||||
iconStatusState = .pause
|
||||
case .paused:
|
||||
iconStatusState = .play
|
||||
}
|
||||
}
|
||||
}
|
||||
self.iconStatusNode.backgroundNodeColor = iconStatusBackgroundColor
|
||||
@@ -1090,17 +1101,22 @@ public final class ListMessageFileItemNode: ListMessageNode {
|
||||
break
|
||||
case let .fetchStatus(fetchStatus):
|
||||
maybeFetchStatus = fetchStatus
|
||||
switch fetchStatus {
|
||||
case .Fetching(_, let progress), .Paused(let progress):
|
||||
if let file = self.currentMedia as? TelegramMediaFile, let size = file.size {
|
||||
downloadingString = "\(dataSizeString(Int(Float(size) * progress), forceDecimal: true, formatting: DataSizeStringFormatting(chatPresentationData: item.presentationData))) / \(dataSizeString(size, forceDecimal: true, formatting: DataSizeStringFormatting(chatPresentationData: item.presentationData)))"
|
||||
}
|
||||
descriptionOffset = 14.0
|
||||
case .Remote:
|
||||
descriptionOffset = 14.0
|
||||
case .Local:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if item.isDownloadList, let fetchStatus = self.fetchStatus {
|
||||
maybeFetchStatus = fetchStatus
|
||||
}
|
||||
|
||||
switch maybeFetchStatus {
|
||||
case .Fetching(_, let progress), .Paused(let progress):
|
||||
if let file = self.currentMedia as? TelegramMediaFile, let size = file.size {
|
||||
downloadingString = "\(dataSizeString(Int(Float(size) * progress), forceDecimal: true, formatting: DataSizeStringFormatting(chatPresentationData: item.presentationData))) / \(dataSizeString(size, forceDecimal: true, formatting: DataSizeStringFormatting(chatPresentationData: item.presentationData)))"
|
||||
}
|
||||
descriptionOffset = 14.0
|
||||
case .Remote:
|
||||
descriptionOffset = 14.0
|
||||
case .Local:
|
||||
break
|
||||
}
|
||||
|
||||
switch maybeFetchStatus {
|
||||
@@ -1163,7 +1179,7 @@ public final class ListMessageFileItemNode: ListMessageNode {
|
||||
} else {
|
||||
if let linearProgressNode = self.linearProgressNode {
|
||||
self.linearProgressNode = nil
|
||||
linearProgressNode.layer.animateAlpha(from: 1.0, to: 1.0, duration: 0.2, removeOnCompletion: false, completion: { [weak linearProgressNode] _ in
|
||||
linearProgressNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false, completion: { [weak linearProgressNode] _ in
|
||||
linearProgressNode?.removeFromSupernode()
|
||||
})
|
||||
}
|
||||
@@ -1419,9 +1435,11 @@ private final class DownloadIconNode: ASImageNode {
|
||||
}
|
||||
|
||||
func updateTheme(theme: PresentationTheme) {
|
||||
self.image = PresentationResourcesChat.sharedMediaFileDownloadStartIcon(theme, generate: {
|
||||
return generateDownloadIcon(color: theme.list.itemAccentColor)
|
||||
})
|
||||
if self.image != nil {
|
||||
self.image = PresentationResourcesChat.sharedMediaFileDownloadStartIcon(theme, generate: {
|
||||
return generateDownloadIcon(color: theme.list.itemAccentColor)
|
||||
})
|
||||
}
|
||||
self.customColor = theme.list.itemAccentColor
|
||||
self.animationNode?.customColor = self.customColor
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user