mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 10:20:08 +00:00
added file-list processing to buildcache to significantly speed up scans of large dirs, use --full-scan to rescan everything...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
306b34ec58
commit
960b8121bb
@ -1,7 +1,7 @@
|
|||||||
#=======================================================================
|
#=======================================================================
|
||||||
|
|
||||||
__version__ = '''0.0.01'''
|
__version__ = '''0.0.01'''
|
||||||
__sub_version__ = '''20131015025118'''
|
__sub_version__ = '''20131017013601'''
|
||||||
__copyright__ = '''(c) Alex A. Naanou 2011'''
|
__copyright__ = '''(c) Alex A. Naanou 2011'''
|
||||||
|
|
||||||
|
|
||||||
@ -32,6 +32,8 @@ CONFIG = {
|
|||||||
'absolute-path': False,
|
'absolute-path': False,
|
||||||
'ignore-orientation': False,
|
'ignore-orientation': False,
|
||||||
|
|
||||||
|
'full-scan': False,
|
||||||
|
|
||||||
# this can be:
|
# this can be:
|
||||||
# - original (default)
|
# - original (default)
|
||||||
# - preview size
|
# - preview size
|
||||||
@ -48,6 +50,7 @@ CONFIG = {
|
|||||||
'images': 'images.json',
|
'images': 'images.json',
|
||||||
'data': 'data.json',
|
'data': 'data.json',
|
||||||
'marked': 'marked.json',
|
'marked': 'marked.json',
|
||||||
|
'filelist': 'filelist.json',
|
||||||
|
|
||||||
'images-diff': '%(date)s-images-diff.json',
|
'images-diff': '%(date)s-images-diff.json',
|
||||||
'data-diff': '%(date)s-data.json',
|
'data-diff': '%(date)s-data.json',
|
||||||
@ -184,7 +187,7 @@ def make_inline_report_progress(state=None):
|
|||||||
if state == None:
|
if state == None:
|
||||||
state = {}
|
state = {}
|
||||||
if 'started at' not in state:
|
if 'started at' not in state:
|
||||||
state['started at'] = time.time()
|
state['done at'] = state['started at'] = time.time()
|
||||||
|
|
||||||
def _inline_report_progress(img, status):
|
def _inline_report_progress(img, status):
|
||||||
created = state.get('created', 0)
|
created = state.get('created', 0)
|
||||||
@ -356,10 +359,34 @@ def build_images(path, config=CONFIG, gid_generator=hash_gid, verbosity=0):
|
|||||||
Build image structures update images.json in cache.
|
Build image structures update images.json in cache.
|
||||||
'''
|
'''
|
||||||
absolute_path = config['absolute-path']
|
absolute_path = config['absolute-path']
|
||||||
|
full_scan = config['full-scan']
|
||||||
|
cache_dir = config['cache-dir']
|
||||||
|
|
||||||
orientation = 0
|
orientation = 0
|
||||||
|
|
||||||
for name in os.listdir(path):
|
# build a file-list...
|
||||||
|
filelist = pathjoin(path, cache_dir, config['filelist'])
|
||||||
|
files = os.listdir(path)
|
||||||
|
# remove the already scanned files (the ones in the filelist)...
|
||||||
|
if not full_scan and os.path.exists(filelist):
|
||||||
|
if verbosity >= 1:
|
||||||
|
print 'Loading: %s' % filelist
|
||||||
|
with open(filelist) as f:
|
||||||
|
old_files = json.load(f)
|
||||||
|
files = set(files).difference(old_files)
|
||||||
|
if len(files) > 0:
|
||||||
|
if verbosity >= 1:
|
||||||
|
print 'Writing: %s' % filelist
|
||||||
|
with open(filelist, 'w') as f:
|
||||||
|
json.dump(files, f, indent=4)
|
||||||
|
# just write the list...
|
||||||
|
else:
|
||||||
|
if verbosity >= 1:
|
||||||
|
print 'Writing: %s' % filelist
|
||||||
|
with open(filelist, 'w') as f:
|
||||||
|
json.dump(files, f, indent=4)
|
||||||
|
|
||||||
|
for name in files:
|
||||||
fname, ext = os.path.splitext(name)
|
fname, ext = os.path.splitext(name)
|
||||||
ext = ext[1:]
|
ext = ext[1:]
|
||||||
|
|
||||||
@ -377,7 +404,7 @@ def build_images(path, config=CONFIG, gid_generator=hash_gid, verbosity=0):
|
|||||||
if max(preview.dimensions) < max(p.dimensions):
|
if max(preview.dimensions) < max(p.dimensions):
|
||||||
preview = p
|
preview = p
|
||||||
|
|
||||||
source_path = pathjoin(path, CONFIG['cache-dir'], CONFIG['cache-structure']['preview'], fname + '.jpg')
|
source_path = pathjoin(path, cache_dir, CONFIG['cache-structure']['preview'], fname + '.jpg')
|
||||||
|
|
||||||
with open(source_path, 'w+b') as p:
|
with open(source_path, 'w+b') as p:
|
||||||
p.write(preview.data)
|
p.write(preview.data)
|
||||||
@ -723,6 +750,10 @@ def handle_commandline():
|
|||||||
action='store_true',
|
action='store_true',
|
||||||
default=False,
|
default=False,
|
||||||
help='Create only images.json file, skip the rest.')
|
help='Create only images.json file, skip the rest.')
|
||||||
|
output_configuration.add_option('--full-scan',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help='Do a full scan, ignoring existing file-lists.')
|
||||||
output_configuration.add_option('--ignore-orientation',
|
output_configuration.add_option('--ignore-orientation',
|
||||||
action='store_true',
|
action='store_true',
|
||||||
default=False,
|
default=False,
|
||||||
@ -797,7 +828,8 @@ def handle_commandline():
|
|||||||
'gid-source': options.gid_source,
|
'gid-source': options.gid_source,
|
||||||
'absolute-path': options.path_mode == 'absolute',
|
'absolute-path': options.path_mode == 'absolute',
|
||||||
'ignore-orientation': options.ignore_orientation,
|
'ignore-orientation': options.ignore_orientation,
|
||||||
'base-ribbon': options.base_ribbon,
|
'base-ribbon': int(options.base_ribbon),
|
||||||
|
'full-scan': options.full_scan,
|
||||||
})
|
})
|
||||||
# a value from 0 through 2...
|
# a value from 0 through 2...
|
||||||
verbosity = options.verbosity
|
verbosity = options.verbosity
|
||||||
|
|||||||
20
ui/TODO.otl
20
ui/TODO.otl
@ -113,10 +113,24 @@ Roadmap
|
|||||||
[_] Q: how do we mark unsorted sections in base ribbon after aligning?
|
[_] Q: how do we mark unsorted sections in base ribbon after aligning?
|
||||||
| - there is a big gap in the ribbon below, but it's not visible...
|
| - there is a big gap in the ribbon below, but it's not visible...
|
||||||
| - can we "mark" big gaps? ...what's the threshold of "big"?
|
| - can we "mark" big gaps? ...what's the threshold of "big"?
|
||||||
|
|
|
||||||
|
| Possible approaches:
|
||||||
|
| - do not mark
|
||||||
|
| In theory the base ribbon is always "final", thus marking and
|
||||||
|
| sorted/unsorted categories are un-needed complexity.
|
||||||
|
| This plays well with the "auto-align" mechanics...
|
||||||
|
| This may play well with bookmarking...
|
||||||
|
| - sorted/unsorted images marking (viewed/unviewed)
|
||||||
|
| This can be done in several ways:
|
||||||
|
| - track viewing
|
||||||
|
| - anything in the aligned group is "sorted"
|
||||||
|
| - ...
|
||||||
|
| Added complexity
|
||||||
|
| - manual bookmarking
|
||||||
[_] do we need to store marks in localstorage???
|
[_] do we need to store marks in localstorage???
|
||||||
[_] would be good to unify buildcache and viewer to use the same code...
|
[_] would be good to unify buildcache and viewer to use the same code...
|
||||||
| rewrite buildcache in js?
|
| rewrite buildcache in js?
|
||||||
[_] 66% add data updating to buildcache
|
[_] 50% add data updating to buildcache
|
||||||
[X] non-destructive updates...
|
[X] non-destructive updates...
|
||||||
| force create new data-set, backup old data
|
| force create new data-set, backup old data
|
||||||
| default: update
|
| default: update
|
||||||
@ -132,6 +146,10 @@ Roadmap
|
|||||||
| default N=0 i.e. top ribbon
|
| default N=0 i.e. top ribbon
|
||||||
[_] --reset-gids
|
[_] --reset-gids
|
||||||
| replace gids in data.json and images.json
|
| replace gids in data.json and images.json
|
||||||
|
[_] fast update by default
|
||||||
|
| - store a file-list in a .ImageGrid.list file
|
||||||
|
| - make a pedantic update (current) optional via
|
||||||
|
| --force-full-scan
|
||||||
[_] add data updating to viewer...
|
[_] add data updating to viewer...
|
||||||
| make this separate from ribbonsFromFavDirs(...)
|
| make this separate from ribbonsFromFavDirs(...)
|
||||||
|
|
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user