diff --git a/TODO b/TODO index 3285b64..156a4d2 100644 --- a/TODO +++ b/TODO @@ -18,7 +18,8 @@ * viewlist - [DONE] can work out new view_eids server side, and pass them back as json data (fixes loss of fullscreen & back/fwd issues) - [DONE] should really define the first/last of a GetEntries search and use definitive logic to show at start or end of entries (for next/prev buttons in viewer.html) - - need to keep "current", "first_eid", "last_eid" in pa_user_state to support back button / reloading view/ and better handling of next/prev + - [DONE] store "current", "first_eid", "last_eid" in pa_user_state + - use them on reload, e.g. if current set use it not view eid (should be okay with client-side skipping, and just make sure if it is viewlist we use next/prev logic not current - can consider an optim-- new_view page makes calls to viewlist to ADD json data only, so only trigger a new "viewlist" if we dont have data for that part of the eids job.py:@app.route("/jobs", methods=["GET", "POST"]) job.py:@app.route("/job/", methods=["GET","POST"]) @@ -37,7 +38,7 @@ * refimg locns can lose an array idx of 0 always. - * search allow noo? + * search allow noo * delete folder diff --git a/files.py b/files.py index 3af74c5..4654371 100644 --- a/files.py +++ b/files.py @@ -20,7 +20,7 @@ import re import json import datetime from flask_login import login_required, current_user -from states import States +from states import States, PA_UserState ################################################################################ # Local Class imports @@ -291,8 +291,15 @@ def GetEntries( OPT ): # can only be 1 due to limit above for l in last_entry: OPT.last_eid = l.id - - print( f"f={OPT.first_eid}, l={OPT.last_eid} -- STORE THESE in pa_user_state" ) + print( f"c={OPT.current}, f={OPT.first_eid}, l={OPT.last_eid} -- STORE THESE in pa_user_state" ) + pref=PA_UserState.query.filter(PA_UserState.pa_user_dn==current_user.dn,PA_UserState.path_type==OPT.path_type,PA_UserState.orig_ptype==OPT.orig_ptype,PA_UserState.orig_search_term==search_term).first() + pref.current=OPT.current + pref.first_eid=OPT.first_eid + pref.last_eid=OPT.last_eid + print( f"stored pref: {pref}" ) + db.session.add(pref) + db.session.commit() + return all_entries # if we are a view, then it will be of something else, e.g. a list of @@ -564,7 +571,6 @@ def move_files(): @app.route("/viewlist", methods=["POST"]) def viewlist(): OPT=States( request ) - OPT.last_entry_in_db=0 # Get next/prev set of data - e.g. if next set, then it will use orig_url # to go forward how_many from offset and then use viewer.html to show that # first obj of the new list of entries @@ -576,7 +582,6 @@ def viewlist(): OPT.offset -= int(OPT.how_many) entries=GetEntries( OPT ) # now flag we are at the last in db, to reset current below - OPT.last_entry_in_db=1 objs = {} eids="" resp={} @@ -614,15 +619,19 @@ def viewlist(): current = int(lst[0]) if 'prev' in request.form: current = int(lst[-1]) - if OPT.last_entry_in_db: - # force this back to the last image of the last page - its the last in the DB, so set OPT for it - current = int(lst[-1]) - OPT.last_entry_in_db=current resp['current']=current + resp['first_eid']=OPT.first_eid + resp['last_eid']=OPT.last_eid resp['eids']=eids resp['offset']=OPT.offset - resp['last_entry_in_db']=OPT.last_entry_in_db + print( "DDP: SAVE PREF HERE TO GET NEW CURRENT AND FIX back button WITH view/XXX when you next/prev to different page" ) + + pref=PA_UserState.query.filter(PA_UserState.pa_user_dn==current_user.dn,PA_UserState.path_type==OPT.path_type,PA_UserState.view_eid==OPT.view_eid).first() + pref.current=current + print( f"stored pref: {pref}" ) + db.session.add(pref) + db.session.commit() return resp @@ -630,7 +639,6 @@ def viewlist(): @app.route("/view/", methods=["GET"]) def view(id): OPT=States( request ) - OPT.last_entry_in_db=0 objs = {} entries=GetEntries( OPT ) eids="" diff --git a/states.py b/states.py index 079f943..bb654a2 100644 --- a/states.py +++ b/states.py @@ -31,9 +31,12 @@ class PA_UserState(db.Model): # only used if view and orig_ptype was search orig_search_term = db.Column(db.String, unique=False, nullable=False ) orig_url = db.Column(db.String, unique=False, nullable=False ) + current = db.Column(db.Integer) + first_eid = db.Column(db.Integer) + last_eid = db.Column(db.Integer) def __repr__(self): - return f"" + return f"" ################################################################################ @@ -46,8 +49,9 @@ class States(PA): self.path_type='' self.url = request.path self.view_eid = None - self.first_eid = 0 - self.last_eid = 0 + self.current=0 + self.first_eid=0 + self.last_eid=0 print( f"States() - path={request.path}, ref={request.referrer}" ) @@ -135,6 +139,10 @@ class States(PA): self.orig_search_term=pref.orig_search_term self.orig_url = pref.orig_url self.view_eid = pref.view_eid + self.current = pref.current + print( f"from existing pref, set self.first_eid to {pref.first_eid}" ) + self.first_eid = pref.first_eid + self.last_eid = pref.last_eid else: # retreive defaults from 'PAUser' where defaults are stored u=PAUser.query.filter(PAUser.dn==current_user.dn).one() @@ -208,13 +216,16 @@ class States(PA): self.offset=0 if 'next' in request.form: self.offset += int(self.how_many) + if 'current' in request.form: + self.current = int(request.form['current']) # now save pref if not pref: # insert new pref for this combo (might be a new search or view, or first time for a path) - 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 ) + 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 ) else: # update this pref with the values calculated above (most likely from POST to form) pref.pa_user_dn=current_user.dn @@ -231,6 +242,8 @@ class States(PA): pref.orig_ptype = self.orig_ptype pref.orig_search_term = self.orig_search_term pref.orig_url = self.orig_url + pref.current = self.current + # first_eid and last_eid wont change in this func, set only in GetEntries() db.session.add(pref) db.session.commit() diff --git a/tables.sql b/tables.sql index 3e67014..eb87066 100644 --- a/tables.sql +++ b/tables.sql @@ -28,8 +28,12 @@ create table PA_USER( DEFAULT_FULLSCREEN Boolean, constraint PK_PA_USER_ID primary key(ID) ); --- this should reference pa_user_id not pa_user_dn -create table PA_USER_STATE ( ID integer, PA_USER_DN varchar(128), PATH_TYPE varchar(16), NOO varchar(16), GROUPING varchar(16), HOW_MANY integer, ST_OFFSET integer, SIZE integer, FOLDERS Boolean, FULLSCREEN Boolean, ROOT varchar, CWD varchar, VIEW_EID integer, ORIG_PTYPE varchar, ORIG_SEARCH_TERM varchar, ORIG_URL varchar, +-- this is totally not 3rd normal form, but when I made it that, it was so complex, it was stupid +-- so for the little data here, I'm deliberately doing a redundant data structure +create table PA_USER_STATE ( ID integer, PA_USER_DN varchar(128), PATH_TYPE varchar(16), NOO varchar(16), + GROUPING varchar(16), HOW_MANY integer, ST_OFFSET integer, SIZE integer, FOLDERS Boolean, + FULLSCREEN Boolean, ROOT varchar, CWD varchar, VIEW_EID integer, ORIG_PTYPE varchar, ORIG_SEARCH_TERM varchar, + ORIG_URL varchar, CURRENT integer, FIRST_EID integer, LAST_EID integer, constraint FK_PA_USER_DN foreign key (PA_USER_DN) references PA_USER(DN), constraint PK_PA_USER_STATES_ID primary key(ID ) ); diff --git a/templates/viewer.html b/templates/viewer.html index bca0664..903b8a5 100644 --- a/templates/viewer.html +++ b/templates/viewer.html @@ -27,7 +27,8 @@ var eids="{{eids}}" var eid_lst=eids.split(",") var offset={{OPT.offset}} - var last_entry_in_db={{OPT.last_entry_in_db}} + var first_eid={{OPT.first_eid}} + var last_eid={{OPT.last_eid}} {% for id in objs %} e=new Object() @@ -54,6 +55,8 @@ function PrettyFname(fname) { + console.log('PrettyFname called') + console.log('fname='+fname) s='' if( fname.indexOf( "static/Import" ) == 0 ) { @@ -95,7 +98,6 @@ objs=res.objs eid_lst=eids.split(",") offset=res.offset - last_entry_in_db=res.last_entry_in_db ViewImageOrVideo() } }) @@ -109,7 +111,7 @@
@@ -169,12 +173,10 @@