Hi,

I removed some mp3s and mixxx crashed when I tried to load one of the
removed tracks from library. There was no check if the file exists in
slotLoadPlayer2 (track.cpp), so I copied one from slotLoadPlayer1.

Greetings,
Martin
Index: src/track.cpp
===================================================================
--- src/track.cpp	(revision 1889)
+++ src/track.cpp	(working copy)
@@ -841,6 +841,7 @@
             return;
         }
     }
+    else return; // empty filename
 
     if (m_pTrackPlayer1)
     {
@@ -895,6 +896,22 @@
 
 void Track::slotLoadPlayer2(TrackInfoObject * pTrackInfoObject, bool bStartFromEndPos)
 {
+    QString filename = pTrackInfoObject->getLocation();
+    if (!filename.isEmpty())
+    {
+        // Check if filename is valid
+        QFileInfo finfo(filename);
+        if (!finfo.exists())
+        {
+            qDebug() << "Song in library not found on at" << filename << "on disk.";
+            qDebug() << "Removing from library...";
+            m_pTrackCollection->removeTrack(pTrackInfoObject); //Remove the track from the library.
+            m_pView->m_pTrackTableView->repaintEverything(); //Refresh the library view.
+            return;
+        }
+    }
+    else return; // empty filename
+
     if (m_pTrackPlayer2)
     {
         m_pTrackPlayer2->setOverviewWidget(0);
@@ -921,7 +938,6 @@
 
     // Set waveform summary display
     m_pTrackPlayer2->setOverviewWidget(m_pView->m_pOverviewCh2);
-    m_pTrackPlayer2->setDurationControlObject(ControlObject::getControl(ConfigKey("[Channel2]","duration")));
 
     // Set control for beat start position for use in EngineTemporal and
     // VisualTemporalBuffer. HACK.
@@ -931,6 +947,7 @@
 
     // Set Engine file BPM ControlObject
     m_pTrackPlayer2->setBpmControlObject(ControlObject::getControl(ConfigKey("[Channel2]","file_bpm")));
+    m_pTrackPlayer2->setDurationControlObject(ControlObject::getControl(ConfigKey("[Channel2]","duration")));
 
     // Set duration in playpos widget
 //    if (m_pView->m_pNumberPosCh2)
Index: src/soundsourcemp3.cpp
===================================================================
--- src/soundsourcemp3.cpp	(revision 1889)
+++ src/soundsourcemp3.cpp	(working copy)
@@ -83,7 +83,10 @@
     //qDebug("channels %i",m_iChannels);
 
     // Find average frame size
-    m_iAvgFrameSize = length()/currentframe;
+    if(currentframe)
+        m_iAvgFrameSize = length()/currentframe;
+    else
+        m_iAvgFrameSize = 0;
 
     mad_header_finish (&Header);
     if (currentframe==0)
@@ -608,7 +611,7 @@
 int SoundSourceMp3::findFrame(int pos)
 {
     // Guess position of frame in m_qSeekList based on average frame size
-    MadSeekFrameType * temp = m_qSeekList.at(math_min(m_qSeekList.count()-1, (unsigned int)(pos/m_iAvgFrameSize)));
+    MadSeekFrameType * temp = m_qSeekList.at(math_min(m_qSeekList.count()-1, m_iAvgFrameSize ? (unsigned int)(pos/m_iAvgFrameSize) : 0));
 
 /*
     if (temp!=0)
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Reply via email to