It seems that rsync triggers these events, so we must handle these in
addition to the IN_CLOSE_WRITE ones triggered by re-saves.
Also fix MakeDir() to correctly make parent directories (i.e. mkdir -p).
Previously we had a template tag limit of 16. This commit lifts that
limit to support "unlimited" tags per template.
Skip already offset landmarks most efficiently when adding a new asset.
New template tags:
__CINERA_SEARCH_URL__
__CINERA_VOD_PLATFORM__
Database version 4
Revving resources involves hashing asset files and appending a query
string to their URLs. Additionally we monitor asset files for changes
and edit their new checksum hash into all HTML files citing them.
This commit also introduces new template tags for assets (listed below)
with which you may instruct Cinera to rev assets of your choice. There
is further information about this in the help (-h) and the README.md
Amongst other minor changes, we now support unset $XDG_CACHE_HOME and
$HOME
- Thanks to insofaras for wordexp()
New flags:
-Q Set query string
New template tags:
__CINERA_ASSET__
__CINERA_CSS__
__CINERA_IMAGE__
__CINERA_JS__
Renamed template tag:
__CINERA_SEARCH__ (was __CINERA_INDEX__)
Previously it could fail to generate an index if the processing of the
final file set "Inserted" or "Deleted" to FALSE, even if a prior file
had set it to TRUE
We no longer prevent enforcement of strict server security policies (to
be documented)
Add bounds-checking to the Copy string functions, fixing buffer sizes
Fix the marker skipping (e.g. :afk)
Different ISBN database, and slightly more flexible BuildReference()
Permit line-breaking on '/' in the references menu
cinera.css and cinera_player*.js:
More subtle "click here to regain focus" - for @insofaras
Persist theatre mode - for @insofaras
Resume in-progress video at previous timecode - for @AsafGartner
It treats co-hosts and guests differently from chat commenters, styling
and categorising annotations for them such that their contributions
don't come under the "Chat comment" medium
Also do some essentially cosmetic code compression of the marker cases
and other things
cinera_player_pre.js: Make the credits menu initially focus the host's
person if they have no support, rather than the first credited person
who has support
It merely checks the video's privacy status and, if not public, records
its corresponding HMML base filename privately in the .metadata without
generating a player page or a search / table of contents entry for it.
Every four hours it will loop over the .metadata to recheck the privacy
status of any privately recorded entries, and process newly public ones.
Fix template validation to check that the script comes after both the
player and menus (previously it only specified the player).
Fix relocation code to try and remove only the child directories of the
BaseDir, and no shallower (previously it would try and "recursively"
remove directories all the way back to /, obviously not actually getting
there because it would encounter a non-empty directory along the way).
Add "Modes" to the startup printout.
Flags:
-g Ignore privacy status
Also optimise out superfluous searches, and relieve IndexToBuffer() of
the need to string-search the .index
Rewrite the table of contents page after deleting an entry
This commit also retains profiling, as a reminder to me how I used it,
and the old linear search code. The timing blocks and the old code may
be deleted in a future commit
Essentially, the previous change prevented the marker progress code from
firing if the user only interacts with the YouTube player directly.
cinera.c: Try to curl the quotes in, rather than straight up deleting
them, if(ShouldFetchQuotes)
cinera_player_pre.js: Episode keyboard navigation. Also swap out A for
K, and D for J
cinera_player_pre.js: Handle the case in onRefChanged() in which the
filter_container or filterState is not present
cinera.c: Refetch quotes when processing a set of annotations >60 mins
after the last fetch
Flags:
-w Force quote cache rebuild
Also compress the template code
cinera_player_pre.js: Fix bug in which onRefChanged() tried to call
player.jumpToNextMarker(); before the player was ready. This could
happen if its first marker's timecode is 0:00 and medium is :afk
Enable Theatre mode to work in containers styled with max-width or
max-height
Also fix the inotify loop, augment the index (the .metadata files) to
contain data useful for insobot, and futureproof UpgradeDB()
Flags:
* -e Examine Index
Just pop an -e on the end of your usual list of flags
* -u Update Interval (was -U)
This also changes the hardcoded, unintegrated output to wrap cineraMenus
and cineraPlayerContainer in a <div>, as newly reflected in the example
template_player.html
The template buffers no longer contain indentation spaces at the start
or a \n at the end. This removes any weirdness from template composition
Also remove the cleanup code added in 0.5.22
Also fail gracefully if supplied with an .hmml file containing an
incomplete [video] node, or a template containing tags whose buffers
cannot be populated
Remove environment variable CINERA_INTEGRATE because this is meaningless
now that the default template locations are blank
Flags
-t Template Directory (was Player Template Location)
-y Player Template Location
Bug Fixes
Correctly skip annotation sets that couldn't be processed for
various reasons
Fix crash caused by <!-- __CINERA_INDEX__ --> tag in a player
template, because its buffer was being freed
Fix 2048 bytes leak per processed set of annotations
Relative to the Base:
-a sets the player location
-n sets the index location
Tweak flags, and add -B to set Base URL (necessary if setting -a or -n)
New template tags:
__CINERA_URL__
__CINERA_VIDEO_ID__
Bump DB version: 2
index_header now contains the Index and Player Locations
This is hardcoded for now, for ease of use, pending the config system
Also add Medium to the ProjectInfo array, to save users having to set
this with -m (which option remains available to them)
Reorganise the CSS, Images and JS files back to their location in the
same directory, since a default invocation of the program assumes they
are in the same directory as the Root Directory, to hopefully alleviate
some potential user frustration thanks to the requirement to set their
locations (with -c, -i and -j) before any usable output is produced