31 #include <qtextcodec.h>
33 #include <QtDBus/QtDBus>
35 #include <sys/types.h>
43 ViewMap KCrashBookmarkImporterImpl::parseCrashLog_noemit(
const QString & filename,
bool del )
45 static const int g_lineLimit = 16*1024;
50 if ( !f.open( QIODevice::ReadOnly ) )
53 QByteArray s( g_lineLimit, 0 );
55 QTextCodec * codec = QTextCodec::codecForName(
"UTF-8" );
60 while ( f.readLine( s.data(), g_lineLimit ) >=0 )
62 if ( s[s.length()-1] !=
'\n' )
64 kWarning() <<
"Crash bookmarks contain a line longer than " << g_lineLimit <<
". Skipping.";
67 QString t = codec->toUnicode( s.trimmed() );
68 QRegExp rx(
"(.*)\\((.*)\\):(.*)$" );
69 rx.setMinimal(
true );
70 if ( !rx.exactMatch( t ) )
72 if ( rx.cap(1) ==
"opened" )
73 views[rx.cap(2)] = rx.cap(3);
74 else if ( rx.cap(1) ==
"close" )
75 views.remove( rx.cap(2) );
90 const QStringList apps = QDBusConnection::sessionBus().interface()->registeredServiceNames();
91 foreach (
const QString &clientId, apps )
93 if ( !clientId.startsWith( QLatin1String(
"org.kde.konqueror") ) )
96 QDBusReply<QString> reply =
97 QDBusInterface(clientId,
"/KonqMain",
"org.kde.Konqueror").call(
"crashLogfile");
99 if ( !reply.isValid() )
106 d.setSorting( QDir::Time );
107 d.setFilter( QDir::Files );
108 d.setNameFilters(
QStringList(
"konqueror-crash-*.log" ) );
110 const QFileInfoList
list = d.entryInfoList();
111 QListIterator<QFileInfo> it( list );
116 while ( it.hasNext() && count < 20 )
119 QString path = it.next().absoluteFilePath();
120 bool stillAlive = activeLogs.contains( path );
125 while ( it.hasNext() )
127 QFile::remove( it.next().absoluteFilePath() );
138 for ( QStringList::ConstIterator it = crashFiles.begin(); it != crashFiles.end(); ++it )
140 const ViewMap views = parseCrashLog_noemit( *it, m_shouldDelete );
142 for ( ViewMap::ConstIterator vit = views.begin(); vit != views.end(); ++vit )
143 signature +=
'|'+vit.value();
144 if (signatureSet.contains(signature))
151 signatureSet.insert(signature);
153 int outerFolder = ( crashFiles.count() > 1 ) && (views.count() > 0);
156 for ( ViewMap::ConstIterator vit = views.begin(); vit != views.end(); ++vit )
173 m_shouldDelete = shouldDelete;
190 #include "kbookmarkimporter_crash.moc"