diff options
Diffstat (limited to 'abs/core/mythinstall/MythVantage-app/mythinstall/installationtype.cpp')
-rwxr-xr-x | abs/core/mythinstall/MythVantage-app/mythinstall/installationtype.cpp | 109 |
1 files changed, 96 insertions, 13 deletions
diff --git a/abs/core/mythinstall/MythVantage-app/mythinstall/installationtype.cpp b/abs/core/mythinstall/MythVantage-app/mythinstall/installationtype.cpp index 96866dc..cb2e918 100755 --- a/abs/core/mythinstall/MythVantage-app/mythinstall/installationtype.cpp +++ b/abs/core/mythinstall/MythVantage-app/mythinstall/installationtype.cpp @@ -1,23 +1,106 @@ +//#include <QObject> #include <mythcontext.h> #include <unistd.h> -#include "installationtype.h" #include <QTextStream> - #include <qdir.h> + #include "mv_common.h" +#include "mythprogressdialog.h" +#include "installationtype.h" +#include "mythsystemlegacy.h" int mythinstalltype (QString tmp_install_drive) { - - Mythinstalltype setting; - //FINDME this is needed to populate the default values and have the triggered config work - setting.Load(); - setting.Save(); - - int retc = 1 ; - if ( setting.exec() == QDialog::Accepted ) + QString line; + QString disksize; + QString rootsize; + QString homesize; + QString sqlsize; + QString useswap; + QString swapsize; + QString datasize; + QString usealldata; + int neededsize; + int disksizeMB; + + int retc = 1; + while ( retc != 0 ) { - retc = 0; + Mythinstalltype setting; + //FINDME this is needed to populate the default values and have the triggered config work + setting.Load(); + setting.Save(); + + if ( setting.exec() == QDialog::Accepted ) + { + //get users sizes + rootsize = gCoreContext->GetSetting("HOSTOSsize"); + homesize = gCoreContext->GetSetting("HOSTHOMEsize"); + sqlsize = gCoreContext->GetSetting("HOSTDatabasesize"); + useswap = gCoreContext->GetSetting("HostUseSWAP"); + swapsize = gCoreContext->GetSetting("HOSTSWAPsize"); + usealldata = gCoreContext->GetSetting("HostUseALLdata"); + datasize = gCoreContext->GetSetting("HOSTDATAsize"); + //check if using swap + if ( useswap == "0" ) + swapsize = "0"; + //calculate size of all partitions; + neededsize = rootsize.toInt() * 1024 + homesize.toInt() *1024 + + sqlsize.toInt() * 1024 + swapsize.toInt(); + //add 300 MB to neededsize if usealldata is enabled + if ( usealldata == "1" ) + neededsize = neededsize + 300; + else + neededsize = neededsize + datasize.toInt() * 1024; + //get selected drive size + //using myth_system as QFile wouldn't read /proc/partitions directly + myth_system("cat /proc/partitions > /tmp/proc.partitions"); + QFile file("/tmp/proc.partitions"); + if (file.open(QIODevice::ReadOnly | QIODevice::Text)) + { + QTextStream t( &file ); + while (!t.atEnd()) + { + line = t.readLine(); + line = line.simplified(); + if ( line.endsWith(tmp_install_drive) ) + { + disksize = line.section( " ", 2, 2 ); + //QTextStream(stdout) << "disksize:" + disksize << endl; + break; + } + } + } + file.close(); + //convert to MB and match calulation in installdialog.cpp + disksizeMB = qRound(disksize.toFloat() * 1024 / 1000000); + + if (neededsize > disksizeMB) + { + DialogCode val = MythPopupBox::Show2ButtonPopup( + GetMythMainWindow(), + "Error", "The total partition sizes (" + QString::number(neededsize) + " MB) are too large for the selected drive (" + QString::number(disksizeMB) + " MB). Continuing may result in a failed install.", + QObject::tr("Continue"), + QObject::tr("Try Again"), + kDialogCodeButton1); + if ( val == kDialogCodeButton0 ) + { + retc = 0; + } + else + { + retc = 1; + } + } + else + { + retc = 0; + } + } + else + { + retc = 0; + } } return retc; @@ -94,7 +177,7 @@ static HostSpinBox *HOSTSWAPsize() { QTextStream t( &file ); // use a text stream line = t.readLine(); - if ( line.startsWith("MemTotal:")) + if ( line.startsWith("MemTotal:") ) { currentitem = line.simplified(); currentitem = currentitem.section( " ", 1, 1 ); @@ -104,7 +187,7 @@ static HostSpinBox *HOSTSWAPsize() bool ok; int mem = currentitem.toInt( &ok, 10 ); // dec == 0, ok == FALSE //QTextStream(stdout) << mem << endl; - mem = mem/1024 ; + mem = mem / 1024 + 16; //QTextStream(stdout) << mem << endl; if ( ! ok ) |