Ignore:
Timestamp:
04/23/13 11:51:02 (15 months ago)
Author:
Kris Moore <kris@…>
Branches:
master, 9.1-release, 9.2-release, releng/10.0, releng/10.0.1, releng/10.0.2
Children:
f01aaaf
Parents:
e013d8d2
Message:

Add new menu bar, not yet functional

Display messages from pkgng as they happen

Offer to save file if something goes bad

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src-qt4/pc-pkgmanager/mainWin.cpp

    r4b9e67a rf9fc934  
    3737  connect(buttonRescanPkgs, SIGNAL(clicked()), this, SLOT(slotRescanPkgsClicked())); 
    3838  connect(pushPkgApply, SIGNAL( clicked() ), this, SLOT( slotApplyClicked() ) ); 
    39   progressUpdate->setHidden(true); 
    4039 
    4140  QTimer::singleShot(200, this, SLOT(slotRescanPkgsClicked() ) ); 
     
    119118  doingUpdate=true; 
    120119 
     120  // Init the pkg process 
     121  prepPkgProcess(); 
     122 
    121123  // Create our runlist of package commands 
    122   pkgCmdList.clear(); 
    123124  QStringList pCmds; 
    124125 
     
    131132  pkgCmdList << pCmds; 
    132133 
     134  // Start the updating now 
    133135  startPkgProcess(); 
    134136 
    135137  textStatus->setText(tr("Starting package updates...")); 
    136138 
     139} 
     140 
     141void mainWin::prepPkgProcess() { 
     142  pkgCmdList.clear(); 
     143  textDisplayOut->clear(); 
     144  pkgHasFailed=false; 
    137145} 
    138146 
     
    183191   while (uProc->canReadLine()) { 
    184192     line = uProc->readLine().simplified(); 
    185      qDebug() << "Normal Line:" << line; 
     193     qDebug() << line; 
     194 
    186195     tmp = line; 
    187196     tmp.truncate(50); 
    188      if ( line.indexOf("to be downloaded") != -1 ) { 
    189        textStatus->setText(tr("Downloading packages...")); 
    190        curUpdate = 0; 
    191        progressUpdate->setValue(0); 
    192        continue; 
    193      } 
    194      if ( line.indexOf("Checking integrity") == 0 ) { 
    195        textStatus->setText(line); 
    196        uPackages = true; 
    197        dPackages = false; 
    198        curUpdate = 0; 
    199        progressUpdate->setValue(0); 
    200      } 
     197 
     198     // Flags we can parse out and not show the user 
    201199     if ( line.indexOf("FETCH: ") == 0 ) {  
    202200        progressUpdate->setValue(progressUpdate->value() + 1);  
    203201        tmp = line;  
    204202        tmp = tmp.remove(0, tmp.lastIndexOf("/") + 1);  
     203        progressUpdate->setRange(0, 0); 
     204        progressUpdate->setValue(0); 
     205        curFileText = tr("Downloading: %1").arg(tmp);  
    205206        textStatus->setText(tr("Downloading: %1").arg(tmp));  
    206207        continue; 
    207208     }  
    208       
     209     if ( line.indexOf("FETCHDONE") == 0 ) 
     210        continue; 
     211 
    209212     if ( line.indexOf("SIZE: ") == 0 ) { 
    210213          bool ok, ok2; 
     
    231234            } 
    232235 
    233             QString ProgressString=QString("%1" + unit + " of %2" + unit + " at %3").arg(cur).arg(tot).arg(speed); 
     236            QString ProgressString=QString("(%1" + unit + " of %2" + unit + " at %3)").arg(cur).arg(tot).arg(speed); 
    234237            progressUpdate->setRange(0, tot); 
    235238            progressUpdate->setValue(cur); 
     239            textStatus->setText(curFileText + " " + ProgressString);  
    236240         } 
     241         continue; 
    237242     } 
    238243 
     244 
     245     // Now show output on GUI 
     246     textDisplayOut->insertPlainText(line + "\n"); 
     247     textDisplayOut->moveCursor(QTextCursor::End); 
     248 
     249 
     250     // Any other flags to look for? 
     251     ///////////////////////////////////////////////////// 
     252     if ( line.indexOf("to be downloaded") != -1 ) { 
     253       textStatus->setText(tr("Downloading packages...")); 
     254       curUpdate = 0; 
     255       progressUpdate->setValue(0); 
     256       continue; 
     257     } 
     258     if ( line.indexOf("Checking integrity") == 0 ) { 
     259       textStatus->setText(line); 
     260       uPackages = true; 
     261       dPackages = false; 
     262       curUpdate = 0; 
     263       progressUpdate->setValue(0); 
     264     } 
     265      
    239266     if ( uPackages ) { 
    240267       if ( line.indexOf("Upgrading") == 0 ) { 
     
    249276} 
    250277 
    251 // Function to read output of pipefile 
    252 void mainWin::slotReadEventPipe(int fd) { 
    253   QString tmp, fname, cur, tot; 
    254   bool ok, ok2; 
    255   char buff[4028]; 
    256   int totread = read(fd, buff, 4020); 
    257   buff[totread]='\0'; 
    258   QString line = buff; 
    259   line = line.simplified(); 
    260   //qDebug() << "Found line:" << line; 
    261    
    262   if ( line.indexOf("INFO_FETCH") != -1  && dPackages ) { 
    263      tmp = line; 
    264      fname = tmp.section(":", 4, 4); 
    265      fname.remove(0, fname.lastIndexOf('/') + 1); 
    266      fname  = fname.section('"', 0, 0); 
    267      cur = tmp.section(":", 5, 5); 
    268      cur = cur.remove(','); 
    269      cur = cur.section(" ", 1, 1); 
    270      cur = cur.simplified(); 
    271      tot = tmp.section(":", 6, 6); 
    272      tot = tot.simplified(); 
    273      tot = tot.remove(','); 
    274      tot = tot.section("}", 0, 0); 
    275  
    276      textStatus->setText(tr("Downloading %1").arg(fname)); 
    277      tot.toInt(&ok); 
    278      cur.toInt(&ok2); 
    279      if ( ok && ok2 ) 
    280      {  
    281        progressUpdate->setRange(0, tot.toInt(&ok2)); 
    282        progressUpdate->setValue(cur.toInt(&ok2)); 
    283      } 
    284       
    285      //qDebug() << "File:" << fname << "cur" << cur << "tot" << tot; 
    286   } 
    287 } 
    288  
    289278void mainWin::slotPkgDone() { 
     279 
     280  if ( uProc->exitCode() != 0 ) 
     281    pkgHasFailed=true; 
    290282 
    291283  // Run the next command on the stack if necessary 
     
    303295  } 
    304296 
    305   if ( uProc->exitCode() != 0 ) 
    306     QMessageBox::warning(this, tr("Failed pkgng command!"), tr("The package changes failed!")); 
     297  if ( pkgHasFailed ) { 
     298    if ( QMessageBox::Save == QMessageBox::warning(this, tr("Failed pkgng command!"), tr("The package commands failed. Do you wish to save the output to a log file?"), QMessageBox::Save | QMessageBox::Discard, QMessageBox::Save) ) { 
     299       QFile file( "/tmp/pkg-output.log" ); 
     300       if ( file.open( QIODevice::WriteOnly ) ) { 
     301         QTextStream stream( &file ); 
     302         stream << textDisplayOut->toPlainText(); 
     303         file.close(); 
     304       } 
     305    } 
     306  } else 
     307    QMessageBox::warning(this, tr("Finished!"), tr("Package changes complete!" )); 
    307308 
    308309  stackedTop->setCurrentIndex(0); 
     
    512513void mainWin::startMetaChanges() 
    513514{ 
    514  // Create our runlist of package commands 
    515   pkgCmdList.clear(); 
     515 
     516  // Init the pkg process 
     517  prepPkgProcess(); 
     518  // Create our runlist of package commands 
    516519  QStringList pCmds; 
    517520 
Note: See TracChangeset for help on using the changeset viewer.