Changeset 74c359f


Ignore:
Timestamp:
08/01/13 16:02:52 (17 months ago)
Author:
Ken Moore <ken@…>
Branches:
master, 9.2-release, releng/10.0, releng/10.0.1, releng/10.0.2, releng/10.0.3, releng/10.1
Children:
5f57be9
Parents:
033a33f
Message:

Setup the AppCafe? so that the status displayed in the treewidget is a short status, with the full status at the bottom of the info group if selected. This status shows not only the current download percent and rate, but also any install/remove/update status notifications as they happen.

Location:
src-qt4/pc-softwaremanager
Files:
1 deleted
8 edited

Legend:

Unmodified
Added
Removed
  • src-qt4/pc-softwaremanager/containers.h

    r78fa8b2 r74c359f  
    3737  public: 
    3838    enum PBISTATUS{ NONE, DOWNLOADING, INSTALLING, REMOVING, UPDATING, PENDINGDOWNLOAD, PENDINGINSTALL, PENDINGREMOVAL, PENDINGUPDATE, UPDATEAVAILABLE, WORKING }; 
    39     QString name, version, author, website, arch, path, icon, license, mdate, metaID, statusString, downloadfile; 
     39    QString name, version, author, website, arch, path, icon, license, mdate, metaID, downloadfile; 
    4040    PBISTATUS status; 
    4141    bool rootInstall, autoUpdate, desktopIcons, menuIcons; 
    4242     
    43     InstalledPBI(); 
     43    InstalledPBI(){ 
     44      rootInstall=FALSE; autoUpdate=FALSE; desktopIcons=FALSE; menuIcons=FALSE; 
     45      status = NONE; 
     46    } 
    4447    ~InstalledPBI(){} 
    45     void setStatus(PBISTATUS stat, QString addInfo=""); 
    46    
     48    void setStatus(PBISTATUS stat){ status = stat; } 
     49     
    4750}; 
    4851 
  • src-qt4/pc-softwaremanager/mainUI.cpp

    r90e3614 r74c359f  
    265265  slotDisplayStats(); 
    266266} 
     267 
    267268void MainUI::slotPBIStatusUpdate(QString pbiID){ 
    268269  for(int i=0; i<ui->tree_install_apps->topLevelItemCount(); i++){ 
     
    276277         appID = ui->tree_install_apps->currentItem()->whatsThis(0); 
    277278      } 
    278       if ( appID == pbiID && stat.contains("Downloading:")) { 
    279         QString done, tot, display, speed;  
    280         bool ok, ok2; 
    281         display = stat.section(" ", 2, 3); 
    282         done = stat.section(" ", 2, 2).section("/", 0, 0).section(".", 0, 0); 
    283         tot = stat.section(" ", 2, 2).section("/", 1, 1).section(".", 0, 0); 
    284         speed = stat.section(" ", 6, 7); 
    285         done.toInt(&ok); 
    286         tot.toInt(&ok2); 
    287         //qDebug() << done << tot << speed; 
    288         if ( !ok || !ok2) 
    289           return; 
    290         ui->progressStatus->setVisible(true); 
    291         ui->progressStatus->setRange(0, tot.toInt(&ok)); 
    292         ui->progressStatus->setValue(done.toInt(&ok)); 
    293         ui->labelDL->setVisible(true); 
    294         ui->labelDL->setText(display + " @ " + speed); 
     279      if ( appID == pbiID ) { 
     280        on_tree_install_apps_itemSelectionChanged(); 
    295281      } 
    296282      return; // Found our match, we can return now 
     
    334320    ui->group_install_info->setVisible( ui->group_install_showinfo->isChecked() );         
    335321  } 
    336  
    337   // Hide the progress bar, it will re-appear when we need it 
    338   ui->progressStatus->setVisible(false); 
    339   ui->labelDL->setVisible(false); 
    340322 
    341323  //Get the PBI info for that item 
     
    405387    }    
    406388  } 
    407    
     389  //Update the current status indicators 
     390  QString stat = PBI->currentAppStatus(appID,true); //get the raw status 
     391  if(stat.isEmpty() || stat == "DLSTART"  || stat == "DLDONE"){ 
     392    //Not currently running - hide the display indicators 
     393    ui->group_install_appStat->setVisible(FALSE); 
     394  }else if(stat.startsWith("DLSTAT::")){ 
     395    //Currently downloading - show download status indicators 
     396    QString percent = stat.section("::",1,1); 
     397    QString total = stat.section("::",2,2); 
     398    QString speed = stat.section("::",3,3); 
     399    ui->group_install_appStat->setVisible(TRUE); 
     400      ui->progress_install_DL->setVisible(TRUE); 
     401    if(total == "??"){ ui->label_install_status->setText( tr("Downloading file:") ); } 
     402    else{ ui->label_install_status->setText( QString(tr("Downloading %1 file:")).arg(total) ); } 
     403    if(percent == "??"){ 
     404      ui->progress_install_DL->setMinimum(0); ui->progress_install_DL->setMaximum(0); 
     405    }else{ 
     406      ui->progress_install_DL->setMinimum(0); ui->progress_install_DL->setMaximum(100); 
     407      ui->progress_install_DL->setValue( int(percent.toFloat()) ); 
     408    } 
     409    if(speed == "??"){ ui->label_install_DL->setVisible(FALSE); } 
     410    else{ 
     411      ui->label_install_DL->setVisible(TRUE); 
     412      ui->label_install_DL->setText(speed); 
     413    } 
     414  }else{ 
     415    //Currently installing/removing/updating - show last message from process 
     416    ui->label_install_status->setText(stat); 
     417    ui->group_install_appStat->setVisible(TRUE); 
     418      ui->progress_install_DL->setVisible(FALSE); 
     419      ui->label_install_DL->setVisible(FALSE); 
     420  } 
    408421} 
    409422 
  • src-qt4/pc-softwaremanager/mainUI.ui

    r90e3614 r74c359f  
    442442               </layout> 
    443443              </item> 
     444              <item row="3" column="0" colspan="4"> 
     445               <widget class="QGroupBox" name="group_install_appStat"> 
     446                <property name="title"> 
     447                 <string/> 
     448                </property> 
     449                <layout class="QVBoxLayout" name="verticalLayout_18"> 
     450                 <item> 
     451                  <widget class="QLabel" name="label_install_status"> 
     452                   <property name="text"> 
     453                    <string notr="true">TextLabel</string> 
     454                   </property> 
     455                  </widget> 
     456                 </item> 
     457                 <item> 
     458                  <layout class="QHBoxLayout" name="horizontalLayout_9"> 
     459                   <item> 
     460                    <widget class="QProgressBar" name="progress_install_DL"> 
     461                     <property name="value"> 
     462                      <number>24</number> 
     463                     </property> 
     464                    </widget> 
     465                   </item> 
     466                   <item> 
     467                    <widget class="QLabel" name="label_install_DL"> 
     468                     <property name="text"> 
     469                      <string notr="true">label</string> 
     470                     </property> 
     471                    </widget> 
     472                   </item> 
     473                  </layout> 
     474                 </item> 
     475                </layout> 
     476               </widget> 
     477              </item> 
    444478              <item row="1" column="2" rowspan="2"> 
    445479               <spacer name="horizontalSpacer_2"> 
     
    454488                </property> 
    455489               </spacer> 
    456               </item> 
    457               <item row="3" column="0" colspan="3"> 
    458                <widget class="QProgressBar" name="progressStatus"> 
    459                 <property name="value"> 
    460                  <number>24</number> 
    461                 </property> 
    462                </widget> 
    463               </item> 
    464               <item row="3" column="3"> 
    465                <widget class="QLabel" name="labelDL"> 
    466                 <property name="text"> 
    467                  <string/> 
    468                 </property> 
    469                </widget> 
    470490              </item> 
    471491             </layout> 
     
    675695                    <x>0</x> 
    676696                    <y>0</y> 
    677                     <width>98</width> 
    678                     <height>28</height> 
     697                    <width>70</width> 
     698                    <height>16</height> 
    679699                   </rect> 
    680700                  </property> 
     
    726746                    <x>0</x> 
    727747                    <y>0</y> 
    728                     <width>98</width> 
    729                     <height>28</height> 
     748                    <width>49</width> 
     749                    <height>16</height> 
    730750                   </rect> 
    731751                  </property> 
     
    751771                 <x>0</x> 
    752772                 <y>0</y> 
    753                  <width>98</width> 
    754                  <height>28</height> 
     773                 <width>86</width> 
     774                 <height>16</height> 
    755775                </rect> 
    756776               </property> 
     
    11511171                    <x>0</x> 
    11521172                    <y>0</y> 
    1153                     <width>98</width> 
    1154                     <height>28</height> 
     1173                    <width>447</width> 
     1174                    <height>61</height> 
    11551175                   </rect> 
    11561176                  </property> 
     
    12121232                    <x>0</x> 
    12131233                    <y>0</y> 
    1214                     <width>98</width> 
    1215                     <height>28</height> 
     1234                    <width>55</width> 
     1235                    <height>16</height> 
    12161236                   </rect> 
    12171237                  </property> 
     
    12501270                    <x>0</x> 
    12511271                    <y>0</y> 
    1252                     <width>98</width> 
    1253                     <height>28</height> 
     1272                    <width>55</width> 
     1273                    <height>16</height> 
    12541274                   </rect> 
    12551275                  </property> 
     
    12761296     <y>0</y> 
    12771297     <width>509</width> 
    1278      <height>22</height> 
     1298     <height>20</height> 
    12791299    </rect> 
    12801300   </property> 
  • src-qt4/pc-softwaremanager/pbiBackend.cpp

    r1b398c1 r74c359f  
    456456    else if(infoList[i]=="license"){ output << PBIHASH[pbiID].license; } 
    457457    else if(infoList[i]=="metaid"){ output << PBIHASH[pbiID].metaID; } 
    458     else if(infoList[i]=="status"){ output << PBIHASH[pbiID].statusString; } 
     458    else if(infoList[i]=="status"){ output << currentAppStatus(pbiID); } 
    459459    //Now the boolians 
    460460    else if(infoList[i]=="requiresroot"){  
     
    522522} 
    523523 
    524 QString PBIBackend::currentAppStatus( QString appID ){ 
     524QString PBIBackend::currentAppStatus( QString appID, bool rawstatus ){ 
    525525  QString output; 
    526526  int status = -999; 
     527  QString metaID; 
    527528  //pbiID given (quicker) 
    528   if(PBIHASH.contains(appID)){ status = PBIHASH[appID].status; } 
     529  if(PBIHASH.contains(appID)){ status = PBIHASH[appID].status; metaID = PBIHASH[appID].metaID; } 
    529530  else{ 
    530531    //appID given 
     
    532533    QStringList pbilist = PBIHASH.keys(); 
    533534    for(int i=0; i<pbilist.length(); i++){ 
    534       if(PBIHASH[pbilist[i]].metaID == appID){ status = PBIHASH[pbilist[i]].status; } 
    535     } 
    536   } 
    537   //Determine if the app is currently in a pending state 
    538   switch (status){ 
     535      if(PBIHASH[pbilist[i]].metaID == appID){ status = PBIHASH[pbilist[i]].status; metaID=appID; break; } 
     536    } 
     537  } 
     538  //Determine if the app is currently in a pending/running state 
     539  if(rawstatus){ //output the raw status for active processes 
     540    switch (status){ 
     541        case InstalledPBI::DOWNLOADING: 
     542          output = lDownload; break; 
     543        case InstalledPBI::INSTALLING: 
     544          output = lInstall; break; 
     545        case InstalledPBI::REMOVING: 
     546          output = lRemove; break; 
     547        case InstalledPBI::UPDATING: 
     548          output = lUpdate; break; 
     549        default: 
     550          output.clear(); 
     551    } 
     552  }else{ 
     553    switch (status){ 
    539554        case InstalledPBI::DOWNLOADING: 
    540           output = tr("Downloading"); break; 
     555          if(lDownload.startsWith("DLSTAT::")){ 
     556            QString percent = lDownload.section("::",1,1); 
     557            output = QString(tr("Downloading: %1%")).arg( percent ); 
     558          }else if(lDownload == "DLDONE"){ 
     559            output = tr("Download Finished"); 
     560          }else{ 
     561            output = tr("Download Starting");  
     562          } 
     563          break; 
    541564        case InstalledPBI::INSTALLING: 
    542565          output = tr("Installing"); break; 
     
    544567          output = tr("Removing"); break; 
    545568        case InstalledPBI::UPDATING: 
    546           output = tr("Updating"); break; 
     569          if(lUpdate.startsWith("DLSTAT::")){ 
     570            QString percent = lUpdate.section("::",1,1); 
     571            output = QString(tr("Update Downloading: %1%")).arg( percent ); 
     572          }else if(lUpdate == "DLDONE"){ 
     573            output = tr("Starting Update"); 
     574          }else if(lUpdate == "DLSTART"){ 
     575            output = tr("Starting Download"); 
     576          }else{ 
     577            output = tr("Updating"); 
     578          } 
     579          break; 
    547580        case InstalledPBI::PENDINGDOWNLOAD: 
    548581          output = tr("Pending Download"); break; 
     
    553586        case InstalledPBI::PENDINGUPDATE: 
    554587          output = tr("Pending Update"); break; 
     588        case InstalledPBI::UPDATEAVAILABLE: 
     589          output = QString(tr("Update Available: %1")).arg(APPHASH[metaID].latestVersion); 
     590          break; 
    555591        default: //do nothing for the rest 
    556592          output.clear(); 
     593    } 
    557594  } 
    558595  return output; 
     
    917954   bool resync = FALSE; 
    918955   if(ID == ProcessManager::UPDATE){ 
     956     if(sUpdate){ 
     957       //Update stopped during installation of new version: re-install old version 
     958        qDebug() << "Still need to add update cancellation during install phase"; 
     959     } 
    919960     //Update the PBIHASH for installed versions 
    920961     slotSyncToDatabase(TRUE); 
     
    9891030 } 
    9901031  
    991 void PBIBackend::slotProcessMessage(int ID, QString dlinfo){ 
     1032void PBIBackend::slotProcessMessage(int ID, QString info){ 
    9921033   if(ID == ProcessManager::UPDATE){ 
    993      PBIHASH[cUpdate].setStatus(InstalledPBI::UPDATING, dlinfo);  
     1034     //PBIHASH[cUpdate].setStatus(InstalledPBI::UPDATING, dlinfo);  
     1035     lUpdate = info; 
    9941036     emit PBIStatusChange(cUpdate); 
    9951037   }else if(ID == ProcessManager::DOWNLOAD){ 
    996      PBIHASH[cDownload].setStatus(InstalledPBI::DOWNLOADING, dlinfo);  
     1038     //PBIHASH[cDownload].setStatus(InstalledPBI::DOWNLOADING, dlinfo);  
     1039     lDownload = info; 
    9971040     emit PBIStatusChange(cDownload); 
    998    }     
     1041   }else if( ID == ProcessManager::REMOVE){ 
     1042     lRemove = info; 
     1043     emit PBIStatusChange(cRemove); 
     1044   }else if( ID == ProcessManager::INSTALL){ 
     1045     lInstall = info; 
     1046     emit PBIStatusChange(cInstall); 
     1047   } 
    9991048} 
    10001049 
     
    11831232   else if(PENDINGUPDATE.join(" ").contains(chk)){PBIHASH[pbiID].setStatus(InstalledPBI::PENDINGUPDATE);} 
    11841233   //else if(PENDINGOTHER.join(" ").contains(chk)){PBIHASH[pbiID].setStatus(InstalledPBI::WORKING);} 
    1185    else if( !upgrade.isEmpty() ){PBIHASH[pbiID].setStatus(InstalledPBI::UPDATEAVAILABLE, upgrade); } 
     1234   else if( !upgrade.isEmpty() ){PBIHASH[pbiID].setStatus(InstalledPBI::UPDATEAVAILABLE); } 
    11861235   else{ PBIHASH[pbiID].setStatus(InstalledPBI::NONE); } 
    11871236 } 
  • src-qt4/pc-softwaremanager/pbiBackend.h

    r7dd1bc13 r74c359f  
    6666        QStringList CatInfo( QString catID, QStringList infoList); 
    6767        QStringList AppInfo( QString appID, QStringList infoList); 
    68         QString currentAppStatus( QString appID ); 
     68        QString currentAppStatus( QString appID , bool rawstatus = false); 
    6969         
    7070        //Configuration Management 
     
    9999        bool sDownload, sInstall, sRemove, sUpdate; //flag that these processes were Stopped 
    100100        QStringList PENDINGDL, PENDINGINSTALL, PENDINGREMOVAL, PENDINGUPDATE, PENDINGOTHER; 
     101        QString lDownload, lInstall, lRemove, lUpdate; //latest string output from process 
    101102        //variables - other 
    102103        QString baseDlDir, dlDir; // download/install directories 
  • src-qt4/pc-softwaremanager/pc-softwaremanager.pro

    rc71b68c r74c359f  
    2222         mainUI.cpp \ 
    2323         pbiBackend.cpp \ 
    24          containers.cpp \ 
    2524         pbiDBAccess.cpp \ 
    2625         processManager.cpp \ 
  • src-qt4/pc-softwaremanager/processManager.cpp

    r868c95d r74c359f  
    7272  }      
    7373} 
     74 
    7475// ========================= 
    7576// ===== PUBLIC ACCESS ===== 
     
    129130// ========================= 
    130131QString ProcessManager::parseDlLine(QString line){ 
     132  /*DOWNLOAD NOTIFICATION CODES: 
     133  Download complete: "DLDONE" 
     134  Download running: "DLSTAT::<percent>::<total size>::<download speed>" 
     135        -- A value of "??" means that it is unknown 
     136  Download starting: "DLSTART" 
     137  */ 
    131138  QString out; 
    132   if(!line.startsWith("SIZE:")){ return out; } 
     139  if( line.startsWith("FETCH:") ){ return "DLSTART"; } 
     140  else if( line == "FETCHDONE"){ return "DLDONE"; } 
     141  else if(!line.startsWith("SIZE:")){ return out; } 
    133142  //qDebug() << "parse Download Line:" << line; 
    134143  //Line format: SIZE:  <KB> DOWNLOADED:  <KB> SPEED:  <KB/s> KB/s 
     
    149158  //Now format the output string 
    150159  QString stats; 
     160  out = "DLSTAT::"; 
     161  //Get percent and totals 
    151162  if(totok && curok){ 
    152163    bool totErr = (tot==cur); //catch for a display error where the cur is always identical to the tot 
     164    if(!totErr){           
     165      //Calculate the percentage 
     166      double percent = (cur/tot)*100; 
     167      percent = int(percent*10)/10.0; 
     168      out.append(QString::number(percent)+"::"); 
     169      //Now list the total 
     170      out.append( Extras::sizeKToDisplay(QString::number(tot)) +"::" ); 
     171    }else{ 
     172      //Only Total/Current is known (unknown percentage since not complete yet) 
     173      out.append("??::"+Extras::sizeKToDisplay(QString::number(tot))+"::"); 
     174    }        
     175  }else if(curok){ 
     176    //Only Total/Current is known (unknown percentage since not complete yet) 
     177    out.append("??::"+Extras::sizeKToDisplay(QString::number(cur))+"::"); 
     178  }else if(totok){ 
     179    //Only Total/Current is known (unknown percentage since not complete yet) 
     180    out.append("??::"+Extras::sizeKToDisplay(QString::number(tot))+"::"); 
     181  }else{ 
     182    //Unknown Total and Current 
     183    out.append("??::??::"); 
     184  } 
     185  //Now get the speed 
     186  if(spdok){ 
     187    out.append( Extras::sizeKToDisplay(QString::number(spd))+"/s" ); 
     188  }else{ 
     189    out.append("??"); 
     190  } 
     191  /* 
    153192    int i=0; 
    154193    QStringList lab; lab << "KB" <<"MB"<<"GB"<<"TB"<<"PB"; 
     
    156195      cur=cur/1024; tot=tot/1024; i++; 
    157196    } 
    158     float percent = (cur*100)/tot; 
    159     //round all numbers to one decimel place 
    160     percent = int(percent*10)/10.0; 
     197 
    161198    cur = int(cur*10)/10.0; 
    162199    tot = int(tot*10)/10.0; 
    163200    if(totErr){ // cur==tot  
    164       stats = QString::number(tot)+" "+lab[i]; 
     201      //Percentage unknown (since fetch is not done) 
     202      out.append("??::"+QString::number(tot)+" "+lab[i]+"::"); 
     203      //stats = QString::number(tot)+" "+lab[i]; 
    165204    }else{ 
    166       stats = QString::number(cur)+"/"+QString::number(tot)+" "+lab[i]+" ("+QString::number(percent)+"%)"; 
     205      out.append(QString::number(percent)+"::"+QString::number(tot)+" "+lab[i]+"::"); 
     206      //stats = QString::number(cur)+"/"+QString::number(tot)+" "+lab[i]+" ("+QString::number(percent)+"%)"; 
    167207    } 
    168208    // Format:  <current>/<total> <size label> (<percent>%) 
     
    179219  else if(speed.isEmpty()){ out = stats; } 
    180220  else{ out = QString( tr("%1 at %2") ).arg(stats,speed); } 
     221  */ 
    181222  //qDebug() << " - Result:" << out; 
    182223  return out; 
     
    188229    QString line = upProc->readLine().simplified(); 
    189230    if(line.isEmpty()){ continue; } 
    190     // Change status back to "Updating..." 
    191     emit ProcessMessage(UPDATE,QString()); 
    192231    QString dl = parseDlLine(line); 
    193     if(!dl.isEmpty()){ emit ProcessMessage(UPDATE,dl); } 
    194     else{ upLog << line; } //not a download line - add to the log 
     232    if(!dl.isEmpty()){  
     233      emit ProcessMessage(UPDATE,dl); //Download status 
     234      if( !dl.startsWith("DLSTAT::") ){ 
     235        upLog << line; //not just a status update - add to the log (log download start/stop)     
     236      } 
     237    }else{  
     238      emit ProcessMessage(UPDATE,line);  
     239      upLog << line; //not a download line - add to the log 
     240    } 
    195241  } 
    196242} 
     
    234280    if(line.isEmpty()){ continue; } 
    235281    QString dl = parseDlLine(line); 
    236     if(!dl.isEmpty()){ emit ProcessMessage(DOWNLOAD,dl); } 
    237     else{ dlLog << line; } //not a download line - add to the log 
     282    if(!dl.isEmpty()){  
     283      emit ProcessMessage(DOWNLOAD,dl); //Download status 
     284      if( !dl.startsWith("DLSTAT::") ){ 
     285        dlLog << line; //not just a status update - add to the log (log download start/stop)     
     286      } 
     287    }else{  
     288      emit ProcessMessage(DOWNLOAD,line);  
     289      dlLog << line; //not a download line - add to the log 
     290    } 
    238291  } 
    239292} 
  • src-qt4/pc-softwaremanager/processManager.h

    rc71b68c r74c359f  
    3434        QProcess *upProc, *remProc, *dlProc, *inProc, *otProc; 
    3535        QStringList upLog, remLog, dlLog, inLog; 
    36          
     36 
    3737private slots: 
    3838        QString parseDlLine(QString); 
Note: See TracChangeset for help on using the changeset viewer.