Compare commits

..

5 Commits

2 changed files with 41 additions and 2 deletions

View File

@@ -23,7 +23,7 @@ At the moment, an alpha version is undertaken, with these features:
- 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`)
- Show mastered movements for activated user (`sm`) - Show mastered movements for activated user (`sm`)
- (planned) display, if work or movement is mastered from active user when viewing works and movements - 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") - (planned) Works are shown sorted (opus, collection e.g. "Walzer", "Sonaten")

View File

@@ -1,4 +1,5 @@
import sqlite3 import sqlite3
from functools import total_ordering
class Session: class Session:
@@ -47,6 +48,28 @@ class Session:
def result(self): def result(self):
return self.resultstring return self.resultstring
def movement_is_mastered(self, work_id, mov_id):
is_mastered = False
if self.user != -1:
sql_command = f'''
SELECT *
FROM is_able_to_play
WHERE work_id = {work_id}
AND mov_id = {mov_id}
AND pianist_id = {self.user}
'''
if self.db_agent.execute(sql_command).fetchone():
is_mastered = True
return is_mastered
def percentage_of_work_is_mastered(self, work): # work, not work_id, as a work-object is created anyway when there's need to check
number_of_movements = len(work.values['movements'])
count_mastered = 0
for key in work.values['movements']:
if self.movement_is_mastered(work.id(), key):
count_mastered += 1
return int(count_mastered / number_of_movements * 100)
def create_new_user(self, arguments): def create_new_user(self, arguments):
first_name, name = arguments[0], arguments[1] first_name, name = arguments[0], arguments[1]
sql_command = f''' sql_command = f'''
@@ -95,7 +118,7 @@ class Session:
for item in list_of_work_ids: for item in list_of_work_ids:
list_of_works.append(work_under_id(item[0], self.db_agent)) list_of_works.append(work_under_id(item[0], self.db_agent))
fun_resultstring = 'All mastered movements:\n' fun_resultstring = 'All mastered movements:\n'
for work in list_of_works: for work in sorted(list_of_works):
for mov_number in work.values['movements'].keys(): for mov_number in work.values['movements'].keys():
# check if movement is mastered # check if movement is mastered
sql_command = f''' sql_command = f'''
@@ -115,6 +138,10 @@ class Session:
work = work_under_id(work_id, self.db_agent) work = work_under_id(work_id, self.db_agent)
fun_resultstring = '' fun_resultstring = ''
for mov_number in work.values['movements'].keys(): for mov_number in work.values['movements'].keys():
if self.movement_is_mastered(work_id, mov_number):
fun_resultstring += '[x] '
else:
fun_resultstring += '[ ] '
fun_resultstring += f'{mov_number}. {work.pretty_mov(mov_number)}\n' fun_resultstring += f'{mov_number}. {work.pretty_mov(mov_number)}\n'
return fun_resultstring return fun_resultstring
@@ -145,6 +172,13 @@ class Session:
list_of_works.append(work_under_id(item[0], self.db_agent)) list_of_works.append(work_under_id(item[0], self.db_agent))
fun_resultstring = '' fun_resultstring = ''
for work in list_of_works: for work in list_of_works:
mastered = self.percentage_of_work_is_mastered(work)
if mastered == 100:
fun_resultstring += '[x] '
elif mastered > 0:
fun_resultstring += '[/] '
else:
fun_resultstring += '[ ] '
fun_resultstring += f'{work.id()}: {work.pretty_string()}\n' fun_resultstring += f'{work.id()}: {work.pretty_string()}\n'
return fun_resultstring return fun_resultstring
@@ -175,6 +209,7 @@ class Session:
# End session # End session
@total_ordering
class work_under_id: class work_under_id:
# con = sqlite3.connect('repertoire.db') # con = sqlite3.connect('repertoire.db')
# reader = con.cursor() # reader = con.cursor()
@@ -281,6 +316,10 @@ class work_under_id:
ret_str += f'{key}: {value}\n' ret_str += f'{key}: {value}\n'
return ret_str return ret_str
def __lt__(self, other):
return ((self.values['name'], self.sammlung()) <
(other.values['name'], self.sammlung()))
# End work_under_id # End work_under_id
def parse_user_input(user_in, session): def parse_user_input(user_in, session):