2
0
mirror of https://github.com/thumbsup/thumbsup synced 2024-11-17 15:25:50 +00:00
Commit Graph

74 Commits

Author SHA1 Message Date
Romain
73672ce4dd refactor(test): replace var with const in tests files when appropriate 2018-08-18 20:25:35 +02:00
Romain
a51904255c fix(test): fix path to theme helpers in unit tests 2018-07-19 21:05:42 +02:00
Romain
bf60ae4677 refactor(components): bring ListrWorkQueue into this repo to simplify the build process
- This component was not published to the rpm registry anyway
- We depended on the repo’s master branch which can break things for everyone
- Its repo was not getting much attention which meant
  * no tests, no coverage report
  * no linting
  * no package linting (e.g. had 2 dependencies that weren’t actually used)

It will be simpler to manage this way
2018-07-13 21:29:52 +02:00
Romain
39591c70a1 feat(theme): support for themes published within a subfolder
If a theme has a build process, it will likely publish a subfolder (e.g. “dist”) to npm.
It can simply set “thumbsup.themeRoot” in its package.json so thumbsup looks in the right place.
2018-06-30 14:18:13 +02:00
Romain
00dac76983 test(exiftool): add tests for batch exiftool streaming 2018-06-18 23:31:11 +02:00
Romain
79dd36f77b test(core): add unit tests for the relationship/action mapping, e.g. “photo:large” 2018-06-18 00:31:33 +02:00
Romain
832673f322 refactor(tests): integration tests as part of the Mocha suite
Some benefits:
- no need to check-in a full website to compare against
- targeted asserts, instead of a “should be 100% the same”
- more robust against cosmetic theme changes
- allows for testing more edge cases in the future
- can’t forget to run the integration tests since they’re part of “npm test”
2018-06-16 18:28:58 +02:00
Romain
7dd714c957 refactor(tests): dynamically generate test folders to check more edge cases 2018-06-16 18:26:17 +02:00
Romain
fb4c4fb89f test(all): add unit tests for Album and Problem 2018-06-15 22:32:45 +02:00
Romain
6d94b6339f chore(tests): handle rejected promises during tests 2018-06-14 00:02:03 +02:00
Romain
3fd0ee9ba3 chore(tests): capture all logs during the tests so they don’t pollute the output + can be asserted on 2018-06-13 23:58:57 +02:00
Romain
3fa8867757 test(all): add unit tests for theme + cleanup logic 2018-06-13 23:30:14 +02:00
Romain
72a23807f1 chore(build): require all source files in the tests so the coverage report shows untested files 2018-06-13 23:27:40 +02:00
Felix Eckhofer
81a85004c2 Fix behavior for non-traversable directories (#108)
fix(index): Continue on errors during find

This ensures the gallery is created even when some files are
inaccessible (for example due to invalid names or file permissions).

Requires running the test in Docker as non-root to allow file access test
2018-06-12 22:58:45 +02:00
Romain
bd86ab6535 test(themes): add integration tests using a mock file system
This replaces the basic unit tests that used private methods
and didn’t have a very clear intent
2018-06-12 00:54:53 +02:00
Romain
deee049650 refactor(themes): extract the {{relative}} helper to be standalone + add some tests 2018-06-12 00:37:44 +02:00
Romain
be0ee25c64 test(index): don’t run the invalid filename test on macOS 2018-06-11 23:51:33 +02:00
Felix Eckhofer
124d1857b1 test(index): Add test for invalid filename behavior 2018-06-09 23:51:18 +02:00
Romain
899a89e516 test(mapper): fix unit test that relied on a folder called “tmp” to already exist 2018-06-09 23:46:21 +02:00
Romain
e9beb830a2 feat(core): skip files that can’t be processed + show a summary at the end
Thumbsup used to stop at the first problem processing a file.
This was a problem on large galleries where you’d need to run it again and again, fixing files as you went.
This change:
- skips problematic files and shows a summary at the end
- logs all warnings/errors to <thumbsup.log> when running the default output

Also refactor and cleanup of the logging logic.
2018-06-09 00:20:29 +02:00
Romain
7208642d95 test(all): increase unit test coverage 2018-06-08 23:39:09 +02:00
Romain
8bbe1186c5 fix(core): custom album mappers using file:// can use a relative path 2018-06-08 23:28:11 +02:00
Romain
0adef54dc8 feat(core): add support for static and animated GIFs
GraphicsMagick can’t process animated GIFs well unless all frames are coalesced, which creates very large files.
This means there is a new dependency on Gifsicle which is very good at working with animated GIFs.

- Thumbnails are still processed through GraphicsMagick (more options, e.g. centre-crop)
- Large previews of animated GIFs go through Gifsicle

The startup checks are updated to check for the Gifsicle binary.

Fixes #96.
2018-06-08 00:49:03 +02:00
Romain
e1517d2fbd feat(core): when building thumbnails, fallback to JPG if the source is not a browser-friendly format
If the source is browser-friendly (jpg, jpeg, png) then keep the exact original extension.
2018-06-08 00:27:44 +02:00
Romain
03a9c9a319 refactor: themes are now standalone folders, to prepare for external loading
Every theme is made of { Handlebars + Less + Partials + Helpers + Public }
2018-06-01 23:49:53 +02:00
Romain
3c946621ec feat(core): new --gm-args flag to pass additional options to GraphicsMagick
Example: thumbsup --gm-args ‘modulate 120’ --gm-args ‘equalize’
Closes #89.
2018-05-14 22:05:33 +02:00
Romain
dd282f92d4 chore(dependencies): update all dependencies to the latest version 2018-05-14 21:22:57 +02:00
klemens
424d2c8b8b spelling fixes 2018-04-26 11:08:45 +02:00
Romain
03c3b38e82 fix(model): ignore the EXIF date if it’s not valid e.g. 0000:00:00
Closes #94
2018-03-29 20:21:58 +11:00
Romain
e5f6df3d28 refactor(cli): deprecated options logic now handled in <options> module 2017-12-23 21:33:43 +11:00
Romain
286dc8d15f feat(albums): --albums-from can be a list of patterns with special keywords
- %path expands to the path of the photo/video
- %keywords expands to the IPTC keywords of the photo
- {format} expands to the photo's EXIF date, e.g. {YYYY MM}
2017-12-23 20:32:10 +11:00
Romain
23f19566d0 test(cli): add unit tests for options parsing, especially custom logic on top of yargs 2017-12-22 22:28:37 +11:00
Romain
fce8d8d8af refactor(model): album mappers can also return '/' to mean the root album 2017-12-16 20:38:56 +11:00
Romain
81ee517062 feat(index): ignore files in a root #recycle folder (Synology recycle bin) 2017-12-10 23:34:32 +11:00
Romain
91528ad076 test(index): cleanup thumbsup.db between test runs, otherwise the test does nothing 2017-12-10 10:40:12 +11:00
Romain
d0bbf94b1c fix(index): don’t crash when trying to parse exiftool output for a badly encoded file 2017-12-09 23:22:20 +11:00
Romain
3152361e65 Fix #83: handle IPTC keywords returned as string or array 2017-12-02 22:54:37 +11:00
Romain
f66208e052 New options for the {{date}} helper: custom date format + how long ago 2017-11-29 21:11:12 +11:00
Romain
515ce3e8c1 Fix bug in #compare and #times Handlebars templates introduced in 3e0982e
When declared with () => instead of function (), the context is missing from child blocks.
2017-11-29 20:58:13 +11:00
Romain
3e098e2328 Extract Handlebars helpers to prepare for theme structure + add unit tests 2017-11-28 07:53:51 +11:00
Romain
2a0a8d6631 Upgrade mock-fs to support Node 8 (includes dynamic require workaround) 2017-11-26 22:47:51 +11:00
Romain
cbf8a1f3b4 Don’t index media from Synology thumbnail folders (@eaDir) nor folders starting with “.” 2017-11-26 22:32:03 +11:00
Romain
ac520d40ad Fix case insensitive glob + add unit tests for globbing 2017-11-26 21:21:15 +11:00
Romain
24b2f9bd7c Major optimisations: SQLite index + faster disk glob + new exiftool streaming
1. Move from a JSON index to a SQLite database.
  - This allows the indexing to be interrupted & resumed
  - Updating the index consumes less RAM than loading / saving an entire JSON object
  - Loading the index consumes less RAM since it can be streamed, only exacting the properties we need every time (instead of loading all EXIF data in memory, only to discard most of it later)
  - These make a big difference when processing 10,000+ photos

2. Switch from <glob> to a manual <readdir>
  - Glob would take several hundred or GB of RAM when asked to find several thousand files
  - Manual approach with <micromatch> library does the same thing in a fraction of the time / memory usage

3. Exiftool optimisations
  - Run 1 exiftool process per CPU, still in batch mode (divide all files to be read into 1 bucket per CPU)
  - Stream the exiftool output instead of buffering it in memory
2017-11-24 22:08:59 +11:00
Romain
b92724472e Fix #71: read both Quicktime CreationDate and CreateDate 2017-08-13 21:28:00 +10:00
Romain
0b27d37881 Read metadata from Picasa.ini if present 2017-08-07 22:53:04 +10:00
Romain
3e64d2ab38 Create a Metadata model attached to input files
- for easier unit testing
- to enable input filtering (e.g. only include photos with this keyword)
2017-08-07 22:52:26 +10:00
Romain
d24c5110cc Fix #70: files in the root of the source folder get added to the root gallery (index.html)
Before, they were added to an album called “.” which didn’t look good,
and the corresponding “.html” file (no base name) caused issues on web servers
2017-07-22 21:25:43 +10:00
Romain
dc40fbac09 Fix inferring data from the filename: was getting confused if the folder contained digits 2017-06-14 17:43:38 +10:00
Romain
80f7a88c35 Fix #61: new options to avoid copying original photos to the output folder 2017-06-03 21:25:41 +10:00