int main(int argc, char **argv) { const bool kdeRunning = kdeIsRunning(); KAboutData aboutData("kbookmarkmerger", I18N_NOOP("KBookmarkMerger"), "1.0", I18N_NOOP("Merges bookmarks installed by 3rd parties into the user's bookmarks"), KAboutData::License_BSD, I18N_NOOP("Copyright © 2005 Frerich Raabe")); aboutData.addAuthor("Frerich Raabe", I18N_NOOP("Original author"), "*****@*****.**"); KCmdLineArgs::init(argc, argv, &aboutData); KCmdLineArgs::addCmdLineOptions(cmdLineOptions); if(!kdeRunning) { KApplication::disableAutoDcopRegistration(); } KApplication app(false, false); app.disableSessionManagement(); KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); if(args->count() != 1) { kdError() << "No directory to scan for bookmarks specified." << endl; return 1; } KBookmarkManager *konqBookmarks = KBookmarkManager::userBookmarksManager(); QStringList mergedFiles; { KBookmarkGroup root = konqBookmarks->root(); for(KBookmark bm = root.first(); !bm.isNull(); bm = root.next(bm)) { if(bm.isGroup()) { continue; } QString mergedFrom = bm.metaDataItem("merged_from"); if(!mergedFrom.isNull()) { mergedFiles << mergedFrom; } } } bool didMergeBookmark = false; QString extraBookmarksDirName = QFile::decodeName(args->arg(0)); QDir extraBookmarksDir(extraBookmarksDirName, "*.xml"); if(!extraBookmarksDir.isReadable()) { kdError() << "Failed to read files in directory " << extraBookmarksDirName << endl; return 1; } for(unsigned int i = 0; i < extraBookmarksDir.count(); ++i) { const QString fileName = extraBookmarksDir[i]; if(mergedFiles.find(fileName) != mergedFiles.end()) { continue; } const QString absPath = extraBookmarksDir.filePath(fileName); KBookmarkManager *mgr = KBookmarkManager::managerForFile(absPath, false); KBookmarkGroup root = mgr->root(); for(KBookmark bm = root.first(); !bm.isNull(); bm = root.next(bm)) { if(bm.isGroup()) { continue; } bm.setMetaDataItem("merged_from", fileName); konqBookmarks->root().addBookmark(konqBookmarks, bm, false); didMergeBookmark = true; } } if(didMergeBookmark) { if(!konqBookmarks->save()) { kdError() << "Failed to write merged bookmarks." << endl; return 1; } if(kdeRunning) { konqBookmarks->notifyChanged(""); } } }