diff --git a/README.md b/README.md index df575b5..246e917 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ At the moment, an alpha version is undertaken, with these features: - Show movements through works (`sw work_number`) - Mark movement as mastered for active user (`m number_of_work number_of_movement`) - Show possible commands (`h`) -- (planned) Show mastered works/movements for activated user +- (planned) Show mastered movements for activated user - (planned) display, if work or movement is mastered from active user when viewing works and movements - (planned) Save recordings per movement in db - (planned) Listen to saved recordings diff --git a/rep_cli.py b/rep_cli.py index ed9d71d..14d0ea4 100644 --- a/rep_cli.py +++ b/rep_cli.py @@ -12,6 +12,7 @@ class Session: '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'), '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'), 'sw': (self.show_movements, 'Show movements of a work\n Usage: sw work_number'), 'su': (self.show_users, 'Show all users'), 'q': (self.quit, 'Quits the program') @@ -80,6 +81,35 @@ class Session: fun_resultstring += f'{key}: {value[1]}\n' return fun_resultstring + def show_mastered(self, _): + fun_resultstring = 'Please activate user' + if not self.user == -1: + sql_command = f''' + SELECT work_id + FROM is_able_to_play + WHERE pianist_id = {self.user} + GROUP BY work_id + ''' + list_of_work_ids = self.db_agent.execute(sql_command).fetchall() + list_of_works = list() + for item in list_of_work_ids: + list_of_works.append(work_under_id(item[0], self.db_agent)) + fun_resultstring = 'All mastered movements:\n' + for work in list_of_works: + for mov_number in work.values['movements'].keys(): + # check if movement is mastered + sql_command = f''' + SELECT * + FROM is_able_to_play + WHERE work_id = {work.id()} + AND mov_id = {mov_number} + AND pianist_id = {self.user} + ''' + is_mastered = len(self.db_agent.execute(sql_command).fetchall()) > 0 + if is_mastered: + fun_resultstring += f'{work.id()} {mov_number}. {work.pretty_mov(mov_number)}\n' + return fun_resultstring + def show_movements(self, arguments): work_id = arguments[0] work = work_under_id(work_id, self.db_agent) @@ -122,7 +152,7 @@ class Session: work_id = arguments[0] resultstring = 'adding:\n' work = work_under_id(work_id, self.db_agent) - if len(arguments) > 1: + 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) @@ -130,7 +160,7 @@ class Session: ''' self.db_agent.execute(sql_command) resultstring += f'{work.pretty_mov(mov_number)}\n' - else: + 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)