You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
204 lines
4.8 KiB
204 lines
4.8 KiB
/*
|
|
* newsengine.h
|
|
*
|
|
* Copyright (c) 2000, 2001 Frerich Raabe <raabe@kde.org>
|
|
*
|
|
* 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'.
|
|
*/
|
|
#ifndef NEWSENGINE_H
|
|
#define NEWSENGINE_H
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include <config.h>
|
|
#endif
|
|
|
|
#include "configiface.h"
|
|
#include "xmlnewsaccess.h"
|
|
|
|
#include <tqptrlist.h>
|
|
#include <tqmap.h>
|
|
#include <tqpixmap.h>
|
|
|
|
#include <kio/job.h>
|
|
#include <klocale.h>
|
|
#include <ksharedptr.h>
|
|
|
|
class ConfigAccess;
|
|
class NewsIconMgr;
|
|
class NewsSourceBase;
|
|
|
|
class QBuffer;
|
|
class QDomDocument;
|
|
|
|
class KProcess;
|
|
class KURL;
|
|
|
|
class KDE_EXPORT Article : public XMLNewsArticle, public KShared
|
|
{
|
|
public:
|
|
typedef KSharedPtr<Article> Ptr;
|
|
typedef TQValueList<Ptr> List;
|
|
|
|
Article(NewsSourceBase *, const TQString & = TQString::null,
|
|
const KURL & = KURL());
|
|
bool operator==(const Article &other) const;
|
|
|
|
bool read() const { return m_read; }
|
|
void setRead(bool read) { m_read = read; }
|
|
|
|
NewsSourceBase *newsSource() const { return m_parent; }
|
|
|
|
void open();
|
|
|
|
private:
|
|
NewsSourceBase *m_parent; // don't use KSharedPtr to avoid circular refs!
|
|
bool m_read;
|
|
};
|
|
|
|
class KDE_EXPORT NewsSourceBase : public XMLNewsSource, public KShared
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
enum Subject {
|
|
Arts = 0, Business, Computers, Games, Health, Home, Recreation,
|
|
Reference, Science, Shopping, Society, Sports, Misc, Magazines
|
|
};
|
|
struct Data {
|
|
Data(const TQString &_name = I18N_NOOP("Unknown"),
|
|
const TQString &_sourceFile = TQString::null,
|
|
const TQString &_icon = TQString::null,
|
|
const Subject _subject = Computers,
|
|
unsigned int _maxArticles = 10,
|
|
bool _enabled = true, bool _isProgram = false,
|
|
const TQString &_language = TQString::fromLatin1("C"))
|
|
{
|
|
name = _name;
|
|
sourceFile = _sourceFile;
|
|
icon = _icon;
|
|
maxArticles = _maxArticles;
|
|
subject = _subject;
|
|
enabled = _enabled;
|
|
isProgram = _isProgram;
|
|
language = _language;
|
|
}
|
|
|
|
TQString name;
|
|
TQString sourceFile;
|
|
TQString icon;
|
|
Subject subject;
|
|
unsigned int maxArticles;
|
|
bool enabled;
|
|
bool isProgram;
|
|
TQString language;
|
|
};
|
|
typedef KSharedPtr<NewsSourceBase> Ptr;
|
|
typedef TQValueList<Ptr> List;
|
|
|
|
NewsSourceBase(const Data &, ConfigIface *);
|
|
|
|
virtual TQString newsSourceName() const;
|
|
TQString sourceFile() const { return m_data.sourceFile; }
|
|
unsigned int maxArticles() const { return m_data.maxArticles; }
|
|
TQPixmap icon() const { return m_icon; }
|
|
void getIcon();
|
|
|
|
Data data() const { return m_data; }
|
|
|
|
Article::List articles() const { return m_articles; }
|
|
Article::Ptr article(const TQString &);
|
|
|
|
static TQString subjectText(const Subject);
|
|
|
|
signals:
|
|
void newNewsAvailable(const NewsSourceBase::Ptr &, bool);
|
|
void invalidInput(const NewsSourceBase::Ptr &);
|
|
|
|
public slots:
|
|
virtual void retrieveNews() = 0;
|
|
|
|
protected slots:
|
|
void slotProcessArticles(XMLNewsSource *, bool);
|
|
void slotGotIcon(const KURL &, const TQPixmap &);
|
|
|
|
protected:
|
|
Data m_data;
|
|
TQPixmap m_icon;
|
|
ConfigAccess *m_cfg;
|
|
NewsIconMgr *m_newsIconMgr;
|
|
Article::List m_articles;
|
|
};
|
|
|
|
class KDE_EXPORT SourceFileNewsSource : public NewsSourceBase
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
SourceFileNewsSource(const NewsSourceBase::Data &, ConfigIface *);
|
|
|
|
public slots:
|
|
virtual void retrieveNews();
|
|
};
|
|
|
|
// Make sure compilers don't translate
|
|
// ProgramNewsSource::ErrorCode into
|
|
// enum ErrorCode { 1 = 2, ... }
|
|
#undef NOERR
|
|
#undef EPERM
|
|
#undef ENOENT
|
|
#undef EIO
|
|
#undef E2BIG
|
|
#undef ENOEXEC
|
|
#undef EACCESS
|
|
#undef ENODEV
|
|
#undef ENOSPC
|
|
#undef EROFS
|
|
#undef ENOSYS
|
|
#undef ENODATA
|
|
#undef ENONET
|
|
#undef EPROTO
|
|
#undef EDESTADDRREQ
|
|
#undef ESOCKTNOSUPPORT
|
|
#undef ENETUNREACH
|
|
#undef ENETRESET
|
|
#undef ECONNRESET
|
|
#undef ETIMEDOUT
|
|
#undef ECONNREFUSED
|
|
#undef EHOSTDOWN
|
|
#undef EHOSTUNREACH
|
|
|
|
class KDE_EXPORT ProgramNewsSource : public NewsSourceBase
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
enum ErrorCode { NOERR = 0, EPERM, ENOENT, EIO = 5, E2BIG = 7,
|
|
ENOEXEC, EACCESS = 13, ENODEV = 19, ENOSPC = 28, EROFS = 30,
|
|
ENOSYS = 38, ENODATA = 61, ENONET = 64, EPROTO = 71, EDESTADDRREQ = 89,
|
|
ESOCKTNOSUPPORT = 94, ENETUNREACH = 101, ENETRESET = 102,
|
|
ECONNRESET = 104, ETIMEDOUT = 110, ECONNREFUSED, EHOSTDOWN, EHOSTUNREACH,
|
|
ENOEXECBIT = 126, EBADREQ = 400, ENOAUTH, EMUSTPAY, EFORBIDDEN, ENOTFOUND,
|
|
ETIMEOUT = 408, ESERVERE = 500, EHTTPNOSUP = 505 };
|
|
|
|
ProgramNewsSource(const NewsSourceBase::Data &, ConfigIface *);
|
|
virtual ~ProgramNewsSource();
|
|
|
|
public slots:
|
|
virtual void retrieveNews();
|
|
|
|
protected slots:
|
|
void slotGotProgramOutput(KProcess *, char *, int);
|
|
void slotProgramExited(KProcess *);
|
|
|
|
private:
|
|
static TQString errorMessage(const ErrorCode);
|
|
|
|
KProcess *m_program;
|
|
TQBuffer *m_programOutput;
|
|
};
|
|
|
|
#endif // NEWSENGINE_H
|