kio Library API Documentation

kbookmarkimporter_ie.cc

00001 // -*- c-basic-offset:4; indent-tabs-mode:nil -*- 00002 // vim: set ts=4 sts=4 sw=4 et: 00003 /* This file is part of the KDE libraries 00004 Copyright (C) 2002-2003 Alexander Kellett <lypanov@kde.org> 00005 00006 This library is free software; you can redistribute it and/or 00007 modify it under the terms of the GNU Library General Public 00008 License version 2 as published by the Free Software Foundation. 00009 00010 This library is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 Library General Public License for more details. 00014 00015 You should have received a copy of the GNU Library General Public License 00016 along with this library; see the file COPYING.LIB. If not, write to 00017 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00018 Boston, MA 02111-1307, USA. 00019 */ 00020 00021 #include <kfiledialog.h> 00022 #include <kstringhandler.h> 00023 #include <klocale.h> 00024 #include <kdebug.h> 00025 #include <qtextcodec.h> 00026 00027 #include <sys/types.h> 00028 #include <stddef.h> 00029 #include <dirent.h> 00030 #include <sys/stat.h> 00031 00032 #include "kbookmarkimporter.h" 00033 #include "kbookmarkimporter_ie.h" 00034 00035 /* antlarr: KDE 4: Make them const QString & */ 00036 void KIEBookmarkImporter::parseIEBookmarks_url_file( QString filename, QString name ) { 00037 static const int g_lineLimit = 16*1024; 00038 00039 QFile f(filename); 00040 00041 if(f.open(IO_ReadOnly)) { 00042 00043 QCString s(g_lineLimit); 00044 00045 while(f.readLine(s.data(), g_lineLimit)>=0) { 00046 if ( s[s.length()-1] != '\n' ) // Gosh, this line is longer than g_lineLimit. Skipping. 00047 { 00048 kdWarning() << "IE bookmarks contain a line longer than " << g_lineLimit << ". Skipping." << endl; 00049 continue; 00050 } 00051 QCString t = s.stripWhiteSpace(); 00052 QRegExp rx( "URL=(.*)" ); 00053 if (rx.exactMatch(t)) { 00054 emit newBookmark( name, rx.cap(1).latin1(), QString("") ); 00055 } 00056 } 00057 00058 f.close(); 00059 } 00060 } 00061 00062 /* antlarr: KDE 4: Make them const QString & */ 00063 void KIEBookmarkImporter::parseIEBookmarks_dir( QString dirname, QString foldername ) 00064 { 00065 00066 QDir dir(dirname); 00067 dir.setFilter( QDir::Files | QDir::Dirs ); 00068 dir.setSorting( QDir::Name | QDir::DirsFirst ); 00069 dir.setNameFilter("*.url"); // AK - possibly add ";index.ini" ? 00070 dir.setMatchAllDirs(true); 00071 00072 const QFileInfoList *list = dir.entryInfoList(); 00073 if (!list) return; 00074 00075 if (dirname != m_fileName) 00076 emit newFolder( foldername, false, "" ); 00077 00078 QFileInfoListIterator it( *list ); 00079 QFileInfo *fi; 00080 00081 while ( (fi = it.current()) != 0 ) { 00082 ++it; 00083 00084 if (fi->fileName() == "." || fi->fileName() == "..") continue; 00085 00086 if (fi->isDir()) { 00087 parseIEBookmarks_dir(fi->absFilePath(), fi->fileName()); 00088 00089 } else if (fi->isFile()) { 00090 if (fi->fileName().endsWith(".url")) { 00091 QString name = fi->fileName(); 00092 name.truncate(name.length() - 4); // .url 00093 parseIEBookmarks_url_file(fi->absFilePath(), name); 00094 } 00095 // AK - add index.ini 00096 } 00097 } 00098 00099 if (dirname != m_fileName) 00100 emit endFolder(); 00101 } 00102 00103 00104 void KIEBookmarkImporter::parseIEBookmarks( ) 00105 { 00106 parseIEBookmarks_dir( m_fileName ); 00107 } 00108 00109 QString KIEBookmarkImporter::IEBookmarksDir() 00110 { 00111 static KIEBookmarkImporterImpl* p = 0; 00112 if (!p) 00113 p = new KIEBookmarkImporterImpl; 00114 return p->findDefaultLocation(); 00115 } 00116 00117 void KIEBookmarkImporterImpl::parse() { 00118 KIEBookmarkImporter importer(m_fileName); 00119 setupSignalForwards(&importer, this); 00120 importer.parseIEBookmarks(); 00121 } 00122 00123 QString KIEBookmarkImporterImpl::findDefaultLocation(bool) const 00124 { 00125 // notify user that they must give a new dir such 00126 // as "Favourites" as otherwise it'll just place 00127 // lots of .url files in the given dir and gui 00128 // stuff in the exporter is ugly so that exclues 00129 // the possibility of just writing to Favourites 00130 // and checking if overwriting... 00131 return KFileDialog::getExistingDirectory(); 00132 } 00133 00135 00136 class IEExporter : private KBookmarkGroupTraverser { 00137 public: 00138 IEExporter( const QString & ); 00139 void write( const KBookmarkGroup &grp ) { traverse(grp); }; 00140 private: 00141 virtual void visit( const KBookmark & ); 00142 virtual void visitEnter( const KBookmarkGroup & ); 00143 virtual void visitLeave( const KBookmarkGroup & ); 00144 private: 00145 QDir m_currentDir; 00146 }; 00147 00148 static QString ieStyleQuote( const QString &str ) { 00149 QString s(str); 00150 s.replace(QRegExp("[/\\:*?\"<>|]"), "_"); 00151 return s; 00152 } 00153 00154 IEExporter::IEExporter( const QString & dname ) { 00155 m_currentDir.setPath( dname ); 00156 } 00157 00158 void IEExporter::visit( const KBookmark &bk ) { 00159 QString fname = m_currentDir.path() + "/" + ieStyleQuote( bk.fullText() ) + ".url"; 00160 // kdDebug() << "visit(" << bk.text() << "), fname == " << fname << endl; 00161 QFile file( fname ); 00162 file.open( IO_WriteOnly ); 00163 QTextStream ts( &file ); 00164 ts << "[InternetShortcut]\r\n"; 00165 ts << "URL=" << bk.url().url().utf8() << "\r\n"; 00166 } 00167 00168 void IEExporter::visitEnter( const KBookmarkGroup &grp ) { 00169 QString dname = m_currentDir.path() + "/" + ieStyleQuote( grp.fullText() ); 00170 // kdDebug() << "visitEnter(" << grp.text() << "), dname == " << dname << endl; 00171 m_currentDir.mkdir( dname ); 00172 m_currentDir.cd( dname ); 00173 } 00174 00175 void IEExporter::visitLeave( const KBookmarkGroup & ) { 00176 // kdDebug() << "visitLeave()" << endl; 00177 m_currentDir.cdUp(); 00178 } 00179 00180 void KIEBookmarkExporterImpl::write(KBookmarkGroup parent) { 00181 IEExporter exporter( m_fileName ); 00182 exporter.write( parent ); 00183 } 00184 00185 #include "kbookmarkimporter_ie.moc"
KDE Logo
This file is part of the documentation for kio Library Version 3.2.3.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sun Oct 10 18:55:25 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003