00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
#include <krecentdocument.h>
00029
#include <ksimpleconfig.h>
00030
#include <kstandarddirs.h>
00031
#include <kapplication.h>
00032
#include <kurl.h>
00033
#include <kdebug.h>
00034
#include <kmimetype.h>
00035
00036
#include <qdir.h>
00037
#include <qfileinfo.h>
00038
#include <qtextstream.h>
00039
#include <qstringlist.h>
00040
#include <qregexp.h>
00041
00042
#include <sys/types.h>
00043
#include <utime.h>
00044
00045 QString KRecentDocument::recentDocumentDirectory()
00046 {
00047
00048
return locateLocal(
"data", QString::fromLatin1(
"RecentDocuments/"));
00049 }
00050
00051 QStringList KRecentDocument::recentDocuments()
00052 {
00053
QDir d(
recentDocumentDirectory(),
"*.desktop", QDir::Time,
00054 QDir::Files | QDir::Readable | QDir::Hidden);
00055
00056
if (!d.exists())
00057 d.mkdir(
recentDocumentDirectory());
00058
00059
QStringList list = d.entryList();
00060
QStringList fullList;
00061
00062
for (QStringList::ConstIterator it = list.begin(); it != list.end(); ++it) {
00063 fullList.append( d.absFilePath( *it ) );
00064 }
00065
00066
return fullList;
00067 }
00068
00069 void KRecentDocument::add(
const KURL& url)
00070 {
00071
KRecentDocument::add(url, qApp->argv()[0]);
00072 }
00073
00074 void KRecentDocument::add(
const KURL& url,
const QString& desktopEntryName)
00075 {
00076
QString openStr = url.
url();
00077 openStr.replace(
QRegExp(
"\\$"),
"$$" );
00078
00079
kdDebug(250) <<
"KRecentDocument::add for " << openStr <<
endl;
00080
KConfig *config =
KGlobal::config();
00081
QString oldGrp = config->
group();
00082 config->
setGroup(QString::fromLatin1(
"RecentDocuments"));
00083
bool useRecent = config->
readBoolEntry(QString::fromLatin1(
"UseRecent"),
true);
00084
int maxEntries = config->
readNumEntry(QString::fromLatin1(
"MaxEntries"), 10);
00085
00086 config->
setGroup(oldGrp);
00087
if(!useRecent)
00088
return;
00089
00090
QString path =
recentDocumentDirectory();
00091
00092
QString dStr = path + url.
fileName();
00093
00094
QString ddesktop = dStr + QString::fromLatin1(
".desktop");
00095
00096
int i=1;
00097
00098
while(QFile::exists(ddesktop)){
00099
00100
KSimpleConfig tmp(ddesktop);
00101 tmp.
setDesktopGroup();
00102
if(tmp.
readEntry(QString::fromLatin1(
"X-KDE-LastOpenedWith"))
00103 == desktopEntryName)
00104 {
00105 utime(QFile::encodeName(ddesktop), NULL);
00106
return;
00107 }
00108
00109 ++i;
00110
if ( i > maxEntries )
00111
break;
00112 ddesktop = dStr + QString::fromLatin1(
"[%1].desktop").arg(i);
00113 }
00114
00115
QDir dir(path);
00116
00117
QStringList list = dir.entryList(QDir::Files | QDir::Hidden, QDir::Time | QDir::Reversed);
00118 i = list.count();
00119
if(i > maxEntries-1){
00120 QStringList::Iterator it;
00121 it = list.begin();
00122
while(i > maxEntries-1){
00123 QFile::remove(dir.absPath() + QString::fromLatin1(
"/") + (*it));
00124 --i, ++it;
00125 }
00126 }
00127
00128
00129
KSimpleConfig conf(ddesktop);
00130 conf.
setDesktopGroup();
00131 conf.
writeEntry( QString::fromLatin1(
"Type"), QString::fromLatin1(
"Link") );
00132 conf.
writePathEntry( QString::fromLatin1(
"URL"), openStr );
00133
00134 conf.
writeEntry( QString::fromLatin1(
"X-KDE-LastOpenedWith"), desktopEntryName );
00135 conf.
writeEntry( QString::fromLatin1(
"Name"), url.
fileName() );
00136 conf.
writeEntry( QString::fromLatin1(
"Icon"), KMimeType::iconForURL( url ) );
00137 }
00138
00139 void KRecentDocument::add(
const QString &openStr,
bool isUrl)
00140 {
00141
if( isUrl ) {
00142
add(
KURL( openStr ) );
00143 }
else {
00144
KURL url;
00145 url.
setPath( openStr );
00146
add( url );
00147 }
00148 }
00149
00150 void KRecentDocument::clear()
00151 {
00152
QStringList list =
recentDocuments();
00153
QDir dir;
00154
for(QStringList::Iterator it = list.begin(); it != list.end() ; ++it)
00155 dir.remove(*it);
00156 }
00157
00158 int KRecentDocument::maximumItems()
00159 {
00160
KConfig *config =
KGlobal::config();
00161
KConfigGroupSaver sa(config, QString::fromLatin1(
"RecentDocuments"));
00162
return config->
readNumEntry(QString::fromLatin1(
"MaxEntries"), 10);
00163 }
00164
00165