Group stats fixes

This commit is contained in:
Ilya Laktyushin 2020-06-19 12:24:21 +03:00
parent 8e2ffbdc71
commit 9f50fa0640
3 changed files with 35 additions and 31 deletions

View File

@ -317,6 +317,8 @@ public class AvatarGalleryController: ViewController, StandalonePresentableContr
} }
private func dismiss(forceAway: Bool) { private func dismiss(forceAway: Bool) {
self.animatedIn.set(false)
var animatedOutNode = true var animatedOutNode = true
var animatedOutInterface = false var animatedOutInterface = false

View File

@ -43,7 +43,7 @@ private enum StatsSection: Int32 {
} }
private enum StatsEntry: ItemListNodeEntry { private enum StatsEntry: ItemListNodeEntry {
case overviewHeader(PresentationTheme, String, String) case overviewTitle(PresentationTheme, String, String)
case overview(PresentationTheme, ChannelStats) case overview(PresentationTheme, ChannelStats)
case growthTitle(PresentationTheme, String) case growthTitle(PresentationTheme, String)
@ -78,7 +78,7 @@ private enum StatsEntry: ItemListNodeEntry {
var section: ItemListSectionId { var section: ItemListSectionId {
switch self { switch self {
case .overviewHeader, .overview: case .overviewTitle, .overview:
return StatsSection.overview.rawValue return StatsSection.overview.rawValue
case .growthTitle, .growthGraph: case .growthTitle, .growthGraph:
return StatsSection.growth.rawValue return StatsSection.growth.rawValue
@ -105,7 +105,7 @@ private enum StatsEntry: ItemListNodeEntry {
var stableId: Int32 { var stableId: Int32 {
switch self { switch self {
case .overviewHeader: case .overviewTitle:
return 0 return 0
case .overview: case .overview:
return 1 return 1
@ -154,8 +154,8 @@ private enum StatsEntry: ItemListNodeEntry {
static func ==(lhs: StatsEntry, rhs: StatsEntry) -> Bool { static func ==(lhs: StatsEntry, rhs: StatsEntry) -> Bool {
switch lhs { switch lhs {
case let .overviewHeader(lhsTheme, lhsText, lhsDates): case let .overviewTitle(lhsTheme, lhsText, lhsDates):
if case let .overviewHeader(rhsTheme, rhsText, rhsDates) = rhs, lhsTheme === rhsTheme, lhsText == rhsText, lhsDates == rhsDates { if case let .overviewTitle(rhsTheme, rhsText, rhsDates) = rhs, lhsTheme === rhsTheme, lhsText == rhsText, lhsDates == rhsDates {
return true return true
} else { } else {
return false return false
@ -296,7 +296,7 @@ private enum StatsEntry: ItemListNodeEntry {
func item(presentationData: ItemListPresentationData, arguments: Any) -> ListViewItem { func item(presentationData: ItemListPresentationData, arguments: Any) -> ListViewItem {
let arguments = arguments as! ChannelStatsControllerArguments let arguments = arguments as! ChannelStatsControllerArguments
switch self { switch self {
case let .overviewHeader(_, text, dates): case let .overviewTitle(_, text, dates):
return ItemListSectionHeaderItem(presentationData: presentationData, text: text, accessoryText: ItemListSectionHeaderAccessoryText(value: dates, color: .generic), sectionId: self.section) return ItemListSectionHeaderItem(presentationData: presentationData, text: text, accessoryText: ItemListSectionHeaderAccessoryText(value: dates, color: .generic), sectionId: self.section)
case let .growthTitle(_, text), case let .growthTitle(_, text),
let .followersTitle(_, text), let .followersTitle(_, text),
@ -343,7 +343,7 @@ private func channelStatsControllerEntries(data: ChannelStats?, messages: [Messa
let minDate = stringForDate(timestamp: data.period.minDate, strings: presentationData.strings) let minDate = stringForDate(timestamp: data.period.minDate, strings: presentationData.strings)
let maxDate = stringForDate(timestamp: data.period.maxDate, strings: presentationData.strings) let maxDate = stringForDate(timestamp: data.period.maxDate, strings: presentationData.strings)
entries.append(.overviewHeader(presentationData.theme, presentationData.strings.Stats_Overview, "\(minDate) \(maxDate)")) entries.append(.overviewTitle(presentationData.theme, presentationData.strings.Stats_Overview, "\(minDate) \(maxDate)"))
entries.append(.overview(presentationData.theme, data)) entries.append(.overview(presentationData.theme, data))
if !data.growthGraph.isEmpty { if !data.growthGraph.isEmpty {

View File

@ -44,7 +44,7 @@ private enum StatsSection: Int32 {
} }
private enum StatsEntry: ItemListNodeEntry { private enum StatsEntry: ItemListNodeEntry {
case overviewHeader(PresentationTheme, String, String) case overviewTitle(PresentationTheme, String, String)
case overview(PresentationTheme, GroupStats) case overview(PresentationTheme, GroupStats)
case growthTitle(PresentationTheme, String) case growthTitle(PresentationTheme, String)
@ -68,18 +68,18 @@ private enum StatsEntry: ItemListNodeEntry {
case topHoursTitle(PresentationTheme, String) case topHoursTitle(PresentationTheme, String)
case topHoursGraph(PresentationTheme, PresentationStrings, PresentationDateTimeFormat, StatsGraph, ChartType) case topHoursGraph(PresentationTheme, PresentationStrings, PresentationDateTimeFormat, StatsGraph, ChartType)
case topPostersTitle(PresentationTheme, String) case topPostersTitle(PresentationTheme, String, String)
case topPoster(Int32, PresentationTheme, PresentationStrings, PresentationDateTimeFormat, Peer, GroupStatsTopPoster) case topPoster(Int32, PresentationTheme, PresentationStrings, PresentationDateTimeFormat, Peer, GroupStatsTopPoster)
case topAdminsTitle(PresentationTheme, String) case topAdminsTitle(PresentationTheme, String, String)
case topAdmin(Int32, PresentationTheme, PresentationStrings, PresentationDateTimeFormat, Peer, GroupStatsTopAdmin) case topAdmin(Int32, PresentationTheme, PresentationStrings, PresentationDateTimeFormat, Peer, GroupStatsTopAdmin)
case topInvitersTitle(PresentationTheme, String) case topInvitersTitle(PresentationTheme, String, String)
case topInviter(Int32, PresentationTheme, PresentationStrings, PresentationDateTimeFormat, Peer, GroupStatsTopInviter) case topInviter(Int32, PresentationTheme, PresentationStrings, PresentationDateTimeFormat, Peer, GroupStatsTopInviter)
var section: ItemListSectionId { var section: ItemListSectionId {
switch self { switch self {
case .overviewHeader, .overview: case .overviewTitle, .overview:
return StatsSection.overview.rawValue return StatsSection.overview.rawValue
case .growthTitle, .growthGraph: case .growthTitle, .growthGraph:
return StatsSection.growth.rawValue return StatsSection.growth.rawValue
@ -106,7 +106,7 @@ private enum StatsEntry: ItemListNodeEntry {
var stableId: Int32 { var stableId: Int32 {
switch self { switch self {
case .overviewHeader: case .overviewTitle:
return 0 return 0
case .overview: case .overview:
return 1 return 1
@ -155,8 +155,8 @@ private enum StatsEntry: ItemListNodeEntry {
static func ==(lhs: StatsEntry, rhs: StatsEntry) -> Bool { static func ==(lhs: StatsEntry, rhs: StatsEntry) -> Bool {
switch lhs { switch lhs {
case let .overviewHeader(lhsTheme, lhsText, lhsDates): case let .overviewTitle(lhsTheme, lhsText, lhsDates):
if case let .overviewHeader(rhsTheme, rhsText, rhsDates) = rhs, lhsTheme === rhsTheme, lhsText == rhsText, lhsDates == rhsDates { if case let .overviewTitle(rhsTheme, rhsText, rhsDates) = rhs, lhsTheme === rhsTheme, lhsText == rhsText, lhsDates == rhsDates {
return true return true
} else { } else {
return false return false
@ -251,8 +251,8 @@ private enum StatsEntry: ItemListNodeEntry {
} else { } else {
return false return false
} }
case let .topPostersTitle(lhsTheme, lhsText): case let .topPostersTitle(lhsTheme, lhsText, lhsDates):
if case let .topPostersTitle(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { if case let .topPostersTitle(rhsTheme, rhsText, rhsDates) = rhs, lhsTheme === rhsTheme, lhsText == rhsText, lhsDates == rhsDates {
return true return true
} else { } else {
return false return false
@ -263,8 +263,8 @@ private enum StatsEntry: ItemListNodeEntry {
} else { } else {
return false return false
} }
case let .topAdminsTitle(lhsTheme, lhsText): case let .topAdminsTitle(lhsTheme, lhsText, lhsDates):
if case let .topAdminsTitle(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { if case let .topAdminsTitle(rhsTheme, rhsText, rhsDates) = rhs, lhsTheme === rhsTheme, lhsText == rhsText, lhsDates == rhsDates {
return true return true
} else { } else {
return false return false
@ -275,8 +275,8 @@ private enum StatsEntry: ItemListNodeEntry {
} else { } else {
return false return false
} }
case let .topInvitersTitle(lhsTheme, lhsText): case let .topInvitersTitle(lhsTheme, lhsText, lhsDates):
if case let .topInvitersTitle(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { if case let .topInvitersTitle(rhsTheme, rhsText, rhsDates) = rhs, lhsTheme === rhsTheme, lhsText == rhsText, lhsDates == rhsDates {
return true return true
} else { } else {
return false return false
@ -297,7 +297,7 @@ private enum StatsEntry: ItemListNodeEntry {
func item(presentationData: ItemListPresentationData, arguments: Any) -> ListViewItem { func item(presentationData: ItemListPresentationData, arguments: Any) -> ListViewItem {
let arguments = arguments as! GroupStatsControllerArguments let arguments = arguments as! GroupStatsControllerArguments
switch self { switch self {
case let .overviewHeader(_, text, dates): case let .overviewTitle(_, text, dates):
return ItemListSectionHeaderItem(presentationData: presentationData, text: text, accessoryText: ItemListSectionHeaderAccessoryText(value: dates, color: .generic), sectionId: self.section) return ItemListSectionHeaderItem(presentationData: presentationData, text: text, accessoryText: ItemListSectionHeaderAccessoryText(value: dates, color: .generic), sectionId: self.section)
case let .growthTitle(_, text), case let .growthTitle(_, text),
let .membersTitle(_, text), let .membersTitle(_, text),
@ -305,11 +305,12 @@ private enum StatsEntry: ItemListNodeEntry {
let .languagesTitle(_, text), let .languagesTitle(_, text),
let .messagesTitle(_, text), let .messagesTitle(_, text),
let .actionsTitle(_, text), let .actionsTitle(_, text),
let .topHoursTitle(_, text), let .topHoursTitle(_, text):
let .topPostersTitle(_, text),
let .topAdminsTitle(_, text),
let .topInvitersTitle(_, text):
return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section) return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section)
case let .topPostersTitle(_, text, dates),
let .topAdminsTitle(_, text, dates),
let .topInvitersTitle(_, text, dates):
return ItemListSectionHeaderItem(presentationData: presentationData, text: text, accessoryText: ItemListSectionHeaderAccessoryText(value: dates, color: .generic), sectionId: self.section)
case let .overview(_, stats): case let .overview(_, stats):
return StatsOverviewItem(presentationData: presentationData, stats: stats, sectionId: self.section, style: .blocks) return StatsOverviewItem(presentationData: presentationData, stats: stats, sectionId: self.section, style: .blocks)
case let .growthGraph(_, _, _, graph, type), case let .growthGraph(_, _, _, graph, type),
@ -363,8 +364,9 @@ private func groupStatsControllerEntries(data: GroupStats?, peers: [PeerId: Peer
if let data = data { if let data = data {
let minDate = stringForDate(timestamp: data.period.minDate, strings: presentationData.strings) let minDate = stringForDate(timestamp: data.period.minDate, strings: presentationData.strings)
let maxDate = stringForDate(timestamp: data.period.maxDate, strings: presentationData.strings) let maxDate = stringForDate(timestamp: data.period.maxDate, strings: presentationData.strings)
let dates = "\(minDate) \(maxDate)"
entries.append(.overviewHeader(presentationData.theme, presentationData.strings.Stats_Overview, "\(minDate) \(maxDate)")) entries.append(.overviewTitle(presentationData.theme, presentationData.strings.Stats_Overview, dates))
entries.append(.overview(presentationData.theme, data)) entries.append(.overview(presentationData.theme, data))
if !data.growthGraph.isEmpty { if !data.growthGraph.isEmpty {
@ -399,12 +401,12 @@ private func groupStatsControllerEntries(data: GroupStats?, peers: [PeerId: Peer
if !data.topHoursGraph.isEmpty { if !data.topHoursGraph.isEmpty {
entries.append(.topHoursTitle(presentationData.theme, presentationData.strings.Stats_GroupTopHoursTitle)) entries.append(.topHoursTitle(presentationData.theme, presentationData.strings.Stats_GroupTopHoursTitle))
entries.append(.topHoursGraph(presentationData.theme, presentationData.strings, presentationData.dateTimeFormat, data.topHoursGraph, .lines)) entries.append(.topHoursGraph(presentationData.theme, presentationData.strings, presentationData.dateTimeFormat, data.topHoursGraph, .hourlyStep))
} }
if let peers = peers { if let peers = peers {
if !data.topPosters.isEmpty { if !data.topPosters.isEmpty {
entries.append(.topPostersTitle(presentationData.theme, presentationData.strings.Stats_GroupTopPostersTitle)) entries.append(.topPostersTitle(presentationData.theme, presentationData.strings.Stats_GroupTopPostersTitle, dates))
var index: Int32 = 0 var index: Int32 = 0
for topPoster in data.topPosters { for topPoster in data.topPosters {
if let peer = peers[topPoster.peerId], topPoster.messageCount > 0 { if let peer = peers[topPoster.peerId], topPoster.messageCount > 0 {
@ -414,7 +416,7 @@ private func groupStatsControllerEntries(data: GroupStats?, peers: [PeerId: Peer
} }
} }
if !data.topAdmins.isEmpty { if !data.topAdmins.isEmpty {
entries.append(.topAdminsTitle(presentationData.theme, presentationData.strings.Stats_GroupTopAdminsTitle)) entries.append(.topAdminsTitle(presentationData.theme, presentationData.strings.Stats_GroupTopAdminsTitle, dates))
var index: Int32 = 0 var index: Int32 = 0
for topAdmin in data.topAdmins { for topAdmin in data.topAdmins {
if let peer = peers[topAdmin.peerId], (topAdmin.deletedCount + topAdmin.kickedCount + topAdmin.bannedCount) > 0 { if let peer = peers[topAdmin.peerId], (topAdmin.deletedCount + topAdmin.kickedCount + topAdmin.bannedCount) > 0 {
@ -424,7 +426,7 @@ private func groupStatsControllerEntries(data: GroupStats?, peers: [PeerId: Peer
} }
} }
if !data.topInviters.isEmpty { if !data.topInviters.isEmpty {
entries.append(.topInvitersTitle(presentationData.theme, presentationData.strings.Stats_GroupTopInvitersTitle)) entries.append(.topInvitersTitle(presentationData.theme, presentationData.strings.Stats_GroupTopInvitersTitle, dates))
var index: Int32 = 0 var index: Int32 = 0
for topInviter in data.topInviters { for topInviter in data.topInviters {
if let peer = peers[topInviter.peerId], topInviter.inviteCount > 0 { if let peer = peers[topInviter.peerId], topInviter.inviteCount > 0 {