void NewsFeed::getUpdates() { QMap<QString, QUrl>::iterator it = m_urls.begin(); while (it != m_urls.end()) { QString title = it.key(); logDebug("Getting updates for feed " + title); QUrl url = it.value(); if (m_links[title]) { m_links[title]->deleteLater(); } m_links[title] = new QHttp(url.host(), url.port(80), this); m_reqs[m_links[title]->get(url.path())] = title; connect( m_links[title], SIGNAL(requestStarted(int)), SLOT(requestStarted(int)) ); connect( m_links[title], SIGNAL(requestFinished(int, bool)), SLOT(requestFinished(int, bool)) ); ++it; } QSettings conf(confDir() + "gui.ini", QSettings::IniFormat); conf.setValue( objectName() + "Updated", QDateTime::currentDateTime().toString(Qt::ISODate) ); if (!m_timer->isActive()) { logDebug("Next feeds update in one hour."); m_timer->start(1000 * 60 * 60); } }
void NewsFeed::addFeed(QString title, QUrl url, int limit) { m_urls[title] = url; m_limits[title] = limit; m_feeds[title] = QString(); if (m_currentActive.isEmpty()) { setActive(title); } QFile f(confDir() + "/feeds/" + title + ".xml"); f.open(QIODevice::ReadOnly); if (f.isOpen()) { QString feed(f.readAll()); m_feeds[title] = parseFeed(feed, limit); setHtml(m_feeds[title]); } }
void NewsFeed::init() { QSettings conf(confDir() + "gui.ini", QSettings::IniFormat); QDateTime lastUpdate = QDateTime::fromString( conf.value(objectName() + "Updated", "").toString(), Qt::ISODate ); logDebug("Last update was on " + lastUpdate.toString()); QDateTime current = QDateTime::currentDateTime(); int timeDiff = lastUpdate.secsTo(current); logDebug(QString("Time diff since last update is %1").arg(timeDiff)); if (timeDiff >= 60 * 60) { timeDiff = 60 * 60; } m_timer->setSingleShot(true); timeDiff = 60 * 60 - timeDiff; m_timer->start(timeDiff * 1000); logDebug(QString("Next feeds update in %1 seconds").arg(timeDiff)); }
void NewsFeed::requestFinished(int code, bool error) { if (!m_links[m_reqs[code]]) { return; } if (error) { m_feeds[m_reqs[code]] = m_links[m_reqs[code]]->errorString(); return; } QString feed = m_links[m_reqs[code]]->readAll(); feed.replace("&", "&"); feed.replace("“", "\""); feed.replace("”", "\""); m_feeds[m_reqs[code]] = parseFeed(feed, m_limits[m_reqs[code]]); if (!m_feeds[m_reqs[code]].size()) { m_feeds[m_reqs[code]] = feed; } if (currentActive() == m_reqs[code]) { setActive(m_reqs[code]); } // save cache QDir d(confDir()); if (!d.exists("feeds")) { d.mkdir("feeds"); } QFile f(d.absolutePath() + "/feeds/" + m_reqs[code] + ".xml"); f.open(QIODevice::WriteOnly); if (f.isOpen()) { f.write(feed.toAscii()); } // cleanup m_links[m_reqs[code]]->deleteLater(); m_links.remove(m_reqs[code]); m_reqs.remove(code); }
QString Config::getConfigDir() { QString configDir; #ifdef Q_WS_X11 #ifdef SG_XDG_CONFIG_SUPPORT // old style config path QString oldConfigDir = QDir::homePath()+ QDir::separator()+".screengrab"+ QDir::separator(); configDir = qgetenv("XDG_CONFIG_HOME"); // Ubuntu hack -- if XDG_CONFIG_HOME is missing if (configDir.isEmpty() == true) { configDir = QDir::homePath(); configDir += QDir::separator(); configDir += ".config"; } configDir.append(QDir::separator()); configDir.append("screengrab"); configDir.append(QDir::separator()); #else configDir = QDir::homePath()+ QDir::separator()+".screengrab"+ QDir::separator(); #endif #endif // if win32 #ifdef Q_WS_WIN configDir.append(QDesktopServices::storageLocation(QDesktopServices::DataLocation) + "ScreenGrab" + QDir::toNativeSeparators(QDir::separator())); #endif if (QFile::exists(configDir) == false) { QDir confDir(configDir); confDir.mkpath(confDir.path()); } return configDir; }