[Top][All Lists]
[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;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r7558 - gnunet-qt/src/plugins/fs,
gnunet <=