From de6ba62b67c72bc1a46fdf1cf7f6706a65a2be84 Mon Sep 17 00:00:00 2001 From: Damien De Paoli Date: Mon, 20 Sep 2021 21:08:46 +1000 Subject: [PATCH] user prefs now in table (per user/path combo) and works --- TODO | 2 -- options.py | 86 +++++++++++++++++++++++++++++++++++++++++++++++------- tables.sql | 6 +++- 3 files changed, 80 insertions(+), 14 deletions(-) diff --git a/TODO b/TODO index 873c827..9901183 100644 --- a/TODO +++ b/TODO @@ -1,8 +1,6 @@ ## GENERAL * delete key bound to del dbox - * user preferences stored in User record/DB, for pagesize, sort order, etc. - * ai search, should put 'all' at top of drop-down * add an option on the person menu to run_ai_on all photos (or at least import/storage) diff --git a/options.py b/options.py index afc6f24..1fb5baf 100644 --- a/options.py +++ b/options.py @@ -1,6 +1,29 @@ from settings import Settings, SettingsRBPath, SettingsIPath, SettingsSPath +from flask_login import current_user +from main import db, app, ma from shared import PA + +################################################################################ +# PA_PREF: preference data for a given user / path_type combo, so a given user +# and their prefs for say the import path(s) and storage path(s) etc, each +# path_type has different defaults, and keeping those works better +################################################################################ +class PA_PREF(db.Model): + __tablename__ = "pa_pref" + pa_user_dn = db.Column(db.String, db.ForeignKey('pa_user.dn'), primary_key=True ) + path_type = db.Column(db.String, primary_key=True, unique=False, nullable=False ) + noo = db.Column(db.String, unique=False, nullable=False ) + grouping = db.Column(db.String, unique=False, nullable=False ) + how_many = db.Column(db.Integer, unique=False, nullable=False ) + st_offset = db.Column(db.Integer, unique=False, nullable=False ) + size = db.Column(db.Integer, unique=False, nullable=False ) + folders = db.Column(db.Boolean, unique=False, nullable=False ) + + def __repr__(self): + return f"" + + ################################################################################ # Options: class to store set of default values for viewing (order/size, etc.) # and if a request object (from a POST) is passed in, it returns those instead @@ -8,35 +31,59 @@ from shared import PA ################################################################################ class Options(PA): def __init__(self, request): - self.noo="Oldest" - self.grouping="None" - self.how_many="50" - self.offset="0" - self.size="128" - - self.folders=True - settings=Settings.query.first() +# pref=None if 'orig_url' in request.form: url = request.form['orig_url'] else: url = request.path if 'files_sp' in url: - self.noo="A to Z" self.path_type = 'Storage' self.paths = SettingsSPath() + pref=PA_PREF.query.filter(PA_PREF.pa_user_dn==current_user.dn,PA_PREF.path_type==self.path_type).first() + if pref: + self.folders=pref.folders + self.noo=pref.noo + else: + self.folders=True + self.noo="A to Z" elif 'files_rbp' in url: self.path_type = 'Bin' self.paths = [] self.paths.append(SettingsRBPath()) + pref=PA_PREF.query.filter(PA_PREF.pa_user_dn==current_user.dn,PA_PREF.path_type==self.path_type).first() + if pref: + self.folders=pref.folders + self.noo=pref.noo + else: + self.folders=True + self.noo="A to Z" else: - self.folders=False self.path_type = 'Import' - self.cwd='static/Import' self.paths = SettingsIPath() + pref=PA_PREF.query.filter(PA_PREF.pa_user_dn==current_user.dn,PA_PREF.path_type==self.path_type).first() + if pref: + self.folders=pref.folders + self.noo=pref.noo + else: + self.folders=False + self.noo="Oldest" + + print( f"2={pref}" ) + if pref: + self.grouping=pref.grouping + self.how_many=pref.how_many + self.offset=pref.st_offset + self.size=pref.size + else: + self.grouping="None" + self.how_many="50" + self.offset="0" + self.size="128" self.cwd='static/' + self.path_type self.root=self.cwd + print( f"2={self}" ) # the above are defaults, if we are here, then we have current values, use them instead if request.method=="POST": self.noo=request.form['noo'] @@ -63,3 +110,20 @@ class Options(PA): self.offset=0 if 'next' in request.form: self.offset += int(self.how_many) + + pref=PA_PREF.query.filter(PA_PREF.pa_user_dn==current_user.dn,PA_PREF.path_type==self.path_type).first() + if not pref: + pref=PA_PREF( pa_user_dn=current_user.dn, path_type=self.path_type, noo=self.noo, grouping=self.grouping, how_many=self.how_many, + st_offset=self.offset, size=self.size, folders=self.folders) + else: + pref.noo=self.noo + pref.grouping=self.grouping + pref.how_many=self.how_many + pref.st_offset=self.offset + pref.size=self.size + pref.folders=self.folders + + db.session.add(pref) + db.session.commit() + + print( self ) diff --git a/tables.sql b/tables.sql index 5715ce0..79f1eb9 100644 --- a/tables.sql +++ b/tables.sql @@ -12,7 +12,11 @@ create table SETTINGS( constraint FK_DEFAULT_REFIMG_MODEL foreign key (DEFAULT_REFIMG_MODEL) references AI_MODEL(ID), constraint FK_DEFAULT_SCAN_MODEL foreign key (DEFAULT_SCAN_MODEL) references AI_MODEL(ID) ); -create table PA_USER( ID integer, dn varchar, constraint PK_PA_USER_ID primary key(ID) ); +create table PA_PREF ( PA_USER_ID integer, PATH_TYPE varchar(16), NOO varchar(16), GROUPING varchar(16), HOW_MANY integer, ST_OFFSET integer, SIZE integer, FOLDERS Boolean, + constraint PK_PA_USER_ID_PATH_TYPE primary key(PA_USER_ID, PATH_TYPE ) ); + +create table PA_USER( ID integer, dn varchar, + constraint PK_PA_USER_ID primary key(ID) ); create table FILE_TYPE ( ID integer, NAME varchar(32) unique, constraint PK_FILE_TYPE_ID primary key(ID) );