Index: mythplugins/mythmusic/mythmusic/cdrip.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythplugins/mythmusic/mythmusic/cdrip.cpp,v
retrieving revision 1.44
diff -u -r1.44 cdrip.cpp
--- mythplugins/mythmusic/mythmusic/cdrip.cpp	23 Feb 2005 20:41:07 -0000	1.44
+++ mythplugins/mythmusic/mythmusic/cdrip.cpp	19 Apr 2005 20:04:51 -0000
@@ -35,6 +35,7 @@
 #include <mythtv/mythcontext.h>
 #include <mythtv/mythdbcon.h>
 #include <mythtv/mythwidgets.h>
+#include <mythtv/lcddevice.h>
 
 using namespace std;
 
@@ -266,6 +267,7 @@
 
 
     MythPushButton *ripit = new MythPushButton(tr("Import this CD"), firstdiag);
+    ripit->setFocus ();
     vbox->addWidget(ripit);
 
     connect(ripit, SIGNAL(clicked()), this, SLOT(ripthedisc())); 
@@ -598,6 +600,31 @@
     done(Rejected);
 }
 
+static long int getSectorCount (QString &cddevice, int tracknum)
+{
+    cdrom_drive *device = cdda_identify(cddevice.ascii(), 0, NULL);
+
+    if (!device)
+        return -1;
+
+    if (cdda_open(device))
+    {
+        cdda_close(device);
+        return -1;
+    }
+
+    // we only care about audio tracks
+    if (cdda_track_audiop (device, tracknum)) {
+        cdda_verbose_set(device, CDDA_MESSAGE_FORGETIT, CDDA_MESSAGE_FORGETIT);
+        long int start = cdda_track_firstsector(device, tracknum);
+        long int end = cdda_track_lastsector(device, tracknum);
+        cdda_close(device);
+        return end - start + 1;        
+    }
+
+    return 0;
+}
+
 void Ripper::ripthedisc(void)
 {
     firstdiag->hide();
@@ -654,6 +681,23 @@
     if (!musicdir.endsWith("/"))
         musicdir += "/";
 
+    totalSectors = 0;
+    totalSectorsDone = 0;
+    for (int trackno = 0; trackno < decoder->getNumTracks(); trackno++)
+    {
+        totalSectors += getSectorCount (cddevice, trackno + 1);
+    }
+    overall->setTotalSteps (totalSectors);
+
+    if (class LCD * lcd = LCD::Get()) 
+    {
+        QString lcd_tots = tr("Importing ") + artistname + " - " + albumname;
+        QPtrList<LCDTextItem> textItems;
+        textItems.setAutoDelete(true);
+        textItems.append(new LCDTextItem(1, ALIGN_CENTERED, lcd_tots, "Generic", false));
+        lcd->switchToGeneric(&textItems);
+    }
+
     for (int trackno = 0; trackno < decoder->getNumTracks(); trackno++)
     {
         Encoder *encoder;
@@ -718,7 +762,6 @@
             // Set the flag to show that we have ripped new files
             somethingwasripped = true;
 
-            overall->setProgress(trackno + 1);
             qApp->processEvents();
 
             delete encoder;
@@ -821,11 +864,18 @@
         if (every15 <= 0) 
         {
             every15 = 15;
-            current->setProgress(curpos - start);
+            current->setProgress(curpos - start);           
+            overall->setProgress(totalSectorsDone + (curpos - start));
+            if (class LCD * lcd = LCD::Get()) 
+            {
+                float fProgress = (float)(totalSectorsDone + (curpos - start))/totalSectors;
+                lcd->setGenericProgress(fProgress);
+            }
             qApp->processEvents();
         }
     }
 
+    totalSectorsDone += end - start + 1;
     current->setProgress(end);
     qApp->processEvents();
         
Index: mythplugins/mythmusic/mythmusic/cdrip.h
===================================================================
RCS file: /var/lib/mythcvs/mythplugins/mythmusic/mythmusic/cdrip.h,v
retrieving revision 1.12
diff -u -r1.12 cdrip.h
--- mythplugins/mythmusic/mythmusic/cdrip.h	23 Feb 2005 20:41:07 -0000	1.12
+++ mythplugins/mythmusic/mythmusic/cdrip.h	19 Apr 2005 20:04:51 -0000
@@ -63,6 +63,8 @@
     QProgressBar *current;
 
     int totaltracks;
+    long int totalSectors;
+    long int totalSectorsDone;
 
     QString albumname, artistname, genrename;
 
