mirror of
https://github.com/ichmagmaus111/ghostgram.git
synced 2026-06-11 04:17:46 +02:00
Update Ghostgram features
This commit is contained in:
@@ -98,7 +98,8 @@ private func requestMessageStats(postbox: Postbox, network: Network, messageId:
|
||||
|
||||
return signal
|
||||
|> mapToSignal { result -> Signal<MessageStats?, MTRpcError> in
|
||||
if case let .messageStats(apiInteractionsGraph, apiReactionsGraph) = result {
|
||||
if case let .messageStats(messageStatsData) = result {
|
||||
let (apiInteractionsGraph, apiReactionsGraph) = (messageStatsData.viewsGraph, messageStatsData.reactionsByEmotionGraph)
|
||||
let interactionsGraph = StatsGraph(apiStatsGraph: apiInteractionsGraph)
|
||||
var interactionsGraphDelta: Int64 = 86400
|
||||
if case let .Loaded(_, data) = interactionsGraph {
|
||||
|
||||
@@ -836,7 +836,8 @@ private func requestGroupStats(accountPeerId: PeerId, postbox: Postbox, network:
|
||||
return signal
|
||||
|> mapToSignal { result -> Signal<GroupStats?, MTRpcError> in
|
||||
return postbox.transaction { transaction -> GroupStats? in
|
||||
if case let .megagroupStats(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, users) = result {
|
||||
if case let .megagroupStats(megagroupStatsData) = result {
|
||||
let users = megagroupStatsData.users
|
||||
updatePeers(transaction: transaction, accountPeerId: accountPeerId, peers: AccumulatedPeers(users: users))
|
||||
}
|
||||
return GroupStats(apiMegagroupStats: result)
|
||||
@@ -1114,32 +1115,40 @@ public final class GroupStatsContext {
|
||||
extension StatsGraph {
|
||||
init(apiStatsGraph: Api.StatsGraph) {
|
||||
switch apiStatsGraph {
|
||||
case let .statsGraph(_, json, zoomToken):
|
||||
if case let .dataJSON(string) = json, let data = string.data(using: .utf8) {
|
||||
do {
|
||||
let decodedData = try JSONSerialization.jsonObject(with: data, options: [])
|
||||
guard let item = decodedData as? [String: Any] else {
|
||||
self = .Failed(error: "")
|
||||
return
|
||||
}
|
||||
if let columns = item["columns"] as? [[Any]] {
|
||||
if columns.isEmpty {
|
||||
self = .Empty
|
||||
} else {
|
||||
self = .Loaded(token: zoomToken, data: string)
|
||||
case let .statsGraph(statsGraphData):
|
||||
let (_, json, zoomToken) = (statsGraphData.flags, statsGraphData.json, statsGraphData.zoomToken)
|
||||
if case let .dataJSON(dataJSONData) = json {
|
||||
let string = dataJSONData.data
|
||||
if let data = string.data(using: .utf8) {
|
||||
do {
|
||||
let decodedData = try JSONSerialization.jsonObject(with: data, options: [])
|
||||
guard let item = decodedData as? [String: Any] else {
|
||||
self = .Failed(error: "")
|
||||
return
|
||||
}
|
||||
} else {
|
||||
self = .Empty
|
||||
if let columns = item["columns"] as? [[Any]] {
|
||||
if columns.isEmpty {
|
||||
self = .Empty
|
||||
} else {
|
||||
self = .Loaded(token: zoomToken, data: string)
|
||||
}
|
||||
} else {
|
||||
self = .Empty
|
||||
}
|
||||
} catch {
|
||||
self = .Failed(error: "")
|
||||
}
|
||||
} catch {
|
||||
} else {
|
||||
self = .Failed(error: "")
|
||||
}
|
||||
} else {
|
||||
self = .Failed(error: "")
|
||||
}
|
||||
case let .statsGraphError(error):
|
||||
case let .statsGraphError(statsGraphErrorData):
|
||||
let error = statsGraphErrorData.error
|
||||
self = .Failed(error: error)
|
||||
case let .statsGraphAsync(token):
|
||||
case let .statsGraphAsync(statsGraphAsyncData):
|
||||
let token = statsGraphAsyncData.token
|
||||
if !token.isEmpty {
|
||||
self = .OnDemand(token: token)
|
||||
} else {
|
||||
@@ -1152,7 +1161,8 @@ extension StatsGraph {
|
||||
extension StatsDateRange {
|
||||
init(apiStatsDateRangeDays: Api.StatsDateRangeDays) {
|
||||
switch apiStatsDateRangeDays {
|
||||
case let .statsDateRangeDays(minDate, maxDate):
|
||||
case let .statsDateRangeDays(statsDateRangeDaysData):
|
||||
let (minDate, maxDate) = (statsDateRangeDaysData.minDate, statsDateRangeDaysData.maxDate)
|
||||
self = StatsDateRange(minDate: minDate, maxDate: maxDate)
|
||||
}
|
||||
}
|
||||
@@ -1161,7 +1171,8 @@ extension StatsDateRange {
|
||||
extension StatsValue {
|
||||
init(apiStatsAbsValueAndPrev: Api.StatsAbsValueAndPrev) {
|
||||
switch apiStatsAbsValueAndPrev {
|
||||
case let .statsAbsValueAndPrev(current, previous):
|
||||
case let .statsAbsValueAndPrev(statsAbsValueAndPrevData):
|
||||
let (current, previous) = (statsAbsValueAndPrevData.current, statsAbsValueAndPrevData.previous)
|
||||
self = StatsValue(current: current, previous: previous)
|
||||
}
|
||||
}
|
||||
@@ -1170,7 +1181,8 @@ extension StatsValue {
|
||||
extension StatsPercentValue {
|
||||
init(apiPercentValue: Api.StatsPercentValue) {
|
||||
switch apiPercentValue {
|
||||
case let .statsPercentValue(part, total):
|
||||
case let .statsPercentValue(statsPercentValueData):
|
||||
let (part, total) = (statsPercentValueData.part, statsPercentValueData.total)
|
||||
self = StatsPercentValue(value: part, total: total)
|
||||
}
|
||||
}
|
||||
@@ -1179,9 +1191,11 @@ extension StatsPercentValue {
|
||||
extension ChannelStatsPostInteractions {
|
||||
init(apiPostInteractionCounters: Api.PostInteractionCounters, peerId: PeerId) {
|
||||
switch apiPostInteractionCounters {
|
||||
case let .postInteractionCountersMessage(msgId, views, forwards, reactions):
|
||||
case let .postInteractionCountersMessage(postInteractionCountersMessageData):
|
||||
let (msgId, views, forwards, reactions) = (postInteractionCountersMessageData.msgId, postInteractionCountersMessageData.views, postInteractionCountersMessageData.forwards, postInteractionCountersMessageData.reactions)
|
||||
self = ChannelStatsPostInteractions(postId: .message(id: EngineMessage.Id(peerId: peerId, namespace: Namespaces.Message.Cloud, id: msgId)), views: views, forwards: forwards, reactions: reactions)
|
||||
case let .postInteractionCountersStory(storyId, views, forwards, reactions):
|
||||
case let .postInteractionCountersStory(postInteractionCountersStoryData):
|
||||
let (storyId, views, forwards, reactions) = (postInteractionCountersStoryData.storyId, postInteractionCountersStoryData.views, postInteractionCountersStoryData.forwards, postInteractionCountersStoryData.reactions)
|
||||
self = ChannelStatsPostInteractions(postId: .story(peerId: peerId, id: storyId), views: views, forwards: forwards, reactions: reactions)
|
||||
}
|
||||
}
|
||||
@@ -1190,7 +1204,8 @@ extension ChannelStatsPostInteractions {
|
||||
extension ChannelStats {
|
||||
init(apiBroadcastStats: Api.stats.BroadcastStats, peerId: PeerId) {
|
||||
switch apiBroadcastStats {
|
||||
case let .broadcastStats(period, followers, viewsPerPost, sharesPerPost, reactionsPerPost, viewsPerStory, sharesPerStory, reactionsPerStory, enabledNotifications, apiGrowthGraph, apiFollowersGraph, apiMuteGraph, apiTopHoursGraph, apiInteractionsGraph, apiInstantViewInteractionsGraph, apiViewsBySourceGraph, apiNewFollowersBySourceGraph, apiLanguagesGraph, apiReactionsByEmotionGraph, apiStoryInteractionsGraph, apiStoryReactionsByEmotionGraph, recentPostInteractions):
|
||||
case let .broadcastStats(broadcastStatsData):
|
||||
let (period, followers, viewsPerPost, sharesPerPost, reactionsPerPost, viewsPerStory, sharesPerStory, reactionsPerStory, enabledNotifications, apiGrowthGraph, apiFollowersGraph, apiMuteGraph, apiTopHoursGraph, apiInteractionsGraph, apiInstantViewInteractionsGraph, apiViewsBySourceGraph, apiNewFollowersBySourceGraph, apiLanguagesGraph, apiReactionsByEmotionGraph, apiStoryInteractionsGraph, apiStoryReactionsByEmotionGraph, recentPostInteractions) = (broadcastStatsData.period, broadcastStatsData.followers, broadcastStatsData.viewsPerPost, broadcastStatsData.sharesPerPost, broadcastStatsData.reactionsPerPost, broadcastStatsData.viewsPerStory, broadcastStatsData.sharesPerStory, broadcastStatsData.reactionsPerStory, broadcastStatsData.enabledNotifications, broadcastStatsData.growthGraph, broadcastStatsData.followersGraph, broadcastStatsData.muteGraph, broadcastStatsData.topHoursGraph, broadcastStatsData.interactionsGraph, broadcastStatsData.ivInteractionsGraph, broadcastStatsData.viewsBySourceGraph, broadcastStatsData.newFollowersBySourceGraph, broadcastStatsData.languagesGraph, broadcastStatsData.reactionsByEmotionGraph, broadcastStatsData.storyInteractionsGraph, broadcastStatsData.storyReactionsByEmotionGraph, broadcastStatsData.recentPostsInteractions)
|
||||
let growthGraph = StatsGraph(apiStatsGraph: apiGrowthGraph)
|
||||
let isEmpty = growthGraph.isEmpty
|
||||
|
||||
@@ -1224,7 +1239,8 @@ extension ChannelStats {
|
||||
extension GroupStatsTopPoster {
|
||||
init(apiStatsGroupTopPoster: Api.StatsGroupTopPoster) {
|
||||
switch apiStatsGroupTopPoster {
|
||||
case let .statsGroupTopPoster(userId, messages, avgChars):
|
||||
case let .statsGroupTopPoster(statsGroupTopPosterData):
|
||||
let (userId, messages, avgChars) = (statsGroupTopPosterData.userId, statsGroupTopPosterData.messages, statsGroupTopPosterData.avgChars)
|
||||
self = GroupStatsTopPoster(peerId: PeerId(namespace: Namespaces.Peer.CloudUser, id: PeerId.Id._internalFromInt64Value(userId)), messageCount: messages, averageChars: avgChars)
|
||||
}
|
||||
}
|
||||
@@ -1233,7 +1249,8 @@ extension GroupStatsTopPoster {
|
||||
extension GroupStatsTopAdmin {
|
||||
init(apiStatsGroupTopAdmin: Api.StatsGroupTopAdmin) {
|
||||
switch apiStatsGroupTopAdmin {
|
||||
case let .statsGroupTopAdmin(userId, deleted, kicked, banned):
|
||||
case let .statsGroupTopAdmin(statsGroupTopAdminData):
|
||||
let (userId, deleted, kicked, banned) = (statsGroupTopAdminData.userId, statsGroupTopAdminData.deleted, statsGroupTopAdminData.kicked, statsGroupTopAdminData.banned)
|
||||
self = GroupStatsTopAdmin(peerId: PeerId(namespace: Namespaces.Peer.CloudUser, id: PeerId.Id._internalFromInt64Value(userId)), deletedCount: deleted, kickedCount: kicked, bannedCount: banned)
|
||||
}
|
||||
}
|
||||
@@ -1242,7 +1259,8 @@ extension GroupStatsTopAdmin {
|
||||
extension GroupStatsTopInviter {
|
||||
init(apiStatsGroupTopInviter: Api.StatsGroupTopInviter) {
|
||||
switch apiStatsGroupTopInviter {
|
||||
case let .statsGroupTopInviter(userId, invitations):
|
||||
case let .statsGroupTopInviter(statsGroupTopInviterData):
|
||||
let (userId, invitations) = (statsGroupTopInviterData.userId, statsGroupTopInviterData.invitations)
|
||||
self = GroupStatsTopInviter(peerId: PeerId(namespace: Namespaces.Peer.CloudUser, id: PeerId.Id._internalFromInt64Value(userId)), inviteCount: invitations)
|
||||
}
|
||||
}
|
||||
@@ -1251,9 +1269,10 @@ extension GroupStatsTopInviter {
|
||||
extension GroupStats {
|
||||
init(apiMegagroupStats: Api.stats.MegagroupStats) {
|
||||
switch apiMegagroupStats {
|
||||
case let .megagroupStats(period, members, messages, viewers, posters, apiGrowthGraph, apiMembersGraph, apiNewMembersBySourceGraph, apiLanguagesGraph, apiMessagesGraph, apiActionsGraph, apiTopHoursGraph, apiTopWeekdaysGraph, topPosters, topAdmins, topInviters, _):
|
||||
case let .megagroupStats(megagroupStatsData):
|
||||
let (period, members, messages, viewers, posters, apiGrowthGraph, apiMembersGraph, apiNewMembersBySourceGraph, apiLanguagesGraph, apiMessagesGraph, apiActionsGraph, apiTopHoursGraph, apiTopWeekdaysGraph, topPosters, topAdmins, topInviters) = (megagroupStatsData.period, megagroupStatsData.members, megagroupStatsData.messages, megagroupStatsData.viewers, megagroupStatsData.posters, megagroupStatsData.growthGraph, megagroupStatsData.membersGraph, megagroupStatsData.newMembersBySourceGraph, megagroupStatsData.languagesGraph, megagroupStatsData.messagesGraph, megagroupStatsData.actionsGraph, megagroupStatsData.topHoursGraph, megagroupStatsData.weekdaysGraph, megagroupStatsData.topPosters, megagroupStatsData.topAdmins, megagroupStatsData.topInviters)
|
||||
let growthGraph = StatsGraph(apiStatsGraph: apiGrowthGraph)
|
||||
|
||||
|
||||
self.init(period: StatsDateRange(apiStatsDateRangeDays: period), members: StatsValue(apiStatsAbsValueAndPrev: members), messages: StatsValue(apiStatsAbsValueAndPrev: messages), viewers: StatsValue(apiStatsAbsValueAndPrev: viewers), posters: StatsValue(apiStatsAbsValueAndPrev: posters), growthGraph: growthGraph, membersGraph: StatsGraph(apiStatsGraph: apiMembersGraph), newMembersBySourceGraph: StatsGraph(apiStatsGraph: apiNewMembersBySourceGraph), languagesGraph: StatsGraph(apiStatsGraph: apiLanguagesGraph), messagesGraph: StatsGraph(apiStatsGraph: apiMessagesGraph), actionsGraph: StatsGraph(apiStatsGraph: apiActionsGraph), topHoursGraph: StatsGraph(apiStatsGraph: apiTopHoursGraph), topWeekdaysGraph: StatsGraph(apiStatsGraph: apiTopWeekdaysGraph), topPosters: topPosters.map { GroupStatsTopPoster(apiStatsGroupTopPoster: $0) }, topAdmins: topAdmins.map { GroupStatsTopAdmin(apiStatsGroupTopAdmin: $0) }, topInviters: topInviters.map { GroupStatsTopInviter(apiStatsGroupTopInviter: $0) })
|
||||
}
|
||||
}
|
||||
|
||||
@@ -146,7 +146,8 @@ public extension StarsRevenueStats {
|
||||
extension StarsRevenueStats {
|
||||
init(apiStarsRevenueStats: Api.payments.StarsRevenueStats, peerId: PeerId) {
|
||||
switch apiStarsRevenueStats {
|
||||
case let .starsRevenueStats(_, topHoursGraph, revenueGraph, balances, usdRate):
|
||||
case let .starsRevenueStats(starsRevenueStatsData):
|
||||
let (topHoursGraph, revenueGraph, balances, usdRate) = (starsRevenueStatsData.topHoursGraph, starsRevenueStatsData.revenueGraph, starsRevenueStatsData.status, starsRevenueStatsData.usdRate)
|
||||
self.init(topHoursGraph: topHoursGraph.flatMap { StatsGraph(apiStatsGraph: $0) }, revenueGraph: StatsGraph(apiStatsGraph: revenueGraph), balances: StarsRevenueStats.Balances(apiStarsRevenueStatus: balances), usdRate: usdRate)
|
||||
}
|
||||
}
|
||||
@@ -155,7 +156,12 @@ extension StarsRevenueStats {
|
||||
extension StarsRevenueStats.Balances {
|
||||
init(apiStarsRevenueStatus: Api.StarsRevenueStatus) {
|
||||
switch apiStarsRevenueStatus {
|
||||
case let .starsRevenueStatus(flags, currentBalance, availableBalance, overallRevenue, nextWithdrawalAt):
|
||||
case let .starsRevenueStatus(starsRevenueStatusData):
|
||||
let flags = starsRevenueStatusData.flags
|
||||
let currentBalance = starsRevenueStatusData.currentBalance
|
||||
let availableBalance = starsRevenueStatusData.availableBalance
|
||||
let overallRevenue = starsRevenueStatusData.overallRevenue
|
||||
let nextWithdrawalAt = starsRevenueStatusData.nextWithdrawalAt
|
||||
self.init(currentBalance: CurrencyAmount(apiAmount: currentBalance), availableBalance: CurrencyAmount(apiAmount: availableBalance), overallRevenue: CurrencyAmount(apiAmount: overallRevenue), withdrawEnabled: ((flags & (1 << 0)) != 0), nextWithdrawalTimestamp: nextWithdrawalAt)
|
||||
}
|
||||
}
|
||||
@@ -408,7 +414,7 @@ func _internal_requestStarsRevenueWithdrawalUrl(account: Account, ton: Bool, pee
|
||||
guard let kdfResult = passwordKDF(encryptionProvider: account.network.encryptionProvider, password: password, derivation: currentPasswordDerivation, srpSessionData: srpSessionData) else {
|
||||
return .fail(.generic)
|
||||
}
|
||||
return .single(.inputCheckPasswordSRP(srpId: kdfResult.id, A: Buffer(data: kdfResult.A), M1: Buffer(data: kdfResult.M1)))
|
||||
return .single(.inputCheckPasswordSRP(.init(srpId: kdfResult.id, A: Buffer(data: kdfResult.A), M1: Buffer(data: kdfResult.M1))))
|
||||
} else {
|
||||
return .fail(.twoStepAuthMissing)
|
||||
}
|
||||
@@ -447,7 +453,8 @@ func _internal_requestStarsRevenueWithdrawalUrl(account: Account, ton: Bool, pee
|
||||
}
|
||||
|> map { result -> String in
|
||||
switch result {
|
||||
case let .starsRevenueWithdrawalUrl(url):
|
||||
case let .starsRevenueWithdrawalUrl(starsRevenueWithdrawalUrlData):
|
||||
let url = starsRevenueWithdrawalUrlData.url
|
||||
return url
|
||||
}
|
||||
}
|
||||
@@ -472,7 +479,8 @@ func _internal_requestStarsRevenueAdsAccountlUrl(account: Account, peerId: Engin
|
||||
return nil
|
||||
}
|
||||
switch result {
|
||||
case let .starsRevenueAdsAccountUrl(url):
|
||||
case let .starsRevenueAdsAccountUrl(starsRevenueAdsAccountUrlData):
|
||||
let url = starsRevenueAdsAccountUrlData.url
|
||||
return url
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,7 +68,8 @@ private func requestStoryStats(accountPeerId: PeerId, postbox: Postbox, network:
|
||||
|
||||
return signal
|
||||
|> mapToSignal { result -> Signal<StoryStats?, MTRpcError> in
|
||||
if case let .storyStats(apiInteractionsGraph, apiReactionsGraph) = result {
|
||||
if case let .storyStats(storyStatsData) = result {
|
||||
let (apiInteractionsGraph, apiReactionsGraph) = (storyStatsData.viewsGraph, storyStatsData.reactionsByEmotionGraph)
|
||||
let interactionsGraph = StatsGraph(apiStatsGraph: apiInteractionsGraph)
|
||||
var interactionsGraphDelta: Int64 = 86400
|
||||
if case let .Loaded(_, data) = interactionsGraph {
|
||||
@@ -294,7 +295,8 @@ private final class StoryStatsPublicForwardsContextImpl {
|
||||
return ([], 0, nil)
|
||||
}
|
||||
switch result {
|
||||
case let .publicForwards(_, count, forwards, nextOffset, chats, users):
|
||||
case let .publicForwards(publicForwardsData):
|
||||
let (count, forwards, nextOffset, chats, users) = (publicForwardsData.count, publicForwardsData.forwards, publicForwardsData.nextOffset, publicForwardsData.chats, publicForwardsData.users)
|
||||
var peers: [PeerId: Peer] = [:]
|
||||
for user in users {
|
||||
if let user = TelegramUser.merge(transaction.getPeer(user.peerId) as? TelegramUser, rhs: user) {
|
||||
@@ -310,11 +312,13 @@ private final class StoryStatsPublicForwardsContextImpl {
|
||||
var resultForwards: [StoryStatsPublicForwardsContext.State.Forward] = []
|
||||
for forward in forwards {
|
||||
switch forward {
|
||||
case let .publicForwardMessage(apiMessage):
|
||||
case let .publicForwardMessage(publicForwardMessageData):
|
||||
let apiMessage = publicForwardMessageData.message
|
||||
if let message = StoreMessage(apiMessage: apiMessage, accountPeerId: accountPeerId, peerIsForum: false), let renderedMessage = locallyRenderedMessage(message: message, peers: peers) {
|
||||
resultForwards.append(.message(EngineMessage(renderedMessage)))
|
||||
}
|
||||
case let .publicForwardStory(apiPeer, apiStory):
|
||||
case let .publicForwardStory(publicForwardStoryData):
|
||||
let (apiPeer, apiStory) = (publicForwardStoryData.peer, publicForwardStoryData.story)
|
||||
if let storedItem = Stories.StoredItem(apiStoryItem: apiStory, peerId: apiPeer.peerId, transaction: transaction), case let .item(item) = storedItem, let media = item.media, let peer = peers[apiPeer.peerId] {
|
||||
let mappedItem = EngineStoryItem(
|
||||
id: item.id,
|
||||
|
||||
Reference in New Issue
Block a user