gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r7558 - gnunet-qt/src/plugins/fs


From: gnunet
Subject: [GNUnet-SVN] r7558 - gnunet-qt/src/plugins/fs
Date: Thu, 14 Aug 2008 13:59:06 -0600 (MDT)

Author: durner
Date: 2008-08-14 13:59:06 -0600 (Thu, 14 Aug 2008)
New Revision: 7558

Modified:
   gnunet-qt/src/plugins/fs/ecrsuri.cc
   gnunet-qt/src/plugins/fs/ecrsuri.h
   gnunet-qt/src/plugins/fs/fs.cc
   gnunet-qt/src/plugins/fs/fs.h
   gnunet-qt/src/plugins/fs/fs.ui
   gnunet-qt/src/plugins/fs/uploadController.cc
   gnunet-qt/src/plugins/fs/uploadController.h
Log:
"Copy URI" menu for uploads

Modified: gnunet-qt/src/plugins/fs/ecrsuri.cc
===================================================================
--- gnunet-qt/src/plugins/fs/ecrsuri.cc 2008-08-14 19:27:06 UTC (rev 7557)
+++ gnunet-qt/src/plugins/fs/ecrsuri.cc 2008-08-14 19:59:06 UTC (rev 7558)
@@ -68,7 +68,7 @@
   if (ecrsUri)
     GNUNET_ECRS_uri_destroy(ecrsUri);
 
-  if (uri)
+  if (src.ecrsUri)
     ecrsUri = GNUNET_ECRS_uri_duplicate(src.ecrsUri);
   else
     ecrsUri = NULL;

Modified: gnunet-qt/src/plugins/fs/ecrsuri.h
===================================================================
--- gnunet-qt/src/plugins/fs/ecrsuri.h  2008-08-14 19:27:06 UTC (rev 7557)
+++ gnunet-qt/src/plugins/fs/ecrsuri.h  2008-08-14 19:59:06 UTC (rev 7558)
@@ -38,13 +38,13 @@
   GFSEcrsUri(const GNUNET_ECRS_URI *uri);
   GFSEcrsUri(const GFSEcrsUri &src);
   ~GFSEcrsUri();
-  
+
   const GNUNET_ECRS_URI *uri();
   QString toString();
   QString toDisplayString(struct GNUNET_GC_Configuration *cfg,
       struct GNUNET_GE_Context *ectx);
   QString serialized();
-  
+
   bool operator==(const GFSEcrsUri &rvalue);
   GFSEcrsUri &operator=(const GFSEcrsUri &src);
   GFSEcrsUri &operator=(const GNUNET_ECRS_URI *src);
@@ -53,6 +53,8 @@
   GNUNET_ECRS_URI *ecrsUri;
 };
 
+Q_DECLARE_METATYPE(GFSEcrsUri)
+
 #endif /*ECRSURI_H_*/
 
 /* end of ecrsuri.h */

Modified: gnunet-qt/src/plugins/fs/fs.cc
===================================================================
--- gnunet-qt/src/plugins/fs/fs.cc      2008-08-14 19:27:06 UTC (rev 7557)
+++ gnunet-qt/src/plugins/fs/fs.cc      2008-08-14 19:59:06 UTC (rev 7558)
@@ -32,6 +32,7 @@
 #include <QDir>
 #include <QUrl>
 #include <QDesktopServices>
+#include <QClipboard>
 #include <GNUnet/gnunet_fsui_lib.h>
 #if defined(Q_WS_WIN)
   #include <windows.h>
@@ -94,20 +95,24 @@
       break;
     case GNUNET_FSUI_upload_started:
       return uploadCntrl->started((QPersistentModelIndex *) 
event->data.UploadStarted.uc.pcctx,
-        event->data.UploadStarted.filename, event->data.UploadStarted.total, 
0);
+        event);
     case GNUNET_FSUI_upload_resumed:
-      return uploadCntrl->started((QPersistentModelIndex *) 
event->data.UploadResumed.uc.pcctx,
-        event->data.UploadResumed.filename, event->data.UploadResumed.total,
-        event->data.UploadResumed.completed);
+      return uploadCntrl->resumed((QPersistentModelIndex *) 
event->data.UploadStarted.uc.pcctx,
+        event);
     case GNUNET_FSUI_upload_progress:
       uploadCntrl->progress((QPersistentModelIndex *) 
event->data.UploadProgress.uc.cctx,
         event->data.UploadProgress.completed, 
event->data.UploadProgress.total);
+      uploadCntrl->state((QPersistentModelIndex *) 
event->data.UploadProgress.uc.cctx,
+          event->type);
       break;
+    case GNUNET_FSUI_upload_completed:
+      uploadCntrl->complete((QPersistentModelIndex *) 
event->data.UploadStopped.uc.cctx,
+          event->data.UploadCompleted.uri);
+      break;
     case GNUNET_FSUI_upload_error:
       GNUNET_GE_LOG(errorContext, (GNUNET_GE_KIND) (GNUNET_GE_ERROR | 
GNUNET_GE_USER | GNUNET_GE_IMMEDIATE),
         event->data.UploadError.message);
     case GNUNET_FSUI_upload_stopped:
-    case GNUNET_FSUI_upload_completed:
     case GNUNET_FSUI_upload_aborted:
     case GNUNET_FSUI_upload_suspended:
       uploadCntrl->state((QPersistentModelIndex *) 
event->data.UploadStopped.uc.cctx,
@@ -156,6 +161,7 @@
   setupUi(this);
 
   qRegisterMetaType<GFSEcrsUri>("GFSEcrsUri&");
+  qRegisterMetaType<GFSEcrsUri>("GFSEcrsUri");
   qRegisterMetaType<GItemModel *>("GItemModel*");
   qRegisterMetaType<QModelIndex>("QModelIndex");
   qRegisterMetaType<Qt::Orientation>("Qt::Orientation");
@@ -186,7 +192,9 @@
   searchItemDelegate = new GSearchItemDelegate();
 
   treeDownloads->addAction(actionOpen_download);
+  treeUploads->addAction(actionCopy_URI);
   connect(actionOpen_download, SIGNAL(triggered()), this, 
SLOT(openDownloadClicked()));
+  connect(actionCopy_URI, SIGNAL(triggered()), this, 
SLOT(copyUploadURIClicked()));
 
   tabResults->removeTab(0); // created by Qt Designer
   GFSSearch *view = new GFSSearch(this, tabResults);
@@ -295,6 +303,35 @@
   }
 }
 
+void GFSPlugin::copyUploadURIClicked()
+{
+  QModelIndexList sel;
+  QModelIndexList::iterator it;
+  QString strUris;
+
+  sel = treeUploads->selectionModel()->selectedIndexes();
+  for (it = sel.begin(); it != sel.end(); it++)
+  {
+    QModelIndex idx = *it;
+
+    if (idx.column() == GFSUploadController::COL_URI)
+    {
+      GFSEcrsUri uri;
+
+      uri = uploadCntrl->model()->data(idx).value<GFSEcrsUri>();
+      if (strUris != "")
+#if defined(Q_WS_WIN)
+        strUris += "\r\n";
+#else
+        strUris += "\n";
+#endif
+      strUris += uri.serialized();
+    }
+  }
+
+  QApplication::clipboard()->setText(strUris);
+}
+
 void GFSPlugin::searchClicked()
 {
   QString strSearch, strNS;
@@ -356,12 +393,12 @@
   return downloadCntrl;
 }
 
-QAbstractItemView *GFSPlugin::searchSummaryView()
+QTreeView *GFSPlugin::searchSummaryView()
 {
   return treeSearches;
 }
 
-QAbstractItemView *GFSPlugin::uploadView()
+QTreeView *GFSPlugin::uploadView()
 {
   return treeUploads;
 }

Modified: gnunet-qt/src/plugins/fs/fs.h
===================================================================
--- gnunet-qt/src/plugins/fs/fs.h       2008-08-14 19:27:06 UTC (rev 7557)
+++ gnunet-qt/src/plugins/fs/fs.h       2008-08-14 19:59:06 UTC (rev 7558)
@@ -58,9 +58,9 @@
   class GFSSearchController *searchController();
   class GFSUploadController *uploadController();
   class GFSDownloadController *downloadController();
-  QAbstractItemView *uploadView();
+  QTreeView *uploadView();
   QTreeView *downloadView();
-  QAbstractItemView *searchSummaryView();
+  QTreeView *searchSummaryView();
 
   struct GNUNET_GC_Configuration *config();
   struct GNUNET_GE_Context *errorContext();
@@ -97,6 +97,7 @@
   void cancelDLClicked();
   void clearULClicked();
   void openDownloadClicked();
+  void copyUploadURIClicked();
 };
 
 #endif /*FS_H_*/

Modified: gnunet-qt/src/plugins/fs/fs.ui
===================================================================
--- gnunet-qt/src/plugins/fs/fs.ui      2008-08-14 19:27:06 UTC (rev 7557)
+++ gnunet-qt/src/plugins/fs/fs.ui      2008-08-14 19:59:06 UTC (rev 7558)
@@ -1,7 +1,4 @@
 <ui version="4.0" >
- <author></author>
- <comment></comment>
- <exportmacro></exportmacro>
  <class>FSWnd</class>
  <widget class="QWidget" name="FSWnd" >
   <property name="geometry" >
@@ -35,7 +32,7 @@
        <string>Status</string>
       </attribute>
       <attribute name="icon" >
-       <iconset resource="..\..\..\pixmaps\pixmaps.qrc" 
>:/pixmaps/info.png</iconset>
+       <iconset resource="../../../pixmaps/pixmaps.qrc" 
>:/pixmaps/info.png</iconset>
       </attribute>
       <layout class="QVBoxLayout" >
        <property name="margin" >
@@ -201,6 +198,9 @@
             </property>
             <item>
              <widget class="QTreeView" name="treeUploads" >
+              <property name="contextMenuPolicy" >
+               <enum>Qt::ActionsContextMenu</enum>
+              </property>
               <property name="alternatingRowColors" >
                <bool>true</bool>
               </property>
@@ -266,7 +266,7 @@
        <string>Search and download</string>
       </attribute>
       <attribute name="icon" >
-       <iconset resource="..\..\..\pixmaps\pixmaps.qrc" 
>:/pixmaps/download_small.png</iconset>
+       <iconset resource="../../../pixmaps/pixmaps.qrc" 
>:/pixmaps/download_small.png</iconset>
       </attribute>
       <layout class="QVBoxLayout" >
        <property name="margin" >
@@ -468,7 +468,7 @@
        <string>Publication</string>
       </attribute>
       <attribute name="icon" >
-       <iconset resource="..\..\..\pixmaps\pixmaps.qrc" 
>:/pixmaps/upload_small.png</iconset>
+       <iconset resource="../../../pixmaps/pixmaps.qrc" 
>:/pixmaps/upload_small.png</iconset>
       </attribute>
       <layout class="QVBoxLayout" >
        <property name="margin" >
@@ -820,8 +820,12 @@
     <string>Open file</string>
    </property>
   </action>
+  <action name="actionCopy_URI" >
+   <property name="text" >
+    <string>Copy URI</string>
+   </property>
+  </action>
  </widget>
- <pixmapfunction></pixmapfunction>
  <resources>
   <include location="../../../pixmaps/pixmaps.qrc" />
  </resources>

Modified: gnunet-qt/src/plugins/fs/uploadController.cc
===================================================================
--- gnunet-qt/src/plugins/fs/uploadController.cc        2008-08-14 19:27:06 UTC 
(rev 7557)
+++ gnunet-qt/src/plugins/fs/uploadController.cc        2008-08-14 19:59:06 UTC 
(rev 7558)
@@ -37,14 +37,14 @@
                      void *list)
 {
   ((QStringList *) list)->append(QString::fromUtf8(data));
-  
+
   return GNUNET_OK;
 }
 
 static int meta_data_get_by_type(EXTRACTOR_KeywordType type, const char *data, 
void *list)
 {
   ((GFSMetaData *) list)->insert(type, data);
-  
+
   return GNUNET_OK;
 }
 
@@ -52,14 +52,16 @@
 {
   this->fs = fs;
   extractors = NULL;
-  
-  uploadModel.setColumnCount(3);
-  uploadModel.setHeaderData(0, Qt::Horizontal, tr("Filename"), 
Qt::DisplayRole);
-  uploadModel.setHeaderData(1, Qt::Horizontal, tr("Progress"), 
Qt::DisplayRole);
-  uploadModel.setHeaderData(2, Qt::Horizontal, tr("Status"), Qt::DisplayRole);
-  
+
+  uploadModel.setColumnCount(COL_COUNT);
+  uploadModel.setHeaderData(COL_FILENAME, Qt::Horizontal, tr("Filename"), 
Qt::DisplayRole);
+  uploadModel.setHeaderData(COL_PROGRESS, Qt::Horizontal, tr("Progress"), 
Qt::DisplayRole);
+  uploadModel.setHeaderData(COL_STATUS, Qt::Horizontal, tr("Status"), 
Qt::DisplayRole);
+  uploadModel.setHeaderData(COL_URI, Qt::Horizontal, tr("URI"), 
Qt::DisplayRole);
+
   fs->uploadView()->setModel(uploadModel.abstractItemModel());
   fs->uploadView()->setItemDelegate(&delegate);
+  fs->uploadView()->hideColumn(COL_URI);
 }
 
 GFSUploadController::~GFSUploadController()
@@ -73,7 +75,7 @@
 {
   QModelIndex item, parent;
   double progress;
-  
+
   // compute progress for this entry
   progress = ((double) completed) / total * 100;
   if (isnan(progress))
@@ -83,7 +85,7 @@
   parent = idx->parent();
   if (idx->isValid())
   {
-    item = uploadModel.index(idx->row(), 1, parent);
+    item = uploadModel.index(idx->row(), COL_PROGRESS, parent);
     uploadModel.setData(item, QVariant(progress), Qt::DisplayRole);
   }
   uploadModel.unlock();
@@ -124,14 +126,14 @@
         qPrintable(tr("Internal error: failed to create meta data for 
publication.")));
       return false;
   }
-  
+
   GNUNET_meta_data_extract_from_file(fs->errorContext(), meta, 
strPath.toLocal8Bit().data(), extractors);
   GNUNET_meta_data_get_contents(meta, &meta_data_get_by_type, &metaData);
   thumbSize = GNUNET_meta_data_get_thumbnail(meta, &thumb);
   if (thumbSize)
     metaData.insert(EXTRACTOR_THUMBNAIL_DATA, QByteArray((const char *) thumb,
       thumbSize));
-  
+
   // Keywords
   keywordUri = GNUNET_meta_data_to_uri(meta);
   GNUNET_meta_data_destroy(meta);
@@ -147,14 +149,14 @@
     QDir dir(strPath);
     QString name = dir.dirName();
 
-    if (!keywords.contains(name))    
+    if (!keywords.contains(name))
       keywords.append(name);
-  }  
- 
+  }
+
   parent->setCursor(Qt::ArrowCursor);
- 
+
   GFSUploadDialog uploadDlg(&metaData, &keywords, fs);
-  
+
   if (uploadDlg.exec() == QDialog::Accepted)
   {
     struct GNUNET_FSUI_UploadList *handle;
@@ -162,7 +164,7 @@
     struct GNUNET_ECRS_URI *globalURI, *keywordURI;
     char **keys;
     long idx;
-    
+
     // prepare meta data
     meta = GNUNET_meta_data_create();
     for(it = metaData.begin(); it != metaData.end(); it++)
@@ -171,7 +173,7 @@
     // prepare global URI
     globalURI = GNUNET_ECRS_string_to_uri(fs->errorContext(), 
GNUNET_ECRS_URI_PREFIX
       GNUNET_ECRS_SEARCH_INFIX);
-      
+
     // prepare keywords URI
     idx = keywords.count();
     keys = new char *[idx + 1];
@@ -180,19 +182,19 @@
     while (idx >= 0)
     {
       keys[idx] = strdup(keywords[idx].toUtf8());
-    
+
       idx--;
     }
-    
+
     keywordURI = GNUNET_ECRS_keyword_command_line_to_uri(NULL, 
keywords.count(),
                                                         (const char **) keys);
-    
+
     // upload
     handle = GNUNET_FSUI_upload_start(fs->context(), strPath.toLocal8Bit(),
       (GNUNET_FSUI_DirectoryScanCallback) &GNUNET_disk_directory_scan, 
fs->errorContext(),
       anon, prio, index, uploadDlg.extract(), uploadDlg.useKeywords(),
       GNUNET_get_time() + 2 * GNUNET_CRON_YEARS, meta, globalURI, keywordURI);
-    
+
     // cleanup
     idx = 0;
     while(keys[idx])
@@ -201,29 +203,40 @@
       idx++;
     }
     delete [] keys;
-    
+
     GNUNET_meta_data_destroy(meta);
     if (globalURI)
       GNUNET_ECRS_uri_destroy(globalURI);
     if (keywordURI)
       GNUNET_ECRS_uri_destroy(keywordURI);
-    
+
     return true;
   }
-  
+
   return false;
 }
 
-void GFSUploadController::state(QPersistentModelIndex *idx, 
GNUNET_FSUI_EventType event)
+void GFSUploadController::complete(QPersistentModelIndex *idx, GFSEcrsUri uri)
 {
   QModelIndex index;
 
   uploadModel.lock();
-  index = uploadModel.index(idx->row(), 2, idx->parent());
-  
-  uploadModel.setData(index, QVariant(fs->fsuiState(event)), Qt::DisplayRole);
-  uploadModel.setData(index, QVariant(event == GNUNET_FSUI_upload_completed),
+  index = uploadModel.index(idx->row(), COL_URI, idx->parent());
+  uploadModel.setData(index, QVariant::fromValue(uri));
+  uploadModel.unlock();
+}
+
+void GFSUploadController::state(QPersistentModelIndex *idx, 
GNUNET_FSUI_EventType type)
+{
+  QModelIndex index;
+
+  uploadModel.lock();
+  index = uploadModel.index(idx->row(), COL_STATUS, idx->parent());
+
+  uploadModel.setData(index, QVariant(fs->fsuiState(type)), Qt::DisplayRole);
+  uploadModel.setData(index, QVariant(type == GNUNET_FSUI_upload_completed),
     Qt::UserRole);
+
   uploadModel.unlock();
 }
 
@@ -232,55 +245,85 @@
   return uploadModel.abstractItemModel();
 }
 
-QPersistentModelIndex *GFSUploadController::started(QPersistentModelIndex 
*parent,
-    QString path, unsigned long long total, unsigned long long completed)
+QPersistentModelIndex *GFSUploadController::newUpload(QPersistentModelIndex 
*parent, const char *fn,
+    unsigned long long total, unsigned long long complete)
 {
   QPersistentModelIndex *idx;
   QStandardItem *item, *parentItem;
   QString displayPath;
-  
-  displayPath = QFileInfo(path).fileName();
+
+  uploadModel.lock();
+  displayPath = QFileInfo(fn).fileName();
   if (displayPath == "")
-    displayPath = QDir(path).dirName();
-  
+    displayPath = QDir(fn).dirName();
+
   if (parent)
     parentItem = uploadModel.itemFromIndex(uploadModel.index(parent->row(), 
parent->column(), parent->parent()));
   else
     parentItem = uploadModel.invisibleRootItem();
-  
+
   item = new QStandardItem(displayPath);
-  item->setColumnCount(3);
+  item->setColumnCount(COL_COUNT);
   parentItem->appendRow(item);
-  
+
   idx = new QPersistentModelIndex(item->index());
-  setProgress(idx, completed, total);
+  setProgress(idx, complete, total);
+  uploadModel.unlock();
 
-  state(idx, (total != completed || total == 0) ? GNUNET_FSUI_upload_started : 
GNUNET_FSUI_upload_completed);
-  
   return idx;
 }
 
+QPersistentModelIndex *GFSUploadController::resumed(QPersistentModelIndex 
*parent,
+    const GNUNET_FSUI_Event *event)
+{
+  QPersistentModelIndex *idx;
+
+  idx = newUpload(parent, event->data.UploadResumed.filename, 
event->data.UploadResumed.total,
+      event->data.UploadResumed.completed);
+
+  if (event->data.UploadResumed.total == event->data.UploadResumed.completed)
+  {
+    state(idx, GNUNET_FSUI_upload_completed);
+    complete(idx, event->data.UploadResumed.uri);
+  }
+  else
+    state(idx, event->type);
+
+  return idx;
+}
+
+QPersistentModelIndex *GFSUploadController::started(QPersistentModelIndex 
*parent,
+    const GNUNET_FSUI_Event *event)
+{
+  QPersistentModelIndex *idx;
+
+  idx = newUpload(parent, event->data.UploadStarted.filename, 
event->data.UploadStarted.total, 0);
+
+  state(idx, event->type);
+
+  return idx;
+}
+
 void GFSUploadController::progress(QPersistentModelIndex *idx,
   unsigned long long completed, unsigned long long total)
 {
   setProgress(idx, completed, total);
-  state(idx, GNUNET_FSUI_upload_progress);
 }
 
 void GFSUploadController::clear()
 {
   int row = 0;
   QModelIndex idx;
-  
+
   uploadModel.lock();
-  idx = uploadModel.index(0, 2);
-  
+  idx = uploadModel.index(0, COL_STATUS);
+
   while(idx.isValid())
   {
     if (uploadModel.data(idx, Qt::UserRole).toInt() == 1)
       uploadModel.removeRow(row);
     else
-      idx = uploadModel.index(++row, 2);
+      idx = uploadModel.index(++row, COL_STATUS);
   }
   uploadModel.unlock();
 }

Modified: gnunet-qt/src/plugins/fs/uploadController.h
===================================================================
--- gnunet-qt/src/plugins/fs/uploadController.h 2008-08-14 19:27:06 UTC (rev 
7557)
+++ gnunet-qt/src/plugins/fs/uploadController.h 2008-08-14 19:59:06 UTC (rev 
7558)
@@ -37,24 +37,31 @@
 class GFSUploadController : public QObject
 {
   Q_OBJECT
-  
+
 public:
+  typedef enum {COL_FILENAME, COL_PROGRESS, COL_STATUS, COL_URI, COL_COUNT} 
GFSUploadControllerCols;
+
        GFSUploadController(GFSPlugin *fs);
        virtual ~GFSUploadController();
-  
+
   bool start(QWidget *parent, const QString &strPath, bool index,
     int prio, int anon);
   QPersistentModelIndex *started(QPersistentModelIndex *parent,
-    QString path, unsigned long long total, unsigned long long completed);
+    const GNUNET_FSUI_Event *event);
+  QPersistentModelIndex *resumed(QPersistentModelIndex *parent,
+      const GNUNET_FSUI_Event *event);
   void progress(QPersistentModelIndex *idx, unsigned long long completed,
     unsigned long long total);
-  void state(QPersistentModelIndex *idx, GNUNET_FSUI_EventType event);
+  void complete(QPersistentModelIndex *idx, GFSEcrsUri uri);
+  void state(QPersistentModelIndex *idx, GNUNET_FSUI_EventType type);
   void clear();
-  
+
   QAbstractItemModel *model();
 protected:
   void setProgress(QPersistentModelIndex *idx, unsigned long long completed,
     unsigned long long total);
+  QPersistentModelIndex * newUpload(QPersistentModelIndex *parent, const char 
*fn,
+      unsigned long long total, unsigned long long complete);
 
   GFSPlugin *fs;
   EXTRACTOR_ExtractorList *extractors;





reply via email to

[Prev in Thread] Current Thread [Next in Thread]