gnunet-svn
[Top][All Lists]
Advanced

[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 */





reply via email to

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