From dadc34655c3ab961b0b0b94a10eaaba710f0b5e8 Mon Sep 17 00:00:00 2001 From: tpearson Date: Mon, 4 Jul 2011 22:38:03 +0000 Subject: Added kmymoney git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kmymoney@1239792 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kmymoney2/converter/webpricequote.h | 252 ++++++++++++++++++++++++++++++++++++ 1 file changed, 252 insertions(+) create mode 100644 kmymoney2/converter/webpricequote.h (limited to 'kmymoney2/converter/webpricequote.h') diff --git a/kmymoney2/converter/webpricequote.h b/kmymoney2/converter/webpricequote.h new file mode 100644 index 0000000..e25dfb8 --- /dev/null +++ b/kmymoney2/converter/webpricequote.h @@ -0,0 +1,252 @@ +/*************************************************************************** + webpricequote.h + ------------------- + begin : Thu Dec 30 2004 + copyright : (C) 2004 by Ace Jones + email : Ace Jones + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef WEBPRICEQUOTE_H +#define WEBPRICEQUOTE_H + +// ---------------------------------------------------------------------------- +// QT Headers + +#include +#include +#include +#include + +// ---------------------------------------------------------------------------- +// KDE Headers + +#include +namespace KIO { + class Job; +}; + +// ---------------------------------------------------------------------------- +// Project Headers + +#include "../mymoney/mymoneymoney.h" + +/** +Helper class to attend the process which is running the script, in the case +of a local script being used to fetch the quote. + +@author Thomas Baumgart & Ace Jones +*/ +class WebPriceQuoteProcess: public KProcess +{ + Q_OBJECT +public: + WebPriceQuoteProcess(void); + void setSymbol(const QString& _symbol) { m_symbol = _symbol; m_string.truncate(0); } + +public slots: + void slotReceivedDataFromFilter(KProcess*, char*, int); + void slotProcessExited(KProcess*); + +signals: + void processExited(const QString&); + +private: + QString m_symbol; + QString m_string; +}; + +/** +Helper class to run the Finance::Quote process. This is used only for the purpose of obtaining +a list of valid sources. The actual price quotes are obtained thru WebPriceQuoteProcess. +The class also contains functions to convert between the rather cryptic source names used +by the Finance::Quote package, and more user-friendly names. + +@author Thomas Baumgart & Ace Jones , Tony B + */ +class FinanceQuoteProcess: public KProcess +{ + Q_OBJECT + public: + FinanceQuoteProcess(void); + void launch (const QString& scriptPath); + bool isFinished() { return(m_isDone);}; + QStringList getSourceList(); + const QString crypticName(const QString& niceName); + const QString niceName(const QString& crypticName); + + public slots: + void slotReceivedDataFromFilter(KProcess*, char*, int); + void slotProcessExited(KProcess*); + + private: + bool m_isDone; + QString m_string; + typedef QMap fqNameMap; + fqNameMap m_fqNames; +}; + +/** + * @author Thomas Baumgart & Ace Jones + * + * This is a helper class to store information about an online source + * for stock prices or currency exchange rates. + */ +struct WebPriceQuoteSource +{ + WebPriceQuoteSource() {} + WebPriceQuoteSource(const QString& name); + WebPriceQuoteSource(const QString& name, const QString& url, const QString& sym, const QString& price, const QString& date, const QString& dateformat); + ~WebPriceQuoteSource() {} + + void write(void) const; + void rename(const QString& name); + void remove(void) const; + + QString m_name; + QString m_url; + QString m_sym; + QString m_price; + QString m_date; + QString m_dateformat; + bool m_skipStripping; +}; + +/** +Retrieves a price quote from a web-based quote source + +@author Ace Jones +*/ +class WebPriceQuote: public QObject +{ + Q_OBJECT +public: + WebPriceQuote( QObject* = 0, const char* = 0 ); + ~WebPriceQuote(); + + typedef enum _quoteSystemE { + Native=0, + FinanceQuote + } quoteSystemE; + + /** + * This launches a web-based quote update for the given @p _symbol. + * When the quote is received back from the web source, it will be + * emitted on the 'quote' signal. + * + * @param _symbol the trading symbol of the stock to fetch a price for + * @param _id an arbitrary identifier, which will be emitted in the quote + * signal when a price is sent back. + * @param _source the source of the quote (must be a valid value returned + * by quoteSources(). Send QString() to use the default + * source. + * @return bool Whether the quote fetch process was launched successfully + */ + + bool launch(const QString& _symbol, const QString& _id, const QString& _source=QString()); + + /** + * This returns a list of the names of the quote sources + * currently defined. + * + * @param _system whether to return Native or Finance::Quote source list + * @return QStringList of quote source names + */ + static QStringList quoteSources(const _quoteSystemE _system=Native); + +signals: + void quote(const QString&, const QString&, const QDate&, const double&); + void failed(const QString&, const QString&); + void status(const QString&); + void error(const QString&); + +protected slots: + void slotParseQuote(const QString&); + +protected: + static QMap defaultQuoteSources(void); + +private: + bool download(const KURL& u, QString & target, QWidget* window); + void removeTempFile(const QString& tmpFile); + +private slots: + void slotResult( KIO::Job * job ); + + +private: + bool launchNative(const QString& _symbol, const QString& _id, const QString& _source=QString()); + bool launchFinanceQuote(const QString& _symbol, const QString& _id, const QString& _source=QString()); + void enter_loop(void); + + static QStringList quoteSourcesNative(); + static QStringList quoteSourcesFinanceQuote(); + + WebPriceQuoteProcess m_filter; + QString m_symbol; + QString m_id; + QDate m_date; + double m_price; + WebPriceQuoteSource m_source; + static QString m_financeQuoteScriptPath; + static QStringList m_financeQuoteSources; + + + /** + * Whether the download succeeded or not. Taken from KIO::NetAccess + */ + bool bJobOK; + static QString* lastErrorMsg; + static int lastErrorCode; + QString m_tmpFile; +}; + +class MyMoneyDateFormat +{ +public: + MyMoneyDateFormat(const QString& _format): m_format(_format) {} + QString convertDate(const QDate& _in) const; + QDate convertString(const QString& _in, bool _strict=true, unsigned _centurymidpoint = QDate::currentDate().year() ) const; + const QString& format(void) const { return m_format; } +private: + QString m_format; +}; + +namespace convertertest { + +/** +Simple class to handle signals/slots for unit tests + +@author Ace Jones +*/ +class QuoteReceiver : public QObject +{ +Q_OBJECT +public: + QuoteReceiver(WebPriceQuote* q, QObject *parent = 0, const char *name = 0); + ~QuoteReceiver(); +public slots: + void slotGetQuote(const QString&,const QDate&, const double&); + void slotStatus(const QString&); + void slotError(const QString&); +public: + QStringList m_statuses; + QStringList m_errors; + MyMoneyMoney m_price; + QDate m_date; +}; + +} // end namespace convertertest + + +#endif // WEBPRICEQUOTE_H + +// vim:cin:si:ai:et:ts=2:sw=2: -- cgit v1.2.1