diff options
Diffstat (limited to 'src/plugins/rssfeed/rss/image.cpp')
-rw-r--r-- | src/plugins/rssfeed/rss/image.cpp | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/src/plugins/rssfeed/rss/image.cpp b/src/plugins/rssfeed/rss/image.cpp new file mode 100644 index 0000000..65aaf53 --- /dev/null +++ b/src/plugins/rssfeed/rss/image.cpp @@ -0,0 +1,166 @@ +/* + * image.cpp + * + * Copyright (c) 2001, 2002, 2003 Frerich Raabe <[email protected]> + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. For licensing and distribution details, check the + * accompanying file 'COPYING'. + */ +#include "image.h" +#include "tools_p.h" + +#include <tdeio/job.h> +#include <kurl.h> + +#include <tqbuffer.h> +#include <tqdom.h> +#include <tqpixmap.h> + +using namespace RSS; + +struct Image::Private : public Shared +{ + Private() : height(31), width(88), pixmapBuffer(NULL), job(NULL) + { } + + TQString title; + KURL url; + KURL link; + TQString description; + unsigned int height; + unsigned int width; + TQBuffer *pixmapBuffer; + TDEIO::Job *job; +}; + +Image::Image() : TQObject(), d(new Private) +{ +} + +Image::Image(const Image &other) : TQObject(), d(0) +{ + *this = other; +} + +Image::Image(const TQDomNode &node) : TQObject(), d(new Private) +{ + TQString elemText; + + if (!(elemText = extractNode(node, TQString::fromLatin1("title"))).isNull()) + d->title = elemText; + if (!(elemText = extractNode(node, TQString::fromLatin1("url"))).isNull()) + d->url = elemText; + if (!(elemText = extractNode(node, TQString::fromLatin1("link"))).isNull()) + d->link = elemText; + if (!(elemText = extractNode(node, TQString::fromLatin1("description"))).isNull()) + d->description = elemText; + if (!(elemText = extractNode(node, TQString::fromLatin1("height"))).isNull()) + d->height = elemText.toUInt(); + if (!(elemText = extractNode(node, TQString::fromLatin1("width"))).isNull()) + d->width = elemText.toUInt(); +} + +Image::~Image() +{ + if (d->deref()) + { + delete d->pixmapBuffer; + d->pixmapBuffer=0L; + delete d; + } +} + +TQString Image::title() const +{ + return d->title; +} + +const KURL &Image::url() const +{ + return d->url; +} + +const KURL &Image::link() const +{ + return d->link; +} + +TQString Image::description() const +{ + return d->description; +} + +unsigned int Image::height() const +{ + return d->height; +} + +unsigned int Image::width() const +{ + return d->width; +} + +void Image::getPixmap() +{ + // Ignore subsequent calls if we didn't finish the previous download. + if (d->pixmapBuffer) + return; + + d->pixmapBuffer = new TQBuffer; + d->pixmapBuffer->open(IO_WriteOnly); + + d->job = TDEIO::get(d->url, false, false); + connect(d->job, TQ_SIGNAL(data(TDEIO::Job *, const TQByteArray &)), + this, TQ_SLOT(slotData(TDEIO::Job *, const TQByteArray &))); + connect(d->job, TQ_SIGNAL(result(TDEIO::Job *)), this, TQ_SLOT(slotResult(TDEIO::Job *))); +} + +void Image::slotData(TDEIO::Job *, const TQByteArray &data) +{ + d->pixmapBuffer->writeBlock(data.data(), data.size()); +} + +void Image::slotResult(TDEIO::Job *job) +{ + TQPixmap pixmap; + if (!job->error()) + pixmap = TQPixmap(d->pixmapBuffer->buffer()); + emit gotPixmap(pixmap); + + delete d->pixmapBuffer; + d->pixmapBuffer = NULL; +} + +void Image::abort() +{ + if (d->job) + { + d->job->kill(true); + d->job = NULL; + } +} + +Image &Image::operator=(const Image &other) +{ + if (this != &other) { + other.d->ref(); + if (d && d->deref()) + delete d; + d = other.d; + } + return *this; +} + +bool Image::operator==(const Image &other) const +{ + return d->title == other.title() && + d->url == other.url() && + d->description == other.description() && + d->height == other.height() && + d->width == other.width() && + d->link == other.link(); +} + +#include "image.moc" |