app.cpp Example File
twittertimeline/src/app.cpp
#include "app.hpp"
#include "TwitterRequest.hpp"
#include <bb/cascades/AbstractPane>
#include <bb/cascades/Application>
#include <bb/cascades/QmlDocument>
#include <bb/data/JsonDataAccess>
using namespace bb::cascades;
using namespace bb::data;
App::App(QObject *parent)
: QObject(parent)
, m_active(false)
, m_error(false)
, m_model(new GroupDataModel(QStringList() << "id_str", this))
{
m_model->setGrouping(ItemGrouping::None);
QmlDocument* qml = QmlDocument::create("asset:///main.qml").parent(this);
qml->setContextProperty("_timeline", this);
AbstractPane* root = qml->createRootObject<AbstractPane>();
Application::instance()->setScene(root);
}
void App::reset()
{
m_error = false;
m_errorMessage.clear();
emit statusChanged();
}
void App::requestTweets(const QString &screenName)
{
if (m_active)
return;
const QStringList list = screenName.split(QRegExp("\\s+"), QString::SkipEmptyParts);
if (list.isEmpty()) {
m_errorMessage = "please enter a valid screen name";
m_error = true;
emit statusChanged();
return;
}
const QString twitterId = (list.first().startsWith('@') ? list.first().mid(1) : list.first());
TwitterRequest* request = new TwitterRequest(this);
connect(request, SIGNAL(complete(QString, bool)), this, SLOT(onTwitterTimeline(QString, bool)));
request->requestTimeline(twitterId);
m_active = true;
emit activeChanged();
}
void App::onTwitterTimeline(const QString &info, bool success)
{
TwitterRequest *request = qobject_cast<TwitterRequest*>(sender());
if (success) {
parseResponse(info);
emit tweetsLoaded();
} else {
m_errorMessage = info;
m_error = true;
emit statusChanged();
}
m_active = false;
emit activeChanged();
request->deleteLater();
}
void App::parseResponse(const QString &response)
{
m_model->clear();
if (response.trimmed().isEmpty())
return;
JsonDataAccess dataAccess;
const QVariant variant = dataAccess.loadFromBuffer(response);
const QVariantList feed = variant.toList();
foreach (const QVariant &tweet, feed) {
m_model->insert(tweet.toMap());
}
}
bool App::active() const
{
return m_active;
}
bool App::error() const
{
return m_error;
}
QString App::errorMessage() const
{
return m_errorMessage;
}
bb::cascades::DataModel* App::model() const
{
return m_model;
}