source: src-qt4/pc-sysmanager/pbsystemtab.cpp @ fbdee93

9.2-releasereleng/10.0releng/10.0.1releng/10.0.2releng/10.0.3
Last change on this file since fbdee93 was fbdee93, checked in by Kris Moore <kris@…>, 16 months ago

Remove old Mirror tab in System Manager, not used now that we run via CDN

  • Property mode set to 100644
File size: 11.6 KB
Line 
1/****************************************************************************
2** ui.h extension file, included from the uic-generated form implementation.
3**
4** If you want to add, delete, or rename functions or slots, use
5** Qt Designer to update this file, preserving your code.
6**
7** You should not define a constructor or destructor in this file.
8** Instead, write your code in functions called init() and destroy().
9** These will automatically be called by the form's constructor and
10** destructor.
11*****************************************************************************/
12#include <qstring.h>
13#include <pcbsd-utils.h>
14#include <qfiledialog.h>
15#include <QTextStream>
16#include <QNetworkAccessManager>
17#include <QNetworkReply>
18#include <QNetworkProxy>
19#include <QProgressDialog>
20#include <QDebug>
21#include "../config.h"
22
23#include "pbsystemtab.h"
24
25void PBSystemTab::ProgramInit()
26{
27    //Grab the username
28    username = QString::fromLocal8Bit(getenv("LOGNAME"));
29   
30    // Set the Uname on the General Tab
31    CheckUname();
32    // Set the PC-BSD Version on the General Tab
33    CheckPBVer();
34
35    // See if we need to setup a proxy
36    checkProxy();
37   
38    //Get & Set CPU Type
39    labelCPU->setText(pcbsd::Utils::sysctl("hw.model").simplified());
40   
41    //Get & Set RAM
42    labelMemory->setText(pcbsd::Utils::bytesToHumanReadable(pcbsd::Utils::sysctlAsInt("hw.physmem")));
43   
44    // Read any kernel settings
45    LoadKernSettings();
46
47    // Read any rc.conf settings
48    //loadServSettings();
49
50    //Load boot screen data
51    loadBootData();
52
53    // Connect our various buttons
54    connect(buttonGenerate, SIGNAL(clicked()), this, SLOT(startGenerateSheet()) );
55    connect(showBootCheck, SIGNAL(clicked()), this, SIGNAL(changed()));
56    connect(splashSelect, SIGNAL(activated(int)), this, SIGNAL(changed()));
57    connect(pushMiscSave, SIGNAL( clicked() ), this, SLOT( slotMiscSave() ) );
58
59    connect(fetchSourceBut, SIGNAL( clicked() ), this, SLOT( fetchSourcePressed() ) );
60    connect(fetchPortsBut, SIGNAL( clicked() ), this, SLOT( fetchPortsPressed() ) );
61}
62
63void PBSystemTab::CheckUname()
64{
65        QString prog = "uname";
66        QStringList args; 
67        args << "-rm"; 
68               
69        GetUname = new QProcess( this );
70        connect( GetUname, SIGNAL(readyReadStandardOutput()), this, SLOT(ReadUname()) );
71        GetUname->start(prog, args);
72}
73
74
75void PBSystemTab::CheckPBVer()
76{
77 
78 QString pcVer="";
79 QStringList out = pcbsd::Utils::runShellCommand(QString("pkg info -f pcbsd-base"));
80 if (out.size()) {
81   for (int i=0; i<out.size(); i++)
82   {
83     if (out[i].contains("Version"))
84     {
85         pcVer = out[i];
86         pcVer.replace("Version        : ","");
87         labelPCBSD->setText(pcVer);
88         break;
89     }
90   }
91 }
92
93
94 Arch = getLineFromCommandOutput("uname -m");
95 
96}
97
98
99void PBSystemTab::ReadUname()
100{   
101    if (GetUname->canReadLine() )
102    {
103        QString uname = GetUname->readLine().simplified();
104        labelBASEVer->setText( uname );
105        Version= uname.section(" ",0,0);
106    }
107}
108
109
110// Ask user where to save text file, then start the generation
111void PBSystemTab::startGenerateSheet()
112{
113    SheetFileName="";
114        SheetFileName = QFileDialog::getSaveFileName(
115                    this,
116                    "save file dialog",
117                    "/home/" + username + "/Desktop",
118                    "Text File (*.txt)");
119       
120      if ( ! SheetFileName.isEmpty() )
121     {
122          if ( SheetFileName.indexOf(".txt", 0) == -1)
123          {
124              SheetFileName.append(".txt");
125          }
126        if ( QFile::exists(SheetFileName ) )
127        {
128            int answer = QMessageBox::warning( this, "Overwrite File", "Overwrite " + SheetFileName + "?", "&Yes", "&No", QString::null, 1, 1 );
129                   if ( answer == 0 ) {
130              CreateSheetFile();               
131            }
132           
133        } else {
134            CreateSheetFile(); 
135               }
136     }
137       
138
139}
140
141
142void PBSystemTab::CreateSheetFile()
143{
144   
145        SheetGenScript = new QProcess( this );
146        QString prog = PREFIX + "/share/pcbsd/scripts/GenDiagSheet.sh";
147        QStringList args;
148        args << SheetFileName;
149        connect( SheetGenScript, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(finishedSheet()) );
150               
151        SheetGenScript->start(prog, args);
152}
153
154
155void PBSystemTab::finishedSheet()
156{
157        ViewSheet = new QProcess( this );
158        QString prog = "kedit";
159        QStringList args;
160        args << SheetFileName;
161        ViewSheet->start(prog, args);
162}
163
164
165void PBSystemTab::saveKernScreen()
166{
167     if ( checkForceIbus->isChecked() )
168                pcbsd::Utils::setConfFileValue(PREFIX + "/share/pcbsd/xstartup/enable-ibus.sh", "FORCEIBUS", "FORCEIBUS=\"YES\"", 1);
169     else
170                pcbsd::Utils::setConfFileValue(PREFIX + "/share/pcbsd/xstartup/enable-ibus.sh", "FORCEIBUS", "FORCEIBUS=\"NO\"", 1);
171
172}
173
174
175
176void PBSystemTab::showRebootRequired()
177{
178    QMessageBox::information( this, "PC-BSD Notification",
179    "Settings Updated!\n You must reboot for changes to take effect!" );
180}
181
182
183// Read the loader.conf, and load any settings we need
184void PBSystemTab::LoadKernSettings()
185{
186    if ( checkValue("/boot/loader.conf", "splash_pcx_load=", "YES" ) ) { showBootCheck->setChecked(true); }
187    else { showBootCheck->setChecked(false); }
188}
189
190// Checks the file for a string KEY, and sees if its set to VALUE
191bool PBSystemTab::checkValue( QString File, QString Key, QString Value )
192{
193    QString theValue = pcbsd::Utils::getConfFileValue(File, Key);
194    if (theValue == Value) {
195        return TRUE;
196    }
197    return FALSE;
198   
199}
200
201void PBSystemTab::fetchSourcePressed()
202{
203    portsnapUI = new PortsnapProgress();
204    portsnapUI->init(false, Version);
205    portsnapUI->show();
206}
207
208void PBSystemTab::fetchPortsPressed()
209{
210    portsnapUI = new PortsnapProgress();
211    portsnapUI->init(true, Version);
212    portsnapUI->show();
213}
214
215void PBSystemTab::customSplashPressed()
216{
217    QString file = QFileDialog::getOpenFileName(this, tr("Select Splash"), "/home/" + username, "*.pcx");
218    if (file == "") { return; }
219   
220    QImage image(file, "PCX");
221   
222    if (image.isNull())
223    {
224        QMessageBox::warning(this, tr("Invalid Image"), tr("The file supplied does not appear to be a valid PCX image."));
225        return;
226    }
227    if ((image.width() > 1024) || (image.height() > 768) || (image.depth() > 8))
228    {
229        QMessageBox::warning(this, tr("Invalid Image"), tr("The splash screen image cannot be any larger than 1024x768, or any greater than 8-bit (256 colours) depth."));
230        return;
231    }
232
233    system("cp '" + file.toAscii() + "' /boot/loading-screen.pcx");
234    splashSelect->clear();
235    loadBootData();
236    splashSelect->setCurrentIndex(0);
237}
238
239
240void PBSystemTab::miscSavePressed()
241{
242    //Change registry entry
243    QSettings settings;
244    QString code = codeMap[splashSelect->currentText()];
245    settings.setValue("/PCBSD/splash-screen", code);
246   
247    //Move files about
248    system("cp " + PREFIX.toAscii() + "/share/pcbsd/splash-screens/loading-screen-" + code.toAscii() + ".pcx /boot/loading-screen.pcx");
249    system("chmod 644 /boot/loading-screen.pcx");
250   
251    if ( showBootCheck->isChecked() )
252    {
253        pcbsd::Utils::setConfFileValue("/boot/loader.conf", "splash_pcx_load=", "splash_pcx_load=\"YES\"" );
254        pcbsd::Utils::setConfFileValue("/boot/loader.conf", "vesa_load=", "vesa_load=\"YES\"" );
255        pcbsd::Utils::setConfFileValue("/boot/loader.conf", "bitmap_load=", "bitmap_load=\"YES\"" );
256        pcbsd::Utils::setConfFileValue("/boot/loader.conf", "bitmap_name=", "bitmap_name=\"/boot/loading-screen.pcx\"" );
257     } else {
258        pcbsd::Utils::setConfFileValue("/boot/loader.conf", "splash_pcx_load=", "splash_pcx_load=\"NO\"" );
259        pcbsd::Utils::setConfFileValue("/boot/loader.conf", "vesa_load=", "vesa_load=\"NO\"" );
260        pcbsd::Utils::setConfFileValue("/boot/loader.conf", "bitmap_load=", "bitmap_load=\"NO\"" );
261     }
262}
263
264
265void PBSystemTab::showSplashChecked(int newState)
266{
267    if (newState == 0)
268    {
269        splashSelect->setEnabled(false);
270        customBut->setEnabled(false);
271    }
272    else
273    {
274        splashSelect->setEnabled(true);
275        customBut->setEnabled(true);
276    }
277}
278
279
280void PBSystemTab::loadBootData()
281{
282    //Trawl screens directory
283    QDir screens = QDir(PREFIX + "/share/pcbsd/splash-screens/");
284    if (! screens.exists())
285    {
286        QMessageBox::critical( 0, tr("File not found!"), PREFIX + "/share/pcbsd/splash-screens/ " + tr("doesn't exist!"), QMessageBox::Ok );
287        return;
288    }
289    screens.setFilter(QDir::Files);
290    QStringList screensList = screens.entryList();
291   
292    QRegExp screenMatcher = QRegExp("^loading-screen-(([a-z]|[A-Z]|_)+)\\.pcx$");
293    QStringList langList = QStringList();
294    QLocale langResolver;
295    codeMap = QMap<QString, QString>();
296    bool customPresent = false;
297    for (QStringList::Iterator it = screensList.begin(); it != screensList.end(); it++)
298    {
299        int pos  = screenMatcher.indexIn(*it);
300        if (pos > -1)
301        {
302            QString code = screenMatcher.cap(1);
303            if (code == "custom") { customPresent = true; }
304            else
305            { 
306                QLocale lang(code);
307                QString langName = langResolver.languageToString(lang.language());
308                if ( langName.isEmpty() )
309                {
310                    langName = "Splash Screen: " + code;
311                }
312                langList += langName;
313                codeMap[langName] = code;
314            }
315        }
316    }
317   
318   
319    //Populate select box
320    langList.sort();
321    splashSelect->addItems(langList);
322
323    int indexMod = 0;
324   
325    if (customPresent)
326    {
327        codeMap[tr("Custom")] = "custom";
328        splashSelect->addItem(tr("Custom"), 0);
329        indexMod = 1;
330    }
331   
332    //Load current, get info from registry - /PCBSD/splash-screen
333    QSettings settings;
334    QString selectedLang = settings.value("/PCBSD/splash-screen", langResolver.language()).toString();
335   
336    if (selectedLang == "custom") { splashSelect->setCurrentIndex(0); }
337    else
338    {
339        //If we don't have a splash for the user's language, default to english
340        QLocale tlocale(selectedLang);
341        QString testLangName = langResolver.languageToString(tlocale.language());
342        if (codeMap[testLangName] == "") selectedLang = "en";
343
344        QLocale tlocale2(selectedLang);
345        selectedLang = langResolver.languageToString(tlocale2.language());
346        if ( selectedLang.isEmpty() )
347        {
348             selectedLang = "Splash Screen: " + selectedLang;
349        }
350
351        splashSelect->setCurrentIndex(langList.indexOf(selectedLang) + indexMod);
352    }
353   
354    if ( checkValue("/boot/loader.conf", "splash_pcx_load=", "YES" ) )
355                showBootCheck->setChecked(TRUE);
356
357    if ( pcbsd::Utils::getConfFileValue(QString(PREFIX + "/share/pcbsd/xstartup/enable-ibus.sh"), QString("FORCEIBUS=") ) == QString("YES"))
358                checkForceIbus->setChecked(TRUE);
359    else
360                checkForceIbus->setChecked(FALSE);
361}
362
363void PBSystemTab::slotMiscSave() {
364    miscSavePressed();
365    saveKernScreen();
366}
367
368void PBSystemTab::slotClose() {
369    close();
370}
371
372bool PBSystemTab::sanityCheckSettings()
373{
374  return true;
375}
376
377
378QString PBSystemTab::getLineFromCommandOutput( QString cmd )
379{
380        FILE *file = popen(cmd.toLatin1(),"r");
381   
382        char buffer[100];
383 
384        QString line = "";
385        char firstChar;
386
387        if ((firstChar = fgetc(file)) != -1){
388                line += firstChar;
389                line += fgets(buffer,100,file);
390        }
391        pclose(file);
392        return line.simplified();
393}
394
395void PBSystemTab::changeOpenTab(int tab)
396{
397   tabWidget->setCurrentIndex(tab);
398}
399
400void PBSystemTab::checkProxy()
401{
402  bool ok;
403  int port;
404
405  // If no proxy set
406  if ( pcbsd::Utils::getProxyURL().isEmpty() )
407    return;
408
409  QNetworkProxy proxy;
410  if ( pcbsd::Utils::getProxyType() == "SOCKS5" )
411    proxy.setType(QNetworkProxy::Socks5Proxy);
412  else
413    proxy.setType(QNetworkProxy::HttpProxy);
414
415  proxy.setHostName(pcbsd::Utils::getProxyURL());
416
417  port = pcbsd::Utils::getProxyPort().toInt(&ok);
418  if ( ! pcbsd::Utils::getProxyPort().isEmpty() && ok )
419    proxy.setPort(port);
420  if ( ! pcbsd::Utils::getProxyUser().isEmpty() )
421    proxy.setUser(pcbsd::Utils::getProxyUser());
422  if ( ! pcbsd::Utils::getProxyPass().isEmpty() )
423    proxy.setPassword(pcbsd::Utils::getProxyPass());
424
425  QNetworkProxy::setApplicationProxy(proxy);
426}
Note: See TracBrowser for help on using the repository browser.