It's expected that reading from sessions will fail after expiry or
before login. Remove the word 'error' from the logged message and bump
it down a few levels.
ini_set should be passed an integer byte value; shorthand byte values
should only be used in php.ini. It's bad to assume that values are
always in megabytes; we could enforce it in our config file if we
cared, but not in PHP's.
Among other things, guest users were able to stream songs because
isset($xml_rpc) always returned true. That check was removed entirely;
if it breaks something, that breakage will need to be solved
differently. Changing the access level required to do something based
on a user-controlled GET parameter is wrong.
Using a relative path required it to be run from the top-level
directory; we already do voodoo to figure out the correct prefix, so we
should use that.
Newer versions of the PCRE library changed behaviour so we can't
replace invalid characters by listing them, since it now requires
that the characters in a pattern are valid Unicode characters. Use an
inverted character class instead.
Might work.
According to the changelog, getID3 1.7.9 standardised on part_of_a_set
as the key for this info (pulled from TPOS or TPA, depending on the
minor version of ID3v2); we were looking for 'pos', which is wrong.
Even if we move away from php-gettext in the future, it's easy to
write a quick T_() as a simple wrapper; it's not so easy to rewrite
PHP to allow redeclaration of a function.
php-gettext is niftier. With its autoemulation we can use native
gettext if the locale support is set up properly, or automatically
fall back to emulated if not. This should address many of the issues
people run into when trying to use different interface languages.
Previously we would say things like "1 seconds" and "1 hours". Using
the magic of ngettext and sprintf we can get rid of the static
concatenation order and become theoretically more translatable as well
as more correct in English.
Also changed the logic a bit, since the old looping method was
unfriendly to my brain.
Initial tag is case sensitive; we were emitting [Playlist] but some
players don't accept that. There is unfortunately no real standard to
check, but this does match what Winamp (ack, pthbbt) does.
Half the calls to it were already trying to call it as a static method
anyway. The only time $this was referenced was to get the type, so pass
type as a parameter.
Picard is putting multiple MBIDs in the tags now that MusicBrainz' new
schema is live. The easiest way to deal with this is to store all of
them as an aggregate value and match against that.
This would result in extra slashes, e.g.
'/\/([0-9]+?)\s\\\-\s(.+?)\..+$/' instead of
'/\/([0-9]+?)\s\-\s(.+?)\..+$/'
There are some unrelated cosmetic changes as well.