diff options
Diffstat (limited to 'konqueror/keditbookmarks/main.cpp')
-rw-r--r-- | konqueror/keditbookmarks/main.cpp | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/konqueror/keditbookmarks/main.cpp b/konqueror/keditbookmarks/main.cpp new file mode 100644 index 000000000..755a6f703 --- /dev/null +++ b/konqueror/keditbookmarks/main.cpp @@ -0,0 +1,199 @@ +// -*- indent-tabs-mode:nil -*- +// vim: set ts=4 sts=4 sw=4 et: +/* This file is part of the KDE project + Copyright (C) 2000 David Faure <faure@kde.org> + Copyright (C) 2002-2003 Alexander Kellett <lypanov@kde.org> + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License version 2 as published by the Free Software Foundation. + + 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; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include <config.h> + +#include "toplevel.h" +#include "importers.h" + +#include <dcopclient.h> +#include <dcopref.h> +#include <klocale.h> +#include <kdebug.h> +#include <kstandarddirs.h> + +#include <kcmdlineargs.h> +#include <kaboutdata.h> +#include <kuniqueapplication.h> + +#include <kmessagebox.h> +#include <kwin.h> + +#include <kbookmarkmanager.h> +#include <kbookmarkexporter.h> + +static KCmdLineOptions options[] = { + {"importmoz <filename>", I18N_NOOP("Import bookmarks from a file in Mozilla format"), 0}, + {"importns <filename>", I18N_NOOP("Import bookmarks from a file in Netscape (4.x and earlier) format"), 0}, + {"importie <filename>", I18N_NOOP("Import bookmarks from a file in Internet Explorer's Favorites format"), 0}, + {"importopera <filename>", I18N_NOOP("Import bookmarks from a file in Opera format"), 0}, + + {"exportmoz <filename>", I18N_NOOP("Export bookmarks to a file in Mozilla format"), 0}, + {"exportns <filename>", I18N_NOOP("Export bookmarks to a file in Netscape (4.x and earlier) format"), 0}, + {"exporthtml <filename>", I18N_NOOP("Export bookmarks to a file in a printable HTML format"), 0}, + {"exportie <filename>", I18N_NOOP("Export bookmarks to a file in Internet Explorer's Favorites format"), 0}, + {"exportopera <filename>", I18N_NOOP("Export bookmarks to a file in Opera format"), 0}, + + {"address <address>", I18N_NOOP("Open at the given position in the bookmarks file"), 0}, + {"customcaption <caption>", I18N_NOOP("Set the user readable caption for example \"Konsole\""), 0}, + {"nobrowser", I18N_NOOP("Hide all browser related functions"), 0}, + {"+[file]", I18N_NOOP("File to edit"), 0}, + KCmdLineLastOption +}; + +static void continueInWindow(QString _wname) { + QCString wname = _wname.latin1(); + int id = -1; + + QCStringList apps = kapp->dcopClient()->registeredApplications(); + for (QCStringList::Iterator it = apps.begin(); it != apps.end(); ++it) { + QCString &clientId = *it; + + if (qstrncmp(clientId, wname, wname.length()) != 0) + continue; + + DCOPRef client(clientId.data(), wname + "-mainwindow#1"); + DCOPReply result = client.call("getWinID()"); + + if (result.isValid()) { + id = (int)result; + break; + } + } + + KWin::activateWindow(id); +} + +// TODO - make this register() or something like that and move dialog into main +static int askUser(KApplication &app, QString filename, bool &readonly) { + QCString requestedName("keditbookmarks"); + + if (!filename.isEmpty()) + requestedName += "-" + filename.utf8(); + + if (app.dcopClient()->registerAs(requestedName, false) == requestedName) + return true; + + int ret = KMessageBox::warningYesNo(0, + i18n("Another instance of %1 is already running, do you really " + "want to open another instance or continue work in the same instance?\n" + "Please note that, unfortunately, duplicate views are read-only.").arg(kapp->caption()), + i18n("Warning"), + i18n("Run Another"), /* yes */ + i18n("Continue in Same") /* no */); + + if (ret == KMessageBox::No) { + continueInWindow(requestedName); + return false; + } else if (ret == KMessageBox::Yes) { + readonly = true; + } + + return true; +} + +#include <kactioncollection.h> + +extern "C" KDE_EXPORT int kdemain(int argc, char **argv) { + KLocale::setMainCatalogue("konqueror"); + KAboutData aboutData("keditbookmarks", I18N_NOOP("Bookmark Editor"), VERSION, + I18N_NOOP("Konqueror Bookmarks Editor"), + KAboutData::License_GPL, + I18N_NOOP("(c) 2000 - 2003, KDE developers") ); + aboutData.addAuthor("David Faure", I18N_NOOP("Initial author"), "faure@kde.org"); + aboutData.addAuthor("Alexander Kellett", I18N_NOOP("Author"), "lypanov@kde.org"); + + KCmdLineArgs::init(argc, argv, &aboutData); + KApplication::addCmdLineOptions(); + KCmdLineArgs::addCmdLineOptions(options); + + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + bool isGui = !(args->isSet("exportmoz") || args->isSet("exportns") || args->isSet("exporthtml") + || args->isSet("exportie") || args->isSet("exportopera") + || args->isSet("importmoz") || args->isSet("importns") + || args->isSet("importie") || args->isSet("importopera")); + + bool browser = args->isSet("browser"); + + KApplication::disableAutoDcopRegistration(); + KApplication app(isGui, isGui); + + bool gotArg = (args->count() == 1); + + QString filename = gotArg + ? QString::fromLatin1(args->arg(0)) + : locateLocal("data", QString::fromLatin1("konqueror/bookmarks.xml")); + + if (!isGui) { + CurrentMgr::self()->createManager(filename); + CurrentMgr::ExportType exportType = CurrentMgr::MozillaExport; // uumm.. can i just set it to -1 ? + int got = 0; + const char *arg, *arg2 = 0, *importType = 0; + if (arg = "exportmoz", args->isSet(arg)) { exportType = CurrentMgr::MozillaExport; arg2 = arg; got++; } + if (arg = "exportns", args->isSet(arg)) { exportType = CurrentMgr::NetscapeExport; arg2 = arg; got++; } + if (arg = "exporthtml", args->isSet(arg)) { exportType = CurrentMgr::HTMLExport; arg2 = arg; got++; } + if (arg = "exportie", args->isSet(arg)) { exportType = CurrentMgr::IEExport; arg2 = arg; got++; } + if (arg = "exportopera", args->isSet(arg)) { exportType = CurrentMgr::OperaExport; arg2 = arg; got++; } + if (arg = "importmoz", args->isSet(arg)) { importType = "Moz"; arg2 = arg; got++; } + if (arg = "importns", args->isSet(arg)) { importType = "NS"; arg2 = arg; got++; } + if (arg = "importie", args->isSet(arg)) { importType = "IE"; arg2 = arg; got++; } + if (arg = "importopera", args->isSet(arg)) { importType = "Opera"; arg2 = arg; got++; } + if (!importType && arg2) { + Q_ASSERT(arg2); + // TODO - maybe an xbel export??? + if (got > 1) // got == 0 isn't possible as !isGui is dependant on "export.*" + KCmdLineArgs::usage(I18N_NOOP("You may only specify a single --export option.")); + QString path = QString::fromLocal8Bit(args->getOption(arg2)); + CurrentMgr::self()->doExport(exportType, path); + } else if (importType) { + if (got > 1) // got == 0 isn't possible as !isGui is dependant on "import.*" + KCmdLineArgs::usage(I18N_NOOP("You may only specify a single --import option.")); + QString path = QString::fromLocal8Bit(args->getOption(arg2)); + ImportCommand *importer = ImportCommand::importerFactory(importType); + importer->import(path, true); + importer->execute(); + CurrentMgr::self()->managerSave(); + CurrentMgr::self()->notifyManagers(); + } + return 0; // error flag on exit?, 1? + } + + QString address = args->isSet("address") + ? QString::fromLocal8Bit(args->getOption("address")) + : QString("/0"); + + QString caption = args->isSet("customcaption") + ? QString::fromLocal8Bit(args->getOption("customcaption")) + : QString::null; + + args->clear(); + + bool readonly = false; // passed by ref + + if (askUser(app, (gotArg ? filename : QString::null), readonly)) { + KEBApp *toplevel = new KEBApp(filename, readonly, address, browser, caption); + toplevel->show(); + app.setMainWidget(toplevel); + return app.exec(); + } + + return 0; +} |