Line data Source code
1 : #include "NewsItem.h"
2 : #include "NewsList.h"
3 : #include "../utilities/ErrorHandling.h"
4 :
5 :
6 130 : NewsList::NewsList(QObject *parent)
7 130 : : FangObject{parent}
8 130 : {}
9 :
10 133 : NewsList::~NewsList()
11 : {
12 111 : clear();
13 133 : }
14 :
15 113 : void NewsList::clear()
16 : {
17 : // Delete each and every news item.
18 170 : while(list.size() > 0) {
19 57 : list.takeFirst()->deleteLater();
20 : }
21 :
22 113 : set.clear();
23 113 : }
24 :
25 18 : qsizetype NewsList::size() const
26 : {
27 18 : return list.size();
28 : }
29 :
30 5 : bool NewsList::isEmpty() const
31 : {
32 5 : return list.isEmpty();
33 : }
34 :
35 6 : NewsItem *NewsList::first() const
36 : {
37 6 : return list.first();
38 : }
39 :
40 6 : NewsItem *NewsList::last() const
41 : {
42 6 : return list.last();
43 : }
44 :
45 5 : NewsItem *NewsList::at(qsizetype i) const
46 : {
47 5 : return list.at(i);
48 : }
49 :
50 25 : bool NewsList::contains(NewsItem* value) const
51 : {
52 25 : return set.contains(value);
53 : }
54 :
55 4 : qsizetype NewsList::indexOf(const NewsItem *value, qsizetype from) const
56 : {
57 4 : return list.indexOf(value, from);
58 : }
59 :
60 64 : void NewsList::append(NewsItem *value)
61 : {
62 64 : if (set.contains(value)) {
63 0 : qCritical() << "NewsList::append: Attempting to add duplicate item with ID" << value->getDbID();
64 0 : return;
65 : }
66 :
67 64 : set.insert(value);
68 64 : list.append(value);
69 : }
70 :
71 4 : void NewsList::prepend(NewsItem *value)
72 : {
73 4 : if (set.contains(value)) {
74 0 : qCritical() << "NewsList::prepend: Attempting to add duplicate item with ID" << value->getDbID();
75 0 : return;
76 : }
77 :
78 4 : set.insert(value);
79 4 : list.prepend(value);
80 : }
81 :
82 5 : void NewsList::removeAndDelete(bool fromStart, qsizetype numberToRemove)
83 : {
84 : // Remove from list, free memory.
85 16 : for (qsizetype i = 0; i < numberToRemove; i++) {
86 11 : if (fromStart) {
87 7 : NewsItem* n = list.takeFirst();
88 7 : set.remove(n);
89 7 : n->deleteLater();
90 : } else {
91 4 : NewsItem* n = list.takeLast();
92 4 : set.remove(n);
93 4 : n->deleteLater();
94 : }
95 : }
96 5 : }
97 :
98 4 : NewsItem *NewsList::newsItemForID(const qint64 id) const
99 : {
100 4 : if (id < 0) {
101 : // Invalid ID.
102 0 : qCritical() << "NewsList::newsItemForID: Invalid news ID" << id;
103 0 : return nullptr;
104 : }
105 :
106 4 : qsizetype index = indexForItemID(id);
107 4 : return index < 0 ? nullptr : list.at(index);
108 : }
109 :
110 8 : qsizetype NewsList::indexForItemID(const qint64 id) const
111 : {
112 16 : for (qsizetype i = 0; i < list.count(); ++i) {
113 14 : if (list.at(i)->getDbID() == id) {
114 6 : return i;
115 : }
116 : }
117 :
118 2 : return -1;
119 : }
|