source: src-qt4/pc-firstbootgui/backend.cpp @ 261f12e

9.2-releasereleng/10.0releng/10.0.1
Last change on this file since 261f12e was 261f12e, checked in by Kris Moore <kris@…>, 11 months ago

Add Sanskrit as language choice

  • Property mode set to 100644
File size: 13.7 KB
Line 
1#include <QApplication>
2#include <QFile>
3
4#include "backend.h"
5
6using namespace Scripts;
7
8void Backend::createErrorReport()
9{
10  QString line;
11
12  QProcess p;
13  QString prog = "xterm";
14  QStringList args;
15  args << "-e" << "/root/save-logs.sh";
16  p.start(prog, args);
17  if (p.waitForFinished()) {
18  }
19}
20
21int Backend::deleteMBRPart(QString Slice, QString &output)
22{
23  QStringList list;
24  QString line;
25
26  Process p(QStringList() << "delete-part" << Slice);
27  if(p.waitForFinished()) {
28    while (p.canReadLine()) {
29      line = line + p.readLine().simplified() + "\n";
30    }
31  }
32  output = line;
33  return p.exitCode();
34}
35
36int Backend::addMBRPart(QString Disk, int size, QString &output)
37{
38  QStringList list;
39  QString tmp;
40
41  Process p(QStringList() << "create-part" << Disk << tmp.setNum(size));
42  if(p.waitForFinished()) {
43    while (p.canReadLine()) {
44      output = output + p.readLine().simplified() + "\n";
45    }
46  }
47  return p.exitCode();
48}
49
50void Backend::setupSSHKeys(QString Host, QString User, QString Port)
51{
52  QString line;
53
54  QProcess p;
55  QString prog = "xterm";
56  QStringList args;
57  args << "-e" << PCSYSINSTALL << "setup-ssh-keys" << User << Host << Port;
58  p.start(prog, args);
59  if (p.waitForFinished()) {
60  }
61}
62
63void Backend::enableNic(QString Nic, QString IP, QString NetMask, QString DNS, QString Gate, bool fetchMirrors, QString IPv6, QString IPv6Gate, QString IPv6DNS)
64{
65    QString line;
66    QString Mirrors;
67    if ( fetchMirrors )
68      Mirrors = "ON";
69    else
70      Mirrors = "OFF";
71
72    Process p(QStringList() << "enable-net" << Nic << IP << NetMask << DNS << Gate << Mirrors << IPv6 << IPv6Gate << IPv6DNS);
73    while(p.state() == QProcess::Starting || p.state() == QProcess::Running)
74        QCoreApplication::processEvents();
75
76    while (p.canReadLine()) {
77      qDebug() << "Enable Nic: " << p.readLine().simplified();
78    }
79}
80
81QStringList Backend::timezones()
82{
83    QStringList _zones;
84    QString line;
85
86    Process p(QStringList() << "list-tzones");
87
88    if (p.waitForFinished()) {
89        while (p.canReadLine()) {
90            line = p.readLine();
91            line = line.simplified();
92            line.truncate(65);
93            _zones.append(line);
94        }
95    }
96    return _zones;
97}
98
99QStringList Backend::languages()
100{
101    QStringList _languages;
102    QString code, desc, line;
103
104    QFile mFile;
105    mFile.setFileName("/usr/local/share/pc-sysinstall/conf/avail-langs");
106    if ( ! mFile.open(QIODevice::ReadOnly | QIODevice::Text))
107       return QStringList();
108
109    // Read in the meta-file for categories
110    QTextStream in(&mFile);
111    in.setCodec("UTF-8");
112    while ( !in.atEnd() ) {
113       line = in.readLine();
114       code = line;
115       code.truncate(line.indexOf(" "));
116       desc = line.remove(0, line.indexOf(" "));
117        _languages.append(desc.simplified() + " - (" + code.simplified() + ")");
118    }
119    mFile.close();
120    return _languages;
121}
122
123QStringList Backend::keyModels()
124{
125    QStringList _models;
126    QString code, desc, line;
127
128    Process p(QStringList() << "xkeyboard-models");
129
130    if (p.waitForFinished()) {
131        while (p.canReadLine()) {
132            line = p.readLine();
133            code = line;
134            code.truncate(line.indexOf(" "));
135            desc = line.remove(0, line.indexOf(" "));
136            _models.append(desc.simplified() + " - (" + code.simplified() + ")");
137        }
138    }
139    return _models;
140}
141
142QStringList Backend::keyLayouts()
143{
144    QStringList _layouts;
145    QString code, desc, line;
146
147    Process p(QStringList() << "xkeyboard-layouts");
148
149    if (p.waitForFinished()) {
150        while (p.canReadLine()) {
151            line = p.readLine();
152            code = line;
153            code.truncate(line.indexOf(" "));
154            desc = line.remove(0, line.indexOf(" "));
155            desc.replace("(", "'");
156            desc.replace(")", "'");
157            _layouts.append(desc.simplified() + " - (" + code.simplified() + ")");
158        }
159    }
160    return _layouts;
161}
162
163// Function which gets the key Variants for the target layout
164QStringList Backend::keyVariants(const QString &layout, QStringList &savedKeyVariants)
165{
166    QStringList _variants;
167    QString code, desc, line;
168
169    if ( savedKeyVariants.empty() )
170    {
171      Process p(QStringList() << "xkeyboard-variants");
172      if (p.waitForFinished()) {
173        while (p.canReadLine()) {
174            line = p.readLine();
175            savedKeyVariants << line;
176        }
177      }
178    }
179
180    for (int i = 0; i < savedKeyVariants.size(); ++i) {
181       // Look for variants for this particular layout
182       line = savedKeyVariants.at(i);
183       if ( line.indexOf(" " + layout + ":") != -1 )
184       {
185         code = line.simplified();
186         code.truncate(code.indexOf(" "));
187         desc = line.remove(0, line.indexOf(": ") + 1);
188         _variants.append(desc.simplified() + " - (" + code.simplified() + ")");
189       }
190    }
191
192    return _variants;
193}
194
195QStringList Backend::bootableMedia()
196{
197    QStringList media;
198
199    Process p(QStringList() << "");
200
201    if (p.waitForFinished()) {
202        while (p.canReadLine()) {
203            //
204        }
205    }
206    return media;
207}
208
209
210int Backend::systemMemory()
211{
212  int mem;
213  QString tmp;
214  bool ok;
215
216  Process p(QStringList() << "sys-mem");
217
218  if (p.waitForFinished()) {
219      while (p.canReadLine()) {
220          tmp = p.readLine().simplified();
221      }
222  }
223  mem = tmp.toInt(&ok);
224  qDebug() << "System Mem:" << mem;
225  if ( ok )
226    return mem;
227  else
228    return -1;
229}
230
231QStringList Backend::networkDevices()
232{
233    QStringList nics;
234
235    Process p(QStringList() << "detect-nics");
236
237    if (p.waitForFinished()) {
238        while (p.canReadLine()) {
239            nics.append(p.readLine().simplified());
240        }
241    }
242    qDebug() << "Found Nics:" << nics;
243    return nics;
244}
245
246// Function which lets us run setxkbmap
247void Backend::changeKbMap(QString model, QString layout, QString variant)
248{
249   QProcess kbp;
250   QStringList args;
251   QString prog;
252   prog = "setxkbmap"; 
253   args << "-model" << model << "-layout" << layout << "-variant" << variant;
254   qDebug() << "setxkbmap:" << args;
255   kbp.start(prog, args);
256   kbp.waitForFinished();
257}
258
259QList<QStringList> Backend::availComponents()
260{
261   QList<QStringList> components;
262   QStringList singleComponent;
263
264   QString tmp, name, desc, icon, type, line;
265   QString selected = "off";
266
267   Process p(QStringList() << "list-components");
268
269   if (p.waitForFinished()) {
270       while (p.canReadLine()) {
271          line = p.readLine();
272          line = line.simplified();
273          if ( line.indexOf("name:") != -1 )
274            name = line.remove(0, line.indexOf(": ") + 2); 
275          if ( line.indexOf("desc:") != -1 )
276            desc = line.remove(0, line.indexOf(": ") + 2); 
277          if ( line.indexOf("type:") != -1 )
278            type = line.remove(0, line.indexOf(": ") + 2); 
279          if ( line.indexOf("icon:") != -1 ) {
280            icon = line.remove(0, line.indexOf(": ") + 2); 
281            singleComponent << name << desc << icon << type << selected;
282            components << singleComponent;
283            qDebug() << "Found Component:" << singleComponent;
284            singleComponent.clear();
285          }
286       }
287   }
288
289   return components;
290}
291
292QList<QStringList> Backend::hardDrives()
293{
294    QList<QStringList> drives;
295    QStringList drive; //its a "list" so as to also append drive information
296    QStringList partition; //its a "list" so as to also append drive information
297
298    QString size, devinfo, type;
299    QString line, info;
300    QString tmp, dev, lastslice, slice, slabel, ssize;
301    bool ok;
302
303    Process p(QStringList() << "disk-list");
304
305    if (p.waitForFinished()) {
306        while (p.canReadLine()) {
307            line = p.readLine();
308            dev = line.simplified();
309            dev.truncate(line.indexOf(":"));
310
311            tmp = line.simplified().remove(0, line.indexOf(":") + 2);
312            devinfo = tmp;
313
314            // Get the disk information for this dev
315            Process pp(QStringList() << "disk-info" << dev);
316            if (pp.waitForFinished()) {
317                while (pp.canReadLine()) {
318                    info = pp.readLine().simplified();
319                    if (info.indexOf("size=") == 0) size = info.replace("size=", "");
320                    if (info.indexOf("type=") == 0) type = info.replace("type=", "");
321                }
322            }
323
324            // Pad the disk size a bit
325            size.toInt(&ok);
326            if ( !ok)
327                continue;
328            //size.setNum(size.toInt(&ok) - 100);
329
330            // Add this info to our list
331            qDebug() << "Found Drive:" << dev << size << devinfo << type;
332            drive.clear();
333            drive << "DRIVE" << dev << size << devinfo << type;
334            drives.append(drive);
335
336            // Init lastslize in case this disk is completely empty
337            lastslice = "s0";
338
339            // Get the slice information for this disk
340            Process ppp(QStringList() << "disk-part" << dev);
341            if (ppp.waitForFinished()) {
342                while (ppp.canReadLine()) {
343                    info = ppp.readLine().simplified();
344                    // Get the slice we are working on
345                    if ( info.indexOf(dev + "s") == 0 || info.indexOf(dev + "p") == 0 ) {
346                      slice = info;
347                      slice.truncate(slice.indexOf("-"));
348                    } else {
349                      slice = "";
350                    }
351                     
352                    if (info.indexOf(slice + "-label: ") == 0) slabel = info.replace(slice + "-label: ", "");
353
354                    // Check if we've found the format flag
355                    if (info.indexOf(dev + "-format: ") == 0) {
356                      QString format = info.replace(dev + "-format: ", "");
357                      qDebug() << "Found Disk Format: " <<  dev << " - " << format;
358                      partition.clear();
359                      partition << "FORMAT" << dev << format;
360                      drives.append(partition);
361                    }
362
363                    // Check if we've found the new slice
364                    if (info.indexOf(slice + "-sizemb: ") == 0) {
365                      ssize = info.replace(slice + "-sizemb: ", "");
366                      // Make sure we have a number
367                      ssize.toInt(&ok);
368                      if (!ok)
369                        continue;
370
371                      // Pad the slice by 5MB
372                      //ssize.setNum(ssize.toInt(&ok) - 5);
373                       
374                      qDebug() << "Found Slice:" << dev << slice << slabel << ssize;
375                      partition.clear();
376                      partition << "SLICE" << dev << slice << ssize << slabel;   
377                      drives.append(partition);
378                      lastslice = slice;
379                    }
380
381                    // Check if we've found some free disk space
382                    if (info.indexOf(dev + "-freemb: ") == 0) {
383                      bool ok;
384                      int checkSize;
385                      ssize = info.replace(dev + "-freemb: ", "");
386                      checkSize = ssize.toInt(&ok); 
387                      if ( ok && checkSize > 100 )
388                      {
389                        // Figure out the next slice number, if its less than 4
390                        QString freeslice;
391                        tmp = lastslice;
392                        tmp = tmp.remove(0, tmp.size() - 1);
393                        int nextslicenum = tmp.toInt(&ok);
394                        if ( ok ) {
395                           if ( nextslicenum < 4) {
396                            nextslicenum++;
397                            slice = dev + "s" + tmp.setNum(nextslicenum);
398                            slabel = "Unused Space";
399                            qDebug() << "Found Slice:" << dev << slice << slabel << ssize;
400                            partition.clear();
401                            partition << "SLICE" << dev << slice << ssize << slabel;   
402                            drives.append(partition);
403                           }
404                        }
405                      }
406                    } // End of Free Space Check
407                }
408            }
409
410        }
411    }
412    return drives;
413}
414
415// Function which checks for our GUI package schema data, and sets found if its located
416QList<QStringList> Backend::getPackageData(bool &found)
417{
418  QList<QStringList> metaPkgs;
419  found=false;
420  QString tmp, mName, mDesc, mIcon, mParent, mDesktop, mPkgFileList;
421  QStringList package;
422
423  QProcess pcmp;
424  qDebug() << "Searching for meta-pkgs...";
425  pcmp.start(QString("pc-metapkgmanager"), QStringList() << "list");
426  if (pcmp.waitForFinished()) {
427    while (pcmp.canReadLine()) {
428        tmp = pcmp.readLine().simplified();
429        if ( tmp.indexOf("Meta Package: ") == 0) {
430                mName = tmp.replace("Meta Package: ", "");
431                continue;
432        }
433        if ( tmp.indexOf("Description: ") == 0) {
434                mDesc = tmp.replace("Description: ", "");
435                continue;
436        }
437        if ( tmp.indexOf("Icon: ") == 0) {
438                mIcon = tmp.replace("Icon: ", "");
439                mPkgFileList = mIcon;
440                mPkgFileList.replace("pkg-icon.png", "pkg-list");
441                continue;
442        }
443        if ( tmp.indexOf("Parent: ") == 0) {
444                mParent = tmp.replace("Parent: ", "");
445                continue;
446        }
447        if ( tmp.indexOf("Desktop: ") == 0) {
448                mDesktop = tmp.replace("Desktop: ", "");
449                continue;
450        }
451        if ( tmp.indexOf("Category Entry") == 0) {
452                // Now add this category to the string list
453                package.clear();
454                qDebug() << "Found Package" << mName << mDesc << mIcon << mParent<< mDesktop << "CATEGORY";
455                package << mName << mDesc << mIcon << mParent << mDesktop << "CATEGORY";
456                metaPkgs.append(package);
457                mName=""; mDesc=""; mIcon=""; mParent=""; mDesktop=""; mPkgFileList="";
458        }
459
460        if ( tmp.indexOf("Required Packages:") == 0) {
461                // Now add this meta-pkg to the string list
462                package.clear();
463                qDebug() << "Found Package" << mName << mDesc << mIcon << mParent << mDesktop << "NO" << mPkgFileList;
464                package << mName << mDesc << mIcon << mParent << mDesktop << "NO" << mPkgFileList;
465                metaPkgs.append(package);
466                found = true;
467                mName=""; mDesc=""; mIcon=""; mParent=""; mDesktop=""; mPkgFileList="";
468        }
469    }
470  }
471
472  return metaPkgs;
473}
474
Note: See TracBrowser for help on using the repository browser.