diff --git a/src/settings.py b/src/settings.py index 098f7b6..1aa8c94 100644 --- a/src/settings.py +++ b/src/settings.py @@ -976,9 +976,8 @@ def init_db(): c.execute('CREATE TABLE IF NOT EXISTS allowed_accs (acc TEXT, command TEXT, UNIQUE(acc, command))') # ALLOW_ACCOUNTS - c.execute('CREATE TABLE IF NOT EXISTS ping_if_prefs (cloak TEXT, players INTEGER)') # ping-if preferences (hostnames - backup) - - c.execute('CREATE TABLE IF NOT EXISTS ping_if_prefs_accs (acc TEXT, players INTEGER)') # ping-if prefs (accounts - primary) + c.execute('CREATE TABLE IF NOT EXISTS pingif_prefs (user TEXT, is_account BOOLEAN, players INTEGER, PRIMARY KEY(user, is_account))') # pingif player count preferences + c.execute('CREATE INDEX IF NOT EXISTS ix_ping_prefs_pingif ON pingif_prefs (players ASC)') c.execute('PRAGMA table_info(pre_restart_state)') try: @@ -1035,21 +1034,22 @@ def init_db(): ALLOW_ACCOUNTS[row[0]] = [] ALLOW_ACCOUNTS[row[0]].append(row[1]) - c.execute('SELECT * FROM ping_if_prefs') + c.execute('SELECT * FROM pingif_prefs') for row in c: - if row[0] not in PING_IF_PREFS: - PING_IF_PREFS[row[0]] = row[1] - if row[1] not in PING_IF_NUMS: - PING_IF_NUMS[row[1]] = [] - PING_IF_NUMS[row[1]].append(row[0]) - - c.execute('SELECT * FROM ping_if_prefs_accs') - for row in c: - if row[0] not in PING_IF_PREFS_ACCS: - PING_IF_PREFS_ACCS[row[0]] = row[1] - if row[1] not in PING_IF_NUMS_ACCS: - PING_IF_NUMS_ACCS[row[1]] = [] - PING_IF_NUMS_ACCS[row[1]].append(row[0]) + # is an account + if row[1]: + if row[0] not in PING_IF_PREFS_ACCS: + PING_IF_PREFS_ACCS[row[0]] = row[2] + if row[1] not in PING_IF_NUMS_ACCS: + PING_IF_NUMS_ACCS[row[2]] = [] + PING_IF_NUMS_ACCS[row[2]].append(row[0]) + # is a host + else: + if row[0] not in PING_IF_PREFS: + PING_IF_PREFS[row[0]] = row[2] + if row[1] not in PING_IF_NUMS: + PING_IF_NUMS[row[2]] = [] + PING_IF_NUMS[row[2]].append(row[0]) # populate the roles table c.execute('DROP TABLE IF EXISTS roles') @@ -1146,17 +1146,11 @@ def remove_allow_acc(acc, command): with conn: c.execute('DELETE FROM allowed_accs WHERE acc=? AND command=?', (acc, command)) -def set_ping_if_status(cloak, players): +def set_pingif_status(user, is_account, players): with conn: - c.execute('DELETE FROM ping_if_prefs WHERE cloak=?', (cloak,)) + c.execute('DELETE FROM pingif_prefs WHERE user=? AND is_account=?', (user, is_account)) if players != 0: - c.execute('INSERT OR REPLACE INTO ping_if_prefs VALUES (?,?)', (cloak, players)) - -def set_ping_if_status_acc(acc, players): - with conn: - c.execute('DELETE FROM ping_if_prefs_accs WHERE acc=?', (acc,)) - if players != 0: - c.execute('INSERT OR REPLACE INTO ping_if_prefs_accs VALUES (?,?)', (acc, players)) + c.execute('INSERT OR REPLACE INTO pingif_prefs VALUES (?,?,?)', (user, is_account, players)) def update_role_stats(acc, role, won, iwon): with conn: diff --git a/src/wolfgame.py b/src/wolfgame.py index 2237af3..4bdb651 100644 --- a/src/wolfgame.py +++ b/src/wolfgame.py @@ -798,7 +798,7 @@ def toggle_altpinged_status(nick, value, old=None): if acc and acc != "*": if acc in var.PING_IF_PREFS_ACCS.keys(): del var.PING_IF_PREFS_ACCS[acc] - var.set_ping_if_status_acc(acc, 0) + var.set_pingif_status(acc, True, 0) if old is not None: with var.WARNING_LOCK: if old in var.PING_IF_NUMS_ACCS.keys(): @@ -806,7 +806,7 @@ def toggle_altpinged_status(nick, value, old=None): var.PING_IF_NUMS_ACCS[old].remove(acc) if not var.ACCOUNTS_ONLY and cloak in var.PING_IF_PREFS.keys(): del var.PING_IF_PREFS[cloak] - var.set_ping_if_status(cloak, 0) + var.set_pingif_status(cloak, False, 0) if old is not None: with var.WARNING_LOCK: if old in var.PING_IF_NUMS.keys(): @@ -815,7 +815,7 @@ def toggle_altpinged_status(nick, value, old=None): else: if acc and acc != "*": var.PING_IF_PREFS_ACCS[acc] = value - var.set_ping_if_status_acc(acc, value) + var.set_pingif_status(acc, True, value) with var.WARNING_LOCK: if value not in var.PING_IF_NUMS_ACCS.keys(): var.PING_IF_NUMS_ACCS[value] = [] @@ -826,7 +826,7 @@ def toggle_altpinged_status(nick, value, old=None): var.PING_IF_NUMS_ACCS[old].remove(acc) elif not var.ACCOUNTS_ONLY: var.PING_IF_PREFS[cloak] = value - var.set_ping_if_status(cloak, value) + var.set_pingif_status(cloak, False, value) with var.WARNING_LOCK: if value not in var.PING_IF_NUMS.keys(): var.PING_IF_NUMS[value] = []