File Stacking

XBMC's file stacking feature handles your multi-part files in a clean, intuitive manner. =What is file stacking?= File stacking combines your multi-part files into a single item in the file list or library. Playback of stacks is completely transparent to you as the user, all parts are automatically queued for playback in order. Stacking is a view option available in videos file mode window. It is always applied when scanning movies into the library.

=How does file stacking work?= The stacking function is presented with a list of file items from a directory listing.
 * 1) Sort the file list alphabetically.
 * CD1, CD2, ..., CD9 directories are collapsed if they contain only one video file.
 * 1) Each filename is tokenized into Title, Volume, Ignore and Extension parts.
 * 2) For each consecutive filename where all tokens except Volume match, the file's index in the file list is stored in a vector.
 * 3) Once the above condition fails...
 * 4) The stack path is generated (eg. "stack://movie-cd1-xvid.avi, movie-cd2-xvid.avi")
 * 5) The stack name is created from the Title Ignore and Extension tokens (eg. movie-xvid.avi)
 * 6) The path and label of the first file item are replaced by the stack path and stack name, respectively.
 * 7) The remaining file items in the stack are removed from the file list.
 * 8) This continues until the file list is exhausted.

=Tuning= File stacking can be tuned by the user to match obscure cases using the moviestacking advanced setting. =Deficiencies=
 * Stacking is currently only applied to movies.
 * Stacking is currently only applied to filenames, not the full path.
 * The default expressions will NOT stack files which use only a number as the volume token (eg movie1.avi, movie2.avi). This is intentional due to false positives which can occur with sequels in a flat directory layout. Some solutions to this problem (in order of best to worst) follow...
 * 1) Use a dir-per-movie directory layout, see the append example of the moviestacking advanced setting.
 * 2) Rename offending files to match one of the more specific volume tokens (ie. cd1, part1, etc).
 * 3) Create special-case regular expressions for those files that fail to stack (see tuning).