--- a/src/filters/rclaudio
+++ b/src/filters/rclaudio
@@ -5,6 +5,8 @@
import sys
import os
import rclexecm
+import time
+import datetime
try:
import mutagen
@@ -19,8 +21,43 @@
# TPA,TPOS,disc DISCNUMBER/TOTALDISCS
# TRCK,TRK,trkn TRACKNUMBER/TOTALTRACKS
tagdict = {
+ 'ALBUM ARTIST': 'ALBUMARTIST',
+ 'ALBUM' : 'ALBUM',
+ 'ALBUMARTIST' : 'ALBUMARTIST',
+ 'ALBUMARTISTSORT' : 'ALBUMARTISTSORT',
+ 'ALBUMSORT' : 'ALBUMSORT',
+ 'ARTIST' : 'ARTIST',
+ 'ARTISTSORT' : 'ARTISTSORT',
+ 'BPM' : 'BPM',
'COM' : 'COMMENT',
'COMM' : 'COMMENT',
+ 'COMMENT' : 'COMMENT',
+ 'COMPILATION' : 'COMPILATION',
+ 'COMPOSER' : 'COMPOSER',
+ 'COMPOSERSORT' : 'COMPOSERSORT',
+ 'CONDUCTOR' : 'CONDUCTOR',
+ 'CONTENTGROUP' : 'CONTENTGROUP',
+ 'COPYRIGHT' : 'COPYRIGHT',
+ 'DATE' : 'DATE',
+ 'DISCNUMBER' : 'DISCNUMBER',
+ 'DISCSUBTITLE' : 'DISCSUBTITLE',
+ 'DISCTOTAL' : 'TOTALDISCS',
+ 'ENCODEDBY' : 'ENCODEDBY',
+ 'ENSEMBLE' : 'ORCHESTRA',
+ 'GENRE' : 'GENRE',
+ 'ISRC' : 'ISRC',
+ 'LABEL' : 'LABEL',
+ 'LANGUAGE' : 'LANGUAGE',
+ 'LYRICIST' : 'LYRICIST',
+ 'LYRICS' : 'LYRICS',
+ 'MOOD' : 'MOOD',
+ 'ORCHESTRA' : 'ORCHESTRA',
+ 'PERFORMER' : 'PERFORMER',
+ 'ORIGINALARTIST' : 'ORIGINALARTIST',
+ 'ORIGINALDATE' : 'ORIGINALDATE',
+ 'RELEASEDATE' : 'RELEASEDATE',
+ 'REMIXER' : 'REMIXER',
+ 'SUBTITLE' : 'SUBTITLE',
'TAL' : 'ALBUM',
'TALB' : 'ALBUM',
'TBP' : 'BPM',
@@ -44,6 +81,8 @@
'TIT1' : 'CONTENTGROUP',
'TIT2' : 'TITLE',
'TIT3' : 'SUBTITLE',
+ 'TITLE' : 'TITLE',
+ 'TITLESORT' : 'TITLESORT',
'TLA' : 'LANGUAGE',
'TLAN' : 'LANGUAGE',
'TMOO' : 'MOOD',
@@ -51,6 +90,8 @@
'TOPE' : 'ORIGINALARTIST',
'TOR' : 'ORIGINALDATE',
'TORY' : 'ORIGINALDATE',
+ 'TOTALDISCS' : 'TOTALDISCS',
+ 'TOTALTRACKS' : 'TOTALTRACKS',
'TP1' : 'ARTIST',
'TP2' : 'ALBUMARTIST',
'TP3' : 'CONDUCTOR',
@@ -63,9 +104,10 @@
'TPE4' : 'REMIXER',
'TPOS' : 'DISCNUMBER',
'TPUB' : 'LABEL',
- 'TXXX:ORCHESTRA' : 'ORCHESTRA',
- 'ORCHESTRA' : 'ORCHESTRA',
- 'ENSEMBLE' : 'ORCHESTRA',
+ 'TRACK' : 'TRACKNUMBER',
+ 'TRACKNUM' : 'TRACKNUMBER',
+ 'TRACKNUMBER' : 'TRACKNUMBER',
+ 'TRACKTOTAL' : 'TOTALTRACKS',
'TRC' : 'ISRC',
'TRCK' : 'TRACKNUMBER',
'TRK' : 'TRACKNUMBER',
@@ -85,11 +127,12 @@
'TT2' : 'TITLE',
'TT3' : 'SUBTITLE',
'TXT' : 'LYRICIST',
+ 'TXXX:ORCHESTRA' : 'ORCHESTRA',
'TYE' : 'DATE',
'TYER' : 'DATE',
- 'YEAR' : 'DATE',
'ULT' : 'LYRICS',
'USLT' : 'LYRICS',
+ 'YEAR' : 'DATE',
'aART' : 'ALBUMARTIST',
'cpil' : 'COMPILATION',
'cprt' : 'COPYRIGHT',
@@ -114,46 +157,6 @@
'\xa9ope' : 'ORIGINALARTIST',
'\xa9too' : 'ENCODEDBY',
'\xa9wrt' : 'COMPOSER',
- 'ALBUM' : 'ALBUM',
- 'ALBUM ARTIST': 'ALBUMARTIST',
- 'ALBUMARTIST' : 'ALBUMARTIST',
- 'ALBUMARTISTSORT' : 'ALBUMARTISTSORT',
- 'ALBUMSORT' : 'ALBUMSORT',
- 'ARTIST' : 'ARTIST',
- 'ARTISTSORT' : 'ARTISTSORT',
- 'BPM' : 'BPM',
- 'COMMENT' : 'COMMENT',
- 'COMPILATION' : 'COMPILATION',
- 'COMPOSER' : 'COMPOSER',
- 'COMPOSERSORT' : 'COMPOSERSORT',
- 'CONDUCTOR' : 'CONDUCTOR',
- 'CONTENTGROUP' : 'CONTENTGROUP',
- 'COPYRIGHT' : 'COPYRIGHT',
- 'DATE' : 'DATE',
- 'DISCNUMBER' : 'DISCNUMBER',
- 'DISCSUBTITLE' : 'DISCSUBTITLE',
- 'ENCODEDBY' : 'ENCODEDBY',
- 'GENRE' : 'GENRE',
- 'ISRC' : 'ISRC',
- 'LABEL' : 'LABEL',
- 'LANGUAGE' : 'LANGUAGE',
- 'LYRICIST' : 'LYRICIST',
- 'LYRICS' : 'LYRICS',
- 'MOOD' : 'MOOD',
- 'ORIGINALARTIST' : 'ORIGINALARTIST',
- 'ORIGINALDATE' : 'ORIGINALDATE',
- 'RELEASEDATE' : 'RELEASEDATE',
- 'REMIXER' : 'REMIXER',
- 'SUBTITLE' : 'SUBTITLE',
- 'DISCTOTAL' : 'TOTALDISCS',
- 'TOTALDISCS' : 'TOTALDISCS',
- 'TOTALTRACKS' : 'TOTALTRACKS',
- 'TRACKTOTAL' : 'TOTALTRACKS',
- 'TRACKNUMBER' : 'TRACKNUMBER',
- 'TRACKNUM' : 'TRACKNUMBER',
- 'TRACK' : 'TRACKNUMBER',
- 'TITLE' : 'TITLE',
- 'TITLESORT' : 'TITLESORT',
}
# mp3: album, title, artist, genre, date, tracknumber
@@ -193,7 +196,29 @@
else:
return 'png'
return ''
-
+
+ # Date formats found in actual files (any date field): [1961] [1967-01-01]
+ # [1996-11-04T08:00:00Z] [] [0000] [1994-08-08 07:00]
+ # We don't try to process the time part.
+ # The method translates the date into a Unix timestamp
+ # which means possible trouble for pre-1970 recordings (negative time).
+ # Oldest possible date with 32 bits time stamp is 1901, which is ok though.
+ #
+ # This is not used as we don't try to set dmtime (which would not
+ # be used by the current indexer anyway). We instead set a 'date'
+ # metadata entry.
+ def parsedate(self, dt):
+ if len(dt) > 10:
+ dt = dt[0:10]
+ l = dt.split('-')
+ if len(l) > 3 or len(l) == 2 or len(l[0]) != 4 or l[0] == '0000':
+ return ''
+ if len(l) == 1:
+ pdt = datetime.datetime.strptime(dt, "%Y")
+ elif len(l) == 3:
+ pdt = datetime.datetime.strptime(dt, "%Y-%m-%d")
+ val = time.mktime(pdt.timetuple())
+ return "%d" % val
def extractone(self, params):
#self.em.rclog("extractone %s %s" % (params["filename:"],
@@ -262,10 +287,11 @@
if isinstance(val, bool):
val0 = str(val)
else:
- val0 = val[0]
+ try:
+ val0 = str(val[0])
+ except:
+ val0 = str(val)
if val0:
- if isinstance(val0, ID3TimeStamp):
- val0 = str(val0)
minf[ntag] = val0
#self.em.rclog("Tag %s -> %s" % (ntag, val0))
except Exception as err: