From 48ed0d830fc71bde7bce823e598b7813dbad5d56 Mon Sep 17 00:00:00 2001 From: luxick Date: Wed, 14 Mar 2018 14:47:04 +0100 Subject: [PATCH] Create death events function. --- dsst/dsst_gtk3/dialogs.py | 4 ++-- dsst/dsst_gtk3/gtk_ui.py | 5 +++++ dsst/dsst_gtk3/handlers/death_handlers.py | 7 +++---- dsst/dsst_gtk3/reload.py | 3 ++- dsst/dsst_gtk3/resources/glade/window.glade | 13 +++++++++++++ dsst/dsst_server/data_access/sql.py | 3 +++ dsst/dsst_server/func_write.py | 10 ++++++++++ 7 files changed, 38 insertions(+), 7 deletions(-) diff --git a/dsst/dsst_gtk3/dialogs.py b/dsst/dsst_gtk3/dialogs.py index 4642f74..26f4702 100644 --- a/dsst/dsst_gtk3/dialogs.py +++ b/dsst/dsst_gtk3/dialogs.py @@ -146,8 +146,8 @@ def edit_death(app: 'gtk_ui.GtkUi', death: 'models.Death'=None): return None # Parse the inputs - death.time = datetime.time(hour_spin.get_value(), min_spin.set_value) - death.enemy = util.get_combo_value(app.ui.get_object('edit_death_enemy_combo'), 3) + death.time = datetime.time(int(hour_spin.get_value()), int(min_spin.get_value())) + death.enemy = util.get_combo_value(app.ui.get_object('edit_death_enemy_combo'), 4) death.player = util.get_combo_value(app.ui.get_object('edit_death_player_combo'), 0) death.info = app.ui.get_object('edit_death_comment_entry').get_text() store = app.ui.get_object('player_penalties_store') diff --git a/dsst/dsst_gtk3/gtk_ui.py b/dsst/dsst_gtk3/gtk_ui.py index 5f09263..e8e3408 100644 --- a/dsst/dsst_gtk3/gtk_ui.py +++ b/dsst/dsst_gtk3/gtk_ui.py @@ -77,6 +77,11 @@ class GtkUi: self.data_client.send_request('update_drink', drink) self.full_reload() + def save_death(self, death: 'models.Death'): + with util.network_operation(self): + self.data_client.send_request('save_death', death) + self.full_reload() + def update_season(self, season: 'models.Season'): with util.network_operation(self): self.data_client.send_request('update_season', season) diff --git a/dsst/dsst_gtk3/handlers/death_handlers.py b/dsst/dsst_gtk3/handlers/death_handlers.py index 3594afd..50f7f30 100644 --- a/dsst/dsst_gtk3/handlers/death_handlers.py +++ b/dsst/dsst_gtk3/handlers/death_handlers.py @@ -11,10 +11,9 @@ class DeathHandlers: ep_id = self.app.get_selected_episode_id() if not ep_id: return - result = dialogs.edit_death(self.app) - if result == Gtk.ResponseType.OK: - self.app.episodes.valid = False - self.app.full_reload() + death = dialogs.edit_death(self.app) + if death: + self.app.save_death(death) def on_penalty_drink_changed(self, _, path, text): self.app.ui.get_object('player_penalties_store')[path][2] = text diff --git a/dsst/dsst_gtk3/reload.py b/dsst/dsst_gtk3/reload.py index 89bf92c..98c01e5 100644 --- a/dsst/dsst_gtk3/reload.py +++ b/dsst/dsst_gtk3/reload.py @@ -81,7 +81,8 @@ def reload_episode_stats(app: 'gtk_ui.GtkUi'): penalties = [x.drink.name for x in death.penalties] penalties = ['{}x {}'.format(number, drink) for drink, number in Counter(penalties).items()] penalty_string = ', '.join(penalties) - store.append([death.id, death.player.name, death.enemy.name, penalty_string]) + time_string = '{}:{}'.format(death.time.hour, death.time.minute) + store.append([death.id, death.player.name, death.enemy.name, penalty_string, time_string]) # Reload victory store for notebook view store = app.ui.get_object('episode_victories_store') store.clear() diff --git a/dsst/dsst_gtk3/resources/glade/window.glade b/dsst/dsst_gtk3/resources/glade/window.glade index 23f1034..17e3648 100644 --- a/dsst/dsst_gtk3/resources/glade/window.glade +++ b/dsst/dsst_gtk3/resources/glade/window.glade @@ -51,6 +51,8 @@ + + @@ -987,6 +989,17 @@ + + + Time + + + + 4 + + + + Player diff --git a/dsst/dsst_server/data_access/sql.py b/dsst/dsst_server/data_access/sql.py index cd9391c..c5ae0f6 100644 --- a/dsst/dsst_server/data_access/sql.py +++ b/dsst/dsst_server/data_access/sql.py @@ -6,6 +6,8 @@ from sql import Episode query = Episode.select().where(Episode.name == 'MyName') """ import sys +import datetime + try: from peewee import * except ImportError: @@ -70,6 +72,7 @@ class Enemy(Model): class Death(Model): id = AutoField() info = CharField(null=True) + time = TimeField(default=datetime.time(0, 0)) player = ForeignKeyField(Player) enemy = ForeignKeyField(Enemy) episode = ForeignKeyField(Episode, backref='deaths') diff --git a/dsst/dsst_server/func_write.py b/dsst/dsst_server/func_write.py index 7de237b..a74aacb 100644 --- a/dsst/dsst_server/func_write.py +++ b/dsst/dsst_server/func_write.py @@ -32,6 +32,16 @@ class WriteFunctions: sql.Drink.vol: drink.vol}) .execute()) + @staticmethod + def save_death(death: 'models.Death'): + with sql.db.atomic(): + created_id = (sql.Death + .insert(info=death.info, player=death.player, enemy=death.enemy, episode=death.episode, + time=death.time) + .execute()) + for penalty in death.penalties: + sql.Penalty.create(death=created_id, size=penalty.size, drink=penalty.drink, player=penalty.player) + @staticmethod def update_season(season: 'models.Season', *_): (sql.Season