[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r7273 - in gnunet-qt/src: common include plugins/fs
From: |
gnunet |
Subject: |
[GNUnet-SVN] r7273 - in gnunet-qt/src: common include plugins/fs |
Date: |
Wed, 18 Jun 2008 15:51:01 -0600 (MDT) |
Author: durner
Date: 2008-06-18 15:51:00 -0600 (Wed, 18 Jun 2008)
New Revision: 7273
Modified:
gnunet-qt/src/common/itemModel.cc
gnunet-qt/src/common/itemModel.h
gnunet-qt/src/include/gnunet_qt_common.h
gnunet-qt/src/plugins/fs/downloadController.cc
gnunet-qt/src/plugins/fs/downloadItemDelegate.cc
gnunet-qt/src/plugins/fs/fs-search.cc
gnunet-qt/src/plugins/fs/fs-search.h
gnunet-qt/src/plugins/fs/fs.cc
gnunet-qt/src/plugins/fs/searchController.cc
gnunet-qt/src/plugins/fs/searchController.h
gnunet-qt/src/plugins/fs/searchItemDelegate.cc
gnunet-qt/src/plugins/fs/uploadController.cc
gnunet-qt/src/plugins/fs/uploadItemDelegate.cc
Log:
more thread safety
Modified: gnunet-qt/src/common/itemModel.cc
===================================================================
--- gnunet-qt/src/common/itemModel.cc 2008-06-18 00:31:18 UTC (rev 7272)
+++ gnunet-qt/src/common/itemModel.cc 2008-06-18 21:51:00 UTC (rev 7273)
@@ -2,21 +2,21 @@
GItemModel::GItemModel(QObject *parent)
{
- lock = new QMutex(QMutex::Recursive);
+ modelLock = new QMutex(QMutex::Recursive);
}
GItemModel::~GItemModel()
{
- delete lock;
+ delete modelLock;
}
bool GItemModel::hasIndex(int row, int column, const QModelIndex &parent) const
{
bool ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::hasIndex(row, column, parent);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -24,9 +24,9 @@
{
QModelIndex ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::index(row, column, parent);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -34,26 +34,26 @@
{
QModelIndex ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::parent(child);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
void GItemModel::setColumnCount(int columns)
{
- lock->lock();
+ modelLock->lock();
QStandardItemModel::setColumnCount(columns);
- lock->unlock();
+ modelLock->unlock();
}
QStandardItem *GItemModel::itemFromIndex(const QModelIndex &index) const
{
QStandardItem *ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::itemFromIndex(index);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -61,9 +61,9 @@
{
QStandardItem *ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::invisibleRootItem();
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -71,33 +71,33 @@
{
QStandardItem *ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::item(row, column);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
void GItemModel::clear()
{
- lock->lock();
+ modelLock->lock();
QStandardItemModel::clear();
- lock->unlock();
+ modelLock->unlock();
}
void GItemModel::appendRow(QStandardItem *item)
{
- lock->lock();
+ modelLock->lock();
QStandardItemModel::appendRow(item);
- lock->unlock();
+ modelLock->unlock();
}
int GItemModel::rowCount(const QModelIndex &parent) const
{
int ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::rowCount(parent);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -105,9 +105,9 @@
{
int ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::columnCount(parent);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -115,9 +115,9 @@
{
bool ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::hasChildren(parent);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -125,9 +125,9 @@
{
QVariant ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::data(index, role);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -135,9 +135,9 @@
{
bool ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::setData(index, value, role);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -145,9 +145,9 @@
{
QVariant ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::headerData(section, orientation, role);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -155,9 +155,9 @@
{
bool ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::setHeaderData(section, orientation, value, role);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -165,9 +165,9 @@
{
QMap<int, QVariant> ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::itemData(index);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -176,9 +176,9 @@
{
bool ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::setItemData(index, roles);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -186,9 +186,9 @@
{
QStringList ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::mimeTypes();
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -197,9 +197,9 @@
{
QMimeData *ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::mimeData(indexes);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -207,9 +207,9 @@
{
bool ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::dropMimeData(data, action, row, column, parent);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -217,9 +217,9 @@
{
Qt::DropActions ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::supportedDropActions();
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -227,17 +227,17 @@
{
Qt::DropActions ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::supportedDragActions();
- lock->unlock();
+ modelLock->unlock();
return ret;
}
void GItemModel::setSupportedDragActions(Qt::DropActions x)
{
- lock->lock();
+ modelLock->lock();
QStandardItemModel::setSupportedDragActions(x);
- lock->unlock();
+ modelLock->unlock();
}
@@ -245,9 +245,9 @@
{
bool ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::insertRows(row, count, parent);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -255,9 +255,9 @@
{
bool ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::insertColumns(column, count, parent);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -265,9 +265,9 @@
{
bool ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::removeRows(row, count, parent);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -275,9 +275,9 @@
{
bool ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::removeColumns(column, count, parent);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -285,9 +285,9 @@
{
bool ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::insertRow(row, parent);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -296,9 +296,9 @@
{
bool ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::insertColumn(column, parent);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -306,9 +306,9 @@
{
bool ret;
- lock->lock();
+ modelLock->lock();
QStandardItemModel::removeRow(row, parent);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -317,26 +317,26 @@
{
bool ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::removeColumn(column, parent);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
void GItemModel::fetchMore(const QModelIndex &parent)
{
- lock->lock();
+ modelLock->lock();
QStandardItemModel::fetchMore(parent);
- lock->unlock();
+ modelLock->unlock();
}
bool GItemModel::canFetchMore(const QModelIndex &parent) const
{
bool ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::canFetchMore(parent);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -344,26 +344,26 @@
{
Qt::ItemFlags ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::flags(index);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
void GItemModel::sort(int column, Qt::SortOrder order)
{
- lock->lock();
+ modelLock->lock();
QStandardItemModel::sort(column, order);
- lock->unlock();
+ modelLock->unlock();
}
QModelIndex GItemModel::buddy(const QModelIndex &index) const
{
QModelIndex ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::buddy(index);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -371,9 +371,9 @@
{
QModelIndexList ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::match(start, role, value, hits, flags);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -381,9 +381,9 @@
{
QSize ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::span(index);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -391,9 +391,9 @@
{
QModelIndex ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::createIndex(row, column, data);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -401,9 +401,9 @@
{
QModelIndex ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::createIndex(row, column, id);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
@@ -411,121 +411,131 @@
{
QModelIndex ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::createIndex(row, column, id);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
void GItemModel::encodeData(const QModelIndexList &indexes, QDataStream
&stream) const
{
- lock->lock();
+ modelLock->lock();
QStandardItemModel::encodeData(indexes, stream);
- lock->unlock();
+ modelLock->unlock();
}
bool GItemModel::decodeData(int row, int column, const QModelIndex &parent,
QDataStream &stream)
{
bool ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::decodeData(row, column, parent, stream);
- lock->unlock();
+ modelLock->unlock();
return ret;
}
void GItemModel::beginInsertRows(const QModelIndex &parent, int first, int
last)
{
- lock->lock();
+ modelLock->lock();
QStandardItemModel::beginInsertRows(parent, first, last);
- lock->unlock();
+ modelLock->unlock();
}
void GItemModel::endInsertRows()
{
- lock->lock();
+ modelLock->lock();
QStandardItemModel::endInsertRows();
- lock->unlock();
+ modelLock->unlock();
}
void GItemModel::beginRemoveRows(const QModelIndex &parent, int first, int
last)
{
- lock->lock();
+ modelLock->lock();
QStandardItemModel::beginRemoveRows(parent, first, last);
- lock->unlock();
+ modelLock->unlock();
}
void GItemModel::endRemoveRows()
{
- lock->lock();
+ modelLock->lock();
QStandardItemModel::endRemoveRows();
- lock->unlock();
+ modelLock->unlock();
}
void GItemModel::beginInsertColumns(const QModelIndex &parent, int first, int
last)
{
- lock->lock();
+ modelLock->lock();
QStandardItemModel::beginInsertColumns(parent, first, last);
- lock->unlock();
+ modelLock->unlock();
}
void GItemModel::endInsertColumns()
{
- lock->lock();
+ modelLock->lock();
QStandardItemModel::endInsertColumns();
- lock->unlock();
+ modelLock->unlock();
}
void GItemModel::beginRemoveColumns(const QModelIndex &parent, int first, int
last)
{
- lock->lock();
+ modelLock->lock();
QStandardItemModel::beginRemoveColumns(parent, first, last);
- lock->unlock();
+ modelLock->unlock();
}
void GItemModel::endRemoveColumns()
{
- lock->lock();
+ modelLock->lock();
QStandardItemModel::endRemoveColumns();
- lock->unlock();
+ modelLock->unlock();
}
void GItemModel::reset()
{
- lock->lock();
+ modelLock->lock();
QStandardItemModel::reset();
- lock->unlock();
+ modelLock->unlock();
}
void GItemModel::changePersistentIndex(const QModelIndex &from, const
QModelIndex &to)
{
- lock->lock();
+ modelLock->lock();
QStandardItemModel::changePersistentIndex(from, to);
- lock->unlock();
+ modelLock->unlock();
}
void GItemModel::changePersistentIndexList(const QModelIndexList &from, const
QModelIndexList &to)
{
- lock->lock();
+ modelLock->lock();
QStandardItemModel::changePersistentIndexList(from, to);
- lock->unlock();
+ modelLock->unlock();
}
QModelIndexList GItemModel::persistentIndexList() const
{
QModelIndexList ret;
- lock->lock();
+ modelLock->lock();
ret = QStandardItemModel::persistentIndexList();
- lock->unlock();
+ modelLock->unlock();
return ret;
}
+void GItemModel::lock()
+{
+ modelLock->lock();
+}
+
+void GItemModel::unlock()
+{
+ modelLock->unlock();
+}
+
QAbstractItemModel *GItemModel::abstractItemModel()
{
return this;
Modified: gnunet-qt/src/common/itemModel.h
===================================================================
--- gnunet-qt/src/common/itemModel.h 2008-06-18 00:31:18 UTC (rev 7272)
+++ gnunet-qt/src/common/itemModel.h 2008-06-18 21:51:00 UTC (rev 7273)
@@ -75,6 +75,9 @@
void clear();
void appendRow(QStandardItem *item);
+ void lock();
+ void unlock();
+
QAbstractItemModel *abstractItemModel();
QObject *object();
Q_SIGNALS:
@@ -99,7 +102,7 @@
void modelAboutToBeReset();
void modelReset();
- QMutex *lock;
+ QMutex *modelLock;
protected:
QModelIndex createIndex(int row, int column, void *data = 0) const;
QModelIndex createIndex(int row, int column, int id) const;
Modified: gnunet-qt/src/include/gnunet_qt_common.h
===================================================================
--- gnunet-qt/src/include/gnunet_qt_common.h 2008-06-18 00:31:18 UTC (rev
7272)
+++ gnunet-qt/src/include/gnunet_qt_common.h 2008-06-18 21:51:00 UTC (rev
7273)
@@ -30,6 +30,7 @@
#include <QWidget>
#include <QString>
#include <QLibrary>
+#include <QPersistentModelIndex>
#include "../common/event.h"
#include "../common/eventDispatcher.h"
@@ -55,6 +56,8 @@
typedef QList<int> GIntList;
+typedef QList<QPersistentModelIndex> GPersistentModelIndexList;
+
class GString : public QString
{
public:
Modified: gnunet-qt/src/plugins/fs/downloadController.cc
===================================================================
--- gnunet-qt/src/plugins/fs/downloadController.cc 2008-06-18 00:31:18 UTC
(rev 7272)
+++ gnunet-qt/src/plugins/fs/downloadController.cc 2008-06-18 21:51:00 UTC
(rev 7273)
@@ -73,6 +73,7 @@
if (isnan(progress))
progress = 0;
+ downloadModel.lock();
parent = idx->parent();
item = downloadModel.index(idx->row(), COL_PROGRESS, parent);
downloadModel.setData(item, QVariant(progress), Qt::DisplayRole);
@@ -105,6 +106,8 @@
parent = parent.parent();
}
+
+ downloadModel.unlock();
}
/**
@@ -189,6 +192,8 @@
if (displayPath == "")
displayPath = QDir(name).dirName();
+ downloadModel.lock();
+
if (parent)
parentItem = downloadModel.itemFromIndex(downloadModel.index(parent->row(),
parent->column(), parent->parent()));
@@ -209,6 +214,9 @@
Qt::DisplayRole);
idx = new QPersistentModelIndex(item->index());
+
+ downloadModel.unlock();
+
setProgress(idx, completed, total, (GNUNET_CronTime) -1);
state(idx, (total != completed) ? GNUNET_FSUI_download_started :
GNUNET_FSUI_download_completed);
@@ -235,8 +243,12 @@
void GFSDownloadController::state(QPersistentModelIndex *idx,
GNUNET_FSUI_EventType type)
{
- QModelIndex index = downloadModel.index(idx->row(), COL_STATUS,
idx->parent());
+ QModelIndex index;
+ downloadModel.lock();
+
+ index = downloadModel.index(idx->row(), COL_STATUS, idx->parent());
+
downloadModel.setData(index, QVariant(fs->fsuiState(type)), Qt::DisplayRole);
if (type == GNUNET_FSUI_download_stopped)
downloadModel.removeRow(idx->row());
@@ -244,13 +256,19 @@
downloadModel.setData(index,
QVariant(type == GNUNET_FSUI_download_completed || type ==
GNUNET_FSUI_download_aborted),
Qt::UserRole);
+
+ downloadModel.unlock();
}
void GFSDownloadController::clear()
{
int row = 0;
- QModelIndex idx = downloadModel.index(0, COL_STATUS);
+ QModelIndex idx;
+ downloadModel.lock();
+
+ idx = downloadModel.index(0, COL_STATUS);
+
while(idx.isValid())
{
if (downloadModel.data(idx, Qt::UserRole).toInt() == 1)
@@ -264,6 +282,8 @@
else
idx = downloadModel.index(++row, COL_STATUS);
}
+
+ downloadModel.unlock();
}
void GFSDownloadController::cancel(struct GNUNET_FSUI_DownloadList *handle)
Modified: gnunet-qt/src/plugins/fs/downloadItemDelegate.cc
===================================================================
--- gnunet-qt/src/plugins/fs/downloadItemDelegate.cc 2008-06-18 00:31:18 UTC
(rev 7272)
+++ gnunet-qt/src/plugins/fs/downloadItemDelegate.cc 2008-06-18 21:51:00 UTC
(rev 7273)
@@ -32,13 +32,22 @@
QSize GFSDownloadItemDelegate::sizeHint(const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
- return QItemDelegate::sizeHint(option, index);
+ QSize ret;
+
+ ((GItemModel *) index.model())->lock();
+ ret = QItemDelegate::sizeHint(option, index);
+ ((GItemModel *) index.model())->unlock();
+
+ return ret;
}
void GFSDownloadItemDelegate::paint(QPainter *painter, const
QStyleOptionViewItem &option, const QModelIndex &index) const
{
- int col = index.column();
+ int col;
+ ((GItemModel *) index.model())->lock();
+ col = index.column();
+
if (col == GFSDownloadController::COL_PROGRESS)
{
QStyleOptionProgressBarV2 barOptions;
@@ -57,6 +66,7 @@
qApp->style()->drawControl(QStyle::CE_ProgressBar, &barOptions, painter);
+ ((GItemModel *) index.model())->unlock();
return;
}
else if (col == GFSDownloadController::COL_ETA)
@@ -75,6 +85,7 @@
}
QItemDelegate::paint(painter, option, index);
+ ((GItemModel *) index.model())->unlock();
}
/* end of downloadItemDelegate.cc */
Modified: gnunet-qt/src/plugins/fs/fs-search.cc
===================================================================
--- gnunet-qt/src/plugins/fs/fs-search.cc 2008-06-18 00:31:18 UTC (rev
7272)
+++ gnunet-qt/src/plugins/fs/fs-search.cc 2008-06-18 21:51:00 UTC (rev
7273)
@@ -62,7 +62,8 @@
void GFSSearch::downloadClicked()
{
- QModelIndexList allSel, uniqSel;
+ QModelIndexList allSel;
+ GPersistentModelIndexList uniqSel;
QModelIndexList::iterator it;
/* Every column is treated as separate selection */
@@ -81,16 +82,22 @@
void GFSSearch::resultExpanded(const QModelIndex &index)
{
QModelIndex idx;
+ GItemModel *model;
- idx = index.model()->index(index.row(), EXTRACTOR_MIMETYPE, index.parent());
- if (idx.model()->data(idx) == "application/gnunet-directory")
+ model = (GItemModel *) index.model();
+ model->lock();
+ idx = model->index(index.row(), EXTRACTOR_MIMETYPE, index.parent());
+ if (model->data(idx) == "application/gnunet-directory")
{
- QModelIndexList list;
+ GPersistentModelIndexList list;
list.append(idx);
+ model->unlock();
emit download(m, uri, list, spinAnon->value(), false);
}
+ else
+ model->unlock();
}
void GFSSearch::clear()
Modified: gnunet-qt/src/plugins/fs/fs-search.h
===================================================================
--- gnunet-qt/src/plugins/fs/fs-search.h 2008-06-18 00:31:18 UTC (rev
7272)
+++ gnunet-qt/src/plugins/fs/fs-search.h 2008-06-18 21:51:00 UTC (rev
7273)
@@ -50,7 +50,7 @@
signals:
void closeSearchWnd(GFSEcrsUri &uri);
void download(GItemModel *model, GFSEcrsUri &uri,
- QModelIndexList indexes, int anonymity, bool recursive);
+ GPersistentModelIndexList indexes, int anonymity, bool recursive);
protected:
class GFSPlugin *fs;
Modified: gnunet-qt/src/plugins/fs/fs.cc
===================================================================
--- gnunet-qt/src/plugins/fs/fs.cc 2008-06-18 00:31:18 UTC (rev 7272)
+++ gnunet-qt/src/plugins/fs/fs.cc 2008-06-18 21:51:00 UTC (rev 7273)
@@ -159,6 +159,7 @@
qRegisterMetaType<QModelIndex>("QModelIndex");
qRegisterMetaType<Qt::Orientation>("Qt::Orientation");
qRegisterMetaType<QModelIndexList>("QModelIndexList");
+ qRegisterMetaType<GPersistentModelIndexList>("GPersistentModelIndexList");
qRegisterMetaType<GRanking>("GRanking");
cfg = config;
Modified: gnunet-qt/src/plugins/fs/searchController.cc
===================================================================
--- gnunet-qt/src/plugins/fs/searchController.cc 2008-06-18 00:31:18 UTC
(rev 7272)
+++ gnunet-qt/src/plugins/fs/searchController.cc 2008-06-18 21:51:00 UTC
(rev 7273)
@@ -44,12 +44,13 @@
static int insertMetaData(EXTRACTOR_KeywordType type, const char *data,
void *cls)
{
- QAbstractItemModel *model;
+ GItemModel *model;
QModelIndex *rowIndex, idx;
QString content;
rowIndex = (QModelIndex *) cls;
- model = (QAbstractItemModel *) rowIndex->model();
+ model = (GItemModel *) rowIndex->model();
+ model->lock();
idx = model->index(rowIndex->row(), MODEL_IDX(type), rowIndex->parent());
content = model->data(idx).toString();
@@ -59,6 +60,7 @@
content += QString::fromUtf8(data);
model->setData(idx, QVariant(content), Qt::DisplayRole);
+ model->unlock();
return GNUNET_OK;
}
@@ -84,9 +86,9 @@
connect(view, SIGNAL(closeSearchWnd(GFSEcrsUri &)), this,
SLOT(closed(GFSEcrsUri &)));
connect(view,
- SIGNAL(download(GItemModel *, GFSEcrsUri &, QModelIndexList, int, bool)),
+ SIGNAL(download(GItemModel *, GFSEcrsUri &, GPersistentModelIndexList,
int, bool)),
this,
- SLOT(download(GItemModel *, GFSEcrsUri &, QModelIndexList, int, bool)));
+ SLOT(download(GItemModel *, GFSEcrsUri &, GPersistentModelIndexList, int,
bool)));
searchSummaryCntrl->searchStarted(list, uri);
@@ -119,6 +121,7 @@
child = new QStandardItem;
child->setColumnCount(SEARCH_MAX_COLUMN + 1);
+ model->lock();
row = model->rowCount(parent);
if (parent.isValid())
@@ -176,6 +179,8 @@
meta = info->meta;
itemIdx = model->index(row, SEARCH_META_COLUMN, parent);
model->setData(itemIdx, QVariant(meta.serialized()));
+
+ model->unlock();
}
/**
@@ -243,10 +248,14 @@
model = info->model;
ecrsUri = finfo->uri;
+
+ model->lock();
lst = model->match(model->index(0, SEARCH_URI_COLUMN), Qt::EditRole,
ecrsUri.serialized(), 1, Qt::MatchExactly | Qt::MatchCaseSensitive);
+ model->unlock();
GNUNET_GE_BREAK_RETURN(fs->errorContext(), lst.count() > 0, );
+ model->lock();
row = lst.at(0).row();
rank.availability_rank = avail;
@@ -269,6 +278,7 @@
"%\n" + tr("Availability:") + " " + QString::number(availmin) + "% " +
((availmax > 0 && availmax != availmin) ? " - " +
QString::number(availmax) + "%" : ""), Qt::ToolTipRole);
+ model->unlock();
}
bool GFSSearchController::isActive(GFSEcrsUri uri)
@@ -290,9 +300,9 @@
}
void GFSSearchController::download(GItemModel *model, GFSEcrsUri &uri,
- QModelIndexList indexes, int anonymity, bool recurse)
+ GPersistentModelIndexList indexes, int anonymity, bool recurse)
{
- QModelIndexList::iterator it;
+ GPersistentModelIndexList::iterator it;
for (it = indexes.begin(); it != indexes.end(); it++)
{
@@ -372,14 +382,18 @@
void GFSSearchController::downloadCompleted(QPersistentModelIndex &idx,
GString file)
{
QModelIndex index;
- QAbstractItemModel *model;
+ GItemModel *model;
struct GNUNET_MetaData *meta;
int idxRow;
- model = (QAbstractItemModel *) idx.model();
+ model = (GItemModel *) idx.model();
+ model->lock();
idxRow = idx.row();
if (!idx.isValid())
+ {
+ model->unlock();
return; // result got removed
+ }
index = model->index(idxRow, MODEL_IDX(EXTRACTOR_MIMETYPE), idx.parent());
if (model->data(index).toString() == "application/gnunet-directory")
@@ -397,16 +411,18 @@
gnDir.open(QIODevice::ReadOnly);
QByteArray data = gnDir.readAll();
- if (!data.size())
- return;
-
- meta = NULL;
- GNUNET_ECRS_directory_list_contents(fs->errorContext(), data.data(),
data.size(), &meta,
- &addFilesToDirectory, &idx);
+ if (data.size())
+ {
+ meta = NULL;
+ GNUNET_ECRS_directory_list_contents(fs->errorContext(), data.data(),
data.size(), &meta,
+ &addFilesToDirectory, &idx);
+
+ if (meta)
+ GNUNET_meta_data_destroy(meta);
+ }
+ }
- if (meta)
- GNUNET_meta_data_destroy(meta);
- }
+ model->unlock();
}
/* end of searchController.cc */
Modified: gnunet-qt/src/plugins/fs/searchController.h
===================================================================
--- gnunet-qt/src/plugins/fs/searchController.h 2008-06-18 00:31:18 UTC (rev
7272)
+++ gnunet-qt/src/plugins/fs/searchController.h 2008-06-18 21:51:00 UTC (rev
7273)
@@ -70,7 +70,7 @@
protected slots:
void closed(GFSEcrsUri &uri);
void download(GItemModel *model ,GFSEcrsUri &uri,
- QModelIndexList indexes, int anonymity, bool recurse);
+ GPersistentModelIndexList indexes, int anonymity, bool recurse);
protected:
typedef QMap<class GFSEcrsUri, struct GNUNET_FSUI_SearchList *> GFSSearches;
Modified: gnunet-qt/src/plugins/fs/searchItemDelegate.cc
===================================================================
--- gnunet-qt/src/plugins/fs/searchItemDelegate.cc 2008-06-18 00:31:18 UTC
(rev 7272)
+++ gnunet-qt/src/plugins/fs/searchItemDelegate.cc 2008-06-18 21:51:00 UTC
(rev 7273)
@@ -35,31 +35,48 @@
QSize GSearchItemDelegate::sizeHint(const QStyleOptionViewItem &option, const
QModelIndex &index) const
{
- QVariant var = index.model()->headerData(index.column(), Qt::Horizontal,
Qt::UserRole);
+ GItemModel *model;
+ QVariant var;
+ QSize ret;
+ model = (GItemModel *) index.model();
+ model->lock();
+ var = model->headerData(index.column(), Qt::Horizontal, Qt::UserRole);
+
if (var.toInt() == 1)
+ {
+ model->unlock();
return QSize(0, 0);
+ }
- var = index.model()->data(index);
+ var = model->data(index);
if (index.column() == MODEL_IDX(EXTRACTOR_THUMBNAIL_DATA) && var.type() ==
QVariant::ByteArray)
{
QImage img;
+ model->unlock();
img.loadFromData(var.toByteArray());
return img.size();
}
- return QItemDelegate::sizeHint(option, index);
+ ret = QItemDelegate::sizeHint(option, index);
+ model->unlock();
+ return ret;
}
void GSearchItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem
&option, const QModelIndex &index) const
{
QVariant var;
+ GItemModel *model;
+ int col;
- var = index.model()->data(index);
+ model = (GItemModel *) index.model();
+ model->lock();
+ var = model->data(index);
+ col = index.column();
- if (index.column() == MODEL_IDX(EXTRACTOR_THUMBNAIL_DATA) && var.type() ==
QVariant::ByteArray)
+ if (col == MODEL_IDX(EXTRACTOR_THUMBNAIL_DATA) && var.type() ==
QVariant::ByteArray)
{
QImage img;
int left;
@@ -75,7 +92,7 @@
painter->drawImage(QPoint(left, option.rect.top()), img);
}
- else if (index.column() == SEARCH_RANK_COLUMN)
+ else if (col == SEARCH_RANK_COLUMN)
{
GRanking rank;
QString str;
@@ -123,13 +140,15 @@
painter->drawLine(rect.x() + colwidth / 2, rect.y(),
rect.x() + colwidth / 2, rect.y() + colheight / 2 - 1);
}
- else if (index.model()->data(index, Qt::UserRole) == 1)
+ else if (model->data(index, Qt::UserRole) == 1)
{
// expanded directory
painter->drawText(option.rect, tr("Retrieving content..."));
}
else
QItemDelegate::paint(painter, option, index);
+
+ model->unlock();
}
/* end of searchItemDelegate.cc */
Modified: gnunet-qt/src/plugins/fs/uploadController.cc
===================================================================
--- gnunet-qt/src/plugins/fs/uploadController.cc 2008-06-18 00:31:18 UTC
(rev 7272)
+++ gnunet-qt/src/plugins/fs/uploadController.cc 2008-06-18 21:51:00 UTC
(rev 7273)
@@ -79,9 +79,14 @@
if (isnan(progress))
progress = 0;
+ uploadModel.lock();
parent = idx->parent();
- item = uploadModel.index(idx->row(), 1, parent);
- uploadModel.setData(item, QVariant(progress), Qt::DisplayRole);
+ if (idx->isValid())
+ {
+ item = uploadModel.index(idx->row(), 1, parent);
+ uploadModel.setData(item, QVariant(progress), Qt::DisplayRole);
+ }
+ uploadModel.unlock();
}
bool GFSUploadController::start(QWidget *parent, const QString &strPath,
@@ -209,11 +214,15 @@
void GFSUploadController::state(QPersistentModelIndex *idx,
GNUNET_FSUI_EventType event)
{
- QModelIndex index = uploadModel.index(idx->row(), 2, idx->parent());
+ 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),
Qt::UserRole);
+ uploadModel.unlock();
}
QAbstractItemModel *GFSUploadController::model()
@@ -259,8 +268,11 @@
void GFSUploadController::clear()
{
int row = 0;
- QModelIndex idx = uploadModel.index(0, 2);
+ QModelIndex idx;
+ uploadModel.lock();
+ idx = uploadModel.index(0, 2);
+
while(idx.isValid())
{
if (uploadModel.data(idx, Qt::UserRole).toInt() == 1)
@@ -268,6 +280,7 @@
else
idx = uploadModel.index(++row, 2);
}
+ uploadModel.unlock();
}
/* end of uploadController.cc */
Modified: gnunet-qt/src/plugins/fs/uploadItemDelegate.cc
===================================================================
--- gnunet-qt/src/plugins/fs/uploadItemDelegate.cc 2008-06-18 00:31:18 UTC
(rev 7272)
+++ gnunet-qt/src/plugins/fs/uploadItemDelegate.cc 2008-06-18 21:51:00 UTC
(rev 7273)
@@ -26,15 +26,29 @@
#include <QPainter>
#include <QApplication>
+#include "gnunet_qt_common.h"
#include "uploadItemDelegate.h"
QSize GFSUploadItemDelegate::sizeHint(const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
- return QItemDelegate::sizeHint(option, index);
+ QSize ret;
+ GItemModel *model;
+
+ model = (GItemModel *) index.model();
+ model->lock();
+ ret = QItemDelegate::sizeHint(option, index);
+ model->unlock();
+
+ return ret;
}
void GFSUploadItemDelegate::paint(QPainter *painter, const
QStyleOptionViewItem &option, const QModelIndex &index) const
{
+ GItemModel *model;
+
+ model = (GItemModel *) index.model();
+ model->lock();
+
if (index.column() == 1)
{
QStyleOptionProgressBarV2 barOptions;
@@ -52,11 +66,13 @@
barOptions.rect = option.rect;
qApp->style()->drawControl(QStyle::CE_ProgressBar, &barOptions, painter);
-
+
+ model->unlock();
return;
}
QItemDelegate::paint(painter, option, index);
+ model->unlock();
}
/* end of uploadItemDelegate.cc */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r7273 - in gnunet-qt/src: common include plugins/fs,
gnunet <=