1 /* 2 unetbootin.h from UNetbootin <http://unetbootin.sourceforge.net> 3 Copyright (C) 2007-2008 Geza Kovacs <geza0kovacs@gmail.com> 4 5 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. 6 7 This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License at <http://www.gnu.org/licenses/> for more details. 8 */ 9 10 #ifndef UNETBOOTIN_H 11 #define UNETBOOTIN_H 12 13 #include <QtCore> 14 #include <QtGui> 15 #include <QtNetwork> 16 #include <time.h> 17 //#include <QtDebug> 18 19 #include "ui_unetbootin.h" 20 21 #ifdef Q_OS_WIN32 22 #define WIN32_LEAN_AND_MEAN 23 #define _WIN32_WINNT 0x0500 24 #include <windows.h> 25 #include <shellapi.h> 26 #endif 27 28 #ifdef Q_OS_MACX 29 #include <sys/param.h> 30 #include <sys/mount.h> 31 #include <sys/statvfs.h> 32 #endif 33 34 #ifdef Q_OS_LINUX 35 #include <sys/vfs.h> 36 #endif 37 38 #ifdef Q_OS_FREEBSD 39 #include <sys/mount.h> 40 #endif 41 42 #ifdef AUTOSUPERGRUBDISK 43 #define UNETBOOTINB "Auto Super Grub Disk" 44 #define NOEXTERN 45 //#define NOISO 46 #define HDDINSTALL 47 #endif 48 49 #ifdef EEEPCLOS 50 #define UNETBOOTINB "UNetbootin-EeePCLinuxOS" 51 #define NOMANUAL 52 #define NOFLOPPY 53 //#define USBINSTALL 54 #endif 55 56 #ifdef EEEUBUNTU 57 #define UNETBOOTINB "UNetbootin-Ubuntu Eee" 58 #define NOMANUAL 59 #define NOFLOPPY 60 //#define USBINSTALL 61 #endif 62 63 #ifdef ELIVE 64 #define UNETBOOTINB "Elive USB Installer" 65 #define NOMANUAL 66 #define NOFLOPPY 67 //#define USBINSTALL 68 #endif 69 70 #ifdef GNEWSENSE 71 #define UNETBOOTINB "FUSBi" 72 #define NOMANUAL 73 #define NOFLOPPY 74 //#define USBINSTALL 75 #endif 76 77 #ifdef KIWILINUX 78 #define UNETBOOTINB "Kiwi pe USB" 79 #define NOMANUAL 80 #define NOFLOPPY 81 //#define USBINSTALL 82 #endif 83 84 #ifdef NIMBLEX 85 #define UNETBOOTINB "NimbleX Installer" 86 #define NOMANUAL 87 #define NOFLOPPY 88 //#define USBINSTALL 89 #endif 90 91 #ifdef SLITAZ 92 #define UNETBOOTINB "SliTaz Installer" 93 #define NOMANUAL 94 #define NOFLOPPY 95 //#define USBINSTALL 96 #endif 97 98 #ifdef XPUD 99 #define UNETBOOTINB "xPUD USB Installer" 100 #define NOMANUAL 101 #define NOFLOPPY 102 //#define USBINSTALL 103 #define NOEXTRACTKERNEL 104 #define NOEXTRACTINITRD 105 #define NODEFAULTBOOT 106 #define NODEFAULTKERNEL 107 #define NOINITRD 108 #endif 109 110 #ifndef UNETBOOTINB 111 #define UNETBOOTINB "UNetbootin" 112 #define STDUNETBOOTIN 113 //#define USBINSTALL 114 #endif 115 116 class customver : public QObject 117 { 118 Q_OBJECT 119 }; 120 121 class uninstaller : public QObject 122 { 123 Q_OBJECT 124 }; 125 126 class callexternappT : public QThread 127 { 128 public: 129 QString execFile; 130 QString execParm; 131 QString retnValu; 132 void run(); 133 }; 134 135 class callexternappWriteToStdinT : public QThread 136 { 137 public: 138 QString execFile; 139 QString execParm; 140 QString writeToStdin; 141 QString retnValu; 142 void run(); 143 }; 144 145 class copyfileT : public QThread 146 { 147 Q_OBJECT 148 149 public: 150 QString source; 151 QString destination; 152 void run(); 153 154 signals: 155 void datacopied64(qint64 dlbytes, qint64 maxbytes); 156 void finished(); 157 }; 158 159 class randtmpfile : public QFile 160 { 161 public: 162 randtmpfile(QString rfpath, QString rfextn); 163 static QString getrandfilename(QString rfpath, QString rfextn); 164 }; 165 /* 166 class nDirListStor : public QObject 167 { 168 Q_OBJECT 169 170 public: 171 QStringList nDirFileListSL; 172 int nMinFileSizeBytes; 173 int nMaxFileSizeBytes; 174 bool searchsymlinks; 175 176 public slots: 177 void sAppendSelfUrlInfoList(QUrlInfo curDirUrl); 178 }; 179 */ 180 class unetbootin : public QWidget, private Ui::unetbootinui 181 { 182 Q_OBJECT 183 184 public: 185 unetbootin(QWidget *parent = 0); 186 QString trcurrent; 187 QString trdone; 188 QString appNlang; 189 QString appDir; 190 QString appLoc; 191 QString ubntmpf; 192 QString nameDistro; 193 QString nameVersion; 194 bool skipExtraction; 195 bool isarch64; 196 bool islivecd; 197 bool isnetinstall; 198 bool ishdmedia; 199 bool overwriteall; 200 bool searchsymlinks; 201 bool ignoreoutofspace; 202 bool dontgeneratesyslinuxcfg; 203 bool downloadFailed; 204 bool exitOnCompletion; 205 bool testingDownload; 206 bool issalt; 207 bool redundanttopleveldir; 208 QString redundantrootdirname; 209 QString saltRootDir; 210 int persistenceSpaceMB; 211 QString extraBootOptions; 212 QStringList locatedsyslinuxcfgfiles; 213 QString targetDrive; 214 QString targetPath; 215 QString installType; 216 QString targetDev; 217 QString rawtargetDev; 218 QString devluid; 219 QString devlabel; 220 QString devuuid; 221 QString postinstmsg; 222 QString kernelLine, kernelParam, kernelLoc, kernelOpts, initrdLine, initrdLoc, initrdOpts; 223 QString slinitrdLine; 224 QString sevzcommand; 225 QPair<QPair<QStringList, QStringList>, QPair<QStringList, QStringList> > extraoptionsPL; 226 QMap<QString, QString> grub2vars; 227 QFile *logFile; 228 QTextStream *logStream; 229 QStringList loggedLinesNotYetWritten; 230 #ifdef Q_OS_UNIX 231 QString fdiskcommand; 232 QString sfdiskcommand; 233 QString dfcommand; 234 QString blkidcommand; 235 QString volidcommand; 236 QString syslinuxcommand; 237 QString extlinuxcommand; 238 QString mke2fscommand; 239 QString mlabelcommand; 240 QString e2labelcommand; 241 bool isext2; 242 #endif 243 #ifdef Q_OS_MAC 244 QDir resourceDir; 245 #endif 246 bool ubninitialize(QList<QPair<QString, QString> > oppairs); 247 QString displayfisize(quint64 fisize); 248 QPair<QPair<QStringList, QList<quint64> >, QStringList> listarchiveconts(QString archivefile); 249 bool overwritefileprompt(QString ovwfileloc); 250 bool ignoreoutofspaceprompt(QString destindir); 251 bool extractfile(QString filepath, QString destinfileL, QString archivefile); 252 bool checkifoutofspace(QString destindir); 253 QString locatekernel(QString archivefile, QPair<QStringList, QList<quint64> > archivefileconts); 254 bool extractkernel(QString archivefile, QString kernoutputfile, QPair<QStringList, QList<quint64> > archivefileconts); 255 QString locateinitrd(QString archivefile, QPair<QStringList, QList<quint64> > archivefileconts); 256 bool extractinitrd(QString archivefile, QString initoutputfile, QPair<QStringList, QList<quint64> > archivefileconts); 257 QString extractcfg(QString archivefile, QStringList archivefileconts); 258 QPair<QPair<QStringList, QStringList>, QPair<QStringList, QStringList> > extractcfgL(QString archivefile, QStringList archivefileconts); 259 QString getfullarchivepath(QString relativefilepath, QStringList archivefile); 260 QString filteroutlist(QString listofdata, QList<QRegExp> listofmatches); 261 QString filteroutlist(QStringList listofdata, QList<QRegExp> listofmatches); 262 QStringList filteroutlistL(QStringList listofdata, QList<QRegExp> listofmatches); 263 void extractiso(QString isofile); 264 void extractiso_krd10(QString isofile); 265 void copyfilegui(QString src, QString dst); 266 QStringList makepathtree(QString dirmkpathw, QStringList pathlist); 267 QStringList extractallfiles(QString archivefile, QString dirxfilesto, QPair<QStringList, QList<quint64> > filesizelist, QStringList outputfilelist); 268 QString getgrubcfgargs(QString cfgfile); 269 QPair<QPair<QStringList, QStringList>, QPair<QStringList, QStringList> > getgrubcfgargsL(QString cfgfile); 270 QString getFirstTextBlock(QString fulltext); 271 void loadgrub2env(QString cfgfile); 272 QString getgrub2cfgargs(QString cfgfile, QString archivefile, QStringList archivefileconts, QStringList visitedincludes); 273 QPair<QPair<QStringList, QStringList>, QPair<QStringList, QStringList> > getgrub2cfgargsL(QString cfgfile, QString archivefile, QStringList archivefileconts, QStringList visitedincludes); 274 QString getcfgkernargs(QString cfgfile, QString archivefile, QStringList archivefileconts, QStringList visitedincludes); 275 QPair<QPair<QStringList, QStringList>, QPair<QStringList, QStringList> > getcfgkernargsL(QString cfgfile, QString archivefile, QStringList archivefileconts, QStringList visitedincludes); 276 QString searchforincludesfile(QString includesfile, QString archivefile, QStringList archivefileconts, QStringList visitedincludes); 277 QPair<QPair<QStringList, QStringList>, QPair<QStringList, QStringList> > searchforincludesfileL(QString includesfile, QString archivefile, QStringList archivefileconts, QStringList visitedincludes); 278 QString searchforgrub2includesfile(QString includesfile, QString archivefile, QStringList archivefileconts, QStringList visitedincludes); 279 QPair<QPair<QStringList, QStringList>, QPair<QStringList, QStringList> > searchforgrub2includesfileL(QString includesfile, QString archivefile, QStringList archivefileconts, QStringList visitedincludes); 280 void downloadfile(QString fileurl, QString targetfile, qint64 minsize); 281 QString downloadpagecontents(QUrl pageurl); 282 QStringList lstFtpDirFiles(QString ldfDirStringUrl, qint64 ldfMinSize, qint64 ldfMaxSize); 283 QStringList lstHttpDirFiles(QString ldfDirStringUrl); 284 QStringList lstNetDirFiles(QString ldfDirStringUrl, qint64 ldfMinSize, qint64 ldfMaxSize); 285 QPair<QString, int> weightedFilterNetDir(QString ldfDirStringUrl, qint64 ldfMinSize, qint64 ldfMaxSize, QList<QRegExp> ldfFileMatchExp); 286 QString fileFilterNetDir(QStringList ldfDirStringUrlList, qint64 ldfMinSize, qint64 ldfMaxSize, QList<QRegExp> ldfFileMatchExp); 287 QPair<QString, int> filterBestMatch(QStringList ufStringList, QList<QRegExp> filterExpList); 288 static QString callexternapp(QString xexecFile, QString xexecParm); 289 static QString callexternappWriteToStdin(QString xexecFile, QString xexecParm, QString xwriteToStdin); 290 QString getdevluid(QString voldrive); 291 QString getlabel(QString voldrive); 292 QString getuuid(QString voldrive); 293 #ifdef Q_OS_MAC 294 QString getlabel(QString voldrive, QString diskutilinfo); 295 QString getuuid(QString voldrive, QString diskutilinfo); 296 bool is_external_drive_macos(const QString &drivename); 297 #endif 298 void refreshdriveslist(); 299 QStringList listcurdrives(); 300 QStringList matchinglist(QRegExp regex, QString text); 301 QStringList listsanedrives(); 302 QStringList listalldrives(); 303 void replaceTextInFile(QString repfilepath, QRegExp replaceme, QString replacewith); 304 QString fixkernelbootoptions(const QString &cfgfileCL); 305 void setLabel(QString devname, QString newlabel); 306 #ifdef Q_OS_UNIX 307 QString locatecommand(QString commandtolocate, QString reqforinstallmode, QString packagename); 308 QString locatedevicenode(QString mountpoint); 309 QString locatemountpoint(QString devicenode); 310 QString getGrubNotation(QString devicenode); 311 QString getGrub2Notation(QString devicenode); 312 int letterToNumber(QChar lettertoconvert); 313 int getDiskNumber(QString devicenode); 314 int getPartitionNumber(QString devicenode); 315 #endif 316 #ifdef Q_OS_WIN32 317 void installsvzip(); 318 void configsysEdit(); 319 void bootiniEdit(); 320 void vistabcdEdit(); 321 #endif 322 void instIndvfl(QString srcfName, QString dstfName); 323 QString instTempfl(QString srcfName, QString dstfType); 324 void runinst(); 325 void instDetType(); 326 #ifdef Q_OS_UNIX 327 void writegrub2cfg(); 328 #endif 329 void runinsthdd(); 330 void runinstusb(); 331 void logText(const QString &text); 332 void finishLogging(); 333 void writeTextToFile(const QString &text, const QString &filePath); 334 void setuppersspace(); 335 void fininstall(); 336 void rmFile(const QString &fn); 337 void rmFile(QFile &fn); 338 void mvFile(const QString &fn, const QString &outfn); 339 void mvFile(QFile &fn, QFile &outfn); 340 void showDownloadFailedScreen(const QString &fileurl); 341 342 private slots: 343 void on_distroselect_currentIndexChanged(int distroselectIndex); 344 void on_typeselect_currentIndexChanged(int); 345 void on_dverselect_currentIndexChanged(int); 346 void on_diskimagetypeselect_currentIndexChanged(int); 347 void on_FloppyFileSelector_clicked(); 348 void on_KernelFileSelector_clicked(); 349 void on_InitrdFileSelector_clicked(); 350 void on_CfgFileSelector_clicked(); 351 void on_cancelbutton_clicked(); 352 void on_fexitbutton_clicked(); 353 354 public slots: 355 void dlprogressupdate64(qint64 dlbytes, qint64 maxbytes); 356 void cpprogressupdate64(qint64 dlbytes, qint64 maxbytes); 357 void on_okbutton_clicked(); 358 void killApplication(); 359 }; 360 361 #endif 362 363