-rw-r--r-- | library/applnk.cpp | 83 |
1 files changed, 56 insertions, 27 deletions
diff --git a/library/applnk.cpp b/library/applnk.cpp index 2af6cf4..5185b5f 100644 --- a/library/applnk.cpp +++ b/library/applnk.cpp @@ -19,4 +19,6 @@ **********************************************************************/ +#define QTOPIA_INTERNAL_MIMEEXT + #include "applnk.h" @@ -49,5 +51,5 @@ static QString safeFileName(const QString& n) { QString safename=n; - safename.replace(QRegExp("[^0-9A-Za-z.]"),"_"); + safename.replace(QRegExp("[^0-9A-Za-z.]"),"_"); // Njaard says this is broken safename.replace(QRegExp("^[^A-Za-z]*"),""); if ( safename.isEmpty() ) @@ -56,4 +58,14 @@ static QString safeFileName(const QString& n) } +static bool prepareDirectories(const QString& lf) +{ + if ( !QFile::exists(lf) ) { + // May need to create directories + QFileInfo fi(lf); + if ( system(("mkdir -p "+fi.dirPath(TRUE))) ) + return FALSE; + } + return TRUE; +} class AppLnkPrivate @@ -284,5 +296,8 @@ QString AppLnk::file() const { if ( mFile.isNull() ) { - AppLnk* that = (AppLnk*)this; + AppLnk* that = (AppLnk*)this; // copy? + QString ext = MimeType(mType).extension(); + if ( !ext.isEmpty() ) + ext = "." + ext; if ( !mLinkFile.isEmpty() ) { that->mFile = @@ -292,14 +307,21 @@ QString AppLnk::file() const that->mFile = QString(getenv("HOME"))+"/Documents/"+mType+"/"+safeFileName(that->mName); - if ( QFile::exists(that->mFile) || QFile::exists(that->mFile+".desktop") ) { + if ( QFile::exists(that->mFile+ext) || QFile::exists(that->mFile+".desktop") ) { // a .desktop with the same name exists int n=1; + qWarning("AppLnk::file() n=1 %s", that->mFile.latin1() ); QString nn; - while (QFile::exists((nn=(that->mFile+"_"+QString::number(n)))) + while (QFile::exists((nn=(that->mFile+"_"+QString::number(n)))+ext) || QFile::exists(nn+".desktop")) n++; that->mFile = nn; + qWarning("AppLnl::file() now mFile is %s", that->mFile.latin1() ); } that->mLinkFile = that->mFile+".desktop"; + that->mFile += ext; } + prepareDirectories(that->mFile); + QFile f(that->mFile); + if ( !f.open(IO_WriteOnly) ) + that->mFile = QString::null; return that->mFile; } @@ -319,22 +341,28 @@ QString AppLnk::linkFile() const StorageInfo storage; const FileSystem *fs = storage.fileSystemOf( that->mFile ); -// qDebug("creating lnkFile for %s", mFile.latin1() ); -// if ( fs ) -// qDebug("fs is %s", fs->path().latin1() ); if ( fs && fs->isRemovable() ) { -// qDebug("isRemovable"); that->mLinkFile = fs->path(); } else that->mLinkFile = getenv( "HOME" ); that->mLinkFile += "/Documents/"+type()+"/"+safeFileName(that->mName); - if ( QFile::exists(that->mLinkFile+".desktop") ) { + if ( QFile::exists(that->mLinkFile+".desktop") ) { // ok the file exists lets check if we point to the same file int n=1; QString nn; - while (QFile::exists((nn=that->mLinkFile+"_"+QString::number(n))+".desktop")) + AppLnk lnk( that->mLinkFile+".desktop" ); + if(that->file() != lnk.file() ){ + qWarning("AppLnk::linkFile exists %s", that->mLinkFile.latin1() ); + while (QFile::exists((nn=that->mLinkFile+"_"+QString::number(n))+".desktop")){ n++; - that->mLinkFile = nn; + AppLnk lnk(nn ); // just to be sure + if(lnk.file() ==that->file() ){ + break; + } + } + that->mLinkFile = nn; + } } that->mLinkFile += ".desktop"; -// qDebug("file is %s", mLinkFile.latin1() ); + qWarning("AppLnk::linkFile is %s", that->mLinkFile.latin1() ); + storeLink(); } return that->mLinkFile; @@ -515,11 +543,5 @@ bool AppLnk::ensureLinkExists() const { QString lf = linkFile(); - if ( !QFile::exists(lf) ) { - // May need to create directories - QFileInfo fi(lf); - if ( system(("mkdir -p "+fi.dirPath(TRUE))) ) - return FALSE; - } - return TRUE; + return prepareDirectories(lf); } @@ -536,5 +558,11 @@ bool AppLnk::writeLink() const if ( !ensureLinkExists() ) return FALSE; - Config config( lf, Config::File ); + storeLink(); + return TRUE; +} + +void AppLnk::storeLink() const +{ + Config config( mLinkFile, Config::File ); config.setGroup("Desktop Entry"); config.writeEntry("Name",mName); @@ -552,7 +580,5 @@ bool AppLnk::writeLink() const QCopEnvelope e("QPE/System", "linkChanged(QString)"); - e << lf; - - return TRUE; + e << mLinkFile; } @@ -587,8 +613,11 @@ void AppLnk::removeFiles() { bool valid = isValid(); - if ( !valid || QFile::remove(linkFile()) ) { + if ( !valid || !linkFileKnown() || QFile::remove(linkFile()) ) { if ( QFile::remove(file()) ) { QCopEnvelope e("QPE/System", "linkChanged(QString)"); - e << linkFile(); + if ( linkFileKnown() ) + e << linkFile(); + else + e << file(); } else if ( valid ) { // restore link @@ -603,5 +632,5 @@ void AppLnk::removeFiles() void AppLnk::removeLinkFile() { - if ( isValid() && QFile::remove(linkFile()) ) { + if ( isValid() && linkFileKnown() && QFile::remove(linkFile()) ) { QCopEnvelope e("QPE/System", "linkChanged(QString)"); e << linkFile(); @@ -1084,5 +1113,5 @@ void DocLnk::invoke(const QStringList& args) const if ( app ) { QStringList a = args; - if ( QFile::exists( linkFile() ) ) + if ( linkFileKnown() && QFile::exists( linkFile() ) ) a.append(linkFile()); else |