Skip to content

Commit f96936a

Browse files
authored
Merge pull request #1146 from aaronwmorris/dev
script to populate thumbnails
2 parents 7ad6ab6 + a7940f4 commit f96936a

4 files changed

Lines changed: 157 additions & 8 deletions

File tree

indi_allsky/flask/forms.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3215,6 +3215,7 @@ def getImages(self, year, month, day, hour):
32153215

32163216

32173217
image_dict = dict()
3218+
image_dict['date'] = img.createDate.strftime('%H:%M:%S')
32183219
image_dict['url'] = str(image_url)
32193220
image_dict['width'] = img.width
32203221
image_dict['height'] = img.height

indi_allsky/flask/templates/gallery.html

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,28 +162,31 @@
162162
$('#allsky-gallery').empty();
163163

164164
gallery_data.forEach(item => {
165-
var a_div = $('<a />', {
165+
var a_tag = $('<a />', {
166166
'href' : item['url'],
167167
'data-pswp-width' : item['width'],
168168
'data-pswp-height' : item['height'],
169169
'target' : "_blank",
170170
'rel' : "noopener noreferrer",
171171
'class' : "text-decoration-none",
172172
});
173-
a_div.appendTo($('#allsky-gallery'));
173+
a_tag.appendTo($('#allsky-gallery'));
174174

175-
var img_div = $('<img />', {
176-
'src' : item['thumbnail_url'],
177-
'alt' : "thumbnail",
175+
var img_tag = $('<img />', {
176+
'src' : item['thumbnail_url'],
177+
'loading' : 'lazy',
178+
'alt' : item['date'],
178179
});
179-
img_div.appendTo(a_div);
180+
img_tag.appendTo(a_tag);
180181

181182
});
182183

183184

184185
lightbox = new PhotoSwipeLightbox({
185186
gallery: '#allsky-gallery',
186187
children: 'a',
188+
preloadFirstSlide: false,
189+
preloaderDelay: 0,
187190
// dynamic import is not supported in UMD version
188191
pswpModule: PhotoSwipe
189192
});

indi_allsky/video.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@
7171

7272
class VideoWorker(Process):
7373

74+
thumbnail_keogram_width = 1000
75+
thumbnail_startrail_width = 300
76+
7477

7578
def __init__(
7679
self,
@@ -918,7 +921,7 @@ def generateKeogramStarTrails(self, task, timespec, img_folder, night, camera):
918921
keogram_metadata,
919922
camera.id,
920923
keogram_thumbnail_metadata,
921-
new_width=1000,
924+
new_width=self.thumbnail_keogram_width,
922925
)
923926

924927

@@ -947,7 +950,7 @@ def generateKeogramStarTrails(self, task, timespec, img_folder, night, camera):
947950
startrail_metadata,
948951
camera.id,
949952
startrail_thumbnail_metadata,
950-
new_width=300,
953+
new_width=self.thumbnail_startrail_width,
951954
)
952955

953956

misc/create_thumbnails.py

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
#!/usr/bin/env python3
2+
3+
import sys
4+
import time
5+
from pathlib import Path
6+
import logging
7+
8+
#from sqlalchemy.sql.expression import true as sa_true
9+
from sqlalchemy.sql.expression import null as sa_null
10+
from sqlalchemy.orm.exc import NoResultFound
11+
12+
13+
sys.path.append(str(Path(__file__).parent.absolute().parent))
14+
15+
from indi_allsky.flask import create_app
16+
17+
# setup flask context for db access
18+
app = create_app()
19+
app.app_context().push()
20+
21+
#from indi_allsky.flask import db
22+
from indi_allsky.config import IndiAllSkyConfig
23+
from indi_allsky.flask.miscDb import miscDb
24+
25+
from indi_allsky.flask.models import IndiAllSkyDbImageTable
26+
from indi_allsky.flask.models import IndiAllSkyDbKeogramTable
27+
from indi_allsky.flask.models import IndiAllSkyDbStarTrailsTable
28+
#from indi_allsky.flask.models import IndiAllSkyDbThumbnailTable
29+
30+
from indi_allsky import constants
31+
32+
33+
logging.basicConfig(level=logging.INFO)
34+
logger = logging
35+
36+
37+
class CreateThumbnails(object):
38+
39+
thumbnail_keogram_width = 1000
40+
thumbnail_startrail_width = 300
41+
42+
def __init__(self):
43+
try:
44+
self._config_obj = IndiAllSkyConfig()
45+
#logger.info('Loaded config id: %d', self._config_obj.config_id)
46+
except NoResultFound:
47+
logger.error('No config file found, please import a config')
48+
sys.exit(1)
49+
50+
self.config = self._config_obj.config
51+
52+
53+
self._miscDb = miscDb(self.config)
54+
55+
56+
def main(self):
57+
58+
keograms_nothumbnail = IndiAllSkyDbKeogramTable.query\
59+
.filter(IndiAllSkyDbKeogramTable.thumbnail_uuid == sa_null())\
60+
.order_by(IndiAllSkyDbKeogramTable.createDate.desc())
61+
62+
startrails_nothumbnail = IndiAllSkyDbStarTrailsTable.query\
63+
.filter(IndiAllSkyDbStarTrailsTable.thumbnail_uuid == sa_null())\
64+
.order_by(IndiAllSkyDbStarTrailsTable.createDate.desc())
65+
66+
images_nothumbnail = IndiAllSkyDbImageTable.query\
67+
.filter(IndiAllSkyDbImageTable.thumbnail_uuid == sa_null())\
68+
.order_by(IndiAllSkyDbImageTable.createDate.desc())
69+
70+
71+
72+
print('Keograms without thumbnails: {0:d}'.format(keograms_nothumbnail.count()))
73+
print('Startrails without thumbnails: {0:d}'.format(startrails_nothumbnail.count()))
74+
print('Images without thumbnails: {0:d}'.format(images_nothumbnail.count()))
75+
print()
76+
print('Running in 10 seconds... control-c to cancel')
77+
print()
78+
79+
time.sleep(10.0)
80+
81+
82+
for keogram_entry in keograms_nothumbnail:
83+
logger.info('Creating keogram thumbnail for %d', keogram_entry.id)
84+
85+
keogram_thumbnail_metadata = {
86+
'type' : constants.THUMBNAIL,
87+
'createDate' : keogram_entry.createDate.timestamp(),
88+
'night' : keogram_entry.night,
89+
'camera_uuid': keogram_entry.camera.uuid,
90+
}
91+
92+
self._miscDb.addThumbnail(
93+
keogram_entry,
94+
{}, # keogram metadata not used
95+
keogram_entry.camera_id,
96+
keogram_thumbnail_metadata,
97+
new_width=self.thumbnail_keogram_width,
98+
)
99+
100+
101+
for startrail_entry in startrails_nothumbnail:
102+
logger.info('Creating startrail thumbnail for %d', startrail_entry.id)
103+
104+
startrail_thumbnail_metadata = {
105+
'type' : constants.THUMBNAIL,
106+
'createDate' : startrail_entry.createDate.timestamp(),
107+
'night' : startrail_entry.night,
108+
'camera_uuid': startrail_entry.camera.uuid,
109+
}
110+
111+
self._miscDb.addThumbnail(
112+
startrail_entry,
113+
{}, # startrail metadata not used
114+
startrail_entry.camera_id,
115+
startrail_thumbnail_metadata,
116+
new_width=self.thumbnail_startrail_width,
117+
)
118+
119+
120+
for image_entry in images_nothumbnail:
121+
logger.info('Creating image thumbnail for %d', image_entry.id)
122+
123+
image_thumbnail_metadata = {
124+
'type' : constants.THUMBNAIL,
125+
'createDate' : image_entry.createDate.timestamp(),
126+
'night' : image_entry.night,
127+
'camera_uuid': image_entry.camera.uuid,
128+
}
129+
130+
self._miscDb.addThumbnail(
131+
image_entry,
132+
{}, # image metadata not used
133+
image_entry.camera_id,
134+
image_thumbnail_metadata,
135+
)
136+
137+
138+
139+
140+
if __name__ == "__main__":
141+
ct = CreateThumbnails()
142+
ct.main()

0 commit comments

Comments
 (0)