summaryrefslogtreecommitdiff
path: root/library/applnk.cpp
Side-by-side diff
Diffstat (limited to 'library/applnk.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/applnk.cpp83
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