diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,13 +55,6 @@ find_package(KF5TextWidgets ${KF5_DEP_VERSION} REQUIRED) find_package(KF5WidgetsAddons ${KF5_DEP_VERSION} REQUIRED) find_package(KF5WindowSystem ${KF5_DEP_VERSION} REQUIRED) -find_package(KF5Attica ${KF5_DEP_VERSION}) -set_package_properties(KF5Attica PROPERTIES DESCRIPTION "A Qt library that implements the Open Collaboration Services API" - PURPOSE "Support for Get Hot New Stuff in KXMLGUI" - URL "https://projects.kde.org/attica" - TYPE OPTIONAL - ) -set (HAVE_ATTICA ${KF5Attica_FOUND}) if (NOT FORCE_DISABLE_KGLOBALACCEL) find_package(KF5GlobalAccel ${KF5_DEP_VERSION} REQUIRED) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,8 +1,5 @@ add_subdirectory(ksendbugmail) -if (HAVE_ATTICA) - set (XMLGUI_EXTRA_LIBS ${XMLGUI_EXTRA_LIBS} KF5::Attica) -endif () if (HAVE_GLOBALACCEL) set (XMLGUI_EXTRA_LIBS ${XMLGUI_EXTRA_LIBS} KF5::GlobalAccel) endif () @@ -12,11 +9,6 @@ configure_file(config-xmlgui.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-xmlgui.h ) -configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/kaboutapplicationconfigattica_p.h.cmake - ${CMAKE_CURRENT_BINARY_DIR}/kaboutapplicationconfigattica_p.h -) - set(kxmlgui_SRCS kaboutapplicationdialog.cpp kaboutapplicationpersonlistdelegate_p.cpp diff --git a/src/kaboutapplicationconfigattica_p.h.cmake b/src/kaboutapplicationconfigattica_p.h.cmake deleted file mode 100644 --- a/src/kaboutapplicationconfigattica_p.h.cmake +++ /dev/null @@ -1,2 +0,0 @@ -/* KF5Attica available */ -#cmakedefine01 HAVE_ATTICA diff --git a/src/kaboutapplicationdialog.cpp b/src/kaboutapplicationdialog.cpp --- a/src/kaboutapplicationdialog.cpp +++ b/src/kaboutapplicationdialog.cpp @@ -121,7 +121,7 @@ //And here we go, authors page... const int authorCount = aboutData.authors().count(); if (authorCount) { - QWidget *authorWidget = createAuthorsWidget(aboutData.authors(), aboutData.ocsProviderUrl(), + QWidget *authorWidget = createAuthorsWidget(aboutData.authors(), aboutData.customAuthorTextEnabled(), aboutData.customAuthorRichText(), aboutData.bugAddress(), q); @@ -132,13 +132,13 @@ //And credits page... if (!aboutData.credits().isEmpty()) { - QWidget *creditWidget = createCreditWidget(aboutData.credits(), aboutData.ocsProviderUrl(), q); + QWidget *creditWidget = createCreditWidget(aboutData.credits(), q); tabWidget->addTab(creditWidget, i18n("Thanks To")); } //Finally, the optional translators page... if (!(opt & HideTranslators) && !aboutData.translators().isEmpty()) { - QWidget *translatorWidget = createTranslatorsWidget(aboutData.translators(), aboutData.ocsProviderUrl(), q); + QWidget *translatorWidget = createTranslatorsWidget(aboutData.translators(), q); tabWidget->addTab(translatorWidget, i18n("Translation")); } diff --git a/src/kaboutapplicationpersonlistdelegate_p.cpp b/src/kaboutapplicationpersonlistdelegate_p.cpp --- a/src/kaboutapplicationpersonlistdelegate_p.cpp +++ b/src/kaboutapplicationpersonlistdelegate_p.cpp @@ -34,8 +34,6 @@ { enum { - AVATAR_HEIGHT = 50, - AVATAR_WIDTH = 50, MAIN_LINKS_HEIGHT = 32, SOCIAL_LINKS_HEIGHT = 26, MAX_SOCIAL_LINKS = 9 @@ -116,7 +114,7 @@ label->setText(text); - //And now we fill in the main links (email + homepage + OCS profile)... + //And now we fill in the main links (email + homepage)... KToolBar *mainLinks = qobject_cast< KToolBar * >(widgets.at(MainLinks)); mainLinks->setIconSize(QSize(22, 22)); mainLinks->setContentsMargins(0, 0, 0, 0); @@ -135,55 +133,14 @@ action->setData(profile.homepage().toString()); action->setVisible(true); } - if (!profile.ocsProfileUrl().isEmpty()) { - action = mainLinks->actions().at(VisitProfileAction); - KAboutApplicationPersonModel *model = qobject_cast< KAboutApplicationPersonModel * >(itemView()->model()); - action->setToolTip(i18n("Visit contributor's profile on %1\n%2", - model->providerName(), - profile.ocsProfileUrl())); - action->setData(profile.ocsProfileUrl()); - action->setVisible(true); - } mainLinks->resize(QSize(mainLinks->sizeHint().width(), MAIN_LINKS_HEIGHT)); mainLinks->move(wRect.left(), wRect.top() + label->height()); //Finally, the social links... KToolBar *socialLinks = qobject_cast< KToolBar * >(widgets.at(SocialLinks)); socialLinks->setIconSize(QSize(16, 16)); socialLinks->setContentsMargins(0, 0, 0, 0); socialLinks->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - - int currentSocialLinkAction = 0; - Q_FOREACH (KAboutApplicationPersonProfileOcsLink link, profile.ocsLinks()) { - if (!profile.homepage().isEmpty() && profile.homepage() == link.url()) { - continue; //We skip it if it's the same as the homepage from KAboutData - } - - action = socialLinks->actions().at(currentSocialLinkAction); - if (link.type() == KAboutApplicationPersonProfileOcsLink::Other) { - action->setToolTip(i18n("Visit contributor's page\n%1", - link.url().toString())); - } else if (link.type() == KAboutApplicationPersonProfileOcsLink::Blog) { - action->setToolTip(i18n("Visit contributor's blog\n%1", - link.url().toString())); - } else if (link.type() == KAboutApplicationPersonProfileOcsLink::Homepage) { - action->setToolTip(i18n("Visit contributor's homepage\n%1", - link.url().toString())); - } else { - action->setToolTip(i18n("Visit contributor's profile on %1\n%2", - link.prettyType(), - link.url().toString())); - } - action->setIcon(link.icon()); - action->setData(link.url().toString()); - action->setVisible(true); - - ++currentSocialLinkAction; - if (currentSocialLinkAction > MAX_SOCIAL_LINKS - 1) { - break; - } - } - socialLinks->resize(QSize(socialLinks->sizeHint().width(), SOCIAL_LINKS_HEIGHT)); socialLinks->move(wRect.left() + mainLinks->width(), wRect.top() + label->height() + @@ -195,49 +152,15 @@ QSize KAboutApplicationPersonListDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { - KAboutApplicationPersonProfile profile = index.data().value< KAboutApplicationPersonProfile >(); - bool hasAvatar = !profile.avatar().isNull(); - - int margin = option.fontMetrics.height() / 2; - - int height = hasAvatar ? qMax(widgetsRect(option, index).height(), - AVATAR_HEIGHT + 2 * margin) - : widgetsRect(option, index).height(); - - QSize metrics(option.fontMetrics.height() * 7, height); - return metrics; + return QSize(option.fontMetrics.height() * 7, widgetsRect(option, index).height()); } void KAboutApplicationPersonListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { - int margin = option.fontMetrics.height() / 2; - - QStyle *style = QApplication::style(); - style->drawPrimitive(QStyle::PE_Widget, &option, painter, nullptr); - - const KAboutApplicationPersonModel *model = qobject_cast< const KAboutApplicationPersonModel * >(index.model()); - - if (model->hasAvatarPixmaps()) { - int height = qMax(widgetsRect(option, index).height(), AVATAR_HEIGHT + 2 * margin); - QPoint point(option.rect.left() + 2 * margin, - option.rect.top() + ((height - AVATAR_HEIGHT) / 2)); - - KAboutApplicationPersonProfile profile = index.data().value< KAboutApplicationPersonProfile >(); - - if (!profile.avatar().isNull()) { - QPixmap pixmap = profile.avatar(); - - point.setX((AVATAR_WIDTH - pixmap.width()) / 2 + 5); - point.setY(option.rect.top() + ((height - pixmap.height()) / 2)); - painter->drawPixmap(point, pixmap); - - QPoint framePoint(point.x() - 5, point.y() - 5); - QPixmap framePixmap(QStringLiteral(":/kxmlgui5/thumb_frame.png")); - painter->drawPixmap(framePoint, framePixmap.scaled(pixmap.width() + 10, pixmap.height() + 10)); - } - } + Q_UNUSED(index) + QApplication::style()->drawPrimitive(QStyle::PE_Widget, &option, painter, nullptr); } void KAboutApplicationPersonListDelegate::launchUrl(QAction *action) const @@ -271,10 +194,6 @@ QLatin1String(""); } - if (!profile.location().isEmpty()) { - text += QLatin1String("\n
") + - profile.location(); - } return text; } @@ -284,18 +203,10 @@ KAboutApplicationPersonProfile profile = index.data().value< KAboutApplicationPersonProfile >(); int margin = option.fontMetrics.height() / 2; - QRect widgetsRect; - if (qobject_cast< const KAboutApplicationPersonModel * >(index.model())->hasAvatarPixmaps()) { - widgetsRect = QRect(option.rect.left() + AVATAR_WIDTH + 3 * margin, - margin / 2, - option.rect.width() - AVATAR_WIDTH - 4 * margin, - 0); - } else { - widgetsRect = QRect(option.rect.left() + margin, - margin / 2, - option.rect.width() - 2 * margin, - 0); - } + QRect widgetsRect(option.rect.left() + margin, + margin / 2, + option.rect.width() - 2 * margin, + 0); int textHeight = heightForString(buildTextForProfile(profile), widgetsRect.width() - margin, option); widgetsRect.setHeight(textHeight + MAIN_LINKS_HEIGHT + 1.5 * margin); diff --git a/src/kaboutapplicationpersonmodel_p.h b/src/kaboutapplicationpersonmodel_p.h --- a/src/kaboutapplicationpersonmodel_p.h +++ b/src/kaboutapplicationpersonmodel_p.h @@ -18,39 +18,21 @@ #ifndef KABOUT_APPLICATION_PERSON_MODEL_H #define KABOUT_APPLICATION_PERSON_MODEL_H -#include "kaboutapplicationconfigattica_p.h" - -#if HAVE_ATTICA -#include -#include -#endif //HAVE_ATTICA - #include -#include #include -#include -#include #include -// Forward declarations to make Attica-related members work -namespace Attica -{ -class BaseJob; -} - namespace KDEPrivate { class KAboutApplicationPersonProfile; -class KAboutApplicationPersonIconsJob; class KAboutApplicationPersonModel : public QAbstractListModel { Q_OBJECT public: explicit KAboutApplicationPersonModel(const QList< KAboutPerson > &personList, - const QString &providerUrl = QString(), QObject *parent = nullptr); int rowCount(const QModelIndex &parent = QModelIndex()) const override; @@ -62,160 +44,32 @@ Qt::ItemFlags flags(const QModelIndex &index) const override; - bool hasAvatarPixmaps() const - { - return m_hasAvatarPixmaps; - } - - const QString &providerName() const - { - return m_providerName; - } - -private Q_SLOTS: - void onProvidersLoaded(); - void onPersonJobFinished(Attica::BaseJob *job); - void onAvatarJobFinished(QNetworkReply *reply); - void onOcsLinksJobFinished(KAboutApplicationPersonIconsJob *job); - private: - void fetchOcsLinkIcons(int personProfileListIndex); - QList< KAboutPerson > m_personList; QList< KAboutApplicationPersonProfile > m_profileList; - QMap< int, QString > m_ocsLinkIconUrls; - QMap< int, QPixmap > m_ocsLinkIcons; - - bool m_hasAvatarPixmaps; - -#if HAVE_ATTICA - Attica::ProviderManager m_providerManager; - Attica::Provider m_provider; -#endif //HAVE_ATTICA - QString m_providerUrl; - QString m_providerName; - - friend class KAboutApplicationPersonIconsJob; -}; - -//This list must be in sync with the one in KAboutApplicationPersonProfileOcsLink::prettyType() -static const char s_personOcsLinkAtticaTypes[][16] = { - { "other" }, - { "Blog" }, - { "delicious" }, - { "Digg" }, - { "Facebook" }, - { "Homepage" }, - { "identi.ca" }, - { "libre.fm" }, - { "LinkedIn" }, - { "MySpace" }, - { "Reddit" }, - { "StackOverflow" }, - { "Twitter" }, - { "Wikipedia" }, - { "Xing" }, - { "YouTube" } -}; - -class KAboutApplicationPersonProfileOcsLink -{ -public: - enum Type { - Other = 0, - Blog, - Delicious, - Digg, - Facebook, - Homepage, - Identica, - LibreFm, - LinkedIn, - MySpace, - Reddit, - StackOverflow, - Twitter, - Wikipedia, - Xing, - YouTube, - NUM_ATTICA_LINK_TYPES - }; - - static Type typeFromAttica(const QString &atticaType); - - KAboutApplicationPersonProfileOcsLink(Type type, const QUrl &url) - : m_type(type) - , m_url(url) - {} - - Type type() const - { - return m_type; - } - QString prettyType() const; - void setIcon(const QIcon &icon) - { - m_icon = icon; - } - const QIcon &icon() const - { - return m_icon; - } - const QUrl &url() const - { - return m_url; - } - -private: - Type m_type; - QUrl m_url; - QIcon m_icon; }; class KAboutApplicationPersonProfile { public: KAboutApplicationPersonProfile() : m_name() , m_task() - , m_email() - , m_ocsUsername() {} //needed for QVariant + , m_email() {} KAboutApplicationPersonProfile(const QString &name, const QString &task, - const QString &email, - const QString &ocsUsername = QString()) + const QString &email) : m_name(name) , m_task(task) , m_email(email) - , m_ocsUsername(ocsUsername) {} void setHomepage(const QUrl &url) { m_homepage = url; } - void setAvatar(const QPixmap &pixmap) - { - m_avatar = pixmap; - } - void setLocation(const QString &location) - { - m_location = location; - } - void setOcsProfileUrl(const QString &url) - { - m_ocsProfileUrl = url; - } - void addAdditionalString(const QString &string) - { - m_additionalStrings << string; - } - void setOcsLinks(const QList< KAboutApplicationPersonProfileOcsLink > &ocsLinks) - { - m_ocsLinks = ocsLinks; - } const QString &name() const { @@ -229,81 +83,16 @@ { return m_email; } - const QString &ocsUsername() const - { - return m_ocsUsername; - } - const QString &ocsProfileUrl() const - { - return m_ocsProfileUrl; - } const QUrl &homepage() const { return m_homepage; } - const QPixmap &avatar() const - { - return m_avatar; - } - const QString &location() const - { - return m_location; - } - const QStringList &additionalStrings() const - { - return m_additionalStrings; - } - const QList< KAboutApplicationPersonProfileOcsLink > &ocsLinks() const - { - return m_ocsLinks; - } private: QString m_name; QString m_task; QString m_email; - QString m_ocsUsername; - QString m_ocsProfileUrl; QUrl m_homepage; - QPixmap m_avatar; - QString m_location; - QStringList m_additionalStrings; - QList< KAboutApplicationPersonProfileOcsLink > m_ocsLinks; -}; - -class KAboutApplicationPersonIconsJob : public QObject -{ - Q_OBJECT -public: - KAboutApplicationPersonIconsJob(KAboutApplicationPersonModel *model, - int personProfileListIndex); - - void start(); - - int personProfileListIndex() const - { - return m_personProfileListIndex; - } - - const QList< KAboutApplicationPersonProfileOcsLink > &ocsLinks() const - { - return m_ocsLinks; - } - -Q_SIGNALS: - void finished(KAboutApplicationPersonIconsJob *job); - -private Q_SLOTS: - void onJobFinished(QNetworkReply *reply); - -private: - void getIcons(int i); - - int m_personProfileListIndex; - KAboutApplicationPersonModel *m_model; - QList< KAboutApplicationPersonProfileOcsLink > m_ocsLinks; - - QNetworkAccessManager *m_manager; }; } //namespace KDEPrivate diff --git a/src/kaboutapplicationpersonmodel_p.cpp b/src/kaboutapplicationpersonmodel_p.cpp --- a/src/kaboutapplicationpersonmodel_p.cpp +++ b/src/kaboutapplicationpersonmodel_p.cpp @@ -17,58 +17,25 @@ #include "kaboutapplicationpersonmodel_p.h" #include "debug.h" -#if HAVE_ATTICA -#include -#endif //HAVE_ATTICA #include -#include - -#include -#include - namespace KDEPrivate { KAboutApplicationPersonModel::KAboutApplicationPersonModel(const QList< KAboutPerson > &personList, - const QString &providerUrl, QObject *parent) : QAbstractListModel(parent) , m_personList(personList) - , m_hasAvatarPixmaps(false) - , m_providerUrl(providerUrl) { - if (m_providerUrl.isEmpty()) { - m_providerUrl = QStringLiteral("https://api.kde-look.org/ocs/v1/"); - } - - bool hasOcsUsernames = false; for (const auto &person : qAsConst(m_personList)) { - if (!person.ocsUsername().isEmpty()) { - hasOcsUsernames = true; - } - KAboutApplicationPersonProfile profile = KAboutApplicationPersonProfile(person.name(), person.task(), - person.emailAddress(), - person.ocsUsername()); + person.emailAddress()); profile.setHomepage(QUrl(person.webAddress())); m_profileList.append(profile); } - - m_ocsLinkIcons.insert(KAboutApplicationPersonProfileOcsLink::Other, QIcon::fromTheme(QStringLiteral("internet-services")).pixmap(16)); - m_ocsLinkIcons.insert(KAboutApplicationPersonProfileOcsLink::Blog, QIcon::fromTheme(QStringLiteral("internet-services")).pixmap(16)); - m_ocsLinkIcons.insert(KAboutApplicationPersonProfileOcsLink::Homepage, QIcon::fromTheme(QStringLiteral("internet-servicesinternet-services")).pixmap(16)); - -#if HAVE_ATTICA - connect(&m_providerManager, SIGNAL(defaultProvidersLoaded()), - SLOT(onProvidersLoaded())); - if (hasOcsUsernames) { - m_providerManager.loadDefaultProviders(); - } -#endif //HAVE_ATTICA } int KAboutApplicationPersonModel::rowCount(const QModelIndex &parent) const @@ -105,295 +72,5 @@ return QAbstractListModel::flags(index) | Qt::ItemIsEditable; } -void KAboutApplicationPersonModel::onProvidersLoaded() //SLOT -{ -#if HAVE_ATTICA - if (!m_providerManager.providers().isEmpty()) { - m_provider = m_providerManager.providerByUrl(QUrl(m_providerUrl)); - if (!m_provider.isValid()) { -// qCDebug(DEBUG_KXMLGUI) << "OCS Provider error: could not find opendesktop.org provider."; - return; - } - - m_providerName = m_provider.name(); - - int i = 0; - for (const auto &profile : qAsConst(m_profileList)) { - if (!profile.ocsUsername().isEmpty()) { - Attica::ItemJob< Attica::Person > *job = m_provider.requestPerson(profile.ocsUsername()); - connect(job, SIGNAL(finished(Attica::BaseJob*)), - this, SLOT(onPersonJobFinished(Attica::BaseJob*))); - job->setProperty("personProfile", i); - job->start(); - } - ++i; - } - } -#endif //HAVE_ATTICA -} - -void KAboutApplicationPersonModel::onPersonJobFinished(Attica::BaseJob *job) //SLOT -{ -#if ! HAVE_ATTICA - Q_UNUSED(job) -#endif //HAVE_ATTICA -#if HAVE_ATTICA - Attica::ItemJob< Attica::Person > *personJob = - static_cast< Attica::ItemJob< Attica::Person > * >(job); - if (personJob->metadata().error() == Attica::Metadata::NoError) { - Attica::Person p = personJob->result(); - int personProfileListIndex = personJob->property("personProfile").toInt(); - KAboutApplicationPersonProfile profile = m_profileList.value(personProfileListIndex); - - //Let's set up OCS links... - QList< KAboutApplicationPersonProfileOcsLink > ocsLinks; - - for (int i = 2; i <= 10; ++i) { //OCS supports 10 total homepages as of 2/oct/2009 - //This starts at 2 because the first homepage is - //just "homepage" in the OCS API and is exposed by - //Attica simply through Person::homepage() - QString atticaType = p.extendedAttribute(QStringLiteral("homepagetype%1").arg(i)); - QString url = p.extendedAttribute(QStringLiteral("homepage%1").arg(i)); - if (url.isEmpty()) { - continue; - } - - KAboutApplicationPersonProfileOcsLink::Type type = - KAboutApplicationPersonProfileOcsLink::typeFromAttica(atticaType); - ocsLinks.append(KAboutApplicationPersonProfileOcsLink(type, QUrl(url))); - if (!m_ocsLinkIcons.contains(type) && !m_ocsLinkIconUrls.contains(type)) { - m_ocsLinkIconUrls.insert(type, p.extendedAttribute(QStringLiteral("homepageicon%1").arg(i))); - } - } - - if (profile.homepage().isEmpty()) { - if (!p.homepage().isEmpty()) { - profile.setHomepage(QUrl(p.homepage())); - } else { - if (!ocsLinks.isEmpty()) { - QList< KAboutApplicationPersonProfileOcsLink >::iterator toUse = ocsLinks.begin(); - for (QList< KAboutApplicationPersonProfileOcsLink >::iterator it = ocsLinks.begin(); - it != ocsLinks.end(); ++it) { - KAboutApplicationPersonProfileOcsLink link = *it; - if (link.type() == KAboutApplicationPersonProfileOcsLink::Blog || - link.type() == KAboutApplicationPersonProfileOcsLink::Homepage || - link.type() == KAboutApplicationPersonProfileOcsLink::Other) { - toUse = it; - break; - } - } - profile.setHomepage(toUse->url()); - ocsLinks.erase(toUse); - } - } - } else { - KAboutApplicationPersonProfileOcsLink::Type type = - KAboutApplicationPersonProfileOcsLink::typeFromAttica(p.extendedAttribute(QStringLiteral("homepagetype"))); - ocsLinks.insert(0, KAboutApplicationPersonProfileOcsLink(type, QUrl(p.homepage()))); //we prepend the main homepage - if (!m_ocsLinkIcons.contains(type) && !m_ocsLinkIconUrls.contains(type)) { - m_ocsLinkIconUrls.insert(type, p.extendedAttribute(QStringLiteral("homepageicon"))); - } - } - - profile.setOcsLinks(ocsLinks); - - if (!(p.city().isEmpty() && p.country().isEmpty())) { - if (!p.city().isEmpty()) { - profile.setLocation(i18nc("City, Country", "%1, %2", p.city(), p.country())); - } else { - profile.setLocation(p.country()); - } - } - - profile.setOcsProfileUrl(p.extendedAttribute(QStringLiteral("profilepage"))); - - m_profileList.replace(personProfileListIndex, profile); - - if (p.avatarUrl().isEmpty()) { - emit dataChanged(index(personProfileListIndex), index(personProfileListIndex)); - fetchOcsLinkIcons(personProfileListIndex); - } else { - //TODO: Create a PixmapFromUrlJob in Attica which would use KIO::get if available - // and QNAM otherwise. - Teo 30/10/2010 - QNetworkAccessManager *manager = new QNetworkAccessManager(this); - connect(manager, SIGNAL(finished(QNetworkReply*)), - this, SLOT(onAvatarJobFinished(QNetworkReply*))); - - manager->get(QNetworkRequest(p.avatarUrl())); - manager->setProperty("personProfile", personProfileListIndex); - } - } - //else qCDebug(DEBUG_KXMLGUI) << "Could not fetch OCS person info."; -#endif //HAVE_ATTICA -} - -void KAboutApplicationPersonModel::onAvatarJobFinished(QNetworkReply *reply) //SLOT -{ -#if ! HAVE_ATTICA - Q_UNUSED(reply) -#endif //HAVE_ATTICA -#if HAVE_ATTICA - QNetworkAccessManager *manager = reply->manager(); - int personProfileListIndex = manager->property("personProfile").toInt(); - - if (reply->error() != QNetworkReply::NoError) { - //qCDebug(DEBUG_KXMLGUI) << "Could not fetch OCS person avatar."; - emit dataChanged(index(personProfileListIndex), index(personProfileListIndex)); - return; - } - QByteArray data = reply->readAll(); - QPixmap pixmap; - pixmap.loadFromData(data); - - KAboutApplicationPersonProfile profile = m_profileList.value(personProfileListIndex); - if (!pixmap.isNull()) { - profile.setAvatar(pixmap); - m_hasAvatarPixmaps = true; - } - - m_profileList.replace(personProfileListIndex, profile); - - reply->deleteLater(); - - fetchOcsLinkIcons(personProfileListIndex); -#endif //HAVE_ATTICA -} - -void KAboutApplicationPersonModel::fetchOcsLinkIcons(int personProfileListIndex) -{ - KAboutApplicationPersonIconsJob *job = - new KAboutApplicationPersonIconsJob(this, personProfileListIndex); - connect(job, SIGNAL(finished(KAboutApplicationPersonIconsJob*)), - this, SLOT(onOcsLinksJobFinished(KAboutApplicationPersonIconsJob*))); - job->start(); -} - -void KAboutApplicationPersonModel::onOcsLinksJobFinished(KAboutApplicationPersonIconsJob *job) //SLOT -{ - int personProfileListIndex = job->personProfileListIndex(); - KAboutApplicationPersonProfile profile = m_profileList.value(personProfileListIndex); - - profile.setOcsLinks(job->ocsLinks()); - - m_profileList.replace(personProfileListIndex, profile); - - emit dataChanged(index(personProfileListIndex), index(personProfileListIndex)); - emit layoutChanged(); -} - -KAboutApplicationPersonProfileOcsLink::Type KAboutApplicationPersonProfileOcsLink::typeFromAttica(const QString &atticaType) -{ - int index = -1; - for (int i = 0; i < NUM_ATTICA_LINK_TYPES; ++i) { - if (atticaType == QLatin1String(s_personOcsLinkAtticaTypes[i])) { - index = i; - break; - } - } - if (index == -1) { - return Other; - } else { - return static_cast< Type >(index); - } -} - -QString KAboutApplicationPersonProfileOcsLink::prettyType() const -{ - //This can't be static like the other lists because of i18n - switch (m_type) { - case Other: - return i18nc("A generic social network or homepage link of an unlisted type.", "Other"); - case Blog: - return i18nc("A type of link.", "Blog"); - case Delicious: - return QStringLiteral("Delicious"); - case Digg: - return QStringLiteral("Digg"); - case Facebook: - return QStringLiteral("Facebook"); - case Homepage: - return i18nc("A type of link.", "Homepage"); - case Identica: - return QStringLiteral("Identi.ca"); - case LibreFm: - return QStringLiteral("Libre.fm"); - case LinkedIn: - return QStringLiteral("LinkedIn"); - case MySpace: - return QStringLiteral("MySpace"); - case Reddit: - return QStringLiteral("Reddit"); - case StackOverflow: - return QStringLiteral("Stack Overflow"); - case Twitter: - return QStringLiteral("Twitter"); - case Wikipedia: - return QStringLiteral("Wikipedia"); - case Xing: - return QStringLiteral("Xing"); - case YouTube: - return QStringLiteral("YouTube"); - case NUM_ATTICA_LINK_TYPES: // silence compiler warning - break; - } - return QString(); -} - -KAboutApplicationPersonIconsJob::KAboutApplicationPersonIconsJob(KAboutApplicationPersonModel *model, - int personProfileListIndex) - : QObject(model) - , m_personProfileListIndex(personProfileListIndex) - , m_model(model) -{ - m_manager = new QNetworkAccessManager(this); - connect(m_manager, SIGNAL(finished(QNetworkReply*)), - this, SLOT(onJobFinished(QNetworkReply*))); - - m_ocsLinks = model->m_profileList.value(personProfileListIndex).ocsLinks(); -} - -void KAboutApplicationPersonIconsJob::start() -{ - getIcons(0); -} - -void KAboutApplicationPersonIconsJob::getIcons(int i) -{ - for (auto &ocsLink : m_ocsLinks) { - if (m_model->m_ocsLinkIcons.contains(ocsLink.type())) { - ocsLink.setIcon(m_model->m_ocsLinkIcons.value(ocsLink.type())); - } else if (m_model->m_ocsLinkIconUrls.contains(ocsLink.type())) { - QNetworkReply *reply = - m_manager->get(QNetworkRequest(QUrl(m_model->m_ocsLinkIconUrls.value(ocsLink.type())))); - reply->setProperty("linkIndex", i); - return; - } - ++i; - } - emit finished(this); -} - -void KAboutApplicationPersonIconsJob::onJobFinished(QNetworkReply *reply) //SLOT -{ - int i = reply->property("linkIndex").toInt(); - KAboutApplicationPersonProfileOcsLink::Type type = m_ocsLinks.at(i).type(); - - if (reply->error() != QNetworkReply::NoError) { - //qCDebug(DEBUG_KXMLGUI) << "Could not fetch OCS link icon."; - reply->deleteLater(); - getIcons(i + 1); - return; - } - QByteArray data = reply->readAll(); - QPixmap pixmap; - pixmap.loadFromData(data); - - if (!pixmap.isNull() && !m_model->m_ocsLinkIcons.contains(type)) { - m_model->m_ocsLinkIcons.insert(type, pixmap); - } - reply->deleteLater(); - getIcons(i); -} - } //namespace KDEPrivate diff --git a/src/kaboutplugindialog.cpp b/src/kaboutplugindialog.cpp --- a/src/kaboutplugindialog.cpp +++ b/src/kaboutplugindialog.cpp @@ -95,7 +95,7 @@ const int authorCount = pluginMetaData.authors().count(); if (authorCount) { // TODO: add bug report address to plugin metadata - QWidget *authorWidget = createAuthorsWidget(pluginMetaData.authors(), QString(), + QWidget *authorWidget = createAuthorsWidget(pluginMetaData.authors(), false, QString(), QString(), q); @@ -106,13 +106,13 @@ //And credits page... if (!pluginMetaData.otherContributors().isEmpty()) { - QWidget *creditWidget = createCreditWidget(pluginMetaData.otherContributors(), QString(), q); + QWidget *creditWidget = createCreditWidget(pluginMetaData.otherContributors(), q); tabWidget->addTab(creditWidget, i18n("Thanks To")); } //Finally, the optional translators page... if (!(opt & KAboutPluginDialog::HideTranslators) && !pluginMetaData.translators().isEmpty()) { - QWidget *translatorWidget = createTranslatorsWidget(pluginMetaData.translators(), QString(), q); + QWidget *translatorWidget = createTranslatorsWidget(pluginMetaData.translators(), q); tabWidget->addTab(translatorWidget, i18n("Translation")); } diff --git a/src/kabstractaboutdialog_p.h b/src/kabstractaboutdialog_p.h --- a/src/kabstractaboutdialog_p.h +++ b/src/kabstractaboutdialog_p.h @@ -48,16 +48,13 @@ const QList &licenses, QWidget *parent); QWidget *createAuthorsWidget(const QList &authors, - const QString &ocsProviderUrl, bool customAuthorTextEnabled, const QString &customAuthorRichText, const QString &bugAddress, QWidget *parent); QWidget *createCreditWidget(const QList &credits, - const QString &ocsProviderUrl, QWidget *parent); QWidget *createTranslatorsWidget(const QList &translators, - const QString &ocsProviderUrl, QWidget *parent); void createForm(QWidget *titleWidget, QWidget *tabWidget, QDialog *dialog); diff --git a/src/kabstractaboutdialog_p.cpp b/src/kabstractaboutdialog_p.cpp --- a/src/kabstractaboutdialog_p.cpp +++ b/src/kabstractaboutdialog_p.cpp @@ -105,7 +105,6 @@ } QWidget *KAbstractAboutDialogPrivate::createAuthorsWidget(const QList &authors, - const QString &ocsProviderUrl, bool customAuthorTextEnabled, const QString &customAuthorRichText, const QString &bugAddress, @@ -138,7 +137,7 @@ } KDEPrivate::KAboutApplicationPersonModel *authorModel = - new KDEPrivate::KAboutApplicationPersonModel(authors, ocsProviderUrl, authorWidget); + new KDEPrivate::KAboutApplicationPersonModel(authors, authorWidget); KDEPrivate::KAboutApplicationPersonListView *authorView = new KDEPrivate::KAboutApplicationPersonListView(authorWidget); @@ -155,15 +154,14 @@ } QWidget *KAbstractAboutDialogPrivate::createCreditWidget(const QList &credits, - const QString &ocsProviderUrl, QWidget *parent) { QWidget *creditWidget = new QWidget(parent); QVBoxLayout *creditLayout = new QVBoxLayout(creditWidget); creditLayout->setContentsMargins(0, 0, 0, 0); KDEPrivate::KAboutApplicationPersonModel *creditModel = - new KDEPrivate::KAboutApplicationPersonModel(credits, ocsProviderUrl, creditWidget); + new KDEPrivate::KAboutApplicationPersonModel(credits, creditWidget); KDEPrivate::KAboutApplicationPersonListView *creditView = new KDEPrivate::KAboutApplicationPersonListView(creditWidget); @@ -180,15 +178,14 @@ } QWidget *KAbstractAboutDialogPrivate::createTranslatorsWidget(const QList &translators, - const QString &ocsProviderUrl, QWidget *parent) { QWidget *translatorWidget = new QWidget(parent); QVBoxLayout *translatorLayout = new QVBoxLayout(translatorWidget); translatorLayout->setContentsMargins(0, 0, 0, 0); KDEPrivate::KAboutApplicationPersonModel *translatorModel = - new KDEPrivate::KAboutApplicationPersonModel(translators, ocsProviderUrl, translatorWidget); + new KDEPrivate::KAboutApplicationPersonModel(translators, translatorWidget); KDEPrivate::KAboutApplicationPersonListView *translatorView = new KDEPrivate::KAboutApplicationPersonListView(translatorWidget); diff --git a/src/kxmlgui.qrc b/src/kxmlgui.qrc --- a/src/kxmlgui.qrc +++ b/src/kxmlgui.qrc @@ -3,6 +3,5 @@ ui_standards.rc aboutkde.svg - thumb_frame.png diff --git a/src/thumb_frame.png b/src/thumb_frame.png deleted file mode 100644 index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@