server: parse updateTags messages more carefully
This commit is contained in:
parent
7cc928e1e9
commit
6dbfb820ea
1 changed files with 44 additions and 4 deletions
|
|
@ -49,111 +49,150 @@ var DB_PROPS = {
|
|||
db: true,
|
||||
read: true,
|
||||
write: false,
|
||||
type: 'string',
|
||||
},
|
||||
name: {
|
||||
db: true,
|
||||
read: true,
|
||||
write: true,
|
||||
type: 'string',
|
||||
},
|
||||
artistName: {
|
||||
db: true,
|
||||
read: true,
|
||||
write: true,
|
||||
type: 'string',
|
||||
},
|
||||
albumArtistName: {
|
||||
db: true,
|
||||
read: true,
|
||||
write: true,
|
||||
type: 'string',
|
||||
},
|
||||
albumName: {
|
||||
db: true,
|
||||
read: true,
|
||||
write: true,
|
||||
type: 'string',
|
||||
},
|
||||
compilation: {
|
||||
db: true,
|
||||
read: true,
|
||||
write: true,
|
||||
type: 'boolean',
|
||||
},
|
||||
track: {
|
||||
db: true,
|
||||
read: true,
|
||||
write: true,
|
||||
type: 'integer',
|
||||
},
|
||||
trackCount: {
|
||||
db: true,
|
||||
read: true,
|
||||
write: true,
|
||||
type: 'integer',
|
||||
},
|
||||
disc: {
|
||||
db: true,
|
||||
read: true,
|
||||
write: true,
|
||||
type: 'integer',
|
||||
},
|
||||
discCount: {
|
||||
db: true,
|
||||
read: true,
|
||||
write: true,
|
||||
type: 'integer',
|
||||
},
|
||||
duration: {
|
||||
db: true,
|
||||
read: true,
|
||||
write: false,
|
||||
type: 'float',
|
||||
},
|
||||
year: {
|
||||
db: true,
|
||||
read: true,
|
||||
write: true,
|
||||
type: 'integer',
|
||||
},
|
||||
genre: {
|
||||
db: true,
|
||||
read: true,
|
||||
write: true,
|
||||
type: 'string',
|
||||
},
|
||||
file: {
|
||||
db: true,
|
||||
read: true,
|
||||
write: false,
|
||||
type: 'string',
|
||||
},
|
||||
mtime: {
|
||||
db: true,
|
||||
read: false,
|
||||
write: false,
|
||||
type: 'integer',
|
||||
},
|
||||
replayGainAlbumGain: {
|
||||
db: true,
|
||||
read: false,
|
||||
write: false,
|
||||
type: 'float',
|
||||
},
|
||||
replayGainAlbumPeak: {
|
||||
db: true,
|
||||
read: false,
|
||||
write: false,
|
||||
type: 'float',
|
||||
},
|
||||
replayGainTrackGain: {
|
||||
db: true,
|
||||
read: false,
|
||||
write: false,
|
||||
type: 'float',
|
||||
},
|
||||
replayGainTrackPeak: {
|
||||
db: true,
|
||||
read: false,
|
||||
write: false,
|
||||
type: 'float',
|
||||
},
|
||||
composerName: {
|
||||
db: true,
|
||||
read: true,
|
||||
write: true,
|
||||
type: 'string',
|
||||
},
|
||||
performerName: {
|
||||
db: true,
|
||||
read: true,
|
||||
write: true,
|
||||
type: 'string',
|
||||
},
|
||||
lastQueueDate: {
|
||||
db: true,
|
||||
read: false,
|
||||
write: false,
|
||||
type: 'date',
|
||||
},
|
||||
};
|
||||
|
||||
var PROP_TYPE_PARSERS = {
|
||||
'string': function(value) {
|
||||
return value ? String(value) : "";
|
||||
},
|
||||
'date': function(value) {
|
||||
if (!value) return null;
|
||||
var date = new Date(value);
|
||||
if (isNaN(date.getTime())) return null;
|
||||
return date;
|
||||
},
|
||||
'integer': parseIntOrNull,
|
||||
'float': parseFloatOrNull,
|
||||
'boolean': function(value) {
|
||||
return value == null ? null : !!value;
|
||||
},
|
||||
};
|
||||
|
||||
|
|
@ -976,7 +1015,8 @@ Player.prototype.updateTags = function(obj) {
|
|||
var prop = DB_PROPS[propName];
|
||||
if (! prop.write) continue;
|
||||
if (! (propName in props)) continue;
|
||||
track[propName] = props[propName];
|
||||
var parser = PROP_TYPE_PARSERS[prop.type];
|
||||
track[propName] = parser(props[propName]);
|
||||
}
|
||||
this.persist(track);
|
||||
this.emit('updateDbTrack', track);
|
||||
|
|
@ -1727,7 +1767,7 @@ function trackWithoutIndex(category, dbFile) {
|
|||
for (var propName in DB_PROPS) {
|
||||
var prop = DB_PROPS[propName];
|
||||
if (!prop[category]) continue;
|
||||
// save space by leaving out null or undefined values
|
||||
// save space by leaving out null and undefined values
|
||||
var value = dbFile[propName];
|
||||
if (value == null) continue;
|
||||
out[propName] = value;
|
||||
|
|
@ -1792,7 +1832,7 @@ function grooveFileToDbFile(file, filenameHint, object) {
|
|||
object = object || {key: uuid()};
|
||||
var parsedTrack = parseTrackString(file.getMetadata("track"));
|
||||
var parsedDisc = parseTrackString(file.getMetadata("disc") || file.getMetadata("TPA"));
|
||||
object.name = file.getMetadata("title") || trackNameFromFile(filenameHint);
|
||||
object.name = (file.getMetadata("title") || trackNameFromFile(filenameHint) || "").trim();
|
||||
object.artistName = (file.getMetadata("artist") || "").trim();
|
||||
object.composerName = (file.getMetadata("composer") ||
|
||||
file.getMetadata("TCM") || "").trim();
|
||||
|
|
@ -1806,7 +1846,7 @@ function grooveFileToDbFile(file, filenameHint, object) {
|
|||
object.disc = parsedDisc.value;
|
||||
object.discCount = parsedDisc.total;
|
||||
object.duration = file.duration();
|
||||
object.year = parseInt(file.getMetadata("date") || "0", 10);
|
||||
object.year = parseIntOrNull(file.getMetadata("date"));
|
||||
object.genre = file.getMetadata("genre");
|
||||
object.replayGainTrackGain = parseFloatOrNull(file.getMetadata("REPLAYGAIN_TRACK_GAIN"));
|
||||
object.replayGainTrackPeak = parseFloatOrNull(file.getMetadata("REPLAYGAIN_TRACK_PEAK"));
|
||||
|
|
|
|||
Loading…
Reference in a new issue