diff -up nicotine+-1.2.16/pynicotine/metadata_mutagen.py.orig nicotine+-1.2.16/pynicotine/metadata_mutagen.py
--- nicotine+-1.2.16/pynicotine/metadata_mutagen.py.orig 2009-09-30 17:53:21.000000000 +0200
+++ nicotine+-1.2.16/pynicotine/metadata_mutagen.py 2014-07-31 01:30:44.187442933 +0200
@@ -1,7 +1,9 @@
#!/usr/bin/env python
+# Python core
from __future__ import division
+# Python modules
import mutagen
from mutagen.mp3 import MP3, MPEGInfo
@@ -14,13 +16,20 @@ from mutagen.asf import ASFInfo
from mutagen.monkeysaudio import MonkeysAudioInfo
from mutagen.mp4 import MP4Info
+# Application specific
+from logfacility import log
+
+
def detect(path):
try:
audio = mutagen.File(path)
except IOError:
return None
- # mutagen didn't think the file was audio
+ except Exception, e:
+ log.addwarning("Mutagen crashed on '%s': %s" % (path, e))
+ return None
if not audio:
+ # mutagen didn't think the file was audio
return None
if type(audio.info) == MPEGInfo:
return processMPEG(audio)
diff -up nicotine+-1.2.16/pynicotine/shares.py.orig nicotine+-1.2.16/pynicotine/shares.py
--- nicotine+-1.2.16/pynicotine/shares.py.orig 2010-07-11 12:29:58.000000000 +0200
+++ nicotine+-1.2.16/pynicotine/shares.py 2014-07-31 01:30:50.608262924 +0200
@@ -5,6 +5,7 @@ import dircache
import gobject
import string, sys, os
import time
+import struct
# N+ imports
import slskmessages
@@ -53,9 +54,13 @@ class Shares:
self.queue.put(slskmessages.SharedFoldersFiles(sharedfolders, sharedfiles))
def RescanShares(self, msg, rebuild=False):
- files, streams, wordindex, fileindex, mtimes = self.rescandirs(msg.shared, self.config.sections["transfers"]["sharedmtimes"], self.config.sections["transfers"]["sharedfiles"], self.config.sections["transfers"]["sharedfilesstreams"], msg.yieldfunction, self.np.frame.SharesProgress, name=_("Shares"), rebuild=rebuild)
- time.sleep(0.5)
- self.np.frame.RescanFinished([files, streams, wordindex, fileindex, mtimes], "normal")
+ try:
+ files, streams, wordindex, fileindex, mtimes = self.rescandirs(msg.shared, self.config.sections["transfers"]["sharedmtimes"], self.config.sections["transfers"]["sharedfiles"], self.config.sections["transfers"]["sharedfilesstreams"], msg.yieldfunction, self.np.frame.SharesProgress, name=_("Shares"), rebuild=rebuild)
+ time.sleep(0.5)
+ self.np.frame.RescanFinished([files, streams, wordindex, fileindex, mtimes], "normal")
+ except:
+ log.addwarning("Failed to rebuild share, serious error occurred. If this problem persists delete ~/.nicotine/*.db and try again. If that doesn't help please file a bug report with the stack trace included (see terminal output after this message)")
+ raise
def RebuildShares(self, msg):
self.RescanShares(msg, rebuild=True)
@@ -651,23 +656,26 @@ class Shares:
def getByteStream(self, fileinfo):
message = slskmessages.SlskMessage()
- #size = long(fileinfo[1])
- #size1 = size & 0xffffffff
- #size2 = size >> 32
-
- #X print "chr1-" + repr(chr(1) + message.packObject(fileinfo[0]) + message.packObject(fileinfo[1]))
- #X print "chr1+" + repr(chr(1) + message.packObject(fileinfo[0]) + message.packObject(NetworkIntType(fileinfo[1])))
stream = chr(1) + message.packObject(fileinfo[0]) + message.packObject(NetworkLongLongType(fileinfo[1]))
if fileinfo[2] is not None:
- stream += message.packObject('mp3') + message.packObject(3)
- #X print "net-" + repr(message.packObject(0) + message.packObject(fileinfo[2][0]) + message.packObject(1) + message.packObject(fileinfo[3]) + message.packObject(2) + message.packObject(fileinfo[2][1]))
- #X print "net+" + repr(message.packObject(0) + message.packObject(NetworkIntType(fileinfo[2][0])) + message.packObject(1) + message.packObject(NetworkIntType(fileinfo[3])) + message.packObject(2) + message.packObject(NetworkIntType(fileinfo[2][1])))
- stream += (message.packObject(0) +
- message.packObject(NetworkIntType(fileinfo[2][0])) +
- message.packObject(1) +
- message.packObject(NetworkIntType(fileinfo[3])) +
- message.packObject(2) +
- message.packObject(NetworkIntType(fileinfo[2][1])))
+ try:
+ msgbytes = ''
+ msgbytes += message.packObject('mp3') + message.packObject(3)
+ msgbytes += (message.packObject(0) +
+ message.packObject(NetworkIntType(fileinfo[2][0])) +
+ message.packObject(1) +
+ message.packObject(NetworkIntType(fileinfo[3])) +
+ message.packObject(2) +
+ message.packObject(NetworkIntType(fileinfo[2][1])))
+ stream += msgbytes
+ except struct.error:
+ log.addwarning(_("Found meta data that couldn't be encoded, possible corrupt file: '%(file)s' has a bitrate of %(bitrate)s kbs, a length of %(length)s seconds and a VBR of %(vbr)s" % {
+ 'file': fileinfo[0],
+ 'bitrate': fileinfo[2][0],
+ 'length': fileinfo[3],
+ 'vbr': fileinfo[2][1]
+ }))
+ stream += message.packObject('') + message.packObject(0)
else:
stream += message.packObject('') + message.packObject(0)
return stream