partial fix for various BUGs with going past the end of a viewing list... we now keep num_entries (of files) in pa_user_state, and use it to stop going before first or past last entry, even from viewlist, so this fixes many isseus... Final bug(s) are relating to multiple Dirs in a Path and its feeling too complex for no real gain, going to remove the feature, but for now, this version works / can be made to PROD
This commit is contained in:
69
states.py
69
states.py
@@ -34,9 +34,10 @@ class PA_UserState(db.Model):
|
||||
current = db.Column(db.Integer)
|
||||
first_eid = db.Column(db.Integer)
|
||||
last_eid = db.Column(db.Integer)
|
||||
num_entries = db.Column(db.Integer)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<pa_user_dn: {self.pa_user_dn}, path_type: {self.path_type}, noo: {self.noo}, grouping: {self.grouping}, how_many: {self.how_many}, st_offset: {self.st_offset}, size: {self.size}, folders: {self.folders}, root: {self.root}, cwd: {self.cwd}, view_eid: {self.view_eid}, orig_ptype: {self.orig_ptype}, orig_search_term: {self.orig_search_term}, orig_url: {self.orig_url}, current={self.current}, first_eid={self.first_eid}, last_eid={self.last_eid}>"
|
||||
return f"<pa_user_dn: {self.pa_user_dn}, path_type: {self.path_type}, noo: {self.noo}, grouping: {self.grouping}, how_many: {self.how_many}, st_offset: {self.st_offset}, size: {self.size}, folders: {self.folders}, root: {self.root}, cwd: {self.cwd}, view_eid: {self.view_eid}, orig_ptype: {self.orig_ptype}, orig_search_term: {self.orig_search_term}, orig_url: {self.orig_url}, current={self.current}, first_eid={self.first_eid}, last_eid={self.last_eid}, num_entries={self.num_entries}>"
|
||||
|
||||
|
||||
################################################################################
|
||||
@@ -53,7 +54,9 @@ class States(PA):
|
||||
self.current=0
|
||||
self.first_eid=0
|
||||
self.last_eid=0
|
||||
self.num_entries=0
|
||||
|
||||
print( f"STATES() called, rp={request.path}, ref={request.referrer}" )
|
||||
# this is any next/prev or noo, grouping, etc. change (so use referrer to work out what to do with this)
|
||||
# because this can happen on a view, or files_up, etc. change this FIRST
|
||||
if 'ChangeFileOpts' in request.path:
|
||||
@@ -141,6 +144,7 @@ class States(PA):
|
||||
self.current = pref.current
|
||||
self.first_eid = pref.first_eid
|
||||
self.last_eid = pref.last_eid
|
||||
self.num_entries = pref.num_entries
|
||||
else:
|
||||
# retreive defaults from 'PAUser' where defaults are stored
|
||||
u=PAUser.query.filter(PAUser.dn==current_user.dn).one()
|
||||
@@ -149,24 +153,29 @@ class States(PA):
|
||||
self.offset=0
|
||||
self.size=u.default_size
|
||||
if self.path_type == "View":
|
||||
print("WE ARE A VIEW" )
|
||||
self.root='static/' + self.orig_ptype
|
||||
tmp=self.orig_ptype
|
||||
self.first_eid=orig_pref.first_eid
|
||||
self.last_eid=orig_pref.last_eid
|
||||
self.num_entries=orig_pref.num_entries
|
||||
self.noo=orig_pref.noo
|
||||
self.folders=orig_pref.folders
|
||||
print(f"orig_pref={orig_pref}" )
|
||||
print(f"self.folders={self.folders}" )
|
||||
else:
|
||||
print("not a view?" )
|
||||
self.root='static/' + self.path_type
|
||||
tmp=self.path_type
|
||||
if tmp == 'Import':
|
||||
self.noo = u.default_import_noo
|
||||
self.folders = u.default_import_folders
|
||||
elif tmp == 'Storage':
|
||||
self.noo = u.default_storage_noo
|
||||
self.folders = u.default_storage_folders
|
||||
else:
|
||||
# is a search so...
|
||||
print( "For now, search defaults for noo / folders are hardcoded" )
|
||||
self.folders=False
|
||||
self.noo = 'Oldest'
|
||||
if self.path_type == 'Import':
|
||||
self.noo = u.default_import_noo
|
||||
self.folders = u.default_import_folders
|
||||
elif self.path_type == 'Storage':
|
||||
self.noo = u.default_storage_noo
|
||||
self.folders = u.default_storage_folders
|
||||
else:
|
||||
# is a search so...
|
||||
print( "For now, search defaults for noo / folders are hardcoded" )
|
||||
self.noo = 'Oldest'
|
||||
self.folders=False
|
||||
|
||||
self.cwd=self.root
|
||||
if not hasattr(self, 'orig_ptype'):
|
||||
@@ -177,7 +186,7 @@ class States(PA):
|
||||
|
||||
# the above are defaults, if we are here, then we have current values, use them instead if they are set -- AI: searches dont set them so then we use those in the DB first
|
||||
if request.method=="POST":
|
||||
if 'noo' in request.form:
|
||||
if self.path_type != "View" and 'noo' in request.form:
|
||||
self.noo=request.form['noo']
|
||||
if 'how_many' in request.form:
|
||||
self.how_many=request.form['how_many']
|
||||
@@ -189,14 +198,15 @@ class States(PA):
|
||||
if 'size' in request.form:
|
||||
self.size = request.form['size']
|
||||
# seems html cant do boolean, but uses strings so convert
|
||||
if 'folders' not in request.form or request.form['folders'] == "False":
|
||||
self.folders=False
|
||||
elif 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
|
||||
if self.path_type != "View" and 'folders' in request.form:
|
||||
if request.form['folders'] == "False":
|
||||
self.folders=False
|
||||
else:
|
||||
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
|
||||
if 'orig_url' in request.form:
|
||||
self.orig_url = request.form['orig_url']
|
||||
|
||||
@@ -209,10 +219,15 @@ class States(PA):
|
||||
self.fullscreen=False
|
||||
if 'prev' in request.form:
|
||||
self.offset -= int(self.how_many)
|
||||
# just in case we hit prev too fast, stop this...
|
||||
if self.offset < 0:
|
||||
self.offset=0
|
||||
if 'next' in request.form:
|
||||
self.offset += int(self.how_many)
|
||||
if (self.offset + int(self.how_many)) < self.num_entries:
|
||||
self.offset += int(self.how_many)
|
||||
else:
|
||||
print( f"WARNING: next image requested, but would go past end of list? - ignore this" )
|
||||
print( f"DDP - offset={self.offset} + how_many={self.how_many} > num_entries={self.num_entries}" )
|
||||
if 'current' in request.form:
|
||||
self.current = int(request.form['current'])
|
||||
|
||||
@@ -222,7 +237,7 @@ class States(PA):
|
||||
pref=PA_UserState( pa_user_dn=current_user.dn, path_type=self.path_type, view_eid=self.view_eid, noo=self.noo,
|
||||
grouping=self.grouping, how_many=self.how_many, st_offset=self.offset, size=self.size, folders=self.folders,
|
||||
root=self.root, cwd=self.cwd, orig_ptype=self.orig_ptype, orig_search_term=self.orig_search_term,
|
||||
orig_url=self.orig_url, current=self.current, first_eid=self.first_eid, last_eid=self.last_eid )
|
||||
orig_url=self.orig_url, current=self.current, first_eid=self.first_eid, last_eid=self.last_eid, num_entries=self.num_entries )
|
||||
else:
|
||||
# update this pref with the values calculated above (most likely from POST to form)
|
||||
pref.pa_user_dn=current_user.dn
|
||||
@@ -239,8 +254,10 @@ class States(PA):
|
||||
pref.orig_ptype = self.orig_ptype
|
||||
pref.orig_search_term = self.orig_search_term
|
||||
pref.orig_url = self.orig_url
|
||||
|
||||
# only passed in (at the moment) in viewlist
|
||||
pref.current = self.current
|
||||
# first_eid and last_eid wont change in this func, set only in GetEntries()
|
||||
# first_eid, last_eid, num_entries wont change in this func, set only in GetEntries()
|
||||
|
||||
db.session.add(pref)
|
||||
db.session.commit()
|
||||
|
||||
Reference in New Issue
Block a user