/*************************************************************************** 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 WEBPRICETQUOTE_H #define WEBPRICETQUOTE_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 TQ_OBJECT public: WebPriceQuoteProcess(void); void setSymbol(const TQString& _symbol) { m_symbol = _symbol; m_string.truncate(0); } public slots: void slotReceivedDataFromFilter(KProcess*, char*, int); void slotProcessExited(KProcess*); signals: void processExited(const TQString&); private: TQString m_symbol; TQString 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 TQ_OBJECT public: FinanceQuoteProcess(void); void launch (const TQString& scriptPath); bool isFinished() { return(m_isDone);}; TQStringList getSourceList(); const TQString crypticName(const TQString& niceName); const TQString niceName(const TQString& crypticName); public slots: void slotReceivedDataFromFilter(KProcess*, char*, int); void slotProcessExited(KProcess*); private: bool m_isDone; TQString m_string; typedef TQMap 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 TQString& name); WebPriceQuoteSource(const TQString& name, const TQString& url, const TQString& sym, const TQString& price, const TQString& date, const TQString& dateformat); ~WebPriceQuoteSource() {} void write(void) const; void rename(const TQString& name); void remove(void) const; TQString m_name; TQString m_url; TQString m_sym; TQString m_price; TQString m_date; TQString m_dateformat; bool m_skipStripping; }; /** Retrieves a price quote from a web-based quote source @author Ace Jones */ class WebPriceQuote: public TQObject { Q_OBJECT TQ_OBJECT public: WebPriceQuote( TQObject* = 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 TQString() to use the default * source. * @return bool Whether the quote fetch process was launched successfully */ bool launch(const TQString& _symbol, const TQString& _id, const TQString& _source=TQString()); /** * 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 TQStringList of quote source names */ static TQStringList quoteSources(const _quoteSystemE _system=Native); signals: void quote(const TQString&, const TQString&, const TQDate&, const double&); void failed(const TQString&, const TQString&); void status(const TQString&); void error(const TQString&); protected slots: void slotParseQuote(const TQString&); protected: static TQMap defaultQuoteSources(void); private: bool download(const KURL& u, TQString & target, TQWidget* window); void removeTempFile(const TQString& tmpFile); private slots: void slotResult( KIO::Job * job ); private: bool launchNative(const TQString& _symbol, const TQString& _id, const TQString& _source=TQString()); bool launchFinanceQuote(const TQString& _symbol, const TQString& _id, const TQString& _source=TQString()); void enter_loop(void); static TQStringList quoteSourcesNative(); static TQStringList quoteSourcesFinanceQuote(); WebPriceQuoteProcess m_filter; TQString m_symbol; TQString m_id; TQDate m_date; double m_price; WebPriceQuoteSource m_source; static TQString m_financeQuoteScriptPath; static TQStringList m_financeQuoteSources; /** * Whether the download succeeded or not. Taken from KIO::NetAccess */ bool bJobOK; static TQString* lastErrorMsg; static int lastErrorCode; TQString m_tmpFile; }; class MyMoneyDateFormat { public: MyMoneyDateFormat(const TQString& _format): m_format(_format) {} TQString convertDate(const TQDate& _in) const; TQDate convertString(const TQString& _in, bool _strict=true, unsigned _centurymidpoint = TQDate::tqcurrentDate().year() ) const; const TQString& format(void) const { return m_format; } private: TQString m_format; }; namespace convertertest { /** Simple class to handle signals/slots for unit tests @author Ace Jones */ class QuoteReceiver : public TQObject { Q_OBJECT TQ_OBJECT public: QuoteReceiver(WebPriceQuote* q, TQObject *tqparent = 0, const char *name = 0); ~QuoteReceiver(); public slots: void slotGetQuote(const TQString&,const TQDate&, const double&); void slottqStatus(const TQString&); void slotError(const TQString&); public: TQStringList m_statuses; TQStringList m_errors; MyMoneyMoney m_price; TQDate m_date; }; } // end namespace convertertest #endif // WEBPRICETQUOTE_H // vim:cin:si:ai:et:ts=2:sw=2: