From cfe97d223573c4792e5d42a4443c139fd8c87381 Mon Sep 17 00:00:00 2001 From: emkael Date: Sun, 30 Jul 2017 01:44:48 +0200 Subject: Refactoring MySQL tournament names: generalization --- Aktywator/ParyTournament.cs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Aktywator/ParyTournament.cs (limited to 'Aktywator/ParyTournament.cs') diff --git a/Aktywator/ParyTournament.cs b/Aktywator/ParyTournament.cs new file mode 100644 index 0000000..8d80d9f --- /dev/null +++ b/Aktywator/ParyTournament.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Aktywator +{ + class ParyTournament: MySQLTournament + { + public ParyTournament(string name) + : base(name) + { + } + + override internal string getTypeLabel() + { + return "Pary"; + } + + override public string getSectionsNum() + { + return this.mysql.selectOne("SELECT COUNT(DISTINCT seknum) FROM sektory;"); + } + + override public string getTablesNum() + { + return this.mysql.selectOne("SELECT COUNT(*) FROM sektory;"); + } + + } +} -- cgit v1.2.3 From 14f684cee81e45ebaea0dd0abb60c5039a7ed467 Mon Sep 17 00:00:00 2001 From: emkael Date: Sun, 30 Jul 2017 02:28:57 +0200 Subject: Loading names from MySQL tournaments generalized as a dataset --- Aktywator/Bws.cs | 147 ++++++++++++++++++++----------------------- Aktywator/ParyTournament.cs | 25 ++++++++ Aktywator/TeamyTournament.cs | 16 +++++ Aktywator/Tournament.cs | 4 ++ 4 files changed, 114 insertions(+), 78 deletions(-) (limited to 'Aktywator/ParyTournament.cs') diff --git a/Aktywator/Bws.cs b/Aktywator/Bws.cs index 41717b2..5302454 100644 --- a/Aktywator/Bws.cs +++ b/Aktywator/Bws.cs @@ -3,9 +3,7 @@ using System.Collections.Generic; using System.Text; using System.Data.OleDb; using System.Windows.Forms; -using MySql.Data.MySqlClient; -using mydata = MySql.Data.MySqlClient.MySqlDataReader; -using data = System.Data.OleDb.OleDbDataReader; +using System.Data.OleDb; namespace Aktywator { @@ -111,7 +109,7 @@ namespace Aktywator try { string s; - data d = sql.select("SELECT DISTINCT `Section` FROM " + table + " ORDER BY 1"); + OleDbDataReader d = sql.select("SELECT DISTINCT `Section` FROM " + table + " ORDER BY 1"); d.Read(); s = d[0].ToString(); while (d.Read()) @@ -347,10 +345,10 @@ namespace Aktywator public void syncNames(Tournament tournament, bool interactive, string startRounds) { int count = 0, countNew = 0, SKOK_STOLOW = 100; - data d; + OleDbDataReader d; startRounds = startRounds.Trim(); - if (tournament.type == 1) + if (tournament.type == Tournament.TYPE_PARY) { if (startRounds.Length > 0) { @@ -367,94 +365,87 @@ namespace Aktywator d = sql.select("SELECT `Section`, `Table`, NSPair, EWPair FROM RoundData WHERE `Table`<=" + SKOK_STOLOW); } - while (d.Read()) + try { - string section = d.GetInt32(0).ToString(); - string table = d.GetInt32(1).ToString(); - string ns = d.GetInt32(2).ToString(); - string ew = d.GetInt32(3).ToString(); + Dictionary> names = tournament.getNameList(); - StringBuilder query = new StringBuilder(); - if (tournament.type == 1) - { - query.Append("SELECT CONCAT(SUBSTR(imie,1,1),'.',nazw) name FROM zawodnicy WHERE idp="); - query.Append(ns); - query.Append(" OR idp="); - query.Append(ew); - query.Append(" ORDER BY idp "); - if (int.Parse(ew) < int.Parse(ns)) - query.Append("DESC"); - } - else + while (d.Read()) { - query.Append("SELECT fullname NAME FROM teams WHERE id="); - query.Append(ns); - query.Append(" UNION ALL SELECT ' ' UNION ALL"); - query.Append(" SELECT fullname NAME FROM teams WHERE id="); - query.Append(ew); - query.Append(" UNION ALL SELECT ' '; "); - } - mydata n = ((MySQLTournament)tournament).mysql.select(query.ToString()); - - DialogResult dr = DialogResult.None; + string section = d.GetInt32(0).ToString(); + string table = d.GetInt32(1).ToString(); + int ns = d.GetInt32(2); + int ew = d.GetInt32(3); - try - { - n.Read(); - countNew += updateName(section, table, "N", n.IsDBNull(0) ? "" : n.GetString(0)); - if (tournament.type == 2) - countNew += updateName(section, (int.Parse(table) + SKOK_STOLOW).ToString(), "E", n.IsDBNull(0) ? "" : n.GetString(0)); - n.Read(); - countNew += updateName(section, table, "S", n.IsDBNull(0) ? "" : n.GetString(0)); - if (tournament.type == 2) - countNew += updateName(section, (int.Parse(table) + SKOK_STOLOW).ToString(), "W", n.IsDBNull(0) ? "" : n.GetString(0)); - n.Read(); - countNew += updateName(section, table, "E", n.IsDBNull(0) ? "" : n.GetString(0)); - if (tournament.type == 2) - countNew += updateName(section, (int.Parse(table) + SKOK_STOLOW).ToString(), "N", n.IsDBNull(0) ? "" : n.GetString(0)); - n.Read(); - countNew += updateName(section, table, "W", n.IsDBNull(0) ? "" : n.GetString(0)); - if (tournament.type == 2) - countNew += updateName(section, (int.Parse(table) + SKOK_STOLOW).ToString(), "S", n.IsDBNull(0) ? "" : n.GetString(0)); - - if (tournament.type == 1) count += 4; - else count += 8; - } - catch (MySqlException ee) - { - if (interactive) + try { - if (ee.ErrorCode == -2147467259) + if (!names.ContainsKey(ns)) { - dr = MessageBox.Show("W bws-ie jest para/team (" + ns + " albo " + ew - + "), który nie istnieje w wybranym turnieju. Może to nie ten turniej?" - + "\n\n" + "Kontynuować wczytywanie?", - "Zły turniej", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); + throw new KeyNotFoundException(ns.ToString()); } - else + countNew += updateName(section, table, "N", names[ns][0]); + countNew += updateName(section, table, "S", names[ns][1]); + count += 2; + if (tournament.type == Tournament.TYPE_TEAMY) { - dr = MessageBox.Show(ee.Message + "\n\n" + "Kontynuować?", - "Błąd MySQL", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); + countNew += updateName(section, (int.Parse(table) + SKOK_STOLOW).ToString(), "E", names[ns][0]); + countNew += updateName(section, (int.Parse(table) + SKOK_STOLOW).ToString(), "W", names[ns][1]); + count += 2; + } + } + catch (KeyNotFoundException keyE) + { + if (interactive) + { + DialogResult dr = MessageBox.Show("W bws-ie jest para/team (" + keyE.Message + ")" + + ", który nie istnieje w wybranym turnieju." + + "Może to nie ten turniej?" + "\n\n" + "Kontynuować wczytywanie?", + "Zły turniej", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); + if (dr == DialogResult.No) break; } } - } - finally - { try { - n.Close(); + if (!names.ContainsKey(ew)) + { + throw new KeyNotFoundException(ew.ToString()); + } + countNew += updateName(section, table, "E", names[ew][0]); + countNew += updateName(section, table, "W", names[ew][1]); + count += 2; + if (tournament.type == Tournament.TYPE_TEAMY) + { + countNew += updateName(section, (int.Parse(table) + SKOK_STOLOW).ToString(), "N", names[ew][0]); + countNew += updateName(section, (int.Parse(table) + SKOK_STOLOW).ToString(), "S", names[ew][1]); + count += 2; + } + } + catch (KeyNotFoundException keyE) + { + if (interactive) + { + DialogResult dr = MessageBox.Show("W bws-ie jest para/team (" + keyE.Message + ")" + + ", który nie istnieje w wybranym turnieju." + + "Może to nie ten turniej?" + "\n\n" + "Kontynuować wczytywanie?", + "Zły turniej", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); + if (dr == DialogResult.No) break; + } } - catch (Exception) { } } - if (dr == DialogResult.No) break; + if (interactive) + { + MessageBox.Show("Synchronizacja zakończona!\nPrzejrzanych nazwisk: " + count + "\nZmienionych: " + countNew, + "Synchronizacja nazwisk", MessageBoxButtons.OK, MessageBoxIcon.Information); + if (sql.selectOne("SELECT BM2ShowPlayerNames FROM Settings") != "1") + MessageBox.Show("Pamiętaj żeby włączyć opcję \"pokazuj nazwiska\"!", "Brakujące ustawienie", + MessageBoxButtons.OK, MessageBoxIcon.Information); + } } - if (interactive) + catch (Exception ee) { - MessageBox.Show("Synchronizacja zakończona!\nPrzejrzanych nazwisk: " + count + "\nZmienionych: " + countNew, - "Synchronizacja nazwisk", MessageBoxButtons.OK, MessageBoxIcon.Information); - if (sql.selectOne("SELECT BM2ShowPlayerNames FROM Settings") != "1") - MessageBox.Show("Pamiętaj żeby włączyć opcję \"pokazuj nazwiska\"!", "Brakujące ustawienie", - MessageBoxButtons.OK, MessageBoxIcon.Information); + if (interactive) + { + MessageBox.Show(ee.Message, "Błąd wczytywania nazwisk", MessageBoxButtons.OK, MessageBoxIcon.Error); + } } } diff --git a/Aktywator/ParyTournament.cs b/Aktywator/ParyTournament.cs index 8d80d9f..a5d9ff2 100644 --- a/Aktywator/ParyTournament.cs +++ b/Aktywator/ParyTournament.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using MySql.Data.MySqlClient; namespace Aktywator { @@ -26,5 +27,29 @@ namespace Aktywator return this.mysql.selectOne("SELECT COUNT(*) FROM sektory;"); } + override internal Dictionary> getNameList() + { + Dictionary> pairs = new Dictionary>(); + MySqlDataReader dbData = this.mysql.select("SELECT idp, CONCAT(SUBSTR(imie,1,1),'.',nazw) name FROM zawodnicy"); + while (dbData.Read()) + { + int pairNo = dbData.GetInt32(0); + if (!pairs.ContainsKey(pairNo)) + { + pairs.Add(pairNo, new List()); + } + pairs[pairNo].Add(dbData.IsDBNull(1) ? "" : dbData.GetString(1)); + } + foreach (KeyValuePair> pair in pairs) + { + while (pair.Value.Count < 2) + { + pair.Value.Add(""); + } + } + dbData.Close(); + return pairs; + } + } } diff --git a/Aktywator/TeamyTournament.cs b/Aktywator/TeamyTournament.cs index 34908be..3b83c8b 100644 --- a/Aktywator/TeamyTournament.cs +++ b/Aktywator/TeamyTournament.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using MySql.Data.MySqlClient; namespace Aktywator { @@ -26,5 +27,20 @@ namespace Aktywator return this.mysql.selectOne("SELECT teamcnt FROM admin;"); } + override internal Dictionary> getNameList() + { + Dictionary> teams = new Dictionary>(); + MySqlDataReader dbData = this.mysql.select("SELECT id, fullname NAME FROM teams"); + while (dbData.Read()) + { + List names = new List(); + names.Add(dbData.IsDBNull(1) ? "" : dbData.GetString(1)); + names.Add(""); + teams.Add(dbData.GetInt32(0), names); + } + dbData.Close(); + return teams; + } + } } diff --git a/Aktywator/Tournament.cs b/Aktywator/Tournament.cs index fdeb323..70fe268 100644 --- a/Aktywator/Tournament.cs +++ b/Aktywator/Tournament.cs @@ -32,5 +32,9 @@ namespace Aktywator abstract internal string getTypeLabel(); + virtual internal Dictionary> getNameList() + { + return new Dictionary>(); + } } } -- cgit v1.2.3 From a8861edf16f737bab55748f4041805b43b2d1408 Mon Sep 17 00:00:00 2001 From: emkael Date: Sun, 30 Jul 2017 03:37:50 +0200 Subject: Making sure correct Tournament type is set in MySQLTournament subclasses --- Aktywator/ParyTournament.cs | 1 + Aktywator/TeamyTournament.cs | 1 + 2 files changed, 2 insertions(+) (limited to 'Aktywator/ParyTournament.cs') diff --git a/Aktywator/ParyTournament.cs b/Aktywator/ParyTournament.cs index a5d9ff2..9a592d7 100644 --- a/Aktywator/ParyTournament.cs +++ b/Aktywator/ParyTournament.cs @@ -10,6 +10,7 @@ namespace Aktywator public ParyTournament(string name) : base(name) { + this._type = Tournament.TYPE_PARY; } override internal string getTypeLabel() diff --git a/Aktywator/TeamyTournament.cs b/Aktywator/TeamyTournament.cs index 3b83c8b..7bc3496 100644 --- a/Aktywator/TeamyTournament.cs +++ b/Aktywator/TeamyTournament.cs @@ -10,6 +10,7 @@ namespace Aktywator public TeamyTournament(string name) : base(name) { + this._type = Tournament.TYPE_TEAMY; } override internal string getTypeLabel() -- cgit v1.2.3 From c3be44ed94e61c3c4bb6a69f0db891580ee7a037 Mon Sep 17 00:00:00 2001 From: emkael Date: Tue, 22 Aug 2017 13:13:08 +0200 Subject: Filling empty player names with spaces so that "name n/a" message is not displayed in the bridgemate --- Aktywator/ParyTournament.cs | 4 ++-- Aktywator/RRBTournament.cs | 6 +++--- Aktywator/TeamyTournament.cs | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) (limited to 'Aktywator/ParyTournament.cs') diff --git a/Aktywator/ParyTournament.cs b/Aktywator/ParyTournament.cs index 9a592d7..f467119 100644 --- a/Aktywator/ParyTournament.cs +++ b/Aktywator/ParyTournament.cs @@ -39,13 +39,13 @@ namespace Aktywator { pairs.Add(pairNo, new List()); } - pairs[pairNo].Add(dbData.IsDBNull(1) ? "" : dbData.GetString(1)); + pairs[pairNo].Add(dbData.IsDBNull(1) ? " " : dbData.GetString(1)); } foreach (KeyValuePair> pair in pairs) { while (pair.Value.Count < 2) { - pair.Value.Add(""); + pair.Value.Add(" "); } } dbData.Close(); diff --git a/Aktywator/RRBTournament.cs b/Aktywator/RRBTournament.cs index 20a3c21..a86e199 100644 --- a/Aktywator/RRBTournament.cs +++ b/Aktywator/RRBTournament.cs @@ -63,14 +63,14 @@ namespace Aktywator { if ("pauza".Equals(player.InnerText.Trim())) { - names[pairNo].Add(""); + names[pairNo].Add(" "); } else { string[] name = player.InnerText.Trim().Split(' '); if (name.Length > 0) { - name[0] = (name[0].Length > 0) ? name[0][0].ToString() : ""; + name[0] = (name[0].Length > 0) ? name[0][0].ToString() : " "; } names[pairNo].Add(String.Join(" ", name)); } @@ -81,7 +81,7 @@ namespace Aktywator { while (pair.Value.Count < 2) { - pair.Value.Add(""); + pair.Value.Add(" "); } } return names; diff --git a/Aktywator/TeamyTournament.cs b/Aktywator/TeamyTournament.cs index 7bc3496..78ce0e0 100644 --- a/Aktywator/TeamyTournament.cs +++ b/Aktywator/TeamyTournament.cs @@ -35,8 +35,8 @@ namespace Aktywator while (dbData.Read()) { List names = new List(); - names.Add(dbData.IsDBNull(1) ? "" : dbData.GetString(1)); - names.Add(""); + names.Add(dbData.IsDBNull(1) ? " " : dbData.GetString(1)); + names.Add(" "); teams.Add(dbData.GetInt32(0), names); } dbData.Close(); -- cgit v1.2.3 From 6ad488f28bfd74c39be0c420a671b7c33f9250d6 Mon Sep 17 00:00:00 2001 From: emkael Date: Wed, 23 Aug 2017 17:17:49 +0200 Subject: Name shortening independent from torunament source --- Aktywator/ParyTournament.cs | 2 +- Aktywator/RRBTournament.cs | 14 +------------- Aktywator/Tournament.cs | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 14 deletions(-) (limited to 'Aktywator/ParyTournament.cs') diff --git a/Aktywator/ParyTournament.cs b/Aktywator/ParyTournament.cs index f467119..4950c3d 100644 --- a/Aktywator/ParyTournament.cs +++ b/Aktywator/ParyTournament.cs @@ -31,7 +31,7 @@ namespace Aktywator override internal Dictionary> getNameList() { Dictionary> pairs = new Dictionary>(); - MySqlDataReader dbData = this.mysql.select("SELECT idp, CONCAT(SUBSTR(imie,1,1),'.',nazw) name FROM zawodnicy"); + MySqlDataReader dbData = this.mysql.select("SELECT idp, CONCAT(imie, ' ', nazw) name FROM zawodnicy"); while (dbData.Read()) { int pairNo = dbData.GetInt32(0); diff --git a/Aktywator/RRBTournament.cs b/Aktywator/RRBTournament.cs index 4c8f281..48040ee 100644 --- a/Aktywator/RRBTournament.cs +++ b/Aktywator/RRBTournament.cs @@ -62,19 +62,7 @@ namespace Aktywator names.Add(pairNo, new List()); foreach (XmlNode player in pair.SelectNodes("gracz/nazwisko")) { - if ("pauza".Equals(player.InnerText.Trim())) - { - names[pairNo].Add(" "); - } - else - { - string[] name = player.InnerText.Trim().Split(' '); - if (name.Length > 0) - { - name[0] = (name[0].Length > 0) ? name[0][0].ToString() : " "; - } - names[pairNo].Add(String.Join(" ", name)); - } + names[pairNo].Add(player.InnerText); } } diff --git a/Aktywator/Tournament.cs b/Aktywator/Tournament.cs index 85a2666..cbe9bf9 100644 --- a/Aktywator/Tournament.cs +++ b/Aktywator/Tournament.cs @@ -38,5 +38,21 @@ namespace Aktywator return new Dictionary>(); } + virtual internal string shortenNameToBWS(string name) + { + if ("pauza".Equals(name.Trim())) + { + return " "; + } + else + { + string[] nameParts = name.Trim().Split(' '); + if (nameParts.Length > 0) + { + nameParts[0] = (nameParts[0].Length > 0) ? nameParts[0][0].ToString() : " "; + } + return String.Join(" ", nameParts); + } + } } } -- cgit v1.2.3 From 8cda79bab92e0b6cf06a6b270662e13ea6a7ad30 Mon Sep 17 00:00:00 2001 From: emkael Date: Sat, 18 Nov 2017 19:49:37 +0100 Subject: Revised tournament database detection. Fixes #25. --- Aktywator/MySQLTournament.cs | 28 ++++++++-------------------- Aktywator/ParyTournament.cs | 4 ++-- Aktywator/TeamyTournament.cs | 4 ++-- 3 files changed, 12 insertions(+), 24 deletions(-) (limited to 'Aktywator/ParyTournament.cs') diff --git a/Aktywator/MySQLTournament.cs b/Aktywator/MySQLTournament.cs index c3cb29f..f745a91 100644 --- a/Aktywator/MySQLTournament.cs +++ b/Aktywator/MySQLTournament.cs @@ -10,24 +10,15 @@ namespace Aktywator { public MySQL mysql; - public MySQLTournament(string name) + public MySQLTournament(string name, int type) { this._name = name; + this._type = type; + if (this._type < Tournament.TYPE_UNKNOWN || this._type > Tournament.TYPE_RRB) + { + this._type = Tournament.TYPE_UNKNOWN; + } mysql = new MySQL(name); - recognizeType(); - } - - private void recognizeType() - { - if ((mysql.selectOne("SHOW TABLES LIKE 'admin'") == "admin") - && (mysql.selectOne("SHOW FIELDS IN admin LIKE 'dnazwa'") == "dnazwa") - && (mysql.selectOne("SHOW TABLES LIKE 'zawodnicy'") == "zawodnicy")) - _type = Tournament.TYPE_PARY; - else if ((mysql.selectOne("SHOW TABLES LIKE 'admin'") == "admin") - && (mysql.selectOne("SHOW FIELDS IN admin LIKE 'teamcnt'") == "teamcnt") - && (mysql.selectOne("SHOW TABLES LIKE 'players'") == "players")) - _type = Tournament.TYPE_TEAMY; - else _type = Tournament.TYPE_UNKNOWN; } public override string ToString() @@ -39,13 +30,10 @@ namespace Aktywator { List list = new List(); MySQL c = new MySQL(""); - data dbs = c.select("SHOW DATABASES;"); + data dbs = c.select("SELECT TABLE_SCHEMA, COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_NAME = 'admin' AND COLUMN_NAME IN ('dnazwa', 'teamcnt') ORDER BY TABLE_SCHEMA;"); while (dbs.Read()) { - MySQLTournament t = new MySQLTournament(dbs.GetString(0)); - if (t.type > Tournament.TYPE_UNKNOWN) - list.Add(t); - t.mysql.close(); + list.Add(new MySQLTournament(dbs.GetString(0), "dnazwa".Equals(dbs.GetString(1)) ? Tournament.TYPE_PARY : Tournament.TYPE_TEAMY)); } dbs.Close(); return list; diff --git a/Aktywator/ParyTournament.cs b/Aktywator/ParyTournament.cs index 4950c3d..2ee7243 100644 --- a/Aktywator/ParyTournament.cs +++ b/Aktywator/ParyTournament.cs @@ -7,8 +7,8 @@ namespace Aktywator { class ParyTournament: MySQLTournament { - public ParyTournament(string name) - : base(name) + public ParyTournament(string name, int type = Tournament.TYPE_PARY) + : base(name, type) { this._type = Tournament.TYPE_PARY; } diff --git a/Aktywator/TeamyTournament.cs b/Aktywator/TeamyTournament.cs index 7fb4f1c..8da063d 100644 --- a/Aktywator/TeamyTournament.cs +++ b/Aktywator/TeamyTournament.cs @@ -7,8 +7,8 @@ namespace Aktywator { class TeamyTournament : MySQLTournament { - public TeamyTournament(string name) - : base(name) + public TeamyTournament(string name, int type = Tournament.TYPE_TEAMY) + : base(name, type) { this._type = Tournament.TYPE_TEAMY; } -- cgit v1.2.3 From 2a566a80ca3cec4914965696ab29c2f12bac899c Mon Sep 17 00:00:00 2001 From: emkael Date: Sat, 18 Nov 2017 19:53:08 +0100 Subject: Ordering Pary names by pair ID --- Aktywator/ParyTournament.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Aktywator/ParyTournament.cs') diff --git a/Aktywator/ParyTournament.cs b/Aktywator/ParyTournament.cs index 2ee7243..0c9209f 100644 --- a/Aktywator/ParyTournament.cs +++ b/Aktywator/ParyTournament.cs @@ -31,7 +31,7 @@ namespace Aktywator override internal Dictionary> getNameList() { Dictionary> pairs = new Dictionary>(); - MySqlDataReader dbData = this.mysql.select("SELECT idp, CONCAT(imie, ' ', nazw) name FROM zawodnicy"); + MySqlDataReader dbData = this.mysql.select("SELECT idp, CONCAT(imie, ' ', nazw) name FROM zawodnicy ORDER BY idp"); while (dbData.Read()) { int pairNo = dbData.GetInt32(0); -- cgit v1.2.3