mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-15 13:35:19 +00:00
Various fixes
This commit is contained in:
parent
4aefac47ac
commit
0c7f3223c6
@ -20,7 +20,7 @@ import UrlEscaping
|
||||
final class BrowserDocumentContent: UIView, BrowserContent, WKNavigationDelegate, WKUIDelegate, UIScrollViewDelegate {
|
||||
private let context: AccountContext
|
||||
private var presentationData: PresentationData
|
||||
let file: TelegramMediaFile
|
||||
let file: FileMediaReference
|
||||
|
||||
private let webView: WKWebView
|
||||
|
||||
@ -47,7 +47,7 @@ final class BrowserDocumentContent: UIView, BrowserContent, WKNavigationDelegate
|
||||
|
||||
private var tempFile: TempBoxFile?
|
||||
|
||||
init(context: AccountContext, presentationData: PresentationData, file: TelegramMediaFile) {
|
||||
init(context: AccountContext, presentationData: PresentationData, file: FileMediaReference) {
|
||||
self.context = context
|
||||
self.uuid = UUID()
|
||||
self.presentationData = presentationData
|
||||
@ -63,9 +63,9 @@ final class BrowserDocumentContent: UIView, BrowserContent, WKNavigationDelegate
|
||||
|
||||
var title: String = "file"
|
||||
var url = ""
|
||||
if let path = self.context.account.postbox.mediaBox.completedResourcePath(file.resource) {
|
||||
if let path = self.context.account.postbox.mediaBox.completedResourcePath(file.media.resource) {
|
||||
var updatedPath = path
|
||||
if let fileName = file.fileName {
|
||||
if let fileName = file.media.fileName {
|
||||
let tempFile = TempBox.shared.file(path: path, fileName: fileName)
|
||||
updatedPath = tempFile.path
|
||||
self.tempFile = tempFile
|
||||
|
@ -20,7 +20,7 @@ import PDFKit
|
||||
final class BrowserPdfContent: UIView, BrowserContent, UIScrollViewDelegate, PDFDocumentDelegate {
|
||||
private let context: AccountContext
|
||||
private var presentationData: PresentationData
|
||||
let file: TelegramMediaFile
|
||||
let file: FileMediaReference
|
||||
|
||||
private let pdfView: PDFView
|
||||
private let scrollView: UIScrollView!
|
||||
@ -53,7 +53,7 @@ final class BrowserPdfContent: UIView, BrowserContent, UIScrollViewDelegate, PDF
|
||||
|
||||
private var tempFile: TempBoxFile?
|
||||
|
||||
init(context: AccountContext, presentationData: PresentationData, file: TelegramMediaFile) {
|
||||
init(context: AccountContext, presentationData: PresentationData, file: FileMediaReference) {
|
||||
self.context = context
|
||||
self.uuid = UUID()
|
||||
self.presentationData = presentationData
|
||||
@ -86,9 +86,9 @@ final class BrowserPdfContent: UIView, BrowserContent, UIScrollViewDelegate, PDF
|
||||
|
||||
var title = "file"
|
||||
var url = ""
|
||||
if let path = self.context.account.postbox.mediaBox.completedResourcePath(file.resource) {
|
||||
if let path = self.context.account.postbox.mediaBox.completedResourcePath(file.media.resource) {
|
||||
var updatedPath = path
|
||||
if let fileName = file.fileName {
|
||||
if let fileName = file.media.fileName {
|
||||
let tempFile = TempBox.shared.file(path: path, fileName: fileName)
|
||||
updatedPath = tempFile.path
|
||||
self.tempFile = tempFile
|
||||
|
@ -569,10 +569,10 @@ public class BrowserScreen: ViewController, MinimizableController {
|
||||
var isDocument = false
|
||||
if let content = self.content.last {
|
||||
if let documentContent = content as? BrowserDocumentContent {
|
||||
subject = .media(.standalone(media: documentContent.file))
|
||||
subject = .media(documentContent.file.abstract)
|
||||
isDocument = true
|
||||
} else if let documentContent = content as? BrowserPdfContent {
|
||||
subject = .media(.standalone(media: documentContent.file))
|
||||
subject = .media(documentContent.file.abstract)
|
||||
isDocument = true
|
||||
} else {
|
||||
subject = .url(url)
|
||||
@ -650,7 +650,7 @@ public class BrowserScreen: ViewController, MinimizableController {
|
||||
switch controller.subject {
|
||||
case let .document(file, canShare), let .pdfDocument(file, canShare):
|
||||
processed = true
|
||||
controller.openDocument(file, canShare)
|
||||
controller.openDocument(file.media, canShare)
|
||||
default:
|
||||
break
|
||||
}
|
||||
@ -1486,13 +1486,13 @@ public class BrowserScreen: ViewController, MinimizableController {
|
||||
public enum Subject {
|
||||
case webPage(url: String)
|
||||
case instantPage(webPage: TelegramMediaWebpage, anchor: String?, sourceLocation: InstantPageSourceLocation, preloadedResources: [Any]?)
|
||||
case document(file: TelegramMediaFile, canShare: Bool)
|
||||
case pdfDocument(file: TelegramMediaFile, canShare: Bool)
|
||||
case document(file: FileMediaReference, canShare: Bool)
|
||||
case pdfDocument(file: FileMediaReference, canShare: Bool)
|
||||
|
||||
public var fileId: MediaId? {
|
||||
switch self {
|
||||
case let .document(file, _), let .pdfDocument(file, _):
|
||||
return file.fileId
|
||||
return file.media.fileId
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
|
@ -342,13 +342,16 @@ class GeneralChartComponentController: ChartThemeContainer {
|
||||
visible: chartVisibility[index])
|
||||
}
|
||||
|
||||
if let currency, let firstValue = values.first, let color = GColor(hexString: "#dda747") {
|
||||
if let currency, let firstValue = values.first, let starColor = GColor(hexString: "#dda747") {
|
||||
let updatedTitle: String
|
||||
let color: GColor
|
||||
switch currency {
|
||||
case .ton:
|
||||
updatedTitle = self.strings.revenueInTon
|
||||
color = firstValue.color
|
||||
case .xtr:
|
||||
updatedTitle = self.strings.revenueInStars
|
||||
color = starColor
|
||||
}
|
||||
values[0] = ChartDetailsViewModel.Value(
|
||||
prefix: nil,
|
||||
|
@ -784,7 +784,6 @@ private func createGiveawayControllerEntries(
|
||||
entries.append(.prepaid(presentationData.theme, title, text, prepaidGiveaway))
|
||||
}
|
||||
|
||||
var starsPerUser: Int64 = 0
|
||||
if case .generic = subject, case .starsGiveaway = state.mode, !starsGiveawayOptions.isEmpty {
|
||||
let selectedOption = starsGiveawayOptions.first(where: { $0.giveawayOption.count == state.stars })!
|
||||
entries.append(.starsHeader(presentationData.theme, presentationData.strings.BoostGift_Stars_Title.uppercased(), presentationData.strings.BoostGift_Stars_Boosts(selectedOption.giveawayOption.yearlyBoosts).uppercased()))
|
||||
@ -795,13 +794,16 @@ private func createGiveawayControllerEntries(
|
||||
continue
|
||||
}
|
||||
let giftTitle: String = presentationData.strings.BoostGift_Stars_Stars(Int32(product.giveawayOption.count))
|
||||
let winners = product.giveawayOption.winners.first(where: { $0.users == state.winners }) ?? product.giveawayOption.winners.first!
|
||||
|
||||
let maxWinners = product.giveawayOption.winners.sorted(by: { $0.users < $1.users }).last?.users ?? 1
|
||||
|
||||
let subtitle = presentationData.strings.BoostGift_Stars_PerUser("\(winners.starsPerUser)").string
|
||||
|
||||
let starsPerUser: Int64
|
||||
if let winners = product.giveawayOption.winners.first(where: { $0.users == state.winners }) {
|
||||
starsPerUser = winners.starsPerUser
|
||||
} else {
|
||||
starsPerUser = product.giveawayOption.count / Int64(state.winners)
|
||||
}
|
||||
let subtitle = presentationData.strings.BoostGift_Stars_PerUser("\(starsPerUser)").string
|
||||
let label = product.storeProduct.price
|
||||
starsPerUser = winners.starsPerUser
|
||||
|
||||
let isSelected = product.giveawayOption.count == state.stars
|
||||
entries.append(.stars(i, presentationData.theme, Int32(product.giveawayOption.count), giftTitle, subtitle, label, isSelected, maxWinners))
|
||||
@ -941,7 +943,6 @@ private func createGiveawayControllerEntries(
|
||||
if state.mode == .starsGiveaway {
|
||||
let starsString = presentationData.strings.BoostGift_AdditionalPrizesInfoStars(Int32(state.stars))
|
||||
if state.prizeDescription.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
|
||||
let _ = starsPerUser
|
||||
prizeDescriptionInfoText = presentationData.strings.BoostGift_AdditionalPrizesInfoStarsOn(starsString, "").string
|
||||
} else {
|
||||
prizeDescriptionInfoText = presentationData.strings.BoostGift_AdditionalPrizesInfoStarsOn(starsString, presentationData.strings.BoostGift_AdditionalPrizesInfoStarsAndOther("\(state.winners)", state.prizeDescription).string).string
|
||||
|
@ -1167,7 +1167,7 @@ private enum StatsEntry: ItemListNodeEntry {
|
||||
detailText = stringForMediumCompactDate(timestamp: date, strings: presentationData.strings, dateTimeFormat: presentationData.dateTimeFormat)
|
||||
}
|
||||
|
||||
let label = tonAmountAttributedString(formatTonAmountText(transaction.amount, decimalSeparator: presentationData.dateTimeFormat.decimalSeparator, showPlus: true), integralFont: font, fractionalFont: smallLabelFont, color: labelColor).mutableCopy() as! NSMutableAttributedString
|
||||
let label = tonAmountAttributedString(formatTonAmountText(transaction.amount, dateTimeFormat: presentationData.dateTimeFormat, showPlus: true), integralFont: font, fractionalFont: smallLabelFont, color: labelColor).mutableCopy() as! NSMutableAttributedString
|
||||
|
||||
label.insert(NSAttributedString(string: " $ ", font: font, textColor: labelColor), at: 1)
|
||||
if let range = label.string.range(of: "$"), let icon = generateTintedImage(image: UIImage(bundleImageName: "Ads/TonMedium"), color: labelColor) {
|
||||
|
@ -176,7 +176,7 @@ final class MonetizationBalanceItemNode: ListViewItemNode, ItemListItemNode {
|
||||
|
||||
var isStars = false
|
||||
if let stats = item.stats as? RevenueStats {
|
||||
let cryptoValue = formatTonAmountText(stats.balances.availableBalance, decimalSeparator: item.presentationData.dateTimeFormat.decimalSeparator)
|
||||
let cryptoValue = formatTonAmountText(stats.balances.availableBalance, dateTimeFormat: item.presentationData.dateTimeFormat)
|
||||
amountString = tonAmountAttributedString(cryptoValue, integralFont: integralFont, fractionalFont: fractionalFont, color: item.presentationData.theme.list.itemPrimaryTextColor)
|
||||
value = stats.balances.availableBalance == 0 ? "" : "≈\(formatTonUsdValue(stats.balances.availableBalance, rate: stats.usdRate, dateTimeFormat: item.presentationData.dateTimeFormat))"
|
||||
} else if let stats = item.stats as? StarsRevenueStats {
|
||||
|
@ -772,7 +772,7 @@ class StatsOverviewItemNode: ListViewItemNode {
|
||||
item.context,
|
||||
params.width,
|
||||
item.presentationData,
|
||||
formatTonAmountText(stats.balances.availableBalance, decimalSeparator: item.presentationData.dateTimeFormat.decimalSeparator),
|
||||
formatTonAmountText(stats.balances.availableBalance, dateTimeFormat: item.presentationData.dateTimeFormat),
|
||||
item.presentationData.strings.Monetization_StarsProceeds_Available,
|
||||
(stats.balances.availableBalance == 0 ? "" : "≈\(formatTonUsdValue(stats.balances.availableBalance, rate: stats.usdRate, dateTimeFormat: item.presentationData.dateTimeFormat))", .generic),
|
||||
.ton
|
||||
@ -782,7 +782,7 @@ class StatsOverviewItemNode: ListViewItemNode {
|
||||
item.context,
|
||||
params.width,
|
||||
item.presentationData,
|
||||
formatTonAmountText(stats.balances.currentBalance, decimalSeparator: item.presentationData.dateTimeFormat.decimalSeparator),
|
||||
formatTonAmountText(stats.balances.currentBalance, dateTimeFormat: item.presentationData.dateTimeFormat),
|
||||
item.presentationData.strings.Monetization_StarsProceeds_Current,
|
||||
(stats.balances.currentBalance == 0 ? "" : "≈\(formatTonUsdValue(stats.balances.currentBalance, rate: stats.usdRate, dateTimeFormat: item.presentationData.dateTimeFormat))", .generic),
|
||||
.ton
|
||||
@ -792,7 +792,7 @@ class StatsOverviewItemNode: ListViewItemNode {
|
||||
item.context,
|
||||
params.width,
|
||||
item.presentationData,
|
||||
formatTonAmountText(stats.balances.overallRevenue, decimalSeparator: item.presentationData.dateTimeFormat.decimalSeparator),
|
||||
formatTonAmountText(stats.balances.overallRevenue, dateTimeFormat: item.presentationData.dateTimeFormat),
|
||||
item.presentationData.strings.Monetization_StarsProceeds_Total,
|
||||
(stats.balances.overallRevenue == 0 ? "" : "≈\(formatTonUsdValue(stats.balances.overallRevenue, rate: stats.usdRate, dateTimeFormat: item.presentationData.dateTimeFormat))", .generic),
|
||||
.ton
|
||||
@ -836,7 +836,7 @@ class StatsOverviewItemNode: ListViewItemNode {
|
||||
item.context,
|
||||
params.width,
|
||||
item.presentationData,
|
||||
formatTonAmountText(stats.balances.availableBalance, decimalSeparator: item.presentationData.dateTimeFormat.decimalSeparator),
|
||||
formatTonAmountText(stats.balances.availableBalance, dateTimeFormat: item.presentationData.dateTimeFormat),
|
||||
item.presentationData.strings.Monetization_Overview_Available,
|
||||
(stats.balances.availableBalance == 0 ? "" : "≈\(formatTonUsdValue(stats.balances.availableBalance, rate: stats.usdRate, dateTimeFormat: item.presentationData.dateTimeFormat))", .generic),
|
||||
.ton
|
||||
@ -846,7 +846,7 @@ class StatsOverviewItemNode: ListViewItemNode {
|
||||
item.context,
|
||||
params.width,
|
||||
item.presentationData,
|
||||
formatTonAmountText(stats.balances.currentBalance, decimalSeparator: item.presentationData.dateTimeFormat.decimalSeparator),
|
||||
formatTonAmountText(stats.balances.currentBalance, dateTimeFormat: item.presentationData.dateTimeFormat),
|
||||
item.presentationData.strings.Monetization_Overview_Current,
|
||||
(stats.balances.currentBalance == 0 ? "" : "≈\(formatTonUsdValue(stats.balances.currentBalance, rate: stats.usdRate, dateTimeFormat: item.presentationData.dateTimeFormat))", .generic),
|
||||
.ton
|
||||
@ -856,7 +856,7 @@ class StatsOverviewItemNode: ListViewItemNode {
|
||||
item.context,
|
||||
params.width,
|
||||
item.presentationData,
|
||||
formatTonAmountText(stats.balances.overallRevenue, decimalSeparator: item.presentationData.dateTimeFormat.decimalSeparator),
|
||||
formatTonAmountText(stats.balances.overallRevenue, dateTimeFormat: item.presentationData.dateTimeFormat),
|
||||
item.presentationData.strings.Monetization_Overview_Total,
|
||||
(stats.balances.overallRevenue == 0 ? "" : "≈\(formatTonUsdValue(stats.balances.overallRevenue, rate: stats.usdRate, dateTimeFormat: item.presentationData.dateTimeFormat))", .generic),
|
||||
.ton
|
||||
|
@ -139,7 +139,7 @@ private final class SheetContent: CombinedComponent {
|
||||
switch component.transaction {
|
||||
case let .proceeds(amount, fromDate, toDate):
|
||||
labelColor = theme.list.itemDisclosureActions.constructive.fillColor
|
||||
amountString = tonAmountAttributedString(formatTonAmountText(amount, decimalSeparator: dateTimeFormat.decimalSeparator, showPlus: true), integralFont: integralFont, fractionalFont: fractionalFont, color: labelColor).mutableCopy() as! NSMutableAttributedString
|
||||
amountString = tonAmountAttributedString(formatTonAmountText(amount, dateTimeFormat: dateTimeFormat, showPlus: true), integralFont: integralFont, fractionalFont: fractionalFont, color: labelColor).mutableCopy() as! NSMutableAttributedString
|
||||
dateString = "\(stringForMediumCompactDate(timestamp: fromDate, strings: strings, dateTimeFormat: dateTimeFormat)) – \(stringForMediumCompactDate(timestamp: toDate, strings: strings, dateTimeFormat: dateTimeFormat))"
|
||||
titleString = strings.Monetization_TransactionInfo_Proceeds
|
||||
buttonTitle = strings.Common_OK
|
||||
@ -147,7 +147,7 @@ private final class SheetContent: CombinedComponent {
|
||||
showPeer = true
|
||||
case let .withdrawal(status, amount, date, provider, _, transactionUrl):
|
||||
labelColor = theme.list.itemDestructiveColor
|
||||
amountString = tonAmountAttributedString(formatTonAmountText(amount, decimalSeparator: dateTimeFormat.groupingSeparator), integralFont: integralFont, fractionalFont: fractionalFont, color: labelColor).mutableCopy() as! NSMutableAttributedString
|
||||
amountString = tonAmountAttributedString(formatTonAmountText(amount, dateTimeFormat: dateTimeFormat), integralFont: integralFont, fractionalFont: fractionalFont, color: labelColor).mutableCopy() as! NSMutableAttributedString
|
||||
dateString = stringForFullDate(timestamp: date, strings: strings, dateTimeFormat: dateTimeFormat)
|
||||
|
||||
switch status {
|
||||
@ -166,7 +166,7 @@ private final class SheetContent: CombinedComponent {
|
||||
case let .refund(amount, date, _):
|
||||
labelColor = theme.list.itemDisclosureActions.constructive.fillColor
|
||||
titleString = strings.Monetization_TransactionInfo_Refund
|
||||
amountString = tonAmountAttributedString(formatTonAmountText(amount, decimalSeparator: dateTimeFormat.decimalSeparator, showPlus: true), integralFont: integralFont, fractionalFont: fractionalFont, color: labelColor).mutableCopy() as! NSMutableAttributedString
|
||||
amountString = tonAmountAttributedString(formatTonAmountText(amount, dateTimeFormat: dateTimeFormat, showPlus: true), integralFont: integralFont, fractionalFont: fractionalFont, color: labelColor).mutableCopy() as! NSMutableAttributedString
|
||||
dateString = stringForFullDate(timestamp: date, strings: strings, dateTimeFormat: dateTimeFormat)
|
||||
buttonTitle = strings.Common_OK
|
||||
explorerUrl = nil
|
||||
|
@ -10,7 +10,7 @@ public func formatTonAddress(_ address: String) -> String {
|
||||
return address
|
||||
}
|
||||
|
||||
public func formatTonUsdValue(_ value: Int64, divide: Bool = true, rate: Double, dateTimeFormat: PresentationDateTimeFormat) -> String {
|
||||
public func formatTonUsdValue(_ value: Int64, divide: Bool = true, rate: Double = 1.0, dateTimeFormat: PresentationDateTimeFormat) -> String {
|
||||
let decimalSeparator = dateTimeFormat.decimalSeparator
|
||||
let normalizedValue: Double = divide ? Double(value) / 1000000000 : Double(value)
|
||||
var formattedValue = String(format: "%0.2f", normalizedValue * rate)
|
||||
@ -27,15 +27,15 @@ public func formatTonUsdValue(_ value: Int64, divide: Bool = true, rate: Double,
|
||||
return "$\(formattedValue)"
|
||||
}
|
||||
|
||||
public func formatTonAmountText(_ value: Int64, decimalSeparator: String, showPlus: Bool = false) -> String {
|
||||
public func formatTonAmountText(_ value: Int64, dateTimeFormat: PresentationDateTimeFormat, showPlus: Bool = false) -> String {
|
||||
var balanceText = "\(abs(value))"
|
||||
while balanceText.count < 10 {
|
||||
balanceText.insert("0", at: balanceText.startIndex)
|
||||
}
|
||||
balanceText.insert(contentsOf: decimalSeparator, at: balanceText.index(balanceText.endIndex, offsetBy: -9))
|
||||
balanceText.insert(contentsOf: dateTimeFormat.decimalSeparator, at: balanceText.index(balanceText.endIndex, offsetBy: -9))
|
||||
while true {
|
||||
if balanceText.hasSuffix("0") {
|
||||
if balanceText.hasSuffix("\(decimalSeparator)0") {
|
||||
if balanceText.hasSuffix("\(dateTimeFormat.decimalSeparator)0") {
|
||||
balanceText.removeLast()
|
||||
balanceText.removeLast()
|
||||
break
|
||||
@ -52,8 +52,18 @@ public func formatTonAmountText(_ value: Int64, decimalSeparator: String, showPl
|
||||
balanceText.insert("+", at: balanceText.startIndex)
|
||||
}
|
||||
|
||||
if let dec = balanceText.range(of: decimalSeparator) {
|
||||
balanceText = String(balanceText[balanceText.startIndex ..< min(balanceText.endIndex, balanceText.index(dec.upperBound, offsetBy: 2))])
|
||||
if let dotIndex = balanceText.range(of: dateTimeFormat.decimalSeparator) {
|
||||
balanceText = String(balanceText[balanceText.startIndex ..< min(balanceText.endIndex, balanceText.index(dotIndex.upperBound, offsetBy: 2))])
|
||||
|
||||
let integerPartString = balanceText[..<dotIndex.lowerBound]
|
||||
if let integerPart = Int32(integerPartString) {
|
||||
let modifiedIntegerPart = presentationStringsFormattedNumber(integerPart, dateTimeFormat.groupingSeparator)
|
||||
|
||||
let resultString = "\(modifiedIntegerPart)\(balanceText[dotIndex.lowerBound...])"
|
||||
return resultString
|
||||
}
|
||||
} else if let integerPart = Int32(balanceText) {
|
||||
balanceText = presentationStringsFormattedNumber(integerPart, dateTimeFormat.groupingSeparator)
|
||||
}
|
||||
|
||||
return balanceText
|
||||
|
@ -1619,7 +1619,7 @@ final class PeerInfoHeaderNode: ASDisplayNode {
|
||||
controlsClippingFrame = apparentAvatarFrame
|
||||
}
|
||||
|
||||
let avatarClipOffset: CGFloat = !self.isAvatarExpanded && deviceMetrics.hasDynamicIsland && self.avatarClippingNode.clipsToBounds && !isLandscape ? 48.0 : 0.0
|
||||
let avatarClipOffset: CGFloat = !self.isAvatarExpanded && deviceMetrics.hasDynamicIsland && self.avatarClippingNode.clipsToBounds && !isLandscape ? 47.0 : 0.0
|
||||
let clippingNodeTransition = ContainedViewLayoutTransition.immediate
|
||||
clippingNodeTransition.updateFrame(layer: self.avatarClippingNode.layer, frame: CGRect(origin: CGPoint(x: 0.0, y: avatarClipOffset), size: CGSize(width: width, height: 1000.0)))
|
||||
clippingNodeTransition.updateSublayerTransformOffset(layer: self.avatarClippingNode.layer, offset: CGPoint(x: 0.0, y: -avatarClipOffset))
|
||||
|
@ -1715,7 +1715,7 @@ private func infoItems(data: PeerInfoScreenData?, context: AccountContext, prese
|
||||
if overallRevenueBalance > 0 || overallStarsBalance > 0 {
|
||||
var string = ""
|
||||
if overallRevenueBalance > 0 {
|
||||
string.append("#\(formatTonAmountText(revenueBalance, decimalSeparator: presentationData.dateTimeFormat.decimalSeparator))")
|
||||
string.append("#\(formatTonAmountText(revenueBalance, dateTimeFormat: presentationData.dateTimeFormat))")
|
||||
}
|
||||
if overallStarsBalance > 0 {
|
||||
if !string.isEmpty {
|
||||
|
@ -108,7 +108,7 @@ private final class PeerBadgeComponent: Component {
|
||||
|
||||
let _ = self.background.update(
|
||||
transition: transition,
|
||||
component: AnyComponent(RoundedRectangle(color: component.theme.list.itemPrimaryTextColor.withMultipliedAlpha(0.1), cornerRadius: nil)),
|
||||
component: AnyComponent(RoundedRectangle(color: component.theme.list.itemBlocksSeparatorColor.withAlphaComponent(0.3), cornerRadius: nil)),
|
||||
environment: {},
|
||||
containerSize: size
|
||||
)
|
||||
@ -246,25 +246,10 @@ private final class CollectibleItemInfoScreenContentComponent: Component {
|
||||
|
||||
let dateText = stringForDate(timestamp: username.info.purchaseDate, strings: environment.strings)
|
||||
|
||||
let (rawCryptoCurrencyText, cryptoCurrencySign, _) = formatCurrencyAmountCustom(username.info.cryptoCurrencyAmount, currency: username.info.cryptoCurrency, customFormat: CurrencyFormatterEntry(
|
||||
symbol: "~",
|
||||
thousandsSeparator: ",",
|
||||
decimalSeparator: ".",
|
||||
symbolOnLeft: true,
|
||||
spaceBetweenAmountAndSymbol: false,
|
||||
decimalDigits: 9
|
||||
))
|
||||
var cryptoCurrencyText = rawCryptoCurrencyText
|
||||
while cryptoCurrencyText.hasSuffix("0") {
|
||||
cryptoCurrencyText = String(cryptoCurrencyText[cryptoCurrencyText.startIndex ..< cryptoCurrencyText.index(before: cryptoCurrencyText.endIndex)])
|
||||
}
|
||||
if cryptoCurrencyText.hasSuffix(".") {
|
||||
cryptoCurrencyText = String(cryptoCurrencyText[cryptoCurrencyText.startIndex ..< cryptoCurrencyText.index(before: cryptoCurrencyText.endIndex)])
|
||||
}
|
||||
let cryptoCurrencyText = formatTonAmountText(username.info.cryptoCurrencyAmount, dateTimeFormat: environment.dateTimeFormat)
|
||||
let currencyText = formatTonUsdValue(username.info.currencyAmount, divide: false, rate: 0.01, dateTimeFormat: environment.dateTimeFormat)
|
||||
|
||||
let (currencyText, currencySign, _) = formatCurrencyAmountCustom(username.info.currencyAmount, currency: username.info.currency)
|
||||
|
||||
let rawTextString = environment.strings.CollectibleItemInfo_UsernameText("@\(username.username)", environment.strings.CollectibleItemInfo_StoreName, dateText, "\(cryptoCurrencySign)\(cryptoCurrencyText)", "\(currencySign)\(currencyText)")
|
||||
let rawTextString = environment.strings.CollectibleItemInfo_UsernameText("@\(username.username)", environment.strings.CollectibleItemInfo_StoreName, dateText, "~\(cryptoCurrencyText)", currencyText)
|
||||
textText.append(NSAttributedString(string: rawTextString.string, font: Font.regular(15.0), textColor: environment.theme.list.itemPrimaryTextColor))
|
||||
for range in rawTextString.ranges {
|
||||
switch range.index {
|
||||
@ -292,25 +277,10 @@ private final class CollectibleItemInfoScreenContentComponent: Component {
|
||||
|
||||
let dateText = stringForDate(timestamp: phoneNumber.info.purchaseDate, strings: environment.strings)
|
||||
|
||||
let (rawCryptoCurrencyText, cryptoCurrencySign, _) = formatCurrencyAmountCustom(phoneNumber.info.cryptoCurrencyAmount, currency: phoneNumber.info.cryptoCurrency, customFormat: CurrencyFormatterEntry(
|
||||
symbol: "~",
|
||||
thousandsSeparator: ",",
|
||||
decimalSeparator: ".",
|
||||
symbolOnLeft: true,
|
||||
spaceBetweenAmountAndSymbol: false,
|
||||
decimalDigits: 9
|
||||
))
|
||||
var cryptoCurrencyText = rawCryptoCurrencyText
|
||||
while cryptoCurrencyText.hasSuffix("0") {
|
||||
cryptoCurrencyText = String(cryptoCurrencyText[cryptoCurrencyText.startIndex ..< cryptoCurrencyText.index(before: cryptoCurrencyText.endIndex)])
|
||||
}
|
||||
if cryptoCurrencyText.hasSuffix(".") {
|
||||
cryptoCurrencyText = String(cryptoCurrencyText[cryptoCurrencyText.startIndex ..< cryptoCurrencyText.index(before: cryptoCurrencyText.endIndex)])
|
||||
}
|
||||
let cryptoCurrencyText = formatTonAmountText(phoneNumber.info.cryptoCurrencyAmount, dateTimeFormat: environment.dateTimeFormat)
|
||||
let currencyText = formatTonUsdValue(phoneNumber.info.currencyAmount, divide: false, rate: 0.01, dateTimeFormat: environment.dateTimeFormat)
|
||||
|
||||
let (currencyText, currencySign, _) = formatCurrencyAmountCustom(phoneNumber.info.currencyAmount, currency: phoneNumber.info.currency)
|
||||
|
||||
let rawTextString = environment.strings.CollectibleItemInfo_PhoneText("\(formattedPhoneNumber)", environment.strings.CollectibleItemInfo_StoreName, dateText, "\(cryptoCurrencySign)\(cryptoCurrencyText)", "\(currencySign)\(currencyText)")
|
||||
let rawTextString = environment.strings.CollectibleItemInfo_PhoneText("\(formattedPhoneNumber)", environment.strings.CollectibleItemInfo_StoreName, dateText, "~\(cryptoCurrencyText)", currencyText)
|
||||
textText.append(NSAttributedString(string: rawTextString.string, font: Font.regular(15.0), textColor: environment.theme.list.itemPrimaryTextColor))
|
||||
for range in rawTextString.ranges {
|
||||
switch range.index {
|
||||
|
@ -250,9 +250,9 @@ func openChatMessageImpl(_ params: OpenChatMessageParams) -> Bool {
|
||||
|
||||
let subject: BrowserScreen.Subject
|
||||
if file.mimeType == "application/pdf" {
|
||||
subject = .pdfDocument(file: file, canShare: canShare)
|
||||
subject = .pdfDocument(file: .message(message: MessageReference(params.message), media: file), canShare: canShare)
|
||||
} else {
|
||||
subject = .document(file: file, canShare: canShare)
|
||||
subject = .document(file: .message(message: MessageReference(params.message), media: file), canShare: canShare)
|
||||
}
|
||||
let controller = BrowserScreen(context: params.context, subject: subject)
|
||||
controller.openDocument = { file, canShare in
|
||||
|
Loading…
x
Reference in New Issue
Block a user