viewgit/index.php:465 Only variables should be passed by reference [2048]

viewgit/index.php:466 Non-static method GeSHi::get_language_name_from_extension() should not be called statically [2048]

  1. #include "feedmodel.h"
  2. #include "feednode.h"
  3. #include <QSqlDatabase>
  4. #include <QSqlQuery>
  5. #include <QSqlError>
  6. #include <QDebug>
  7. #include <QStringList>
  8. #include <QLabel>
  9.  
  10. using namespace Larss;
  11.  
  12. FeedModel::FeedModel(QSqlDatabase db, QObject *parent) : QStandardItemModel (parent)
  13. {
  14. this->db = db;
  15.  
  16. // Check that the right tables are present in the db
  17. if (!db.tables().contains("categories"))
  18. {
  19. QSqlQuery query(db);
  20. query.prepare("CREATE TABLE categories (id INTEGER PRIMARY KEY, name TEXT);");
  21. if (!query.exec())
  22. qDebug() << "Error while creating the categories table in the db";
  23. }
  24.  
  25. if (!db.tables().contains("feeds"))
  26. {
  27. QSqlQuery query(db);
  28. query.prepare("CREATE TABLE feeds (id INTEGER PRIMARY KEY, category INTEGER, name TEXT, url TEXT);");
  29. if (!query.exec())
  30. qDebug() << "Error while creating the feeds table in the db";
  31. }
  32.  
  33. select();
  34. }
  35.  
  36. FeedModel::~FeedModel()
  37. {
  38. destroySubtree(index(0, 0));
  39. }
  40.  
  41. void
  42. FeedModel::destroySubtree(QModelIndex subtreeRoot) {
  43. if (rowCount(subtreeRoot) == 0) {
  44. FeedNode * ptr = itemFromIndex(subtreeRoot);
  45. delete ptr;
  46. }
  47. else {
  48. for (int i = 0; i < rowCount(subtreeRoot); i++) {
  49. QModelIndex child = index(i, 0, subtreeRoot);
  50. destroySubtree(child);
  51.  
  52. FeedNode* ptr = itemFromIndex(child);
  53. delete ptr;
  54. }
  55. }
  56. }
  57.  
  58. void
  59. FeedModel::select()
  60. {
  61. // Clear the content of the model
  62. clear();
  63.  
  64. // Get the root of the tree
  65. QStandardItem *root = invisibleRootItem();
  66.  
  67. // Set the fake rootNode
  68. rootNode = new FeedNode (0, "");
  69.  
  70. QSqlQuery query(db);
  71. query.prepare("SELECT id, name from categories;");
  72. if (query.exec() && query.first())
  73. {
  74. do {
  75. // Insert the new category in the tree
  76. FeedNode* node = new FeedNode(query.value(0).toInt(), query.value(1).toString());
  77. root->appendRow(node);
  78.  
  79. // Find the feeds associated with this category and add the as childs.
  80. QSqlQuery feedQuery(db);
  81. feedQuery.prepare("SELECT id, name, url FROM feeds WHERE category=:category");
  82. feedQuery.bindValue("category", node->id());
  83.  
  84. if (feedQuery.exec() && feedQuery.first())
  85. {
  86. do
  87. {
  88. FeedNode *feedNode = new FeedNode(feedQuery.value(0).toInt(),
  89. feedQuery.value(1).toString(),
  90. feedQuery.value(2).toString());
  91. node->appendRow(feedNode);
  92. } while (feedQuery.next());
  93. }
  94. } while (query.next());
  95. }
  96. }
  97.  
  98. bool
  99. FeedModel::setData(const QModelIndex &index, const QVariant &value, int role)
  100. {
  101. // Get the involved node
  102. FeedNode *node = itemFromIndex(index);
  103.  
  104. // First we need to update the data in the database.
  105. QSqlQuery query(db);
  106. if (node->type() == FeedNode::Category)
  107. {
  108. query.prepare("UPDATE categories SET name=:value WHERE id=:id;");
  109. query.bindValue("value", value);
  110. query.bindValue("id", node->id());
  111. }
  112. else
  113. {
  114. query.prepare("UPDATE feeds SET name=:value WHERE id=:id;");
  115. query.bindValue("value", value);
  116. query.bindValue("id", node->id());
  117. }
  118.  
  119. // Check if the query has gone well
  120. if (query.exec())
  121. return QStandardItemModel::setData(index, value, role);
  122. else
  123. {
  124. qDebug() << query.executedQuery() << query.lastError();
  125. return false;
  126. }
  127. }
  128.  
  129. bool
  130. FeedModel::removeElements(int row, int count, const QModelIndex &parent)
  131. {
  132. for(int i = 0; i < count; i++)
  133. {
  134. if (!removeElement(row, parent))
  135. return false;
  136. }
  137. return true;
  138. }
  139.  
  140. bool
  141. FeedModel::removeElement(int row, const QModelIndex &parent)
  142. {
  143. if (parent.isValid())
  144. {
  145. // This means that this is a feed.
  146. QModelIndex index = parent.child(row, 0);
  147. FeedNode *node = itemFromIndex(index);
  148.  
  149. QSqlQuery query(db);
  150. query.prepare ("DELETE FROM feeds WHERE id=:feed;");
  151. query.bindValue("feed", node->id());
  152.  
  153. if (!query.exec())
  154. {
  155. qDebug() << "Error removing a row";
  156. return false;
  157. }
  158. else
  159. QStandardItemModel::removeRow(row, parent);
  160. }
  161. else
  162. {
  163. // This means that this is a feed.
  164. QModelIndex index = this->index(row, 0, parent);
  165. FeedNode *node = itemFromIndex(index);
  166. QSqlQuery query(db);
  167. query.prepare ("DELETE FROM categories WHERE id=:category");
  168. query.bindValue("category", node->id());
  169.  
  170. if (!query.exec())
  171. {
  172. qDebug() << "Error removing a row";
  173. return false;
  174. }
  175. else
  176. {
  177. QStandardItemModel::removeRow(row, parent);
  178. }
  179. }
  180.  
  181. return true;
  182. }
  183.  
  184.  
  185.  
  186. bool
  187. FeedModel::addCategory(QString name)
  188. {
  189. // First push the data in the database.
  190. QSqlQuery query(db);
  191. query.prepare("INSERT INTO categories VALUES (NULL, :name);");
  192. query.bindValue("name", name);
  193.  
  194. // If the insertion works then update the QStandardItemModel
  195. bool successful = query.exec();
  196. if (successful)
  197. {
  198. FeedNode *node = new FeedNode (query.lastInsertId().toInt(), name);
  199. QStandardItem *root = invisibleRootItem();
  200. root->appendRow(node);
  201. }
  202. return successful;
  203. }
  204.  
  205. bool
  206. FeedModel::addFeed(QString name, QString url, FeedNode* categoryNode)
  207. {
  208. QSqlQuery query(db);
  209. query.prepare("INSERT INTO feeds VALUES (NULL, :category, :name, :url);");
  210. query.bindValue("category", categoryNode->id());
  211. query.bindValue("name", name);
  212. query.bindValue("url", url);
  213.  
  214. bool successful = query.exec();
  215. if (successful)
  216. {
  217. FeedNode *node = new FeedNode (query.lastInsertId().toInt(),
  218. name, url);
  219. categoryNode->appendRow(node);
  220. }
  221. else
  222. {
  223. qDebug() << "Query failed: " << query.executedQuery() << query.lastError();
  224. }
  225.  
  226. return successful;
  227. }
  228.  
  229. QVariant
  230. FeedModel::headerData(int section, Qt::Orientation orientation, int role) const
  231. {
  232. // We have a header data only for the first column, horizontal mode.
  233. if (role == Qt::DisplayRole && orientation == Qt::Horizontal && section == 0)
  234. return tr("Feed");
  235. else
  236. return QVariant ();
  237. }
  238.  
  239. QString
  240. FeedModel::getUrl(const QModelIndex &index)
  241. {
  242. FeedNode *node = itemFromIndex(index);
  243. return node->url();
  244. }
  245.  
  246. FeedNode*
  247. FeedModel::itemFromIndex(const QModelIndex &index)
  248. {
  249. if (index.isValid())
  250. return (FeedNode*) QStandardItemModel::itemFromIndex(index);
  251. else
  252. return rootNode;
  253. }
  254.  
  255. void
  256. FeedModel::triggerDataChanged()
  257. {
  258. dataChanged(index(1, 1, QModelIndex()),
  259. index(1, 1, QModelIndex()));
  260. }
  261.