Compare commits
3 Commits
e5d6ce9b73
...
f369b6d796
| Author | SHA1 | Date | |
|---|---|---|---|
| f369b6d796 | |||
| eb7bb84e09 | |||
| 7f13d78700 |
5
TODO
5
TODO
@@ -4,11 +4,6 @@
|
||||
# also all the add ref img/add override, etc are non-functional - FIX the override* stuff first to get table/naming consistency as that is half the problem
|
||||
# NMO data -> there is an NMO object (just NMO names/types - |json), then there is per face level data - this should be a reference from Face and Schema/marshmallow
|
||||
#
|
||||
#2 should start with an empty DB and test
|
||||
# definitely no dirs in storage_sp I now pass root_eid=0 for this
|
||||
# BUT - need GUI to work - may even be good to put an alert up - its so odd to have not root dir ONLY happens when no data
|
||||
#3 empty directories (2017/20171015-test/...) showing "No matches for: 'undefined'" <- should only comes up for search in URL???
|
||||
#
|
||||
#4 TEST everything (don't forget keybindings,e.g. delete)
|
||||
# -- go into viewer code from a files_rbp - had red bin, bot green on viewer.
|
||||
#
|
||||
|
||||
21
files.py
21
files.py
@@ -209,6 +209,16 @@ class FaceRefimgLinkSchema(ma.SQLAlchemyAutoSchema):
|
||||
class Meta: model = FaceRefimgLink
|
||||
load_instance = True
|
||||
|
||||
class FaceNoMatchOverrideSchema(ma.SQLAlchemyAutoSchema):
|
||||
class Meta: model = FaceOverrideType
|
||||
load_instance = True
|
||||
type = ma.Nested(FaceOverrideType)
|
||||
|
||||
class FaceForceMatchOverrideSchema(ma.SQLAlchemyAutoSchema):
|
||||
class Meta: model = FaceOverrideType
|
||||
load_instance = True
|
||||
person = ma.Nested(Person)
|
||||
|
||||
class FaceSchema(ma.SQLAlchemyAutoSchema):
|
||||
class Meta:
|
||||
model=Face
|
||||
@@ -218,6 +228,8 @@ class FaceSchema(ma.SQLAlchemyAutoSchema):
|
||||
# faces have to come with a file connection
|
||||
facefile_lnk = ma.Nested(FaceFileLinkSchema)
|
||||
refimg_lnk = ma.Nested(FaceRefimgLinkSchema,allow_none=True)
|
||||
fnmo = ma.Nested( FaceNoMatchOverride, allow_none=True )
|
||||
ffmo = ma.Nested( FaceForceMatchOverride, allow_none=True )
|
||||
|
||||
class FileSchema(ma.SQLAlchemyAutoSchema):
|
||||
class Meta: model = File
|
||||
@@ -466,9 +478,8 @@ def file_list_ip():
|
||||
@login_required
|
||||
def files_ip():
|
||||
OPT=States( request )
|
||||
people = Person.query.all()
|
||||
query_data = GetQueryData( OPT )
|
||||
return render_template("files.html", page_title=f"View Files ({OPT.path_type} Path)", OPT=OPT, people=people, query_data=query_data )
|
||||
return render_template("files.html", page_title=f"View Files ({OPT.path_type} Path)", OPT=OPT, query_data=query_data )
|
||||
|
||||
################################################################################
|
||||
# /files -> show thumbnail view of files from storage_path
|
||||
@@ -477,9 +488,8 @@ def files_ip():
|
||||
@login_required
|
||||
def files_sp():
|
||||
OPT=States( request )
|
||||
people = Person.query.all()
|
||||
query_data = GetQueryData( OPT )
|
||||
return render_template("files.html", page_title=f"View Files ({OPT.path_type} Path)", OPT=OPT, people=people, query_data=query_data )
|
||||
return render_template("files.html", page_title=f"View Files ({OPT.path_type} Path)", OPT=OPT, query_data=query_data )
|
||||
|
||||
|
||||
################################################################################
|
||||
@@ -489,9 +499,8 @@ def files_sp():
|
||||
@login_required
|
||||
def files_rbp():
|
||||
OPT=States( request )
|
||||
people = Person.query.all()
|
||||
query_data = GetQueryData( OPT )
|
||||
return render_template("files.html", page_title=f"View Files ({OPT.path_type} Path)", OPT=OPT, people=people, query_data=query_data )
|
||||
return render_template("files.html", page_title=f"View Files ({OPT.path_type} Path)", OPT=OPT, query_data=query_data )
|
||||
|
||||
################################################################################
|
||||
# search -> GET version -> has search_term in the URL and is therefore able to
|
||||
|
||||
@@ -221,20 +221,6 @@ function DetailsDBox()
|
||||
}
|
||||
|
||||
|
||||
// function to change the size of thumbnails (and resets button bar to newly
|
||||
// selected size)
|
||||
function ChangeSize(clicked_button,sz)
|
||||
{
|
||||
$('.sz-but.btn-info').removeClass('btn-info text-white').addClass('btn-outline-info')
|
||||
$(clicked_button).addClass('btn-info text-white').removeClass('btn-outline-info')
|
||||
$('.thumb').attr( {height: sz, style: 'font-size:'+sz+'px' } )
|
||||
$('#size').val(sz)
|
||||
sz=sz-22
|
||||
$('.svg').height(sz);
|
||||
$('.svg').width(sz);
|
||||
$('.svg_cap').width(sz);
|
||||
}
|
||||
|
||||
// DoSel is called when a click event occurs, and sets the selection via adding
|
||||
// 'highlight' to the class of the appropriate thumbnails
|
||||
// e == event (can see if shift/ctrl held down while left-clicking
|
||||
@@ -504,7 +490,7 @@ function drawPageOfFigures()
|
||||
|
||||
if( OPT.folders )
|
||||
{
|
||||
if( document.entries.length && document.entries[0].in_dir.rel_path == '' )
|
||||
if( (document.entries.length && document.entries[0].in_dir.rel_path == '' ) || OPT.root_eid == 0 )
|
||||
{
|
||||
gray="_gray"
|
||||
back=""
|
||||
@@ -526,17 +512,17 @@ function drawPageOfFigures()
|
||||
</figure>
|
||||
</div>`
|
||||
ecnt++
|
||||
/*
|
||||
<script>f=$('#_back'); w=f.find('svg').width(); f.find('figcaption').width(w);</script>
|
||||
*/
|
||||
$('#figures').append(html)
|
||||
}
|
||||
for (const obj of document.entries) {
|
||||
addFigure( obj, last, ecnt )
|
||||
ecnt++
|
||||
}
|
||||
if( document.entries.length == 0 && OPT.search_term )
|
||||
$('#figures').append( `<span class="alert alert-danger p-2 col-auto"> No matches for: '${OPT.search_term}'</span>` )
|
||||
if( document.entries.length == 0 )
|
||||
if( OPT.search_term )
|
||||
$('#figures').append( `<span class="alert alert-danger p-2 col-auto"> No matches for: '${OPT.search_term}'</span>` )
|
||||
else if( OPT.root_eid == 0 )
|
||||
$('#figures').append( `<span class="alert alert-danger p-2 col-auto d-flex align-items-center">No files in Path!</span>` )
|
||||
$('.figure').click( function(e) { DoSel(e, this ); SetButtonState(); return false; });
|
||||
$('.figure').dblclick( function(e) { dblClickToViewEntry( $(this).attr('id') ); setDisabledForViewingNextPrevBttons(); addViewerKeyHandler() } )
|
||||
// for dir, getDirEntries 2nd param is back (or "up" a dir)
|
||||
@@ -547,6 +533,11 @@ function drawPageOfFigures()
|
||||
function getPageFileList(res, viewingIdx)
|
||||
{
|
||||
$('#file_list_div').empty()
|
||||
if( OPT.root_eid == 0 )
|
||||
{
|
||||
$('#file_list_div').append( `<span class="alert alert-danger p-2">No files in Path!</span>` )
|
||||
return
|
||||
}
|
||||
html='<table class="table table-striped table-sm col-12">'
|
||||
html+='<thead><tr class="table-primary"><th>Name</th><th>Size (MB)</th><th>Path Prefix</th><th>Hash</th></tr></thead><tbody>'
|
||||
for (const obj of res) {
|
||||
@@ -594,6 +585,13 @@ function getPage(pageNumber, successCallback, viewingIdx=0)
|
||||
// if search, disable folders
|
||||
if( OPT.search_term )
|
||||
$('#folders').prop('disabled', 'disabled').removeClass('border-info').addClass('border-secondary').removeClass('text-info').addClass('text-secondary');
|
||||
else if( res == [] )
|
||||
{
|
||||
html=`<span class="alert alert-danger p-2 col-auto">No files in Path!'</span>`
|
||||
console.log(html)
|
||||
$('#file_list_div').append(html)
|
||||
$('#files_div').append(html)
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error) { console.error("Error:", error); } });
|
||||
return
|
||||
@@ -704,7 +702,7 @@ function changeOPT(successCallback) {
|
||||
OPT.folders=new_f
|
||||
OPT.folders=$('#folders').val()
|
||||
OPT.grouping=$('#grouping').val()
|
||||
OPT.size=$('#size').val()
|
||||
OPT.size=$('input[name="size"]:checked').val();
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/change_file_opts',
|
||||
@@ -715,6 +713,7 @@ function changeOPT(successCallback) {
|
||||
// put data back into booleans, ints, etc
|
||||
OPT.folders=( OPT.folders == 'True' )
|
||||
OPT.how_many=parseInt(OPT.how_many)
|
||||
console.log('OPT.size='+OPT.size)
|
||||
$('.how_many_text').html( ` ${OPT.how_many} files ` )
|
||||
OPT.root_eid=parseInt(OPT.root_eid)
|
||||
OPT.size=parseInt(OPT.size)
|
||||
@@ -727,7 +726,13 @@ function changeOPT(successCallback) {
|
||||
function changeSize()
|
||||
{
|
||||
sz=$('input[name="size"]:checked').val();
|
||||
$('.thumb').prop('height',sz);
|
||||
OPT.size=sz
|
||||
$('.thumb').attr( {height: sz, style: 'font-size:'+sz+'px' } )
|
||||
$('#size').val(sz)
|
||||
sz=sz-22
|
||||
$('.svg').height(sz);
|
||||
$('.svg').width(sz);
|
||||
$('.svg_cap').width(sz);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
</div class="input-group...">
|
||||
</div class="col col-auto">
|
||||
</div class="container">
|
||||
<div id="file_list_div" class="container-fluid">
|
||||
<div id="file_list_div" class="container-fluid pt-2">
|
||||
</div class="container">
|
||||
<div class="container-fluid">
|
||||
<input type="hidden" name="cwd" id="cwd" value="{{OPT.cwd}}">
|
||||
@@ -40,6 +40,7 @@
|
||||
// this is the list of entry ids for the images for ALL matches for this query
|
||||
var entryList={{query_data.entry_list}}
|
||||
var OPT = {{ OPT.to_dict()|tojson }};
|
||||
OPT.root_eid = {{ query_data.root_eid }};
|
||||
|
||||
// pageList is just those entries shown on this page from the full entryList
|
||||
var pageList=[]
|
||||
|
||||
Reference in New Issue
Block a user