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 # it also handles the cwd appropriately, paths, fullscreen, search, etc. ################################################################################ class Options(PA): def __init__(self, request): if 'orig_url' in request.form: url = request.form['orig_url'] else: url = request.path if 'files_sp' in url: 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.path_type = '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" 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 # 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'] self.how_many=request.form['how_many'] self.offset=int(request.form['offset']) self.grouping=request.form['grouping'] self.size = request.form['size'] # seems html cant do boolean, but uses strings so convert if request.form['folders'] == "False": self.folders=False if request.form['folders'] == "True": self.folders=True # have to force grouping to None if we flick to folders from a flat # view with grouping (otherwise we print out group headings for # child content that is not in the CWD) self.grouping=None self.cwd = request.form['cwd'] if 'fullscreen' in request.form: self.fullscreen=request.form['fullscreen'] if 'prev' in request.form: self.offset -= int(self.how_many) if self.offset < 0: 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()