From 6129b70f8a3ded775df6fd2fc5ecc3e1f07f2757 Mon Sep 17 00:00:00 2001 From: Jan Bertram Date: Wed, 15 Nov 2023 18:18:42 +0100 Subject: [PATCH] new feature: remove works or movements from being mastered --- README.md | 2 +- rep_cli.py | 65 +++++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 53 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 50023d5..9a9f41e 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ At the moment, an alpha version is undertaken, with these features: - Show mastered movements for activated user (`sm`) - display, if work or movement is mastered from active user when viewing works and movements - Works are shown sorted by composer and opus/work_directory-number (`s`, `smo`) or by composer and collection (`sm`) -- (planned) Remove work or movement from being mastered for active user +- Remove work or movement from being mastered for active user (`r number_of_work` or `r number_of_work number_of_movement`) - (planned) Remove user - (planned) Fix known bugs diff --git a/rep_cli.py b/rep_cli.py index 85425d4..ef2f46b 100644 --- a/rep_cli.py +++ b/rep_cli.py @@ -12,6 +12,7 @@ class Session: 'h': (self.show_help, 'Displays this help document'), 'm': (self.mark_work_as_mastered, 'Marks work or movement as mastered for the active user\n Usage: m number_of_work, m number_of_work number_of_movement'), 'n': (self.create_new_user, 'Creates new user\n Usage: n firstname name'), + 'r': (self.remove_work_as_mastered, 'Unmarks work or movement as mastered for the active user\n Usage: r number_of_work, r number_of_work number_of_movement'), 's': (self.show_works, 'Show the works stored in the database\n Usage: s, s number_of_composer'), 'sm': (self.show_mastered, 'Show mastered movements for activated user'), 'smo': (self.show_mastered_opus, 'Show mastered movements for activated user, sorted by opus.'), @@ -193,25 +194,63 @@ class Session: return fun_resultstring def mark_work_as_mastered(self, arguments): - work_id = arguments[0] - resultstring = 'adding:\n' - work = work_under_id(work_id, self.db_agent) - if len(arguments) > 1: # in case there is a movement number given - mov_number = int(arguments[1]) - sql_command = f''' - INSERT INTO is_able_to_play (work_id, mov_id, pianist_id) - VALUES ({work_id}, {mov_number}, {self.user}) - ''' - self.db_agent.execute(sql_command) - resultstring += f'{work.pretty_mov(mov_number)}\n' - else: # mark all movements of the work as mastered - for mov_number in work.values['movements'].keys(): + if self.user == -1: + resultstring = 'Please activate user' + else: + work_id = arguments[0] + resultstring = 'adding:\n' + work = work_under_id(work_id, self.db_agent) + if len(arguments) > 1: # in case there is a movement number given + mov_number = int(arguments[1]) sql_command = f''' INSERT INTO is_able_to_play (work_id, mov_id, pianist_id) VALUES ({work_id}, {mov_number}, {self.user}) ''' self.db_agent.execute(sql_command) resultstring += f'{work.pretty_mov(mov_number)}\n' + else: # mark all movements of the work as mastered + for mov_number in work.values['movements'].keys(): + sql_command = f''' + INSERT INTO is_able_to_play (work_id, mov_id, pianist_id) + VALUES ({work_id}, {mov_number}, {self.user}) + ''' + self.db_agent.execute(sql_command) + resultstring += f'{work.pretty_mov(mov_number)}\n' + return resultstring + + def remove_work_as_mastered(self, arguments): + if self.user == -1: + resultstring = 'Please activate user' + else: + work_id = arguments[0] + resultstring = 'removing:\n' + work = work_under_id(work_id, self.db_agent) + if len(arguments) > 1: # in case there is a movment number given + mov_number = int(arguments[1]) + if self.movement_is_mastered(work_id, mov_number): + sql_command = f''' + DELETE FROM is_able_to_play + WHERE work_id = {work_id} + AND mov_id = {mov_number} + AND pianist_id = {self.user} + ''' + self.db_agent.execute(sql_command) + resultstring += f'{work.pretty_mov(mov_number)}\n' + else: + resultstring += f'Movement was not marked as mastered: {work.pretty_mov(mov_number)}\n' + else: + for mov_number in work.values['movements'].keys(): + if self.movement_is_mastered(work_id, mov_number): + sql_command = f''' + DELETE FROM is_able_to_play + WHERE work_id = {work_id} + AND mov_id = {mov_number} + AND pianist_id = {self.user} + ''' + self.db_agent.execute(sql_command) + resultstring += f'{work.pretty_mov(mov_number)}\n' + else: + resultstring += f'Movement was not marked as mastered: {work.pretty_mov(mov_number)}\n' return resultstring def quit(self, _):