1 from degal.command import command |
1 from degal.command import command |
2 from degal import templates |
2 from degal import templates |
|
3 from degal.task import threadable_task |
3 |
4 |
4 def render_image (ctx, image) : |
5 def render_image_html (ctx, image) : |
5 """ |
6 """ |
6 Render the thumbnails and .html for one image |
7 Render the thumbnails and .html for one image |
7 """ |
8 """ |
8 |
|
9 # log image path |
|
10 ctx.log_info("%s", image) |
|
11 |
9 |
12 # render output |
10 # render output |
13 tpl = templates.master(ctx.gallery, image.title, image.html, |
11 tpl = templates.master(ctx.gallery, image.title, image.html, |
14 templates.image_page(image) |
12 templates.image_page(image) |
15 ) |
13 ) |
16 |
14 |
17 # write output |
15 # write output |
18 tpl.render_file(image.html) |
16 tpl.render_file(image.html) |
|
17 |
|
18 def render_image_task (image) : |
|
19 """ |
|
20 Render the image output for the given image |
|
21 """ |
|
22 |
|
23 # XXX: is this really threadsafe? |
|
24 image.update() |
|
25 |
|
26 # return value is the image itself |
|
27 return image |
|
28 |
|
29 def render_folder_images (ctx, images) : |
|
30 """ |
|
31 Render the given series of images |
|
32 """ |
|
33 |
|
34 # render them in parallel as required |
|
35 for image in ctx.tasks.execute([ |
|
36 threadable_task(render_image_task, image) for image in images |
|
37 ]) : |
|
38 # log image path |
|
39 ctx.log_info("%s", image) |
|
40 |
|
41 render_image_html(ctx, image) |
19 |
42 |
20 def render_folder_page (ctx, folder) : |
43 def render_folder_page (ctx, folder) : |
21 """ |
44 """ |
22 Render the .html output for one folder |
45 Render the .html output for one folder |
23 """ |
46 """ |
32 templates.folder_page(folder, page) |
55 templates.folder_page(folder, page) |
33 ) |
56 ) |
34 |
57 |
35 # write output |
58 # write output |
36 tpl.render_file(html_file) |
59 tpl.render_file(html_file) |
37 |
|
38 |
60 |
39 def render_folder (ctx, folder) : |
61 def render_folder (ctx, folder) : |
|
62 """ |
|
63 Render the HTML/images for this folder if needed, and recrurse into subfolders. |
|
64 """ |
|
65 |
40 # index images that require updating |
66 # index images that require updating |
41 image_count = len(folder.images) |
67 image_count = len(folder.images) |
42 new_images = list(folder.index_images(for_update=(not ctx.config.force_update))) |
68 new_images = list(folder.index_images(for_update=(not ctx.config.force_update))) |
43 |
69 |
44 if new_images or ctx.config.force_update: |
70 if new_images or ctx.config.force_update: |
46 render_folder_page(ctx, folder) |
72 render_folder_page(ctx, folder) |
47 |
73 |
48 ctx.log_info("%s - render %d/%d images", folder, len(new_images), image_count) |
74 ctx.log_info("%s - render %d/%d images", folder, len(new_images), image_count) |
49 |
75 |
50 # update images |
76 # update images |
51 for image in new_images : |
77 render_folder_images(ctx, new_images) |
52 # update thumbs |
|
53 image.update() |
|
54 |
|
55 # render output |
|
56 render_image(ctx, image) |
|
57 |
78 |
58 else : |
79 else : |
59 ctx.log_info("%s - up to date", folder) |
80 ctx.log_info("%s - up to date", folder) |
60 |
81 |
61 # index subfolders |
82 # index subfolders |