Switch to unified view

a/src/filters/rclaudio b/src/filters/rclaudio
...
...
234
            self.em.rclog("extractone: no mime or file name")
234
            self.em.rclog("extractone: no mime or file name")
235
            return (ok, docdata, "", rclexecm.RclExecM.eofnow)
235
            return (ok, docdata, "", rclexecm.RclExecM.eofnow)
236
        filename = params["filename:"]
236
        filename = params["filename:"]
237
        mimetype = params["mimetype:"]
237
        mimetype = params["mimetype:"]
238
        self.filename = filename
238
        self.filename = filename
239
        #self.em.rclog("%s" % filename)
239
        try:
240
        try:
240
            mutf = File(filename)
241
            mutf = File(filename)
241
        except Exception as err:
242
        except Exception as err:
242
            self.em.rclog("extractone: extract failed: [%s]" % err)
243
            self.em.rclog("extractone: extract failed: [%s]" % err)
243
            return (ok, docdata, "", rclexecm.RclExecM.eofnow)
244
            return (ok, docdata, "", rclexecm.RclExecM.eofnow)
...
...
245
        #self._showMutaInfo(mutf)
246
        #self._showMutaInfo(mutf)
246
247
247
        ###################
248
        ###################
248
        # Extract audio parameters. Not all file types supply all or
249
        # Extract audio parameters. Not all file types supply all or
249
        # even use the same property names...
250
        # even use the same property names...
251
        # minf has natural str keys, and encoded values
250
        minf = {}
252
        minf = {}
251
        for prop,dflt in [('sample_rate', 44100), ('channels', 2),
253
        for prop,dflt in [('sample_rate', 44100), ('channels', 2),
252
                          ('length', 0), ('bitrate', 0)]:
254
                          ('length', 0), ('bitrate', 0)]:
253
            try:
255
            try:
254
                minf[prop] = getattr(mutf.info, prop)
256
                minf[prop] = getattr(mutf.info, prop)
...
...
256
                #self.em.rclog("NO %s prop: %s" % (prop, e))
258
                #self.em.rclog("NO %s prop: %s" % (prop, e))
257
                minf[prop] = dflt
259
                minf[prop] = dflt
258
260
259
        if minf['bitrate'] == 0 and minf['length'] > 0:
261
        if minf['bitrate'] == 0 and minf['length'] > 0:
260
            br = int(os.path.getsize(filename)* 8 / minf['length'])
262
            br = int(os.path.getsize(filename)* 8 / minf['length'])
261
            minf['bitrate'] = str(br)
263
            minf['bitrate'] = br
262
264
263
        minf['duration'] = minf['length']
265
        minf['duration'] = minf['length']
264
        del minf['length']
266
        del minf['length']
265
267
266
        # Bits/samp is named sample_size or bits_per_sample (depend on file tp)
268
        # Bits/samp is named sample_size or bits_per_sample (depend on file tp)
...
...
272
            except:
274
            except:
273
                #self.em.rclog("using default bits_per_sample")
275
                #self.em.rclog("using default bits_per_sample")
274
                minf['bits_per_sample'] = 16
276
                minf['bits_per_sample'] = 16
275
277
276
        for tag,val in minf.items():
278
        for tag,val in minf.items():
279
            val = str(val)
280
            if type(val) == type(u''):
281
                val = val.encode('utf-8', errors='replace')
277
            minf[tag] = str(val)
282
            minf[tag] = val
278
279
        #self.em.rclog("minf after audio %s\n" % minf)
280
        
283
            
281
        ####################
284
        ####################
282
        # Metadata tags. The names vary depending on the file type. We
285
        # Metadata tags. The names vary depending on the file type. We
283
        # just have a big translation dictionary for all
286
        # just have a big translation dictionary for all
284
        for tag,val in mutf.items():
287
        for tag,val in mutf.items():
285
            #self.em.rclog("Original tag: <%s>, val <%s>" % (tag, val))
288
            #self.em.rclog("Original tag: <%s>, val <%s>" % (tag, val))
...
...
287
                tag = tag.upper()
290
                tag = tag.upper()
288
            if tag in tagdict:
291
            if tag in tagdict:
289
                ntag = tagdict[tag].lower()
292
                ntag = tagdict[tag].lower()
290
                #self.em.rclog("New tag: %s" % ntag)
293
                #self.em.rclog("New tag: %s" % ntag)
291
                try:
294
                try:
292
                    if isinstance(val, bool):
295
                    if type(val) == type(u''):
296
                        val = val.encode('utf-8', errors='replace')
297
                    elif type(val) != type(b''):
293
                        val0 = str(val)
298
                        val = str(val)
294
                    else:
295
                        try:
296
                            val0 = val[0]
297
                        except:
298
                            val0 = val
299
                    if val0:
300
                        if type(val0) == type(u""):
299
                        if type(val) == type(u''):
301
                            val0 = val0.encode('utf-8', errors='replace')
300
                            val = val.encode('utf-8', errors='replace')
302
                        else:
303
                            val0 = str(val0)
304
                        minf[ntag] = val0
301
                    minf[ntag] = val
305
                        #self.em.rclog("Tag %s -> %s" % (ntag, val0))
302
                    #self.em.rclog("Tag %s -> %s" % (ntag, val0))
306
                except Exception as err:
303
                except Exception as err:
307
                    self.em.rclog("Error while extracting tag: %s"%err)
304
                    self.em.rclog("Error while extracting tag: %s"%err)
308
            else:
305
            else:
309
                #self.em.rclog("Unprocessed tag: %s, value %s"%(tag,val))
306
                #self.em.rclog("Unprocessed tag: %s, value %s"%(tag,val))
310
                pass
307
                pass
308
309
        #self.em.rclog("minf after extract %s\n" % minf)
311
310
312
        # TPA,TPOS,disc DISCNUMBER/TOTALDISCS
311
        # TPA,TPOS,disc DISCNUMBER/TOTALDISCS
313
        # TRCK,TRK,trkn TRACKNUMBER/TOTALTRACKS
312
        # TRCK,TRK,trkn TRACKNUMBER/TOTALTRACKS
314
        for what in ('disc', 'track'):
313
        for what in ('disc', 'track'):
315
            k = what + 'number'
314
            k = what + 'number'
...
...
320
                    if mo:
319
                    if mo:
321
                        l = (mo.group(1), mo.group(2))
320
                        l = (mo.group(1), mo.group(2))
322
                    else:
321
                    else:
323
                        l = l.split(b'/')
322
                        l = l.split(b'/')
324
                else:
323
                else:
325
                    self.em.rclog("l is tuple: %s" %l)
324
                    self.em.rclog("l is tuple: %s tp1 %s tp2 %S" %
325
                                  (l, type(l[0]), type(l[1])))
326
                if len(l) == 2:
326
                if len(l) == 2:
327
                    minf[k] = str(l[0])
327
                    minf[k] = l[0]
328
                    #self.em.rclog("minf[%s] = %s" % (k, minf[k]))
328
                    #self.em.rclog("minf[%s] = %s" % (k, minf[k]))
329
                    if l[1] != 0:
329
                    if l[1] != 0:
330
                        minf['total' + what + 's'] = str(l[1])
330
                        minf['total' + what + 's'] = l[1]
331
331
332
        if 'orchestra' in minf:
332
        if 'orchestra' in minf:
333
            val = minf['orchestra']
333
            val = minf['orchestra']
334
            if val.startswith('orchestra='):
334
            if val.startswith(b'orchestra='):
335
                minf['orchestra'] = val[10:]
335
                minf['orchestra'] = val[10:]
336
                
336
                
337
        #self.em.rclog("minf after tags %s\n" % minf)
337
        #self.em.rclog("minf after tags %s\n" % minf)
338
338
339
        # Check for embedded image. We just set a flag.
339
        # Check for embedded image. We just set a flag.
340
        embdimg = self._embeddedImageFormat(mutf)
340
        embdimg = self._embeddedImageFormat(mutf)
341
        if embdimg:
341
        if embdimg:
342
            #self.em.rclog("Embedded image format: %s" % embdimg)
342
            #self.em.rclog("Embedded image format: %s" % embdimg)
343
            if type(embdimg) == type(u''):
344
                minf["embdimg"] = embdimg.encode('ascii', errors='replace')
345
            else:
343
            minf["embdimg"] = embdimg
346
                minf["embdimg"] = embdimg
344
        
347
        
345
        self.em.setmimetype("text/plain")
348
        self.em.setmimetype("text/plain")
346
        self.em.setfield("charset", 'utf-8')
349
        self.em.setfield("charset", 'utf-8')
347
350
348
        for tag,val in minf.items():
351
        for tag,val in minf.items():