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:
2022-01-28 15:52:35 +11:00
parent 297b12b2b1
commit 47039ec35c
5 changed files with 133 additions and 62 deletions

View File

@@ -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()