Bug 123200 - ability to load .kst files from network
Summary: ability to load .kst files from network
Status: RESOLVED FIXED
Alias: None
Product: kst
Classification: Applications
Component: general (show other bugs)
Version: 1.x
Platform: Fedora RPMs Linux
: NOR wishlist
Target Milestone: ---
Assignee: kst
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-03-07 00:24 UTC by Matthew Truch
Modified: 2006-04-11 02:49 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Matthew Truch 2006-03-07 00:24:06 UTC
Version:           1.2.0 (using KDE KDE 3.5.0)
Installed from:    Fedora RPMs
OS:                Linux

Kst can already load data in from the network, ie over the web.  However, this is not implimented for .kst files, which would be useful.

Example:
$ kst http://kst.kde.org/demos/demo.kst
would work.
Comment 1 George Staikos 2006-03-07 03:16:07 UTC
I agree.  We talked about this years ago.  One problem to address: How to deal 
with datafile references.
Comment 2 George Staikos 2006-04-11 02:49:02 UTC
SVN commit 528444 by staikos:

Make Kst files KIO enabled.  Data references must be URLs else it will try local
files.
FEATURE: 123200


 M  +10 -6     kst.cpp  
 M  +50 -9     kstdoc.cpp  


--- trunk/extragear/graphics/kst/src/libkstapp/kst.cpp #528443:528444
@@ -1020,7 +1020,12 @@
   KURL url;
   bool rc = false;
 
-  url.setPath(in_filename);
+  if (QFile::exists(in_filename) && QFileInfo(in_filename).isRelative()) {
+    url.setPath(in_filename);
+  } else {
+    url = KURL::fromPathOrURL(in_filename);
+  }
+
   slotUpdateStatusMsg(i18n("Opening file..."));
 
   if (doc->openDocument(url, o_file, o_n, o_f, o_s, o_ave)) {
@@ -1162,14 +1167,13 @@
   slotUpdateStatusMsg(i18n("Opening file..."));
 
   if (doc->saveModified(false)) {
-    QString fileToOpen = KFileDialog::getOpenFileName("::<kstfiledir>",
-        i18n("*.kst|Kst Plot File (*.kst)\n*|All Files"), this, i18n("Open File"));
-    if (!fileToOpen.isEmpty()) {
+    KURL url = KFileDialog::getOpenURL("::<kstfiledir>", i18n("*.kst|Kst Plot File (*.kst)\n*|All Files"), this, i18n("Open File"));
+    if (!url.isEmpty()) {
       doc->deleteContents();
       doc->setModified(false);
-      if (doc->openDocument(fileToOpen)) {
+      if (doc->openDocument(url)) {
         setCaption(doc->title());
-        addRecentFile(fileToOpen);
+        addRecentFile(url);
       }
     }
   }
--- trunk/extragear/graphics/kst/src/libkstapp/kstdoc.cpp #528443:528444
@@ -36,6 +36,7 @@
 #include "ksdebug.h"
 #include <kdeversion.h>
 #include <kfiledialog.h>
+#include <kio/netaccess.h>
 #include <kmessagebox.h>
 #include <kmdimainfrm.h>
 #include <kprogress.h>
@@ -176,11 +177,36 @@
 bool KstDoc::openDocument(const KURL& url, const QString& o_file,
                           int o_n, int o_f, int o_s, bool o_ave) {
   static bool opening = false;
+  bool cleanupFile = false;
 
   if (opening) {
     return false;
   }
 
+  QString tmpFile;
+  if (url.isLocalFile() || url.protocol().isEmpty()) {
+    tmpFile = url.path();
+  } else {
+#if KDE_VERSION >= KDE_MAKE_VERSION(3,3,0)
+    if (!KIO::NetAccess::exists(url, true, KstApp::inst())) {
+#else
+    if (!KIO::NetAccess::exists(url, true)) {
+#endif
+      KMessageBox::sorry(KstApp::inst(), i18n("%1: There is no file with that name to open.").arg(url.prettyURL()));
+      return false;
+    }
+
+#if KDE_VERSION >= KDE_MAKE_VERSION(3,3,0)
+    if (!KIO::NetAccess::download(url, tmpFile, KstApp::inst())) {
+#else
+    if (!KIO::NetAccess::download(url, tmpFile)) {
+#endif
+      KMessageBox::sorry(KstApp::inst(), i18n("%1: There is no file with that name to open.").arg(url.prettyURL()));
+      return false;
+    }
+    cleanupFile = true;
+  }
+
   QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
   opening = true;
 
@@ -188,9 +214,9 @@
   KstApp::inst()->setPaused(true);
   _updating = true; // block update thread from sending events until we're done
 
-  QFile f(url.path());
+  QFile f(tmpFile);
   if (!f.exists()) {
-    KMessageBox::sorry(KstApp::inst(), i18n("%1: There is no file with that name to open.").arg(url.path()));
+    KMessageBox::sorry(KstApp::inst(), i18n("%1: There is no file with that name to open.").arg(url.prettyURL()));
     opening = false;
     _updating = false;
     KstApp::inst()->setPaused(false);
@@ -199,29 +225,35 @@
   }
 
   _title = url.fileName(false);
-  _absFilePath = url.path();
-  _lastFilePath = url.path();
+  _absFilePath = url.url();
+  _lastFilePath = url.url();
   if (_title.isEmpty()) {
     _title = _absFilePath;
   }
   QDomDocument doc(_title);
 
   if (!f.open(IO_ReadOnly)) {
-    KMessageBox::sorry(KstApp::inst(), i18n("%1: File exists, but kst could not open it.").arg(url.path()));
+    KMessageBox::sorry(KstApp::inst(), i18n("%1: File exists, but kst could not open it.").arg(url.prettyURL()));
     opening = false;
     _updating = false;
     KstApp::inst()->setPaused(false);
     QApplication::restoreOverrideCursor();
+    if (cleanupFile) {
+      KIO::NetAccess::removeTempFile(tmpFile);
+    }
     return false;
   }
 
   if (!doc.setContent(&f)) {
-    KMessageBox::sorry(KstApp::inst(), i18n("%1: Not a valid kst plot specification file.").arg(url.path()));
+    KMessageBox::sorry(KstApp::inst(), i18n("%1: Not a valid kst plot specification file.").arg(url.prettyURL()));
     f.close();
     opening = false;
     _updating = false;
     KstApp::inst()->setPaused(false);
     QApplication::restoreOverrideCursor();
+    if (cleanupFile) {
+      KIO::NetAccess::removeTempFile(tmpFile);
+    }
     return false;
   }
 
@@ -238,24 +270,30 @@
   QString readingDocument = i18n("Reading Kst file");
 
   if (docElem.tagName() != "kstdoc") {
-    QString err = i18n("Error opening file %1.  Does not appear to be a Kst file.").arg(url.path());
+    QString err = i18n("Error opening file %1.  Does not appear to be a Kst file.").arg(url.prettyURL());
     KstDebug::self()->log(err, KstDebug::Error);
     KMessageBox::sorry(KstApp::inst(), err);
     opening = false;
     _updating = false;
     KstApp::inst()->setPaused(false);
     QApplication::restoreOverrideCursor();
+    if (cleanupFile) {
+      KIO::NetAccess::removeTempFile(tmpFile);
+    }
     return false;
   }
 
   if (docElem.attribute("version") != "1.2" && !docElem.attribute("version").isEmpty()) {
-    QString err = i18n("Error opening file %2.  Version %1 is too new.  Update Kst or fix the Kst file.").arg(docElem.attribute("version")).arg(url.path());
+    QString err = i18n("Error opening file %2.  Version %1 is too new.  Update Kst or fix the Kst file.").arg(docElem.attribute("version")).arg(url.prettyURL());
     KstDebug::self()->log(err, KstDebug::Error);
     KMessageBox::sorry(KstApp::inst(), err);
     opening = false;
     _updating = false;
     KstApp::inst()->setPaused(false);
     QApplication::restoreOverrideCursor();
+    if (cleanupFile) {
+      KIO::NetAccess::removeTempFile(tmpFile);
+    }
     return false;
   }
 
@@ -420,7 +458,7 @@
           app->closeWindow(toDelete);
         }
       } else {
-        KstDebug::self()->log(i18n("Unsupported element '%1' in file %2.").arg(e.tagName()).arg(url.path()), KstDebug::Warning);
+        KstDebug::self()->log(i18n("Unsupported element '%1' in file %2.").arg(e.tagName()).arg(url.prettyURL()), KstDebug::Warning);
       }
     }
     handled++;
@@ -543,6 +581,9 @@
   KstApp::inst()->setPaused(false);
   QApplication::restoreOverrideCursor();
   
+  if (cleanupFile) {
+    KIO::NetAccess::removeTempFile(tmpFile);
+  }
   return true;
 }