File: feedretriever.cpp

package info (click to toggle)
ktorrent 25.04.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 25,104 kB
  • sloc: cpp: 40,482; xml: 1,163; python: 182; sh: 10; makefile: 5
file content (79 lines) | stat: -rw-r--r-- 1,728 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
    SPDX-FileCopyrightText: 2008 Joris Guisson <joris.guisson@gmail.com>
    SPDX-FileCopyrightText: 2008 Ivan Vasic <ivasic@gmail.com>
    SPDX-License-Identifier: GPL-2.0-or-later
*/

#include <KIO/StoredTransferJob>

#include "feedretriever.h"
#include <ktversion.h>
#include <util/log.h>

using namespace bt;

namespace kt
{
FeedRetriever::FeedRetriever()
    : job(nullptr)
    , err(0)
{
}

FeedRetriever::FeedRetriever(const QString &file_name)
    : backup_file(file_name)
    , job(nullptr)
    , err(0)
{
}

FeedRetriever::~FeedRetriever()
{
}

void FeedRetriever::setAuthenticationCookie(const QString &cookie)
{
    this->cookie = cookie;
}

void FeedRetriever::abort()
{
    if (job)
        job->kill(KJob::EmitResult);
}

int FeedRetriever::errorCode() const
{
    return err;
}

void FeedRetriever::retrieveData(const QUrl &url)
{
    KIO::StoredTransferJob *j = KIO::storedGet(url, KIO::NoReload, KIO::HideProgressInfo);
    j->addMetaData(QStringLiteral("UserAgent"), bt::GetVersionString());
    if (!cookie.isEmpty()) {
        j->addMetaData(QStringLiteral("cookies"), QStringLiteral("none"));
        j->addMetaData(QStringLiteral("customHTTPHeader"), QStringLiteral("Cookie: %1").arg(cookie));
    }

    connect(j, &KIO::StoredTransferJob::result, this, &FeedRetriever::finished);
    job = j;
}

void FeedRetriever::finished(KJob *j)
{
    KIO::StoredTransferJob *stj = (KIO::StoredTransferJob *)j;
    err = stj->error();
    QByteArray data = stj->data();
    if (!err && !backup_file.isEmpty()) {
        QFile fptr(backup_file);
        if (fptr.open(QIODevice::WriteOnly)) {
            fptr.write(data);
            fptr.close();
        }
    }

    Q_EMIT dataRetrieved(data, err == 0);
}

}