diff --git a/TournamentStats.xcodeproj/project.pbxproj b/TournamentStats.xcodeproj/project.pbxproj index 976220e..81b7669 100644 --- a/TournamentStats.xcodeproj/project.pbxproj +++ b/TournamentStats.xcodeproj/project.pbxproj @@ -37,6 +37,10 @@ 4D30463322F4232600DA86C4 /* event57 in Resources */ = {isa = PBXBuildFile; fileRef = 4D30463122F4232600DA86C4 /* event57 */; }; 4D30463422F4232600DA86C4 /* event78 in Resources */ = {isa = PBXBuildFile; fileRef = 4D30463222F4232600DA86C4 /* event78 */; }; 4D39B6F122F829A500625E31 /* InfographyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D39B6F022F829A500625E31 /* InfographyView.swift */; }; + 4D39B6F322F8549100625E31 /* DataSourceWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D39B6F222F8549100625E31 /* DataSourceWrapper.swift */; }; + 4D39B6F522F856EF00625E31 /* StackTableCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4D39B6F422F856EF00625E31 /* StackTableCell.xib */; }; + 4D39B6F722F8573900625E31 /* StackTableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D39B6F622F8573900625E31 /* StackTableCell.swift */; }; + 4D39B6FA22F85C3400625E31 /* UIView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D39B6F922F85C3400625E31 /* UIView+Extensions.swift */; }; 4DA5CA1E22AD078A00AC628E /* CountryCounter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DA5CA1D22AD078A00AC628E /* CountryCounter.swift */; }; 4DDEF11422AE4FB900F4D7C1 /* TournamentStats.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DDEF11322AE4FB900F4D7C1 /* TournamentStats.swift */; }; 4DF7608422A3FB96004B0EF1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF7608322A3FB96004B0EF1 /* AppDelegate.swift */; }; @@ -169,6 +173,10 @@ 4D30463122F4232600DA86C4 /* event57 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = event57; sourceTree = ""; }; 4D30463222F4232600DA86C4 /* event78 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = event78; sourceTree = ""; }; 4D39B6F022F829A500625E31 /* InfographyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfographyView.swift; sourceTree = ""; }; + 4D39B6F222F8549100625E31 /* DataSourceWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataSourceWrapper.swift; sourceTree = ""; }; + 4D39B6F422F856EF00625E31 /* StackTableCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = StackTableCell.xib; sourceTree = ""; }; + 4D39B6F622F8573900625E31 /* StackTableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StackTableCell.swift; sourceTree = ""; }; + 4D39B6F922F85C3400625E31 /* UIView+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+Extensions.swift"; sourceTree = ""; }; 4DA5CA1D22AD078A00AC628E /* CountryCounter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CountryCounter.swift; sourceTree = ""; }; 4DDEF11322AE4FB900F4D7C1 /* TournamentStats.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TournamentStats.swift; sourceTree = ""; }; 4DF7608022A3FB96004B0EF1 /* TournamentStats.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TournamentStats.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -471,6 +479,10 @@ 4D97941222F827A5004A2D7F /* reports */, 4DF7608722A3FB96004B0EF1 /* DetailViewController.swift */, 4DF7608522A3FB96004B0EF1 /* MasterViewController.swift */, + 4D39B6F222F8549100625E31 /* DataSourceWrapper.swift */, + 4D39B6F422F856EF00625E31 /* StackTableCell.xib */, + 4D39B6F622F8573900625E31 /* StackTableCell.swift */, + 4D39B6F922F85C3400625E31 /* UIView+Extensions.swift */, ); path = UI; sourceTree = ""; @@ -615,6 +627,7 @@ 4D2F1C4C22CC92D1007C639E /* event90 in Resources */, 4DF7611B22A56797004B0EF1 /* event23 in Resources */, 4D2F1C4722CC92D1007C639E /* event69 in Resources */, + 4D39B6F522F856EF00625E31 /* StackTableCell.xib in Resources */, 4D2F1C4822CC92D1007C639E /* event66 in Resources */, 4DF7613222A56797004B0EF1 /* event49 in Resources */, 4DF7612F22A56797004B0EF1 /* event63 in Resources */, @@ -734,11 +747,14 @@ 4DF7615122A7AECA004B0EF1 /* TournamentRepresentable.swift in Sources */, 4DF7608622A3FB96004B0EF1 /* MasterViewController.swift in Sources */, 4DF7608422A3FB96004B0EF1 /* AppDelegate.swift in Sources */, + 4D39B6F322F8549100625E31 /* DataSourceWrapper.swift in Sources */, 4DDEF11422AE4FB900F4D7C1 /* TournamentStats.swift in Sources */, 4DF760A722A3FD12004B0EF1 /* Model.swift in Sources */, 4DF7614F22A6CF93004B0EF1 /* PlayerResult.swift in Sources */, + 4D39B6F722F8573900625E31 /* StackTableCell.swift in Sources */, 4DF7614622A59407004B0EF1 /* CumulatedResults.swift in Sources */, 4D0F103922C4C1C4005F797A /* ChipCountParser.swift in Sources */, + 4D39B6FA22F85C3400625E31 /* UIView+Extensions.swift in Sources */, 4DF760BF22A560AA004B0EF1 /* FileWriter.swift in Sources */, 4DA5CA1E22AD078A00AC628E /* CountryCounter.swift in Sources */, 4D18861122C36D8F0020C4CD /* TournamentCounter.swift in Sources */, diff --git a/TournamentStats/AppDelegate.swift b/TournamentStats/AppDelegate.swift index 9752beb..b0365fa 100644 --- a/TournamentStats/AppDelegate.swift +++ b/TournamentStats/AppDelegate.swift @@ -40,6 +40,22 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDele let d = Date().timeIntervalSince(s) print("reports created in \(d)s") + let infography = InfographyView(frame: CGRect(x: 0, y: 0, width: 1000, height: 1000), generator: generator) + + if let imageData = infography.toImage()?.pngData() { + + guard let directory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) as NSURL else { + return false + } + + do { + try imageData.write(to: directory.appendingPathComponent("infography.png")!) + } catch { + print(error.localizedDescription) + } + + } + return true } diff --git a/TournamentStats/Seed.swift b/TournamentStats/Seed.swift index 1cbd32a..478169b 100644 --- a/TournamentStats/Seed.swift +++ b/TournamentStats/Seed.swift @@ -25,94 +25,94 @@ class Seed { static let tournamentsDescriptions: [TD] = [ TD(date: "31/05/2019", name: "Casino Employees Event", number: 1, buyin: 500, entries: 685, prizePool: 297975), TD(date: "30/05/2019", name: "Super Turbo Bounty", number: 2, buyin: 10000, entries: 204, prizePool: 1917600), - TD(date: "08/06/2019", name: "BIG 50 No-Limit Hold'em", number: 3, buyin: 500, entries: 28371, prizePool: 13509435), - TD(date: "02/06/2019", name: "Omaha Hi/Lo 8 or Better", number: 4, buyin: 1500, entries: 853, prizePool: 1151550), - TD(date: "03/06/2019", name: "High Roller No-Limit Hold'em for the 50th Annual", number: 5, buyin: 50000, entries: 110, prizePool: 5280000), - TD(date: "03/06/2019", name: "Limit Mixed Triple Draw", number: 6, buyin: 2500, entries: 296, prizePool: 666000), - TD(date: "03/06/2019", name: "WSOP.com ONLINE No-Limit Hold'em", number: 7, buyin: 400, entries: 2825, prizePool: 1017000), - TD(date: "05/06/2019", name: "Short Deck No-Limit Hold'em", number: 8, buyin: 10000, entries: 114, prizePool: 1071600), - TD(date: "06/06/2019", name: "No-Limit Hold'em Deepstack", number: 9, buyin: 600, entries: 6150, prizePool: 3229275), - TD(date: "06/06/2019", name: "Dealers Choice", number: 10, buyin: 150, entries: 470, prizePool: 634500), - TD(date: "07/06/2019", name: "No-Limit Hold'em", number: 11, buyin: 5000, entries: 400, prizePool: 1860000), - TD(date: "06/06/2019", name: "No-Limit Hold'em Super Turbo Bounty", number: 12, buyin: 1000, entries: 2452, prizePool: 1471200), - TD(date: "07/06/2019", name: "No-Limit 2-7 Lowball Draw", number: 13, buyin: 1500, entries: 296, prizePool: 399600), - TD(date: "09/06/2019", name: "HORSE", number: 14, buyin: 1500, entries: 751, prizePool: 1013850), - TD(date: "09/06/2019", name: "Heads-Up No-Limit Hold'em", number: 15, buyin: 10000, entries: 112, prizePool: 1052800), - TD(date: "09/06/2019", name: "No-Limit Hold'em 6-Handed", number: 16, buyin: 1500, entries: 1832, prizePool: 2473200), - TD(date: "09/06/2019", name: "No-Limit Hold'em Shootout", number: 17, buyin: 1500, entries: 917, prizePool: 1237950), - TD(date: "10/06/2019", name: "Omaha Hi-Lo 8 or Better", number: 18, buyin: 10000, entries: 183, prizePool: 1720200), - TD(date: "13/06/2019", name: "Millionaire Maker - No-Limit Hold'em", number: 19, buyin: 1500, entries: 8809, prizePool: 11892150), - TD(date: "11/06/2019", name: "Seven-Card Stud", number: 20, buyin: 1500, entries: 285, prizePool: 384750), - TD(date: "12/06/2019", name: "No-Limit 2-7 Lowball Draw", number: 21, buyin: 10000, entries: 91, prizePool: 855400), - TD(date: "12/06/2019", name: "Double Stack No-Limit Hold'em", number: 22, buyin: 1000, entries: 3253, prizePool: 2927700), - TD(date: "13/06/2019", name: "Eight Game Mix", number: 23, buyin: 1500, entries: 612, prizePool: 826200), - TD(date: "11/06/2019", name: "WSOP.com ONLINE Pot-Limit Omaha 6-Handed", number: 24, buyin: 600, entries: 1216, prizePool: 656640), - TD(date: "13/06/2019", name: "Pot-Limit Omaha Deepstack", number: 25, buyin: 600, entries: 2577, prizePool: 1352925), - TD(date: "16/06/2019", name: "No-Limit Hold'em Marathon", number: 26, buyin: 2620, entries: 1083, prizePool: 2553714), - TD(date: "14/06/2019", name: "Seven-Card Stud Hi/Lo 8 or Better", number: 27, buyin: 1500, entries: 460, prizePool: 621000), - TD(date: "14/06/2019", name: "No-Limit Hold'em", number: 28, buyin: 1000, entries: 2477, prizePool: 2229300), - TD(date: "15/06/2019", name: "HORSE", number: 29, buyin: 10000, entries: 172, prizePool: 1616800), - TD(date: "16/06/2019", name: "Pot-Limit Omaha", number: 30, buyin: 1000, entries: 1526, prizePool: 1374300), - TD(date: "15/06/2019", name: "No-Limit Hold'em 6-Handed", number: 31, buyin: 3000, entries: 754, prizePool: 2035800), - TD(date: "17/06/2019", name: "Seniors No-Limit Hold'em", number: 32, buyin: 1000, entries: 5916 , prizePool: 5324400), - TD(date: "16/06/2019", name: "Limit 2-7 Lowball Triple Draw", number: 33, buyin: 1500, entries: 467, prizePool: 630450), - TD(date: "17/06/2019", name: "WSOP.com ONLINE No-Limit Hold'em Knockout Bounty", number: 38, buyin: 600, entries: 1224, prizePool: 550800), - TD(date: "18/06/2019", name: "Dealers Choice 6-Handed", number: 35, buyin: 10000, entries: 122, prizePool: 1146800), - TD(date: "18/06/2019", name: "No-Limit Hold'em Shootout", number: 36, buyin: 3000, entries: 313, prizePool: 845100), - TD(date: "19/06/2019", name: "No-Limit Hold'em Deepstack", number: 37, buyin: 800, entries: 2808, prizePool: 1999296), - TD(date: "20/06/2019", name: "Double Stack No-Limit Hold'em", number: 34, buyin: 1000, entries: 6241, prizePool: 5592600), - TD(date: "20/06/2019", name: "Pot-Limit Omaha", number: 40, buyin: 1500, entries: 1216, prizePool: 1641600), - TD(date: "20/06/2019", name: "Seven Card Stud", number: 41, buyin: 10000, entries: 88, prizePool: 827200), - TD(date: "21/06/2019", name: "Super Seniors No-Limit Hold'em", number: 39, buyin: 1000, entries: 2650, prizePool: 2385000), - TD(date: "20/06/2019", name: "WSOP.com ONLINE No-Limit Hold'em Turbo Deepstack", number: 46, buyin: 500, entries: 1181, prizePool: 795180), - TD(date: "21/06/2019", name: "Mixed No-Limit Hold'em / Pot-Limit Omaha Deepstack 8-Handed", number: 42, buyin: 600, entries: 2403, prizePool: 1261575), - TD(date: "21/06/2019", name: "Mixed Big Bet", number: 43, buyin: 2500, entries: 218, prizePool: 490500), - TD(date: "22/06/2019", name: "No-Limit Hold'em Bounty", number: 44, buyin: 1500, entries: 1807, prizePool: 2439450), - TD(date: "23/06/2019", name: "Pot-Limit Omaha High Roller", number: 45, buyin: 25000, entries: 278, prizePool: 6602500), - TD(date: "23/06/2019", name: "No-Limit Hold'em", number: 48, buyin: 2500, entries: 996, prizePool: 2241000), - TD(date: "23/06/2019", name: "Limit 2-7 Lowball Triple Draw", number: 49, buyin: 10000, entries: 100, prizePool: 940000), - TD(date: "24/06/2019", name: "$1,000/$10,000 Ladies No-Limit Hold'em", number: 47, buyin: 10000, entries: 968, prizePool: 871200), - TD(date: "24/06/2019", name: "Mixed Omaha Hi/Lo 8 or Better, Seven Card Stud Hi/Lo 8 or Better", number: 51, buyin: 2500, entries: 401, prizePool: 902250), - TD(date: "25/06/2019", name: "WSOP.com ONLINE No-Limit Hold'em Double Stack", number: 55, buyin: 1000, entries: 1333, prizePool: 1266350), - TD(date: "26/06/2019", name: "Pot-Limit Omaha 8-Handed", number: 52, buyin: 10000, entries: 518, prizePool: 4869200), - TD(date: "26/06/2019", name: "No-Limit Hold'em Deepstack 8-Handed", number: 53, buyin: 800, entries: 3759, prizePool: 2676408), - TD(date: "26/06/2019", name: "Razz", number: 54, buyin: 1500, entries: 363, prizePool: 490050), - TD(date: "26/06/2019", name: "No-Limit Hold'em Super Turbo Bounty", number: 56, buyin: 1500, entries: 1867, prizePool: 2520450), - TD(date: "27/06/2019", name: "Monster Stack No-Limit Hold'em", number: 50, buyin: 1500, entries: 6035, prizePool: 8147250), - TD(date: "27/06/2019", name: "Tag Team No-Limit Hold'em", number: 57, buyin: 1000, entries: 976, prizePool: 878400), - TD(date: "29/06/2019", name: "Poker Players Championship", number: 58, buyin: 50000, entries: 74, prizePool: 3552000), - TD(date: "29/06/2019", name: "No-Limit Hold'em DEEPSTACK CHAMPIONSHIP", number: 59, buyin: 600, entries: 6140, prizePool: 3223500), - TD(date: "29/06/2019", name: "Pot-Limit Omaha Hi/Lo 8 or Better", number: 60, buyin: 1500, entries: 1117, prizePool: 1507950), - TD(date: "30/06/2019", name: "Razz", number: 62, buyin: 10000, entries: 116, prizePool: 1090400), - TD(date: "01/07/2019", name: "COLOSSUS", number: 61, buyin: 400, entries: 13109, prizePool: 4382515), - TD(date: "01/07/2019", name: "Omaha Mix", number: 63, buyin: 1500, entries: 717, prizePool: 967950), - TD(date: "02/07/2019", name: "Pot-Limit Omaha Hi-Lo 8 or Better ", number: 65, buyin: 10000, entries: 193, prizePool: 1814200), - TD(date: "02/07/2019", name: "WSOP.com ONLINE No-Limit Hold'em Championship", number: 68, buyin: 1000, entries: 1750, prizePool: 1662500), - TD(date: "03/07/2019", name: "Seven Card Stud Hi-Lo 8 or Better", number: 67, buyin: 10000, entries: 151, prizePool: 1419400), - TD(date: "04/07/2019", name: "Crazy Eights No-Limit Hold'em", number: 64, buyin: 888, entries: 10185, prizePool: 8139852), - TD(date: "04/07/2019", name: "Limit Hold'em", number: 66, buyin: 1500, entries: 541, prizePool: 730350), - TD(date: "04/07/2019", name: "Mini Main Event", number: 69, buyin: 1000, entries: 5521, prizePool: 4968900), - TD(date: "05/07/2019", name: "No-Limit Hold'em 6-Handed", number: 70, buyin: 5000, entries: 815, prizePool: 3789750), - TD(date: "05/07/2019", name: "Limit Hold'em Championship", number: 72, buyin: 10000, entries: 118, prizePool: 1109200), - TD(date: "05/07/2019", name: "WSOP.com ONLINE No-Limit Hold'em High Roller", number: 74, buyin: 3200, entries: 593, prizePool: 1802720), - TD(date: "06/07/2019", name: "SALUTE TO WARRIORS - $500 No-Limit Hold'em", number: 71, buyin: 500, entries: 1723, prizePool: 723660), - TD(date: "08/07/2019", name: "WSOP.com ONLINE No-Limit Hold'em 6-Handed", number: 76, buyin: 800, entries: 1560, prizePool: 1170000), - TD(date: "11/07/2019", name: "Final Fifty No-Limit Hold'em", number: 90, buyin: 50000, entries: 123, prizePool: 5904000), - TD(date: "12/07/2019", name: "Limit Hold'em 6-Handed", number: 77, buyin: 3000, entries: 193, prizePool: 521100), - TD(date: "13/07/2019", name: "Pot-Limit Omaha Bounty", number: 78, buyin: 1500, entries: 1130 , prizePool: 1525500), - TD(date: "13/07/2019", name: "Little One for One Drop", number: 75, buyin: 1111, entries: 6248, prizePool: 5623200), - TD(date: "13/07/2019", name: "No-Limit Hold'em", number: 79, buyin: 3000, entries: 671, prizePool: 1811700), - TD(date: "13/07/2019", name: "50th Annual Bracelet Winners Only No-Limit Hold'em", number: 81, buyin: 1500, entries: 185, prizePool: 277500), - TD(date: "14/07/2019", name: "Mixed No-Limit Hold'em Pot-Limit Omaha", number: 80, buyin: 1500, entries: 1250, prizePool: 1687500), - TD(date: "14/07/2019", name: "No-Limit Hold'em High Roller", number: 83, buyin: 100000, entries: 88, prizePool: 9603000), - TD(date: "15/07/2019", name: "No-Limit Hold'em Double Stack", number: 82, buyin: 1500, entries: 2589, prizePool: 3495150), - TD(date: "15/07/2019", name: "WSOP.com ONLINE No-Limit Hold'em Summer Saver", number: 88, buyin: 500, entries: 1859, prizePool: 836550), - TD(date: "16/07/2019", name: "The Closer - No-Limit Hold'em", number: 84, buyin: 1500, entries: 2800, prizePool: 3780000), - TD(date: "16/07/2019", name: "Pot-Limit Omaha 6-Handed", number: 85, buyin: 3000, entries: 835, prizePool: 2254500), - TD(date: "17/07/2019", name: "No-Limit Hold'em 6-Handed", number: 86, buyin: 10000, entries: 272, prizePool: 2556800), - TD(date: "17/07/2019", name: "HORSE", number: 87, buyin: 3000, entries: 301, prizePool: 812700), - TD(date: "17/07/2019", name: "No-Limit Hold'em", number: 89, buyin: 5000, entries: 608, prizePool: 2827200), - TD(date: "17/07/2019", name: "No-Limit Hold'em MAIN EVENT - World Championship", number: 73, buyin: 10000, entries: 8569, prizePool: 80548600), +// TD(date: "08/06/2019", name: "BIG 50 No-Limit Hold'em", number: 3, buyin: 500, entries: 28371, prizePool: 13509435), +// TD(date: "02/06/2019", name: "Omaha Hi/Lo 8 or Better", number: 4, buyin: 1500, entries: 853, prizePool: 1151550), +// TD(date: "03/06/2019", name: "High Roller No-Limit Hold'em for the 50th Annual", number: 5, buyin: 50000, entries: 110, prizePool: 5280000), +// TD(date: "03/06/2019", name: "Limit Mixed Triple Draw", number: 6, buyin: 2500, entries: 296, prizePool: 666000), +// TD(date: "03/06/2019", name: "WSOP.com ONLINE No-Limit Hold'em", number: 7, buyin: 400, entries: 2825, prizePool: 1017000), +// TD(date: "05/06/2019", name: "Short Deck No-Limit Hold'em", number: 8, buyin: 10000, entries: 114, prizePool: 1071600), +// TD(date: "06/06/2019", name: "No-Limit Hold'em Deepstack", number: 9, buyin: 600, entries: 6150, prizePool: 3229275), +// TD(date: "06/06/2019", name: "Dealers Choice", number: 10, buyin: 150, entries: 470, prizePool: 634500), +// TD(date: "07/06/2019", name: "No-Limit Hold'em", number: 11, buyin: 5000, entries: 400, prizePool: 1860000), +// TD(date: "06/06/2019", name: "No-Limit Hold'em Super Turbo Bounty", number: 12, buyin: 1000, entries: 2452, prizePool: 1471200), +// TD(date: "07/06/2019", name: "No-Limit 2-7 Lowball Draw", number: 13, buyin: 1500, entries: 296, prizePool: 399600), +// TD(date: "09/06/2019", name: "HORSE", number: 14, buyin: 1500, entries: 751, prizePool: 1013850), +// TD(date: "09/06/2019", name: "Heads-Up No-Limit Hold'em", number: 15, buyin: 10000, entries: 112, prizePool: 1052800), +// TD(date: "09/06/2019", name: "No-Limit Hold'em 6-Handed", number: 16, buyin: 1500, entries: 1832, prizePool: 2473200), +// TD(date: "09/06/2019", name: "No-Limit Hold'em Shootout", number: 17, buyin: 1500, entries: 917, prizePool: 1237950), +// TD(date: "10/06/2019", name: "Omaha Hi-Lo 8 or Better", number: 18, buyin: 10000, entries: 183, prizePool: 1720200), +// TD(date: "13/06/2019", name: "Millionaire Maker - No-Limit Hold'em", number: 19, buyin: 1500, entries: 8809, prizePool: 11892150), +// TD(date: "11/06/2019", name: "Seven-Card Stud", number: 20, buyin: 1500, entries: 285, prizePool: 384750), +// TD(date: "12/06/2019", name: "No-Limit 2-7 Lowball Draw", number: 21, buyin: 10000, entries: 91, prizePool: 855400), +// TD(date: "12/06/2019", name: "Double Stack No-Limit Hold'em", number: 22, buyin: 1000, entries: 3253, prizePool: 2927700), +// TD(date: "13/06/2019", name: "Eight Game Mix", number: 23, buyin: 1500, entries: 612, prizePool: 826200), +// TD(date: "11/06/2019", name: "WSOP.com ONLINE Pot-Limit Omaha 6-Handed", number: 24, buyin: 600, entries: 1216, prizePool: 656640), +// TD(date: "13/06/2019", name: "Pot-Limit Omaha Deepstack", number: 25, buyin: 600, entries: 2577, prizePool: 1352925), +// TD(date: "16/06/2019", name: "No-Limit Hold'em Marathon", number: 26, buyin: 2620, entries: 1083, prizePool: 2553714), +// TD(date: "14/06/2019", name: "Seven-Card Stud Hi/Lo 8 or Better", number: 27, buyin: 1500, entries: 460, prizePool: 621000), +// TD(date: "14/06/2019", name: "No-Limit Hold'em", number: 28, buyin: 1000, entries: 2477, prizePool: 2229300), +// TD(date: "15/06/2019", name: "HORSE", number: 29, buyin: 10000, entries: 172, prizePool: 1616800), +// TD(date: "16/06/2019", name: "Pot-Limit Omaha", number: 30, buyin: 1000, entries: 1526, prizePool: 1374300), +// TD(date: "15/06/2019", name: "No-Limit Hold'em 6-Handed", number: 31, buyin: 3000, entries: 754, prizePool: 2035800), +// TD(date: "17/06/2019", name: "Seniors No-Limit Hold'em", number: 32, buyin: 1000, entries: 5916 , prizePool: 5324400), +// TD(date: "16/06/2019", name: "Limit 2-7 Lowball Triple Draw", number: 33, buyin: 1500, entries: 467, prizePool: 630450), +// TD(date: "17/06/2019", name: "WSOP.com ONLINE No-Limit Hold'em Knockout Bounty", number: 38, buyin: 600, entries: 1224, prizePool: 550800), +// TD(date: "18/06/2019", name: "Dealers Choice 6-Handed", number: 35, buyin: 10000, entries: 122, prizePool: 1146800), +// TD(date: "18/06/2019", name: "No-Limit Hold'em Shootout", number: 36, buyin: 3000, entries: 313, prizePool: 845100), +// TD(date: "19/06/2019", name: "No-Limit Hold'em Deepstack", number: 37, buyin: 800, entries: 2808, prizePool: 1999296), +// TD(date: "20/06/2019", name: "Double Stack No-Limit Hold'em", number: 34, buyin: 1000, entries: 6241, prizePool: 5592600), +// TD(date: "20/06/2019", name: "Pot-Limit Omaha", number: 40, buyin: 1500, entries: 1216, prizePool: 1641600), +// TD(date: "20/06/2019", name: "Seven Card Stud", number: 41, buyin: 10000, entries: 88, prizePool: 827200), +// TD(date: "21/06/2019", name: "Super Seniors No-Limit Hold'em", number: 39, buyin: 1000, entries: 2650, prizePool: 2385000), +// TD(date: "20/06/2019", name: "WSOP.com ONLINE No-Limit Hold'em Turbo Deepstack", number: 46, buyin: 500, entries: 1181, prizePool: 795180), +// TD(date: "21/06/2019", name: "Mixed No-Limit Hold'em / Pot-Limit Omaha Deepstack 8-Handed", number: 42, buyin: 600, entries: 2403, prizePool: 1261575), +// TD(date: "21/06/2019", name: "Mixed Big Bet", number: 43, buyin: 2500, entries: 218, prizePool: 490500), +// TD(date: "22/06/2019", name: "No-Limit Hold'em Bounty", number: 44, buyin: 1500, entries: 1807, prizePool: 2439450), +// TD(date: "23/06/2019", name: "Pot-Limit Omaha High Roller", number: 45, buyin: 25000, entries: 278, prizePool: 6602500), +// TD(date: "23/06/2019", name: "No-Limit Hold'em", number: 48, buyin: 2500, entries: 996, prizePool: 2241000), +// TD(date: "23/06/2019", name: "Limit 2-7 Lowball Triple Draw", number: 49, buyin: 10000, entries: 100, prizePool: 940000), +// TD(date: "24/06/2019", name: "$1,000/$10,000 Ladies No-Limit Hold'em", number: 47, buyin: 10000, entries: 968, prizePool: 871200), +// TD(date: "24/06/2019", name: "Mixed Omaha Hi/Lo 8 or Better, Seven Card Stud Hi/Lo 8 or Better", number: 51, buyin: 2500, entries: 401, prizePool: 902250), +// TD(date: "25/06/2019", name: "WSOP.com ONLINE No-Limit Hold'em Double Stack", number: 55, buyin: 1000, entries: 1333, prizePool: 1266350), +// TD(date: "26/06/2019", name: "Pot-Limit Omaha 8-Handed", number: 52, buyin: 10000, entries: 518, prizePool: 4869200), +// TD(date: "26/06/2019", name: "No-Limit Hold'em Deepstack 8-Handed", number: 53, buyin: 800, entries: 3759, prizePool: 2676408), +// TD(date: "26/06/2019", name: "Razz", number: 54, buyin: 1500, entries: 363, prizePool: 490050), +// TD(date: "26/06/2019", name: "No-Limit Hold'em Super Turbo Bounty", number: 56, buyin: 1500, entries: 1867, prizePool: 2520450), +// TD(date: "27/06/2019", name: "Monster Stack No-Limit Hold'em", number: 50, buyin: 1500, entries: 6035, prizePool: 8147250), +// TD(date: "27/06/2019", name: "Tag Team No-Limit Hold'em", number: 57, buyin: 1000, entries: 976, prizePool: 878400), +// TD(date: "29/06/2019", name: "Poker Players Championship", number: 58, buyin: 50000, entries: 74, prizePool: 3552000), +// TD(date: "29/06/2019", name: "No-Limit Hold'em DEEPSTACK CHAMPIONSHIP", number: 59, buyin: 600, entries: 6140, prizePool: 3223500), +// TD(date: "29/06/2019", name: "Pot-Limit Omaha Hi/Lo 8 or Better", number: 60, buyin: 1500, entries: 1117, prizePool: 1507950), +// TD(date: "30/06/2019", name: "Razz", number: 62, buyin: 10000, entries: 116, prizePool: 1090400), +// TD(date: "01/07/2019", name: "COLOSSUS", number: 61, buyin: 400, entries: 13109, prizePool: 4382515), +// TD(date: "01/07/2019", name: "Omaha Mix", number: 63, buyin: 1500, entries: 717, prizePool: 967950), +// TD(date: "02/07/2019", name: "Pot-Limit Omaha Hi-Lo 8 or Better ", number: 65, buyin: 10000, entries: 193, prizePool: 1814200), +// TD(date: "02/07/2019", name: "WSOP.com ONLINE No-Limit Hold'em Championship", number: 68, buyin: 1000, entries: 1750, prizePool: 1662500), +// TD(date: "03/07/2019", name: "Seven Card Stud Hi-Lo 8 or Better", number: 67, buyin: 10000, entries: 151, prizePool: 1419400), +// TD(date: "04/07/2019", name: "Crazy Eights No-Limit Hold'em", number: 64, buyin: 888, entries: 10185, prizePool: 8139852), +// TD(date: "04/07/2019", name: "Limit Hold'em", number: 66, buyin: 1500, entries: 541, prizePool: 730350), +// TD(date: "04/07/2019", name: "Mini Main Event", number: 69, buyin: 1000, entries: 5521, prizePool: 4968900), +// TD(date: "05/07/2019", name: "No-Limit Hold'em 6-Handed", number: 70, buyin: 5000, entries: 815, prizePool: 3789750), +// TD(date: "05/07/2019", name: "Limit Hold'em Championship", number: 72, buyin: 10000, entries: 118, prizePool: 1109200), +// TD(date: "05/07/2019", name: "WSOP.com ONLINE No-Limit Hold'em High Roller", number: 74, buyin: 3200, entries: 593, prizePool: 1802720), +// TD(date: "06/07/2019", name: "SALUTE TO WARRIORS - $500 No-Limit Hold'em", number: 71, buyin: 500, entries: 1723, prizePool: 723660), +// TD(date: "08/07/2019", name: "WSOP.com ONLINE No-Limit Hold'em 6-Handed", number: 76, buyin: 800, entries: 1560, prizePool: 1170000), +// TD(date: "11/07/2019", name: "Final Fifty No-Limit Hold'em", number: 90, buyin: 50000, entries: 123, prizePool: 5904000), +// TD(date: "12/07/2019", name: "Limit Hold'em 6-Handed", number: 77, buyin: 3000, entries: 193, prizePool: 521100), +// TD(date: "13/07/2019", name: "Pot-Limit Omaha Bounty", number: 78, buyin: 1500, entries: 1130 , prizePool: 1525500), +// TD(date: "13/07/2019", name: "Little One for One Drop", number: 75, buyin: 1111, entries: 6248, prizePool: 5623200), +// TD(date: "13/07/2019", name: "No-Limit Hold'em", number: 79, buyin: 3000, entries: 671, prizePool: 1811700), +// TD(date: "13/07/2019", name: "50th Annual Bracelet Winners Only No-Limit Hold'em", number: 81, buyin: 1500, entries: 185, prizePool: 277500), +// TD(date: "14/07/2019", name: "Mixed No-Limit Hold'em Pot-Limit Omaha", number: 80, buyin: 1500, entries: 1250, prizePool: 1687500), +// TD(date: "14/07/2019", name: "No-Limit Hold'em High Roller", number: 83, buyin: 100000, entries: 88, prizePool: 9603000), +// TD(date: "15/07/2019", name: "No-Limit Hold'em Double Stack", number: 82, buyin: 1500, entries: 2589, prizePool: 3495150), +// TD(date: "15/07/2019", name: "WSOP.com ONLINE No-Limit Hold'em Summer Saver", number: 88, buyin: 500, entries: 1859, prizePool: 836550), +// TD(date: "16/07/2019", name: "The Closer - No-Limit Hold'em", number: 84, buyin: 1500, entries: 2800, prizePool: 3780000), +// TD(date: "16/07/2019", name: "Pot-Limit Omaha 6-Handed", number: 85, buyin: 3000, entries: 835, prizePool: 2254500), +// TD(date: "17/07/2019", name: "No-Limit Hold'em 6-Handed", number: 86, buyin: 10000, entries: 272, prizePool: 2556800), +// TD(date: "17/07/2019", name: "HORSE", number: 87, buyin: 3000, entries: 301, prizePool: 812700), +// TD(date: "17/07/2019", name: "No-Limit Hold'em", number: 89, buyin: 5000, entries: 608, prizePool: 2827200), +// TD(date: "17/07/2019", name: "No-Limit Hold'em MAIN EVENT - World Championship", number: 73, buyin: 10000, entries: 8569, prizePool: 80548600), ] diff --git a/TournamentStats/UI/DataSourceWrapper.swift b/TournamentStats/UI/DataSourceWrapper.swift new file mode 100644 index 0000000..871df8e --- /dev/null +++ b/TournamentStats/UI/DataSourceWrapper.swift @@ -0,0 +1,63 @@ +// +// Array+UITableDataSource.swift +// TournamentStats +// +// Created by Laurent Morvillier on 05/08/2019. +// Copyright © 2019 Stax River. All rights reserved. +// + +import Foundation +import UIKit + + + + +class DataSourceWrapper : NSObject, UITableViewDataSource, UITableViewDelegate { + + var columnRepresentables: [T] + + init(array: [T]) { + self.columnRepresentables = array + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + print("numberOfRowsInSection = \(self.columnRepresentables.count)") + return self.columnRepresentables.count + 1 // + 1 for header + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! StackTableCell + + var columns: [String] + var font: UIFont + switch indexPath.row { + case 0: + columns = T.headers() + font = UIFont.boldSystemFont(ofSize: 16.0) + default: + let cr = self.columnRepresentables[indexPath.row - 1] + columns = cr.colums() + font = UIFont.systemFont(ofSize: 16.0) + } + + columns.forEach { value in + let label: UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: 50, height: 30)) + label.textColor = UIColor.black + label.backgroundColor = UIColor.white + label.text = value + label.font = font + cell.stackView.addArrangedSubview(label) + } + + return cell + } + + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + return 32.0 + } + + func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { + return 0.1 + } + +} diff --git a/TournamentStats/UI/MasterViewController.swift b/TournamentStats/UI/MasterViewController.swift index c721755..71a40c1 100644 --- a/TournamentStats/UI/MasterViewController.swift +++ b/TournamentStats/UI/MasterViewController.swift @@ -35,7 +35,7 @@ class MasterViewController: UITableViewController { @objc func generate(_ sender: Any) { - ReportGenerator.go() +// ReportGenerator.go() } diff --git a/TournamentStats/UI/StackTableCell.swift b/TournamentStats/UI/StackTableCell.swift new file mode 100644 index 0000000..c84d0db --- /dev/null +++ b/TournamentStats/UI/StackTableCell.swift @@ -0,0 +1,21 @@ +// +// StackTableCell.swift +// TournamentStats +// +// Created by Laurent Morvillier on 05/08/2019. +// Copyright © 2019 Stax River. All rights reserved. +// + +import Foundation +import UIKit + +class StackTableCell: UITableViewCell { + + @IBOutlet weak var stackView: UIStackView! + + override func awakeFromNib() { + self.backgroundColor = UIColor.clear + self.stackView.distribution = .fillEqually + } + +} diff --git a/TournamentStats/UI/StackTableCell.xib b/TournamentStats/UI/StackTableCell.xib new file mode 100644 index 0000000..9fba788 --- /dev/null +++ b/TournamentStats/UI/StackTableCell.xib @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TournamentStats/UI/UIView+Extensions.swift b/TournamentStats/UI/UIView+Extensions.swift new file mode 100644 index 0000000..d37dec6 --- /dev/null +++ b/TournamentStats/UI/UIView+Extensions.swift @@ -0,0 +1,99 @@ +// +// UIView+Extensions.swift +// TournamentStats +// +// Created by Laurent Morvillier on 05/08/2019. +// Copyright © 2019 Stax River. All rights reserved. +// + +import Foundation +import UIKit + +extension UIView { + + func toImage() -> UIImage? { + UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.isOpaque, 0.0) + if let context = UIGraphicsGetCurrentContext() { + self.layer.render(in: context) + if let image = UIGraphicsGetImageFromCurrentImageContext() { + UIGraphicsEndImageContext() + return image + } + } + return nil + } + + + // MARK: - Constraints + + @objc public func addMaxConstraints(view: UIView) { + + view.translatesAutoresizingMaskIntoConstraints = false + + view.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true + view.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true + if #available(iOS 11.0, *) { + view.topAnchor.constraint(equalTo: self.safeAreaLayoutGuide.topAnchor).isActive = true + } else { + view.topAnchor.constraint(equalTo: self.topAnchor).isActive = true + } + if #available(iOS 11.0, *) { + view.bottomAnchor.constraint(equalTo: self.safeAreaLayoutGuide.bottomAnchor).isActive = true + } else { + view.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true + } + } + + @objc public func addCenterConstraints(view: UIView) { + + view.translatesAutoresizingMaskIntoConstraints = false + + view.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true + view.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true + view.heightAnchor.constraint(equalToConstant: view.frame.size.height).isActive = true + view.widthAnchor.constraint(equalToConstant: view.frame.size.width).isActive = true + } + + @objc public func addTopStickyConstraintsWithHeight(_ height: CGFloat, view: UIView) { + + view.translatesAutoresizingMaskIntoConstraints = false + + view.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true + view.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true + if #available(iOS 11.0, *) { + view.topAnchor.constraint(equalTo: self.safeAreaLayoutGuide.topAnchor).isActive = true + } else { + view.topAnchor.constraint(equalTo: self.topAnchor).isActive = true + } + view.heightAnchor.constraint(equalToConstant: height).isActive = true + } + + @objc public func addBottomStickyConstraintsWithHeight(_ height: CGFloat, view: UIView) { + + view.translatesAutoresizingMaskIntoConstraints = false + + view.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true + view.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true + if #available(iOS 11.0, *) { + view.bottomAnchor.constraint(equalTo: self.safeAreaLayoutGuide.bottomAnchor).isActive = true + } else { + view.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true + } + view.heightAnchor.constraint(equalToConstant: height).isActive = true + } + + @objc public func addMaxConstraintsToTopView(_ topView: UIView, forView view: UIView) { + + view.translatesAutoresizingMaskIntoConstraints = false + + view.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true + view.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true + view.topAnchor.constraint(equalTo: topView.bottomAnchor).isActive = true + if #available(iOS 11.0, *) { + view.bottomAnchor.constraint(equalTo: self.safeAreaLayoutGuide.bottomAnchor).isActive = true + } else { + view.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true + } + } + +} diff --git a/TournamentStats/UI/reports/InfographyView.swift b/TournamentStats/UI/reports/InfographyView.swift index 24b061a..8cb55a4 100644 --- a/TournamentStats/UI/reports/InfographyView.swift +++ b/TournamentStats/UI/reports/InfographyView.swift @@ -11,14 +11,38 @@ import UIKit class InfographyView : UIView { - override init(frame: CGRect) { + var references: [UITableViewDataSource] = [] + + init(frame: CGRect, generator: ReportGenerator) { super.init(frame: frame) + self.backgroundColor = UIColor.white + + let table1 = UITableView(frame: CGRect(x: 0, y: 0, width: 500, height: 500), style: .grouped) + table1.register(UINib(nibName: "StackTableCell", bundle: Bundle.main), forCellReuseIdentifier: "Cell") + table1.backgroundColor = UIColor.clear + let ds = DataSourceWrapper(array: generator.biggestWinners) + table1.dataSource = ds + table1.delegate = ds + self.references.append(ds) + + let table2 = UITableView(frame: CGRect(x: 500, y: 0, width: 500, height: 500), style: .grouped) + table2.register(UINib(nibName: "StackTableCell", bundle: Bundle.main), forCellReuseIdentifier: "Cell") + table2.backgroundColor = UIColor.clear + let ds2 = DataSourceWrapper(array: generator.winsByCountry) + table2.dataSource = ds2 + table2.delegate = ds2 + self.references.append(ds2) + + let hstack1: UIStackView = UIStackView(arrangedSubviews: [table1, table2]) + hstack1.distribution = .fill + hstack1.backgroundColor = UIColor.green + hstack1.axis = .horizontal - - - - - + let vstack: UIStackView = UIStackView(arrangedSubviews: [hstack1]) + hstack1.backgroundColor = UIColor.blue + vstack.axis = .vertical + self.addSubview(vstack) + self.addMaxConstraints(view: vstack) } diff --git a/TournamentStats/report/ReportGenerator.swift b/TournamentStats/report/ReportGenerator.swift index 6ce24f5..4509861 100644 --- a/TournamentStats/report/ReportGenerator.swift +++ b/TournamentStats/report/ReportGenerator.swift @@ -45,21 +45,21 @@ class ReportGenerator { } - fileprivate var _biggestWinners: [CumulatedResults] = [] - fileprivate var _mostWins: [CumulatedResults] = [] - fileprivate var _mostCashes: [CumulatedResults] = [] - fileprivate var _tournamentWinners: [TournamentWinner] = [] - fileprivate var _tourniesByEntries: [TournamentRepresentable] = [] - fileprivate var _tourniesByPrizepool: [TournamentRepresentable] = [] - fileprivate var _winsByCountry: [CountryCounter] = [] - fileprivate var _cashesByCountry: [CountryCounter] = [] - fileprivate var _averageEvent: [TournamentStats] = [] - fileprivate var _notablesMostCashes: [CumulatedResults] = [] - fileprivate var _averageCash: [CumulatedResults] = [] - fileprivate var _tournamentBuyinDistribution: [DistributionCounter] = [] - fileprivate var _tournamentPrizepoolDistribution: [DistributionCounter] = [] - fileprivate var _firstPrizeDistribution: [DistributionCounter] = [] - fileprivate var _holdemTournamentsDistribution: [DistributionCounter] = [] + var biggestWinners: [CumulatedResults] = [] + var mostWins: [CumulatedResults] = [] + var mostCashes: [CumulatedResults] = [] + var tournamentWinners: [TournamentWinner] = [] + var tourniesByEntries: [TournamentRepresentable] = [] + var tourniesByPrizepool: [TournamentRepresentable] = [] + var winsByCountry: [CountryCounter] = [] + var cashesByCountry: [CountryCounter] = [] + var averageEvent: [TournamentStats] = [] + var notablesMostCashes: [CumulatedResults] = [] + var averageCash: [CumulatedResults] = [] + var tournamentBuyinDistribution: [DistributionCounter] = [] + var tournamentPrizepoolDistribution: [DistributionCounter] = [] + var firstPrizeDistribution: [DistributionCounter] = [] + var holdemTournamentsDistribution: [DistributionCounter] = [] func create() { @@ -67,21 +67,21 @@ class ReportGenerator { let realm = try! Realm() - self._biggestWinners = Queries.biggestWinners(realm: realm) - self._mostWins = Queries.mostCashes(realm: realm, sort: .wins) - self._mostCashes = Queries.mostCashes(realm: realm) - self._tournamentWinners = Queries.allWinnersSortedByEvent(realm: realm) - self._tourniesByEntries = Queries.sortedEvents(realm: realm, fieldName: "entries", ascending: false) - self._tourniesByPrizepool = Queries.sortedEvents(realm: realm, fieldName: "prizepool", ascending: false) - self._winsByCountry = Queries.winsByCountry(realm: realm) - self._cashesByCountry = Queries.cashesByCountry(realm: realm) - self._averageEvent = Queries.averageEvent(realm: realm) - self._notablesMostCashes = Queries.mostCashes(realm: realm, notable: true) - self._averageCash = Queries.averageCash(realm: realm) - self._tournamentBuyinDistribution = Queries.tournamentBuyinDistribution(realm: realm) - self._tournamentPrizepoolDistribution = Queries.tournamentPrizepoolDistribution(realm: realm) - self._firstPrizeDistribution = Queries.firstPrizeDistribution(realm: realm) - self._holdemTournamentsDistribution = Queries.holdemTournamentsDistribution(realm: realm) + self.biggestWinners = Queries.biggestWinners(realm: realm) + self.mostWins = Queries.mostCashes(realm: realm, sort: .wins) + self.mostCashes = Queries.mostCashes(realm: realm) + self.tournamentWinners = Queries.allWinnersSortedByEvent(realm: realm) + self.tourniesByEntries = Queries.sortedEvents(realm: realm, fieldName: "entries", ascending: false) + self.tourniesByPrizepool = Queries.sortedEvents(realm: realm, fieldName: "prizepool", ascending: false) + self.winsByCountry = Queries.winsByCountry(realm: realm) + self.cashesByCountry = Queries.cashesByCountry(realm: realm) + self.averageEvent = Queries.averageEvent(realm: realm) + self.notablesMostCashes = Queries.mostCashes(realm: realm, notable: true) + self.averageCash = Queries.averageCash(realm: realm) + self.tournamentBuyinDistribution = Queries.tournamentBuyinDistribution(realm: realm) + self.tournamentPrizepoolDistribution = Queries.tournamentPrizepoolDistribution(realm: realm) + self.firstPrizeDistribution = Queries.firstPrizeDistribution(realm: realm) + self.holdemTournamentsDistribution = Queries.holdemTournamentsDistribution(realm: realm) let tourniesDate = realm.objects(Tournament.self).distinct(by: ["date"]) @@ -102,23 +102,23 @@ class ReportGenerator { } fileprivate func writeHTML() { - self._biggestWinners.writeHTML(fileName: "reports/earningsLeaderboard.html") - self._mostCashes.writeHTML(fileName: "reports/mostCashes.html", limit: 25) - self._tournamentWinners.writeHTML(fileName: "reports/allWinners.html", limit: nil) - self._tournamentWinners.writeHTML(fileName: "reports/allWinners_top10.html", limit: 10) - self._tourniesByEntries.writeHTML(fileName: "reports/tourniesByEntries.html", limit: nil) - self._tourniesByEntries.writeHTML(fileName: "reports/tourniesByEntries_top5.html", limit: 5) - self._tourniesByPrizepool.writeHTML(fileName: "reports/tourniesByPrizepool.html", limit: nil) - self._tourniesByPrizepool.writeHTML(fileName: "reports/tourniesByPrizepool_top5.html", limit: 5) - self._winsByCountry.writeHTML(fileName: "reports/countryWins.html") - self._cashesByCountry.writeHTML(fileName: "reports/countryCashes.html") - self._averageEvent.writeHTML(fileName: "reports/averageEvent.html") - self._notablesMostCashes.writeHTML(fileName: "reports/notablesMostCashes.html", limit: nil) - self._averageCash.writeHTML(fileName: "reports/bestAverageCashes.html", limit: 5) - self._tournamentBuyinDistribution.writeHTML(fileName: "reports/buyinDistribution.html") - self._tournamentPrizepoolDistribution.writeHTML(fileName: "reports/prizepoolDistribution.html") - self._firstPrizeDistribution.writeHTML(fileName: "reports/firstPrizeDistribution.html") - self._holdemTournamentsDistribution.writeHTML(fileName: "reports/holdemDistribution.html") + self.biggestWinners.writeHTML(fileName: "reports/earningsLeaderboard.html") + self.mostCashes.writeHTML(fileName: "reports/mostCashes.html", limit: 25) + self.tournamentWinners.writeHTML(fileName: "reports/allWinners.html", limit: nil) + self.tournamentWinners.writeHTML(fileName: "reports/allWinners_top10.html", limit: 10) + self.tourniesByEntries.writeHTML(fileName: "reports/tourniesByEntries.html", limit: nil) + self.tourniesByEntries.writeHTML(fileName: "reports/tourniesByEntries_top5.html", limit: 5) + self.tourniesByPrizepool.writeHTML(fileName: "reports/tourniesByPrizepool.html", limit: nil) + self.tourniesByPrizepool.writeHTML(fileName: "reports/tourniesByPrizepool_top5.html", limit: 5) + self.winsByCountry.writeHTML(fileName: "reports/countryWins.html") + self.cashesByCountry.writeHTML(fileName: "reports/countryCashes.html") + self.averageEvent.writeHTML(fileName: "reports/averageEvent.html") + self.notablesMostCashes.writeHTML(fileName: "reports/notablesMostCashes.html", limit: nil) + self.averageCash.writeHTML(fileName: "reports/bestAverageCashes.html", limit: 5) + self.tournamentBuyinDistribution.writeHTML(fileName: "reports/buyinDistribution.html") + self.tournamentPrizepoolDistribution.writeHTML(fileName: "reports/prizepoolDistribution.html") + self.firstPrizeDistribution.writeHTML(fileName: "reports/firstPrizeDistribution.html") + self.holdemTournamentsDistribution.writeHTML(fileName: "reports/holdemDistribution.html") }