Compare commits

6 Commits

3 changed files with 37 additions and 5 deletions

View File

@@ -22,9 +22,11 @@ At the moment, an alpha version is undertaken, with these features:
- Show movements through works (`sw work_number`) - Show movements through works (`sw work_number`)
- Mark movement as mastered for active user (`m number_of_work number_of_movement`) - Mark movement as mastered for active user (`m number_of_work number_of_movement`)
- Show possible commands (`h`) - Show possible commands (`h`)
- (planned) Show mastered works/movements for activated user - Show mastered movements for activated user (`sm`)
- (planned) display, if work or movement is mastered from active user when viewing works and movements
- (planned) Save recordings per movement in db - (planned) Save recordings per movement in db
- (planned) Listen to saved recordings - (planned) Listen to saved recordings
- (planned) Works are shown sorted (opus, collection e.g. "Walzer", "Sonaten")
## Requirements ## Requirements

View File

@@ -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'), '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'), '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'), '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'), 'sw': (self.show_movements, 'Show movements of a work\n Usage: sw work_number'),
'su': (self.show_users, 'Show all users'), 'su': (self.show_users, 'Show all users'),
'q': (self.quit, 'Quits the program') 'q': (self.quit, 'Quits the program')
@@ -80,6 +81,35 @@ class Session:
fun_resultstring += f'{key}: {value[1]}\n' fun_resultstring += f'{key}: {value[1]}\n'
return fun_resultstring 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): def show_movements(self, arguments):
work_id = arguments[0] work_id = arguments[0]
work = work_under_id(work_id, self.db_agent) work = work_under_id(work_id, self.db_agent)
@@ -122,7 +152,7 @@ class Session:
work_id = arguments[0] work_id = arguments[0]
resultstring = 'adding:\n' resultstring = 'adding:\n'
work = work_under_id(work_id, self.db_agent) 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]) mov_number = int(arguments[1])
sql_command = f''' sql_command = f'''
INSERT INTO is_able_to_play (work_id, mov_id, pianist_id) INSERT INTO is_able_to_play (work_id, mov_id, pianist_id)
@@ -130,7 +160,7 @@ class Session:
''' '''
self.db_agent.execute(sql_command) self.db_agent.execute(sql_command)
resultstring += f'{work.pretty_mov(mov_number)}\n' 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(): for mov_number in work.values['movements'].keys():
sql_command = f''' sql_command = f'''
INSERT INTO is_able_to_play (work_id, mov_id, pianist_id) INSERT INTO is_able_to_play (work_id, mov_id, pianist_id)
@@ -180,7 +210,7 @@ class work_under_id:
saetze = dict() saetze = dict()
nummern = set() nummern = set()
suw_liste = self.reader.execute(sql_suw).fetchall() suw_liste = self.reader.execute(sql_suw).fetchall()
# 0 work_id, 1 mov_number, 2 numb, 3 designation, 4 mus_key, 5 recording # 0 work_id, 1 mov_number, 2 numb, 3 designation, 4 mus_key
for satz in suw_liste: for satz in suw_liste:
saetze[satz[1]] = satz[2], satz[3], satz[4] saetze[satz[1]] = satz[2], satz[3], satz[4]
if not satz[2] is None: if not satz[2] is None:

View File

@@ -27,7 +27,6 @@ CREATE TABLE movement (
numb VARCHAR(15), numb VARCHAR(15),
designation VARCHAR(63), designation VARCHAR(63),
mus_key VARCHAR(15), mus_key VARCHAR(15),
recording BLOB,
PRIMARY KEY(work_id, mov_number), PRIMARY KEY(work_id, mov_number),
FOREIGN KEY(work_id) REFERENCES work(id) FOREIGN KEY(work_id) REFERENCES work(id)
); );
@@ -50,6 +49,7 @@ CREATE TABLE is_able_to_play(
mov_id INTEGER NOT NULL, mov_id INTEGER NOT NULL,
pianist_id INTEGER NOT NULL, pianist_id INTEGER NOT NULL,
days_to_practice INTEGER DEFAULT 7, days_to_practice INTEGER DEFAULT 7,
recording VARCHAR(255),
PRIMARY KEY(work_id, mov_id, pianist_id), PRIMARY KEY(work_id, mov_id, pianist_id),
FOREIGN KEY(work_id, mov_id) REFERENCES movement(work_id, mov_number), FOREIGN KEY(work_id, mov_id) REFERENCES movement(work_id, mov_number),
FOREIGN KEY(pianist_id) REFERENCES pianist(id) FOREIGN KEY(pianist_id) REFERENCES pianist(id)