alkimia  8.0.2
alkfinancequoteprocess.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright 2004 Ace Jones <acejones@users.sourceforge.net> *
3  * Copyright 2004 Thomas Baumgart <thb@net-bembel.de> *
4  * *
5  * This file is part of libalkimia. *
6  * *
7  * libalkimia is free software; you can redistribute it and/or *
8  * modify it under the terms of the GNU General Public License *
9  * as published by the Free Software Foundation; either version 2.1 of *
10  * the License or (at your option) version 3 or any later version. *
11  * *
12  * libalkimia is distributed in the hope that it will be useful, *
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15  * GNU General Public License for more details. *
16  * *
17  * You should have received a copy of the GNU General Public License *
18  * along with this program. If not, see <http://www.gnu.org/licenses/> *
19  ***************************************************************************/
20 
21 #include "alkfinancequoteprocess.h"
22 
23 #include <QString>
24 #include <QMap>
25 
27 {
28 public:
29  typedef QMap<QString, QString> fqNameMap;
30  bool m_isDone;
31  QString m_string;
33 
34  Private() : m_isDone(false)
35  {
36  }
37 };
38 
40  : d(new Private)
41 {
42  d->m_fqNames["aex"] = "AEX";
43  d->m_fqNames["aex_futures"] = "AEX Futures";
44  d->m_fqNames["aex_options"] = "AEX Options";
45  d->m_fqNames["amfiindia"] = "AMFI India";
46  d->m_fqNames["asegr"] = "ASE";
47  d->m_fqNames["asia"] = "Asia (Yahoo, ...)";
48  d->m_fqNames["asx"] = "ASX";
49  d->m_fqNames["australia"] = "Australia (ASX, Yahoo, ...)";
50  d->m_fqNames["bmonesbittburns"] = "BMO NesbittBurns";
51  d->m_fqNames["brasil"] = "Brasil (Yahoo, ...)";
52  d->m_fqNames["canada"] = "Canada (Yahoo, ...)";
53  d->m_fqNames["canadamutual"] = "Canada Mutual (Fund Library, ...)";
54  d->m_fqNames["deka"] = "Deka Investments";
55  d->m_fqNames["dutch"] = "Dutch (AEX, ...)";
56  d->m_fqNames["dwsfunds"] = "DWS";
57  d->m_fqNames["europe"] = "Europe (Yahoo, ...)";
58  d->m_fqNames["fidelity"] = "Fidelity (Fidelity, ...)";
59  d->m_fqNames["fidelity_direct"] = "Fidelity Direct";
60  d->m_fqNames["financecanada"] = "Finance Canada";
61  d->m_fqNames["ftportfolios"] = "First Trust (First Trust, ...)";
62  d->m_fqNames["ftportfolios_direct"] = "First Trust Portfolios";
63  d->m_fqNames["fundlibrary"] = "Fund Library";
64  d->m_fqNames["greece"] = "Greece (ASE, ...)";
65  d->m_fqNames["indiamutual"] = "India Mutual (AMFI, ...)";
66  d->m_fqNames["maninv"] = "Man Investments";
67  d->m_fqNames["fool"] = "Motley Fool";
68  d->m_fqNames["nasdaq"] = "Nasdaq (Yahoo, ...)";
69  d->m_fqNames["nz"] = "New Zealand (Yahoo, ...)";
70  d->m_fqNames["nyse"] = "NYSE (Yahoo, ...)";
71  d->m_fqNames["nzx"] = "NZX";
72  d->m_fqNames["platinum"] = "Platinum Asset Management";
73  d->m_fqNames["seb_funds"] = "SEB";
74  d->m_fqNames["sharenet"] = "Sharenet";
75  d->m_fqNames["za"] = "South Africa (Sharenet, ...)";
76  d->m_fqNames["troweprice_direct"] = "T. Rowe Price";
77  d->m_fqNames["troweprice"] = "T. Rowe Price";
78  d->m_fqNames["tdefunds"] = "TD Efunds";
79  d->m_fqNames["tdwaterhouse"] = "TD Waterhouse Canada";
80  d->m_fqNames["tiaacref"] = "TIAA-CREF";
81  d->m_fqNames["trustnet"] = "Trustnet";
82  d->m_fqNames["uk_unit_trusts"] = "U.K. Unit Trusts";
83  d->m_fqNames["unionfunds"] = "Union Investments";
84  d->m_fqNames["tsp"] = "US Govt. Thrift Savings Plan";
85  d->m_fqNames["usfedbonds"] = "US Treasury Bonds";
86  d->m_fqNames["usa"] = "USA (Yahoo, Fool ...)";
87  d->m_fqNames["vanguard"] = "Vanguard";
88  d->m_fqNames["vwd"] = "VWD";
89  d->m_fqNames["yahoo"] = "Yahoo";
90  d->m_fqNames["yahoo_asia"] = "Yahoo Asia";
91  d->m_fqNames["yahoo_australia"] = "Yahoo Australia";
92  d->m_fqNames["yahoo_brasil"] = "Yahoo Brasil";
93  d->m_fqNames["yahoo_europe"] = "Yahoo Europe";
94  d->m_fqNames["yahoo_nz"] = "Yahoo New Zealand";
95  d->m_fqNames["zifunds"] = "Zuerich Investments";
96  connect(this, SIGNAL(readyReadStandardOutput()), this, SLOT(slotReceivedDataFromFilter()));
97  connect(this, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(slotProcessExited()));
98  connect(this, SIGNAL(error(QProcess::ProcessError)), this, SLOT(slotProcessExited()));
99 }
100 
102 {
103  QByteArray data(readAllStandardOutput());
104 
105 // kDebug(2) << "WebPriceQuoteProcess::slotReceivedDataFromFilter(): " << QString(data);
106  d->m_string += QString(data);
107 }
108 
110 {
111 // kDebug(2) << "WebPriceQuoteProcess::slotProcessExited()";
112  d->m_isDone = true;
113 }
114 
115 void AlkFinanceQuoteProcess::launch(const QString &scriptPath)
116 {
117  clearProgram();
118 
119  *this << "perl" << scriptPath << "-l";
120  setOutputChannelMode(KProcess::OnlyStdoutChannel);
121  start();
122  if (!waitForStarted()) {
123  qWarning("Unable to start FQ script");
124  }
125 }
126 
128 {
129  return d->m_isDone;
130 }
131 
132 const QStringList AlkFinanceQuoteProcess::getSourceList() const
133 {
134  QStringList raw = d->m_string.split(0x0A, QString::SkipEmptyParts);
135  QStringList sources;
136  QStringList::iterator it;
137  for (it = raw.begin(); it != raw.end(); ++it) {
138  if (d->m_fqNames[*it].isEmpty()) {
139  sources.append(*it);
140  } else {
141  sources.append(d->m_fqNames[*it]);
142  }
143  }
144  sources.sort();
145  return sources;
146 }
147 
148 const QString AlkFinanceQuoteProcess::crypticName(const QString &niceName) const
149 {
150  QString ret(niceName);
151  Private::fqNameMap::const_iterator it;
152  for (it = d->m_fqNames.begin(); it != d->m_fqNames.end(); ++it) {
153  if (niceName == it.value()) {
154  ret = it.key();
155  break;
156  }
157  }
158  return ret;
159 }
160 
161 const QString AlkFinanceQuoteProcess::niceName(const QString &crypticName) const
162 {
163  QString ret(d->m_fqNames[crypticName]);
164  if (ret.isEmpty()) {
165  ret = crypticName;
166  }
167  return ret;
168 }
AlkFinanceQuoteProcess::Private::m_fqNames
fqNameMap m_fqNames
Definition: alkfinancequoteprocess.cpp:50
AlkFinanceQuoteProcess::d
Private *const d
Definition: alkfinancequoteprocess.h:70
AlkFinanceQuoteProcess::Private
Definition: alkfinancequoteprocess.cpp:26
AlkFinanceQuoteProcess::Private::m_string
QString m_string
Definition: alkfinancequoteprocess.cpp:49
AlkFinanceQuoteProcess::niceName
const QString niceName(const QString &crypticName) const
Definition: alkfinancequoteprocess.cpp:161
AlkFinanceQuoteProcess::Private::fqNameMap
QMap< QString, QString > fqNameMap
Definition: alkfinancequoteprocess.cpp:47
AlkFinanceQuoteProcess::slotReceivedDataFromFilter
void slotReceivedDataFromFilter()
Definition: alkfinancequoteprocess.cpp:101
AlkFinanceQuoteProcess::crypticName
const QString crypticName(const QString &niceName) const
Definition: alkfinancequoteprocess.cpp:148
AlkFinanceQuoteProcess::getSourceList
const QStringList getSourceList() const
Definition: alkfinancequoteprocess.cpp:132
AlkFinanceQuoteProcess::Private::Private
Private()
Definition: alkfinancequoteprocess.cpp:52
AlkFinanceQuoteProcess::slotProcessExited
void slotProcessExited()
Definition: alkfinancequoteprocess.cpp:109
AlkFinanceQuoteProcess::isFinished
bool isFinished() const
Definition: alkfinancequoteprocess.cpp:127
alkfinancequoteprocess.h
AlkFinanceQuoteProcess::Private::m_isDone
bool m_isDone
Definition: alkfinancequoteprocess.cpp:48
AlkFinanceQuoteProcess::launch
void launch(const QString &scriptPath)
Definition: alkfinancequoteprocess.cpp:115
AlkFinanceQuoteProcess::AlkFinanceQuoteProcess
AlkFinanceQuoteProcess()
Definition: alkfinancequoteprocess.cpp:39