Revision 1833 trunk/client/gui_qt/WidgetNZBCreator.cpp

WidgetNZBCreator.cpp (revision 1833)
14 14
    FIELD_FILE_SIZE,
15 15
    FIELD_STAMP,
16 16
    FIELD_FILE_ID,
17
    FIELD_COLLECTION_NAME_SHORT
17
    FIELD_COLLECTION_NAME_SHORT,
18
    FIELD_IS_SINGLE_FILE
18 19
};
19 20

                
20 21
WidgetNZBCreator::WidgetNZBCreator(QNNTPGrabGlue *glue, QWidget *parent) :
... ...
40 41

                
41 42
    ui->treeWidget->setColumnHidden(FIELD_FILE_ID, true);
42 43
    ui->treeWidget->setColumnHidden(FIELD_COLLECTION_NAME_SHORT, true);
44
    ui->treeWidget->setColumnHidden(FIELD_IS_SINGLE_FILE, true);
43 45

                
44 46
    connect(&watcher_search, SIGNAL(finished()), SLOT(performSearch_finished()));
45
    connect(&watcher_details, SIGNAL(finished()), SLOT(performGetDetails_finished()));
46 47
    connect(&watcher_import, SIGNAL(finished()), SLOT(performImport_finished()));
48

                
49
    pool_details.setMaxThreadCount(5);
47 50
}
48 51

                
49 52
WidgetNZBCreator::~WidgetNZBCreator()
... ...
143 146
        collection_item->setText(FIELD_PERCENTAGE_COMPLETE, QString("%1").arg(collection.complete_percentage));
144 147
        collection_item->setText(FIELD_FILE_ID, QString("%1").arg(collection.collection_id));
145 148

                
146
        QTreeWidgetItem *file_item = new QTreeWidgetItem(collection_item);
147
        file_item->setText(FIELD_SUBJECT, tr("No information available yet. Please wait a moment..."));
148

                
149
#if 0
150
        int percentage_total = 0;
151
        QString poster = "";
152
        bool unique_poster = true;
153

                
154 149
        /* Don't show an expander for collections with only one file */
155
        if (collection.files.count() == 1) {
156
            collection_item->setText(FIELD_FILE_ID, QString("%1").arg(collection.files.at(0).file_id));
157
            percentage_total = collection.files.at(0).complete_percentage;
150
        if (collection.first_file_id != -1) {
151
            collection_item->setText(FIELD_FILE_ID, QString("%1").arg(collection.first_file_id));
152
            collection_item->setText(FIELD_IS_SINGLE_FILE, "1");
158 153
        } else {
159
            Q_FOREACH(QNZBCreator::File file, collection.files) {
160
                QTreeWidgetItem *file_item = new QTreeWidgetItem(collection_item);
161

                
162
                file_item->setCheckState(FIELD_IMPORT, Qt::Unchecked);
163
                file_item->setText(FIELD_PERCENTAGE_COMPLETE, QString("%1").arg(file.complete_percentage));
164
                file_item->setText(FIELD_SUBJECT, file.subject);
165
                file_item->setText(FIELD_POSTER, file.poster);
166
                file_item->setText(FIELD_NEWSGROUP, collection.newsgroup);
167
                file_item->setText(FIELD_FILE_SIZE, QNNTPGrabGlue::utilsCalculateFileSize(file.file_size));
168
                file_item->setText(FIELD_STAMP, file.stamp.toString());
169
                file_item->setText(FIELD_FILE_ID, QString("%1").arg(file.file_id));
170
                percentage_total += file.complete_percentage;
171

                
172
                if (poster.isEmpty()) {
173
                    poster = file.poster;
174
                } else if (poster != file.poster) {
175
                    unique_poster = false;
176
                }
177
            }
154
            QTreeWidgetItem *file_item = new QTreeWidgetItem(collection_item);
155
            file_item->setText(FIELD_SUBJECT, "unknown");
178 156
        }
179
#endif
180 157

                
181 158
        ui->treeWidget->addTopLevelItem(collection_item);
182 159
    }
183 160
}
184 161

                
185
WidgetNZBCreator::DetailsResult WidgetNZBCreator::performGetDetails(QTreeWidgetItem *item, qint64 collection_id)
162
void WidgetNZBCreator::performGetDetails(QTreeWidgetItem *item, int collection_id, QDateTime stamp)
186 163
{
187
    WidgetNZBCreator::DetailsResult ret;
164
    WidgetNZBCreatorDetails *watcher = new WidgetNZBCreatorDetails(item, collection_id, stamp);
188 165

                
189
    ret.item = item;
190
    ret.ret = nzbcreator.retrieveAdditionalCollectionDetails(collection_id, ret.errmsg, ret.files);
166
    item->child(0)->setText(FIELD_SUBJECT, tr("No information available yet. Please wait a moment..."));
191 167

                
192
    return ret;
168
    connect(watcher, SIGNAL(finished(bool,QTreeWidgetItem*,QList,QString)), SLOT(performGetDetails_finished(bool,QTreeWidgetItem*,QList,QString)), Qt::QueuedConnection);
169
    pool_details.start(watcher);
193 170
}
194 171

                
195
void WidgetNZBCreator::performGetDetails_finished()
172
void WidgetNZBCreator::performGetDetails_finished(bool ret, QTreeWidgetItem *item, QList files, QString errmsg)
196 173
{
197
    WidgetNZBCreator::DetailsResult result = future_details.result();
198

                
199
    if (!result.ret) {
200
        qWarning((tr("Retrieving online search collection details failed: ") + result.errmsg).toUtf8());
174
    if (!ret) {
175
        qWarning((tr("Retrieving online search collection details failed: ") + errmsg).toUtf8());
201 176
        return;
202 177
    }
203 178

                
204
     Q_FOREACH(QNZBCreator::File file, result.files) {
205
         QTreeWidgetItem *file_item = new QTreeWidgetItem(result.item);
179
     Q_FOREACH(QNZBCreator::File file, files) {
180
         QTreeWidgetItem *file_item = new QTreeWidgetItem(item);
206 181

                
207
         file_item->setCheckState(FIELD_IMPORT, Qt::Unchecked);
182
         /* Automatically select all the files if the placeholder is checked already */
183
         file_item->setCheckState(FIELD_IMPORT, item->checkState(FIELD_IMPORT));
184

                
208 185
         file_item->setText(FIELD_PERCENTAGE_COMPLETE, QString("%1").arg(file.complete_percentage));
209 186
         file_item->setText(FIELD_SUBJECT, file.subject);
210 187
         file_item->setText(FIELD_POSTER, file.poster);
211
         file_item->setText(FIELD_NEWSGROUP, result.item->text(FIELD_NEWSGROUP));
188
         file_item->setText(FIELD_NEWSGROUP, item->text(FIELD_NEWSGROUP));
212 189
         file_item->setText(FIELD_FILE_SIZE, QNNTPGrabGlue::utilsCalculateFileSize(file.file_size));
213 190
         file_item->setText(FIELD_STAMP, file.stamp.toString());
214 191
         file_item->setText(FIELD_FILE_ID, QString("%1").arg(file.file_id));
215 192
     }
216 193

                
217 194
     /* Remove the placeholder item */
218
     result.item->removeChild(result.item->child(0));
195
     item->removeChild(item->child(0));
219 196
}
220 197

                
221 198
void WidgetNZBCreator::btnImport_clicked()
... ...
254 231
                }
255 232
            }
256 233
        }
234

                
235
        /* Is this a single-file collection? */
236
        if (collection_item->text(FIELD_IS_SINGLE_FILE) != "" &&
237
            collection_item->checkState(FIELD_IMPORT) == Qt::Checked) {
238

                
239
            file_ids.append(collection_item->text(FIELD_FILE_ID).toInt());
240

                
241
            if (collection_name.isEmpty()) {
242
                collection_name = collection_item->text(FIELD_COLLECTION_NAME_SHORT);
243
            } else if (collection_name != collection_item->text(FIELD_COLLECTION_NAME_SHORT)) {
244
                multiple_collections = TRUE;
245
            }
246
        }
257 247
    }
258 248

                
259 249
    if (collection_name.isEmpty()) {
... ...
326 316
        return;
327 317
    }
328 318

                
329
    if (item->checkState(column) == Qt::Checked) {
330
        for (int i = 0; i < item->childCount(); i++) {
331
            item->child(i)->setCheckState(FIELD_IMPORT, Qt::Checked);
319
    for (int i = 0; i < item->childCount(); i++) {
320
        QTreeWidgetItem *item_child = item->child(i);
321
        item_child->setCheckState(FIELD_IMPORT, item->checkState(column));
322

                
323
        /* Do we know the contents of this collection yet? */
324
        if (i == 0 && item_child->text(FIELD_SUBJECT) == "unknown") {
325
            /* Start a job to retrieve the details */
326
            qint64 collection_id = item->text(FIELD_FILE_ID).toInt();
327
            QDateTime stamp = QDateTime::fromString(item->text(FIELD_STAMP));
328
            performGetDetails(item, collection_id, stamp);
332 329
        }
333
    } else {
334
        for (int i = 0; i < item->childCount(); i++) {
335
            item->child(i)->setCheckState(FIELD_IMPORT, Qt::Unchecked);
336
        }
337 330
    }
338 331
}
339 332

                
... ...
344 337
    QTreeWidgetItem *item_child = ui->treeWidget->getItemByIndex(idx_child);
345 338
    Q_ASSERT(item_child != NULL);
346 339

                
347
    if (item_child->text(FIELD_SUBJECT) != tr("No information available yet. Please wait a moment...")) {
340
    if (item_child->text(FIELD_SUBJECT) != "unknown") {
348 341
        /* Nothing to do as the real data is already there */
349 342
        return;
350 343
    }
... ...
354 347
    Q_ASSERT(item_parent != NULL);
355 348

                
356 349
    qint64 collection_id = item_parent->text(FIELD_FILE_ID).toInt();
357
    future_details = QtConcurrent::run(this, &WidgetNZBCreator::performGetDetails, item_parent, collection_id);
358
    watcher_details.setFuture(future_details);
350
    QDateTime stamp = QDateTime::fromString(item_parent->text(FIELD_STAMP));
351
    performGetDetails(item_parent, collection_id, stamp);
359 352
}

Also available in: Unified diff