1
mirror of https://invent.kde.org/network/falkon.git synced 2024-09-22 18:22:10 +02:00
falkonOfficial/src/app/mainapplication.cpp

691 lines
23 KiB
C++
Raw Normal View History

2011-03-03 18:29:20 +01:00
/* ============================================================
* QupZilla - WebKit based browser
2011-10-17 09:57:07 +02:00
* Copyright (C) 2010-2011 David Rosca
2011-03-03 18:29:20 +01:00
*
* 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 3 of the License, or
* (at your option) any later version.
*
* 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 for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* ============================================================ */
2011-03-02 16:57:41 +01:00
#include "mainapplication.h"
#include "qupzilla.h"
#include "tabwidget.h"
#include "bookmarkstoolbar.h"
#include "cookiemanager.h"
#include "cookiejar.h"
#include "browsinglibrary.h"
2011-03-02 16:57:41 +01:00
#include "historymodel.h"
#include "networkmanager.h"
#include "rssmanager.h"
#include "updater.h"
#include "autosaver.h"
#include "pluginproxy.h"
#include "bookmarksmodel.h"
#include "downloadmanager.h"
#include "autofillmodel.h"
2011-03-27 21:59:40 +02:00
#include "adblockmanager.h"
#include "desktopnotificationsfactory.h"
#include "iconprovider.h"
2011-05-01 22:07:57 +02:00
#include "qtwin.h"
2011-07-31 13:33:44 +02:00
#include "mainapplication.h"
#include "webhistoryinterface.h"
#include "globalfunctions.h"
#include "profileupdater.h"
#include "searchenginesmanager.h"
#include "operaimporter.h"
2011-03-02 16:57:41 +01:00
MainApplication::MainApplication(const QList<CommandLineOptions::ActionPair> &cmdActions, int &argc, char **argv)
: QtSingleApplication("QupZillaWebBrowser", argc, argv)
2011-10-02 17:39:59 +02:00
, m_cookiemanager(0)
, m_browsingLibrary(0)
, m_historymodel(0)
, m_websettings(0)
, m_networkmanager(0)
, m_cookiejar(0)
, m_rssmanager(0)
, m_updater(0)
, m_plugins(0)
, m_bookmarksModel(0)
, m_downloadManager(0)
, m_autofill(0)
, m_networkCache(new QNetworkDiskCache)
, m_desktopNotifications(0)
, m_iconProvider(new IconProvider(this))
, m_searchEnginesManager(0)
2011-10-02 17:39:59 +02:00
, m_isClosing(false)
, m_isStateChanged(false)
, m_isExited(false)
, m_isRestoring(false)
, m_databaseConnected(false)
2011-03-02 16:57:41 +01:00
{
2011-03-27 21:59:40 +02:00
setOverrideCursor(Qt::WaitCursor);
#if defined(Q_WS_X11) & !defined(NO_SYSTEM_DATAPATH)
DATADIR = USE_DATADIR;
2011-03-02 16:57:41 +01:00
#else
DATADIR = qApp->applicationDirPath() + "/";
2011-03-02 16:57:41 +01:00
#endif
PLUGINSDIR = DATADIR + "plugins/";
TRANSLATIONSDIR = DATADIR + "locale/";
THEMESDIR = DATADIR + "themes/";
setWindowIcon(QupZilla::qupzillaIcon());
2011-03-02 16:57:41 +01:00
bool noAddons = false;
QUrl startUrl("");
QString message;
QString startProfile;
2011-03-02 16:57:41 +01:00
if (argc > 1) {
foreach (CommandLineOptions::ActionPair pair, cmdActions) {
switch (pair.action) {
case CommandLineOptions::StartWithoutAddons:
noAddons = true;
break;
case CommandLineOptions::StartWithProfile:
startProfile = pair.text;
break;
case CommandLineOptions::NewTab:
message = "ACTION:NewTab";
break;
case CommandLineOptions::NewWindow:
message = "ACTION:NewWindow";
break;
case CommandLineOptions::ShowDownloadManager:
message = "ACTION:ShowDownloadManager";
break;
case CommandLineOptions::OpenUrl:
startUrl = pair.text;
message = "URL:" + startUrl.toString();
break;
default:
break;
}
2011-03-02 16:57:41 +01:00
}
}
if (isRunning()) {
sendMessage(message);
m_isExited = true;
return;
}
connect(this, SIGNAL(messageReceived(QString)), this, SLOT(receiveAppMessage(QString)));
setQuitOnLastWindowClosed(true);
setApplicationName("QupZilla");
setApplicationVersion(QupZilla::VERSION);
setOrganizationDomain("qupzilla");
QString homePath = QDir::homePath();
homePath+="/.qupzilla/";
checkSettingsDir();
2011-03-02 16:57:41 +01:00
QSettings::setDefaultFormat(QSettings::IniFormat);
if (startProfile.isEmpty()) {
QSettings settings(homePath+"profiles/profiles.ini", QSettings::IniFormat);
if (settings.value("Profiles/startProfile","default").toString().contains("/"))
m_activeProfil=homePath+"profiles/default/";
else
m_activeProfil=homePath+"profiles/"+settings.value("Profiles/startProfile","default").toString()+"/";
} else
m_activeProfil = homePath+"profiles/"+startProfile+"/";
ProfileUpdater u(m_activeProfil, DATADIR);
u.checkProfile();
connectDatabase();
2011-03-02 16:57:41 +01:00
QSettings settings2(m_activeProfil+"settings.ini", QSettings::IniFormat);
settings2.beginGroup("SessionRestore");
if (settings2.value("isRunning",false).toBool() )
settings2.setValue("isCrashed", true);
settings2.setValue("isRunning", true);
settings2.endGroup();
QSettings::setPath(QSettings::IniFormat, QSettings::UserScope, m_activeProfil);
translateApp();
2011-07-31 13:33:44 +02:00
QWebHistoryInterface::setDefaultInterface(new WebHistoryInterface(this));
2011-03-02 16:57:41 +01:00
QupZilla* qupzilla = new QupZilla(QupZilla::FirstAppWindow, startUrl);
2011-03-02 16:57:41 +01:00
m_mainWindows.append(qupzilla);
connect(qupzilla, SIGNAL(message(MainApplication::MessageType,bool)), this, SLOT(sendMessages(MainApplication::MessageType,bool)));
qupzilla->show();
AutoSaver* saver = new AutoSaver();
connect(saver, SIGNAL(saveApp()), this, SLOT(saveStateSlot()));
2011-10-02 17:39:59 +02:00
if (settings2.value("Web-Browser-Settings/CheckUpdates", true).toBool())
m_updater = new Updater(qupzilla);
2011-03-02 16:57:41 +01:00
if (noAddons) {
2011-07-31 13:33:44 +02:00
settings2.setValue("Plugin-Settings/AllowedPlugins", QStringList());
settings2.setValue("Plugin-Settings/EnablePlugins", false);
2011-03-02 16:57:41 +01:00
}
networkManager()->loadCertificates();
2011-03-02 16:57:41 +01:00
plugins()->loadPlugins();
loadSettings();
QTimer::singleShot(2000, this, SLOT(restoreCursor()));
QTimer::singleShot(10*1000, this, SLOT(setupJumpList()));
2011-03-02 16:57:41 +01:00
}
void MainApplication::loadSettings()
{
QSettings settings(m_activeProfil+"settings.ini", QSettings::IniFormat);
settings.beginGroup("Themes");
QString activeTheme = settings.value("activeTheme",
#ifdef Q_WS_X11
"linux"
#else
"windows"
#endif
).toString();
settings.endGroup();
m_activeThemePath = THEMESDIR + activeTheme + "/";
QFile cssFile(m_activeThemePath + "main.css");
cssFile.open(QFile::ReadOnly);
QString css = cssFile.readAll();
cssFile.close();
#ifdef Q_WS_X11
if (QFile(m_activeThemePath + "linux.css").exists()) {
cssFile.setFileName(m_activeThemePath + "linux.css");
cssFile.open(QFile::ReadOnly);
css.append(cssFile.readAll());
cssFile.close();
}
#endif
#ifdef Q_WS_WIN
if (QFile(m_activeThemePath + "windows.css").exists()) {
cssFile.setFileName(m_activeThemePath + "windows.css");
cssFile.open(QFile::ReadOnly);
css.append(cssFile.readAll());
cssFile.close();
}
#endif
QString relativePath = QDir::current().relativeFilePath(m_activeThemePath);
css.replace(QRegExp("url\\s*\\(\\s*([^\\*:\\);]+)\\s*\\)", Qt::CaseSensitive, QRegExp::RegExp2),
QString("url(%1\\1)").arg(relativePath + "/"));
setStyleSheet(css);
2011-03-02 16:57:41 +01:00
webSettings();
//Web browsing settings
settings.beginGroup("Web-Browser-Settings");
bool allowFlash = settings.value("allowFlash",true).toBool();
bool allowJavaScript = settings.value("allowJavaScript",true).toBool();
bool allowJavaScriptOpenWindow = settings.value("allowJavaScriptOpenWindow",false).toBool();
bool allowJava = settings.value("allowJava",true).toBool();
bool allowPersistentStorage = settings.value("allowPersistentStorage",true).toBool();
bool allowImages = settings.value("autoLoadImages",true).toBool();
bool dnsPrefetch = settings.value("DNS-Prefetch", false).toBool();
bool jsClipboard = settings.value("JavaScriptCanAccessClipboard", true).toBool();
bool linkInFocuschain = settings.value("IncludeLinkInFocusChain", false).toBool();
bool zoomTextOnly = settings.value("zoomTextOnly", false).toBool();
bool printElBg = settings.value("PrintElementBackground", true).toBool();
int maxCachedPages = settings.value("maximumCachedPages",3).toInt();
int scrollingLines = settings.value("wheelScrollLines", wheelScrollLines()).toInt();
QUrl userStyleSheet = settings.value("userStyleSheet", QUrl()).toUrl();
m_defaultZoom = settings.value("DefaultZoom", 100).toInt();
2011-03-02 16:57:41 +01:00
settings.endGroup();
m_websettings->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
m_websettings->setAttribute(QWebSettings::PluginsEnabled, allowFlash);
m_websettings->setAttribute(QWebSettings::JavascriptEnabled, allowJavaScript);
m_websettings->setAttribute(QWebSettings::JavascriptCanOpenWindows, allowJavaScriptOpenWindow);
m_websettings->setAttribute(QWebSettings::JavaEnabled, allowJava);
m_websettings->setAttribute(QWebSettings::AutoLoadImages, allowImages);
m_websettings->setAttribute(QWebSettings::DnsPrefetchEnabled, dnsPrefetch);
m_websettings->setAttribute(QWebSettings::JavascriptCanAccessClipboard, jsClipboard);
m_websettings->setAttribute(QWebSettings::LinksIncludedInFocusChain, linkInFocuschain);
m_websettings->setAttribute(QWebSettings::ZoomTextOnly, zoomTextOnly);
m_websettings->setAttribute(QWebSettings::PrintElementBackgrounds, printElBg);
#ifdef USE_WEBGL
m_websettings->setAttribute(QWebSettings::WebGLEnabled , true);
m_websettings->setAttribute(QWebSettings::AcceleratedCompositingEnabled, true);
#endif
2011-03-02 16:57:41 +01:00
m_websettings->setFontFamily(QWebSettings::StandardFont, settings.value("StandardFont", m_websettings->fontFamily(QWebSettings::StandardFont)).toString());
m_websettings->setFontFamily(QWebSettings::CursiveFont, settings.value("CursiveFont", m_websettings->fontFamily(QWebSettings::CursiveFont)).toString());
m_websettings->setFontFamily(QWebSettings::FantasyFont, settings.value("FantasyFont", m_websettings->fontFamily(QWebSettings::FantasyFont)).toString());
m_websettings->setFontFamily(QWebSettings::FixedFont, settings.value("FixedFont", m_websettings->fontFamily(QWebSettings::FixedFont)).toString());
m_websettings->setFontFamily(QWebSettings::SansSerifFont, settings.value("SansSerifFont", m_websettings->fontFamily(QWebSettings::SansSerifFont)).toString());
m_websettings->setFontFamily(QWebSettings::SerifFont, settings.value("SerifFont", m_websettings->fontFamily(QWebSettings::SerifFont)).toString());
m_websettings->setFontSize(QWebSettings::DefaultFontSize, settings.value("DefaultFontSize", m_websettings->fontSize(QWebSettings::DefaultFontSize)).toInt() );
m_websettings->setFontSize(QWebSettings::DefaultFixedFontSize, settings.value("FixedFontSize", m_websettings->fontSize(QWebSettings::DefaultFixedFontSize)).toInt() );
m_websettings->setUserStyleSheetUrl(userStyleSheet);
m_websettings->setDefaultTextEncoding("System");
m_websettings->setWebGraphic(QWebSettings::DefaultFrameIconGraphic, IconProvider::fromTheme("text-plain").pixmap(16,16));
2011-03-02 16:57:41 +01:00
if (allowPersistentStorage) m_websettings->enablePersistentStorage(m_activeProfil);
m_websettings->setMaximumPagesInCache(maxCachedPages);
setWheelScrollLines(scrollingLines);
if (m_downloadManager)
m_downloadManager->loadSettings();
2011-03-02 16:57:41 +01:00
}
void MainApplication::restoreCursor()
{
QApplication::restoreOverrideCursor();
}
void MainApplication::setupJumpList()
{
QtWin::setupJumpList();
}
2011-03-02 16:57:41 +01:00
QupZilla* MainApplication::getWindow()
{
for(int i=0; i<m_mainWindows.count(); i++) {
if (!m_mainWindows.at(i))
continue;
return m_mainWindows.at(i);
}
return 0;
}
void MainApplication::setStateChanged()
2011-03-02 16:57:41 +01:00
{
m_isStateChanged = true;
sendMessages(HistoryStateChanged, true);
}
bool MainApplication::isStateChanged()
{
if (m_isStateChanged) {
m_isStateChanged = false;
2011-03-02 16:57:41 +01:00
return true;
}
return false;
}
void MainApplication::sendMessages(MainApplication::MessageType mes, bool state)
{
emit message(mes, state);
}
void MainApplication::receiveAppMessage(QString message)
{
if (message.startsWith("URL:")) {
QString url(message.remove("URL:"));
addNewTab(WebView::guessUrlFromString(url));
} else if (message.startsWith("ACTION:")) {
QString text = message.mid(7);
if (text == "NewTab")
addNewTab();
else if (text == "NewWindow")
makeNewWindow(false);
else if (text == "ShowDownloadManager")
downManager()->show();
2011-03-02 16:57:41 +01:00
}
QupZilla* actWin = getWindow();
if (!actWin && !isClosing()) { // It can only occur if download manager window was still open
2011-03-02 16:57:41 +01:00
makeNewWindow(true);
return;
}
actWin->setWindowState(actWin->windowState() & ~Qt::WindowMinimized);
actWin->raise();
actWin->activateWindow();
actWin->setFocus();
}
void MainApplication::addNewTab(const QUrl &url)
2011-03-02 16:57:41 +01:00
{
if (!getWindow())
return;
getWindow()->tabWidget()->addView(url);
}
void MainApplication::makeNewWindow(bool tryRestore, const QUrl &startUrl)
{
QupZilla::StartBehaviour behaviour;
if (tryRestore)
behaviour = QupZilla::OtherRestoredWindow;
else
behaviour = QupZilla::NewWindow;
QupZilla* newWindow = new QupZilla(behaviour, startUrl);
2011-03-02 16:57:41 +01:00
connect(newWindow, SIGNAL(message(MainApplication::MessageType,bool)), this, SLOT(sendMessages(MainApplication::MessageType,bool)));
m_mainWindows.append(newWindow);
2011-03-05 13:16:13 +01:00
newWindow->show();
2011-03-02 16:57:41 +01:00
}
void MainApplication::connectDatabase()
{
if (m_databaseConnected)
return;
2011-03-02 16:57:41 +01:00
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(m_activeProfil + "browsedata.db");
if (!QFile::exists(m_activeProfil + "browsedata.db")) {
QFile(DATADIR + "data/default/profiles/default/browsedata.db").copy(m_activeProfil + "browsedata.db");
db.setDatabaseName(m_activeProfil + "browsedata.db");
2011-03-02 16:57:41 +01:00
qWarning("Cannot find SQLite database file! Copying and using the defaults!");
}
if (!db.open())
qWarning("Cannot open SQLite database! Continuing without database....");
m_databaseConnected = true;
2011-03-02 16:57:41 +01:00
}
void MainApplication::translateApp()
{
QLocale locale;
QSettings settings(m_activeProfil+"settings.ini", QSettings::IniFormat);
settings.beginGroup("Language");
2011-03-02 16:57:41 +01:00
QString file = settings.value("language",locale.name()+".qm").toString();
QString shortLoc = file.left(2);
if (file == "" || !QFile::exists(TRANSLATIONSDIR + file) )
2011-03-02 16:57:41 +01:00
return;
QTranslator* app = new QTranslator();
app->load(DATADIR+"locale/"+file);
QTranslator* sys = new QTranslator();
if (QFile::exists(TRANSLATIONSDIR + "qt_" + shortLoc + ".qm"))
sys->load(TRANSLATIONSDIR + "qt_" + shortLoc + ".qm");
2011-03-02 16:57:41 +01:00
m_activeLanguage = file;
installTranslator(app);
installTranslator(sys);
}
void MainApplication::quitApplication()
{
if (m_downloadManager && !m_downloadManager->canClose()) {
m_downloadManager->show();
return;
}
m_isClosing = true;
if (m_mainWindows.count() > 0)
saveStateSlot();
QSettings settings(m_activeProfil+"settings.ini", QSettings::IniFormat);
settings.beginGroup("SessionRestore");
settings.setValue("isRunning",false);
settings.setValue("isCrashed", false);
settings.endGroup();
bool deleteCookies = settings.value("Web-Browser-Settings/deleteCookiesOnClose", false).toBool();
bool deleteHistory = settings.value("Web-Browser-Settings/deleteHistoryOnClose", false).toBool();
2011-03-02 16:57:41 +01:00
if (deleteCookies)
QFile::remove(m_activeProfil+"cookies.dat");
if (deleteHistory)
m_historymodel->clearHistory();
2011-03-02 16:57:41 +01:00
m_searchEnginesManager->saveSettings();
2011-03-02 16:57:41 +01:00
cookieJar()->saveCookies();
m_networkmanager->saveCertificates();
2011-03-02 16:57:41 +01:00
m_plugins->c2f_saveSettings();
2011-03-27 21:59:40 +02:00
AdBlockManager::instance()->save();
QFile::remove(getActiveProfilPath() + "WebpageIcons.db");
delete m_iconProvider;
2011-03-02 16:57:41 +01:00
// qDebug() << "Quitting application...";
2011-03-02 16:57:41 +01:00
quit();
}
BrowsingLibrary* MainApplication::browsingLibrary()
2011-03-02 16:57:41 +01:00
{
if (!m_browsingLibrary)
m_browsingLibrary = new BrowsingLibrary(getWindow());
return m_browsingLibrary;
2011-03-02 16:57:41 +01:00
}
PluginProxy* MainApplication::plugins()
{
if (!m_plugins)
m_plugins = new PluginProxy();
return m_plugins;
}
CookieManager* MainApplication::cookieManager()
{
if (!m_cookiemanager)
m_cookiemanager = new CookieManager();
return m_cookiemanager;
}
HistoryModel* MainApplication::history()
{
if (!m_historymodel)
m_historymodel = new HistoryModel(getWindow());
return m_historymodel;
}
QWebSettings* MainApplication::webSettings()
{
if (!m_websettings)
m_websettings = QWebSettings::globalSettings();
return m_websettings;
}
NetworkManager* MainApplication::networkManager()
{
if (!m_networkmanager)
m_networkmanager = new NetworkManager(getWindow());
return m_networkmanager;
}
CookieJar* MainApplication::cookieJar()
{
if (!m_cookiejar) {
m_cookiejar = new CookieJar(getWindow());
m_cookiejar->restoreCookies();
}
return m_cookiejar;
}
RSSManager* MainApplication::rssManager()
{
if (!m_rssmanager)
m_rssmanager = new RSSManager(getWindow());
return m_rssmanager;
}
BookmarksModel* MainApplication::bookmarksModel()
2011-03-02 16:57:41 +01:00
{
if (!m_bookmarksModel)
m_bookmarksModel = new BookmarksModel(this);
2011-03-02 16:57:41 +01:00
return m_bookmarksModel;
}
DownloadManager* MainApplication::downManager()
{
if (!m_downloadManager)
m_downloadManager = new DownloadManager();
return m_downloadManager;
}
AutoFillModel* MainApplication::autoFill()
{
if (!m_autofill)
m_autofill = new AutoFillModel(getWindow());
return m_autofill;
}
SearchEnginesManager* MainApplication::searchEnginesManager()
{
if (!m_searchEnginesManager)
m_searchEnginesManager = new SearchEnginesManager();
return m_searchEnginesManager;
}
DesktopNotificationsFactory* MainApplication::desktopNotifications()
{
if (!m_desktopNotifications)
m_desktopNotifications = new DesktopNotificationsFactory(this);
return m_desktopNotifications;
}
2011-03-17 17:03:04 +01:00
void MainApplication::aboutToCloseWindow(QupZilla* window)
2011-03-02 16:57:41 +01:00
{
if (!window)
return;
m_mainWindows.removeOne(window);
}
2011-03-05 13:43:37 +01:00
//Version of session.dat file
2011-03-02 16:57:41 +01:00
static const int sessionVersion = 0x0002;
bool MainApplication::saveStateSlot()
{
if (m_websettings->testAttribute(QWebSettings::PrivateBrowsingEnabled) || m_isRestoring)
2011-03-02 16:57:41 +01:00
return false;
QSettings settings(m_activeProfil+"settings.ini", QSettings::IniFormat);
settings.beginGroup("SessionRestore");
settings.setValue("restoreSession",false);
QFile file(m_activeProfil+"session.dat");
file.open(QIODevice::WriteOnly);
QDataStream stream(&file);
stream << sessionVersion;
stream << m_mainWindows.count();
for (int i = 0; i < m_mainWindows.count(); i++) {
stream << m_mainWindows.at(i)->tabWidget()->saveState();
if (m_mainWindows.at(i)->isFullScreen())
stream << QByteArray();
else
stream << m_mainWindows.at(i)->saveState();
2011-03-02 16:57:41 +01:00
}
file.close();
settings.setValue("restoreSession",true);
settings.endGroup();
QupZilla* qupzilla_ = getWindow();
if (qupzilla_)
qupzilla_->tabWidget()->savePinnedTabs();
2011-03-02 16:57:41 +01:00
return true;
}
2011-03-17 17:03:04 +01:00
bool MainApplication::restoreStateSlot(QupZilla* window)
2011-03-02 16:57:41 +01:00
{
m_isRestoring = true;
2011-03-02 16:57:41 +01:00
QSettings settings(m_activeProfil+"settings.ini", QSettings::IniFormat);
int afterStart = settings.value("Web-URL-Settings/afterLaunch", 1).toInt();
2011-03-02 16:57:41 +01:00
settings.beginGroup("SessionRestore");
if (!settings.value("restoreSession",false).toBool()) {
m_isRestoring = false;
2011-03-02 16:57:41 +01:00
return false;
}
if (settings.value("isCrashed",false).toBool() && afterStart != 2) {
2011-03-02 16:57:41 +01:00
QMessageBox::StandardButton button = QMessageBox::warning(window, tr("Last session crashed"),
tr("<b>QupZilla crashed :-(</b><br/>Oops, last session of QupZilla ends with its crash. We are very sorry. Would you try to restore saved state?"),
QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
if (button != QMessageBox::Yes) {
m_isRestoring = false;
2011-03-02 16:57:41 +01:00
return false;
}
2011-03-02 16:57:41 +01:00
}
if (!QFile::exists(m_activeProfil+"session.dat")) {
m_isRestoring = false;
2011-03-02 16:57:41 +01:00
return false;
}
2011-03-02 16:57:41 +01:00
settings.setValue("isCrashed",false);
QFile file(m_activeProfil+"session.dat");
file.open(QIODevice::ReadOnly);
QDataStream stream(&file);
QByteArray tabState;
QByteArray qMainWindowState;
int version;
int windowCount;
stream >> version;
if (version != sessionVersion) {
m_isRestoring = false;
2011-03-02 16:57:41 +01:00
return false;
}
2011-03-02 16:57:41 +01:00
stream >> windowCount;
stream >> tabState;
stream >> qMainWindowState;
window->tabWidget()->restoreState(tabState);
window->restoreState(qMainWindowState);
if (windowCount > 1) {
for (int i = 1; i < windowCount; i++) {
2011-03-02 16:57:41 +01:00
stream >> tabState;
stream >> qMainWindowState;
QupZilla* window = new QupZilla(QupZilla::OtherRestoredWindow);
2011-03-02 16:57:41 +01:00
m_mainWindows.append(window);
connect(window, SIGNAL(message(MainApplication::MessageType,bool)), this, SLOT(sendMessages(MainApplication::MessageType,bool)));
QEventLoop eLoop;
connect(window, SIGNAL(startingCompleted()), &eLoop, SLOT(quit()));
eLoop.exec();
window->tabWidget()->restoreState(tabState);
window->restoreState(qMainWindowState);
// window->tabWidget()->closeTab(0);
2011-03-02 16:57:41 +01:00
window->show();
}
}
file.close();
2011-03-02 16:57:41 +01:00
m_isRestoring = false;
2011-03-02 16:57:41 +01:00
return true;
}
bool MainApplication::checkSettingsDir()
2011-03-02 16:57:41 +01:00
{
/*
$HOMEDIR
|
.qupzilla/
|
profiles/-----------
| |
default/ profiles.ini
|
browsedata.db
2011-03-02 16:57:41 +01:00
*/
QString homePath = QDir::homePath() + "/.qupzilla/";
if (QDir(homePath).exists() && QFile(homePath + "profiles/profiles.ini").exists())
2011-03-02 16:57:41 +01:00
return true;
std::cout << "Creating new profile directory" << std::endl;
QDir dir = QDir::home();
dir.mkdir(".qupzilla");
dir.cd(".qupzilla");
dir.mkdir("profiles");
dir.cd("profiles");
//.qupzilla/profiles
QFile(homePath + "profiles/profiles.ini").remove();
QFile(DATADIR + "data/default/profiles/profiles.ini").copy(homePath + "profiles/profiles.ini");
2011-03-02 16:57:41 +01:00
dir.mkdir("default");
dir.cd("default");
//.qupzilla/profiles/default
QFile(homePath + "profiles/default/browsedata.db").remove();
QFile(DATADIR + "data/default/profiles/default/browsedata.db").copy(homePath + "profiles/default/browsedata.db");
2011-03-02 16:57:41 +01:00
return dir.isReadable();
}