scribbu News -- history of user-visible changes -*- outline -*-

* Changes in NEXT RELEASE

** New Features

*** JSON output now supported for `scribbu dump`
*** UFI/UFID frame support added to scribbu.scm
* Changes in scribbu 0.7

** Bug Fixes

*** PCNT frames are now written as at least four octets

The PCNT frame _was_ writing only as many octets as needed to hold the count (i.e. one byte for a count of 0-255, two for counts 256-65535, and so on). However, the Rust Symphonia library caught the fact that the ID3v2 spec dictates that "The counter must be at least 32-bits long to begin with."
*** `scribbu m3u` will seek for a sync point

`scribbu m3u` reads any ID3v2 tags from the file, then assumed it was
at an mp3 sync point; if not, scribbu will now seek for the next sync
point.
*** Fix a build error in `winamp-genres.cc`
* Changes in scribbu 0.6

** Bug Fixes

*** renamed pop-frame to popm-frame in scribbu.scm
*** `scribbu text -d` doesn't actually delete the given frames
*** Scheme function & types defined in C are now in module (scribbu)
*** fixed several bugs in `write_id3v1_tag`

  - Added a GOOPS type check ensuring the argument is truly an
    `<id3v1-tag>` instance.
  - Stopped calling `scm_null_p()` in favor of `scm_is_null()` which
    returns an int.
  - Changed `emplace_strategy::reduce_padding_evently` to
    `only_with_full_padding`. While not strictly a bug, this results
    in more intuitive behavior for Scheme callers.
*** the `split` and `rename` sub-commands no longer look for "SCRIBBU"-prefixed env vars indiscriminately

`scribbu` can parse options from the environment. The environment variables examined all have a prefix of "SCRIBBU_". If there is such a variable in the environment with such a prefix, that does not correspond to a known command-line argument, `split` & `rename` would error-out. This build fixes that.
*** fixed issue #7: scribbu popm hangs and eventually OOMs when given a playcount > 255
*** SIGSTKSZ is no longer constant

Address the fact that with glibc 2.34 SIGSTKSZ is no longer a constant; in the process, remove boost::filesystem.
*** fix bug in computation of Demerau-Levenshtein distance

See <https://github.com/sp1ff/damerau-levenshtein/issues/2>.
*** check that vectors are not empty before taking address of first element

There were a number of places in which the address of a vector's elements was passed as `&(vec[0])` without checking that `vec` was non-empty. In every case, that address was passed along with the size (e.g. `foo(&(vec[0]), vec.size())`) and so taking the address of the "first" element of an empty vector was generally harmless. That said, "Accessing a nonexistent element through [operator[]] is undefined behavior." per <https://en.cppreference.com/w/cpp/container/vector/operator_at>.

The most recent implementation of the Standard C++ Library on my Arch image, however, includes an assertion that the passed index is legit in `operator[]`, which broke quite a few unit tests. To repair them, I wrapped all such invocations with a check that the vector is non-empty.
*** added docs for missing flags

.. in the `genre`, `popm` and `text` sub-commands.
*** treat trailing 0xff-s as false syncs

Address a lingering issue with unsynchronisation: when the last frame in an ID3v2.{3,4} tag ends in 0xff, and there is no padding, that should be treated as a false sync.
*** improved error messages when failing to open files
*** no longer terminates on error in functions exported to Guile
*** fixed a bug in id3v1_tag::set_year

Was calling `strlen` on a string that may not be null-terminated.
*** fixed issue #5: `scribbu popm -C N` fails when there is no PCNT frame

<https://github.com/sp1ff/scribbu/issues/5>
*** fixed a bug in copying ID3v2 tags to ID3v1

*** `scribbu text' will now, optionally, create an ID3v2 tag if there isn't one already
*** `scribbu dump' fails silently on file-not-found

*** owner not being written out by `scribbu popm' in some cases

*** id3v2_tag text frame virtuals will SEGV if the relevant frame isn't there

https://github.com/sp1ff/scribbu/issues/4

*** handle problems when renaming across filesystems

** New Features

*** tags & frames are now pretty-printed
*** class `comments` is now mutable
*** updated the default pretty-printer to list the language field
*** updated the manual

Especially the section on scripting.
*** `scribbu dump` now prints PRIV frames
*** `scribbu text` now operates on existing ID3v1 tags, when possible
*** the `create-frame` short flag for `popm` changed from -A to -f.
*** `encodings' sub-command added
*** `m3u' sub-command added
*** Arch & Debian packages now provided
*** `scribbu genre' now takes a '--get' flag
*** `scribbu dump' will now list mtime
*** builds on MacOS
*** new sub-command `genre'

`scribbu genre' lets you set the "genre" for your file by updating the relevant fields in the file's ID3v1 and/or -2 tags.

* Changes in scribbu 0.5

** Bug Fixes

*** CSV pretty-printing is now RFC 4180-compliant

** New Features

*** scribbu now builds on MacOS using the native toolchain

*** `scribbu report' now offers {tab,ascii}-delimited output

*** `scribbu report' now includes the filename, directory & overall size

*** Scheme API completely re-written

*** New sub-commands `scribbu popm', `scribbu xtag' & `scribbu text'

* Changes in scribbu 0.4

** New Features

*** made ID3v2 tags mutable

*** embedded Guile

*** added man pages & Texinfo manual

* Changes in scribbu 0.2

** New Features

*** 'dump' sub-command
