[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: Re: [muon/apt-appstream] /: Enhanced appstream integration
From: Aleix Pol <aleixpol () kde ! org>
Date: 2014-07-09 15:19:24
Message-ID: CACcA1RoD9i09axV9NUgppwrxA9v+8gc4rPzjLU5NQg+FS7V8Rg () mail ! gmail ! com
[Download RAW message or body]
How can it be that you have conflicts in the first commit in a branch? :/
On Wed, Jul 9, 2014 at 4:58 PM, Floris-Andrei Stoica-Marcu <
floris.sm@gmail.com> wrote:
> Git commit 661e1762f43a412960aa1cfbf3a1ee9335604294 by Floris-Andrei
> Stoica-Marcu.
> Committed on 03/07/2014 at 08:32.
> Pushed by florisandreis into branch 'apt-appstream'.
>
> Enhanced appstream integration
> Made the AppstreamApplication class that inherits Aplication
> Renamed Asmara to AppstreamQt
>
> TO DO:
> Screenshots from it too
> Sorting/filtering by kind/project group
> Icons from it, although apt is on its way to integrate this; need
> workaround
> Maybe put the db path in MuonSources
>
> Conflicts:
> libmuon/backends/ApplicationBackend/Application.cpp
> libmuon/backends/ApplicationBackend/Application.h
> libmuon/backends/ApplicationBackend/ApplicationBackend.cpp
> libmuon/backends/ApplicationBackend/CMakeLists.txt
>
> M +1 -0 CMakeLists.txt
> M +42 -13 libmuon/backends/ApplicationBackend/Application.cpp
> M +14 -10 libmuon/backends/ApplicationBackend/Application.h
> M +9 -8 libmuon/backends/ApplicationBackend/ApplicationBackend.cpp
> A +40 -0
> libmuon/backends/ApplicationBackend/AppstreamApplication.cpp [License:
> UNKNOWN] *
> A +22 -0 libmuon/backends/ApplicationBackend/AppstreamApplication.h
> [License: UNKNOWN] *
> M +2 -1 libmuon/backends/ApplicationBackend/CMakeLists.txt
>
> The files marked with a * at the end have a non valid license. Please
> read: http://techbase.kde.org/Policies/Licensing_Policy and use the
> headers which are listed at that page.
>
>
> http://commits.kde.org/muon/661e1762f43a412960aa1cfbf3a1ee9335604294
>
> diff --git a/CMakeLists.txt b/CMakeLists.txt
> index 1050d97..d4528b8 100644
> --- a/CMakeLists.txt
> +++ b/CMakeLists.txt
> @@ -36,6 +36,7 @@ configure_file(MuonVersion.h.in MuonVersion.h)
>
> add_subdirectory(libmuon)
> if(QAPT_FOUND)
> + find_package(AppstreamQt REQUIRED)
> add_subdirectory(libmuonapt)
> add_subdirectory(muon)
> add_subdirectory(installer)
> diff --git a/libmuon/backends/ApplicationBackend/Application.cpp
> b/libmuon/backends/ApplicationBackend/Application.cpp
> index b37ac12..c6a9720 100644
> --- a/libmuon/backends/ApplicationBackend/Application.cpp
> +++ b/libmuon/backends/ApplicationBackend/Application.cpp
> @@ -49,9 +49,8 @@
> //QJSON includes
> #include <qjson/parser.h>
>
> -Application::Application(Asmara::Component comp, QApt::Backend* backend)
> +Application::Application(QApt::Backend* backend)
> : AbstractResource(0)
> - , m_component(comp)
> , m_backend(backend)
> , m_package(0)
> , m_isValid(true)
> @@ -59,10 +58,7 @@ Application::Application(Asmara::Component comp,
> QApt::Backend* backend)
> , m_isExtrasApp(false)
> , m_sourceHasScreenshot(true)
> {
> - static QByteArray currentDesktop = qgetenv("XDG_CURRENT_DESKTOP");
>
> - m_isTechnical = m_component.kind() != Asmara::Component::KindDesktop;
> - m_packageName = m_component.packageName().toLatin1();
> }
>
> Application::Application(QApt::Package* package, QApt::Backend* backend)
> @@ -102,7 +98,7 @@ QString Application::name()
>
> QString Application::untranslatedName()
> {
> - QString name = m_component.name();
> + QString name = QString::fromUtf8(getField("Name")).trimmed();
> if (name.isEmpty() && package()) {
> // extras.ubuntu.com packages can have this
> if (m_isExtrasApp)
> @@ -116,7 +112,14 @@ QString Application::untranslatedName()
>
> QString Application::comment()
> {
> - QString comment = m_component.summary();
> + QString comment = getField("Comment");
> + if (comment.isEmpty()) {
> + // Sometimes GenericName is used instead of Comment
> + comment = getField("GenericName");
> + if (comment.isEmpty()) {
> + return package()->shortDescription();
> + }
> + }
>
> return i18n(comment.toUtf8());
> }
> @@ -144,12 +147,12 @@ QApt::Package *Application::package()
>
> QString Application::icon() const
> {
> - return m_component.iconUrl().toString();
> + return getField("Icon", "applications-other");
> }
>
> QStringList Application::mimetypes() const
> {
> - return m_component.categories();
> + return QString(getField("MimeType")).split(';');
> }
>
> QString Application::menuPath()
> @@ -244,7 +247,7 @@ QVector<QPair<QString, QString> >
> Application::locateApplication(const QString &
>
> QStringList Application::categories()
> {
> - QStringList categories = m_component.categories();
> + QStringList categories = QString(getField("Categories")).split(',',
> QString::SkipEmptyParts);
>
> if (categories.isEmpty()) {
> // extras.ubuntu.com packages can have this field
> @@ -363,6 +366,21 @@ bool Application::isTechnical() const
> return m_isTechnical;
> }
>
> +QByteArray Application::getField(const char* field, const QByteArray&
> defaultvalue) const
> +{
> + if(m_data) {
> + KConfigGroup group = m_data->group("Desktop Entry");
> + return group.readEntry(field, defaultvalue);
> + } else
> + return defaultvalue;
> +
> +}
> +
> +bool Application::hasField(const char* field) const
> +{
> + return m_data && m_data->group("Desktop Entry").hasKey(field);
> +}
> +
> QUrl Application::homepage()
> {
> if(!m_package) return QString();
> @@ -465,7 +483,7 @@ AbstractResource::State Application::state()
> int s = package()->state();
> if(s & QApt::Package::Upgradeable) ret = Upgradeable;
> else if(s & QApt::Package::Installed) ret = Installed;
> -
> +
> return ret;
> }
>
> @@ -473,7 +491,7 @@ void Application::fetchScreenshots()
> {
> if(!m_sourceHasScreenshot)
> return;
> -
> +
> QString dest = KStandardDirs::locate("tmp",
> "screenshots."+m_packageName);
> const KUrl packageUrl(MuonDataSources::screenshotsSource(),
> "/json/package/"+m_packageName);
> KIO::StoredTransferJob* job = KIO::storedGet(packageUrl,
> KIO::NoReload, KIO::HideProgressInfo);
> @@ -490,7 +508,7 @@ void Application::downloadingScreenshotsFinished(KJob*
> j)
> QVariantMap values = p.parse(job->data(), &ok).toMap();
> if(ok) {
> QVariantList screenshots = values["screenshots"].toList();
> -
> +
> QList<QUrl> thumbnailUrls, screenshotUrls;
> foreach(const QVariant& screenshot, screenshots) {
> QVariantMap s = screenshot.toMap();
> @@ -594,3 +612,14 @@ QString Application::buildDescription(const
> QByteArray& data, const QString& sou
>
> return description;
> }
> +
> +void Application::setPackageName(QByteArray pkgName)
> +{
> + Q_ASSERT(!m_package);
> + m_packageName = pkgName;
> +}
> +
> +void Application::setTechnical(bool technical)
> +{
> + m_isTechnical = technical;
> +}
> diff --git a/libmuon/backends/ApplicationBackend/Application.h
> b/libmuon/backends/ApplicationBackend/Application.h
> index dda9ebe..dcc0eb8 100644
> --- a/libmuon/backends/ApplicationBackend/Application.h
> +++ b/libmuon/backends/ApplicationBackend/Application.h
> @@ -32,7 +32,6 @@
>
> #include "libmuonprivate_export.h"
> #include "resources/AbstractResource.h"
> -#include <Asmara/database.h>
>
> class KJob;
> namespace QApt {
> @@ -44,7 +43,7 @@ class MUONPRIVATE_EXPORT Application : public
> AbstractResource
> Q_OBJECT
> Q_PROPERTY(QString menuPath READ menuPath CONSTANT)
> public:
> - explicit Application(Asmara::Component comp, QApt::Backend *backend);
> + explicit Application(QApt::Backend *backend);
> explicit Application(QApt::Package *package, QApt::Backend *backend);
>
> QString name();
> @@ -63,6 +62,9 @@ public:
> bool isTechnical() const;
> QString packageName() const;
>
> + void setTechnical(bool technical);
> + void setPackageName(QByteArray pkgName);
> +
> //QApt::Package forwarding
> QUrl homepage();
> QString longDescription();
> @@ -74,24 +76,25 @@ public:
>
> bool hasScreenshot() const { return m_sourceHasScreenshot; }
> void setHasScreenshot(bool has);
> -
> +
> void clearPackage();
> QVector<KService::Ptr> findExecutables() const;
> virtual QStringList executables() const;
> -
> +
> /** Used to trigger the stateChanged signal from the
> ApplicationBackend */
> void emitStateChanged();
> -
> +
> void invokeApplication() const;
> -
> +
> bool canExecute() const;
> QString section();
> -
> +
> virtual State state();
> virtual void fetchScreenshots();
> virtual void fetchChangelog();
> -
> +
> bool isFromSecureOrigin() const;
> + QByteArray getField(const char* field, const QByteArray& defaultvalue
> = QByteArray()) const;
>
> private slots:
> void processChangelog(KJob*);
> @@ -99,8 +102,8 @@ private slots:
>
> private:
> QString buildDescription(const QByteArray& data, const QString&
> source);
> -
> - Asmara::Component m_component;
> +
> + QSharedPointer<KConfig> m_data;
> QApt::Backend *m_backend;
> QApt::Package *m_package;
> QByteArray m_packageName;
> @@ -112,6 +115,7 @@ private:
>
> QApt::PackageList addons();
> QVector<QPair<QString, QString> > locateApplication(const QString
> &_relPath, const QString &menuId) const;
> + bool hasField(const char* field) const;
> };
>
> #endif
> diff --git a/libmuon/backends/ApplicationBackend/ApplicationBackend.cpp
> b/libmuon/backends/ApplicationBackend/ApplicationBackend.cpp
> index 67bb6a2..7b1da1a 100644
> --- a/libmuon/backends/ApplicationBackend/ApplicationBackend.cpp
> +++ b/libmuon/backends/ApplicationBackend/ApplicationBackend.cpp
> @@ -48,8 +48,8 @@
> #include <qjson/parser.h>
>
> // Asmara includes
> -#include <Asmara/database.h>
> -#include <Asmara/component.h>
> +#include <AppstreamQt/database.h>
> +#include <AppstreamQt/component.h>
>
> //libmuonapt includes
> #include "MuonStrings.h"
> @@ -58,6 +58,7 @@
>
> // Own includes
> #include "Application.h"
> +#include "AppstreamApplication.h"
> #include "ReviewsBackend.h"
> #include "Transaction/Transaction.h"
> #include "Transaction/TransactionModel.h"
> @@ -101,17 +102,17 @@ QVector<Application *> init(QApt::Backend *backend,
> QThread* thread)
> QSet<QString> packages;
> QList<Application *> tempList;
>
> - QList <Asmara::Component> components;
> - Asmara::Database db(QLatin1String("/var/cache/app-info/xapian"));
> + QList <Appstream::Component> components;
> + Appstream::Database db(QLatin1String("/var/cache/app-info/xapian"));
>
> bool success = db.open();
>
> if(!success) {
> - qDebug()<<"Opening database failed";
> - }else{
> + qWarning()<<"Opening database failed";
> + } else {
> components = db.allComponents();
> - for(int i=0;i<components.size();i++){
> - Application *app = new Application(components.at(i),
> backend);
> + foreach(const Appstream::Component &comp, components){
> + AppstreamApplication *app = new AppstreamApplication(comp,
> backend);
> packages.insert(app->packageName());
> tempList << app;
> }
> diff --git a/libmuon/backends/ApplicationBackend/AppstreamApplication.cpp
> b/libmuon/backends/ApplicationBackend/AppstreamApplication.cpp
> new file mode 100644
> index 0000000..15c0bc0
> --- /dev/null
> +++ b/libmuon/backends/ApplicationBackend/AppstreamApplication.cpp
> @@ -0,0 +1,40 @@
> +#include "AppstreamApplication.h"
> +#include "Application.h"
> +
> +AppstreamApplication::AppstreamApplication(Appstream::Component comp,
> QApt::Backend* backend)
> + : Application(backend)
> + , m_component(comp)
> +{
> + setTechnical(m_component.kind() != Appstream::Component::KindDesktop);
> + setPackageName(m_component.packageName().toLatin1());
> +}
> +
> +QString AppstreamApplication::untranslatedName()
> +{
> + return m_component.name();
> +}
> +
> +QString AppstreamApplication::comment()
> +{
> + return m_component.summary();
> +}
> +
> +QString AppstreamApplication::icon() const
> +{
> + //TODO return icon path from cache
> + return QString();
> +}
> +
> +QStringList AppstreamApplication::mimetypes() const
> +{
> + QStringList mimeValues;
> + foreach(const Appstream::Provides &provides,
> m_component.provides(Appstream::Provides::KindMimetype)){
> + mimeValues << provides.value();
> + }
> + return mimeValues;
> +}
> +
> +QStringList AppstreamApplication::categories()
> +{
> + return m_component.categories();
> +}
> diff --git a/libmuon/backends/ApplicationBackend/AppstreamApplication.h
> b/libmuon/backends/ApplicationBackend/AppstreamApplication.h
> new file mode 100644
> index 0000000..e000350
> --- /dev/null
> +++ b/libmuon/backends/ApplicationBackend/AppstreamApplication.h
> @@ -0,0 +1,22 @@
> +#ifndef APPSTREAMAPPLICATION_H
> +#define APPSTREAMAPPLICATION_H
> +
> +#include "Application.h"
> +#include <AppstreamQt/database.h>
> +
> +class Application;
> +
> +class AppstreamApplication : public Application
> +{
> +public:
> + explicit AppstreamApplication(Appstream::Component comp,
> QApt::Backend *backend);
> + QString untranslatedName();
> + QString comment();
> + QString icon() const;
> + QStringList mimetypes() const;
> + QStringList categories();
> +private:
> + Appstream::Component m_component;
> +};
> +
> +#endif
> \ No newline at end of file
> diff --git a/libmuon/backends/ApplicationBackend/CMakeLists.txt
> b/libmuon/backends/ApplicationBackend/CMakeLists.txt
> index 571baf8..6589d40 100644
> --- a/libmuon/backends/ApplicationBackend/CMakeLists.txt
> +++ b/libmuon/backends/ApplicationBackend/CMakeLists.txt
> @@ -29,6 +29,7 @@ add_subdirectory(tests)
> set(appsbackend_SRCS
> ApplicationBackend.cpp
> Application.cpp
> + AppstreamApplication.cpp
> ApplicationUpdates.cpp
> ReviewsBackend.cpp #TODO: rename to AptReviewsBackend
> UbuntuLoginBackend.cpp
> @@ -39,7 +40,7 @@ qt4_add_dbus_interface(appsbackend_SRCS
> ubuntu_sso_dbus_interface.xml ubuntu_sso
> kde4_add_plugin(muon-appsbackend SHARED ${appsbackend_SRCS})
> target_link_libraries(muon-appsbackend ${QT_QTCORE_LIBRARY}
> ${QT_QTGUI_LIBRARY} ${QT_QTDBUS_LIBRARY}
> ${KDE4_KDECORE_LIBS} ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS}
> ${DEBCONF_KDE_LIB}
> - ${qjson_LIBRARIES} ${QTOAUTH_LIBRARY} ${QAPT_LIBRARY} muonprivate
> muonapt Asmara
> + ${qjson_LIBRARIES} ${QTOAUTH_LIBRARY} ${QAPT_LIBRARY} muonprivate
> muonapt AppstreamQt
> )
> install(TARGETS muon-appsbackend DESTINATION ${PLUGIN_INSTALL_DIR})
> install(FILES muon-applications-backend.desktop DESTINATION
> ${SERVICES_INSTALL_DIR})
>
>
[Attachment #3 (text/html)]
<div dir="ltr">How can it be that you have conflicts in the first commit in a branch? \
:/<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jul 9, \
2014 at 4:58 PM, Floris-Andrei Stoica-Marcu <span dir="ltr"><<a \
href="mailto:floris.sm@gmail.com" target="_blank">floris.sm@gmail.com</a>></span> \
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc \
solid;padding-left:1ex">Git commit 661e1762f43a412960aa1cfbf3a1ee9335604294 by \
Floris-Andrei Stoica-Marcu.<br> Committed on 03/07/2014 at 08:32.<br>
Pushed by florisandreis into branch 'apt-appstream'.<br>
<br>
Enhanced appstream integration<br>
Made the AppstreamApplication class that inherits Aplication<br>
Renamed Asmara to AppstreamQt<br>
<br>
TO DO:<br>
Screenshots from it too<br>
Sorting/filtering by kind/project group<br>
Icons from it, although apt is on its way to integrate this; need workaround<br>
Maybe put the db path in MuonSources<br>
<br>
Conflicts:<br>
libmuon/backends/ApplicationBackend/Application.cpp<br>
libmuon/backends/ApplicationBackend/Application.h<br>
libmuon/backends/ApplicationBackend/ApplicationBackend.cpp<br>
libmuon/backends/ApplicationBackend/CMakeLists.txt<br>
<br>
M +1 -0 CMakeLists.txt<br>
M +42 -13 libmuon/backends/ApplicationBackend/Application.cpp<br>
M +14 -10 libmuon/backends/ApplicationBackend/Application.h<br>
M +9 -8 libmuon/backends/ApplicationBackend/ApplicationBackend.cpp<br>
A +40 -0 libmuon/backends/ApplicationBackend/AppstreamApplication.cpp \
[License: UNKNOWN] *<br> A +22 -0 \
libmuon/backends/ApplicationBackend/AppstreamApplication.h [License: UNKNOWN] \
*<br> M +2 -1 libmuon/backends/ApplicationBackend/CMakeLists.txt<br>
<br>
The files marked with a * at the end have a non valid license. Please read: <a \
href="http://techbase.kde.org/Policies/Licensing_Policy" \
target="_blank">http://techbase.kde.org/Policies/Licensing_Policy</a> and use the \
headers which are listed at that page.<br>
<br>
<br>
<a href="http://commits.kde.org/muon/661e1762f43a412960aa1cfbf3a1ee9335604294" \
target="_blank">http://commits.kde.org/muon/661e1762f43a412960aa1cfbf3a1ee9335604294</a><br>
<br>
diff --git a/CMakeLists.txt b/CMakeLists.txt<br>
index 1050d97..d4528b8 100644<br>
--- a/CMakeLists.txt<br>
+++ b/CMakeLists.txt<br>
@@ -36,6 +36,7 @@ configure_file(<a href="http://MuonVersion.h.in" \
target="_blank">MuonVersion.h.in</a> MuonVersion.h)<br> <br>
add_subdirectory(libmuon)<br>
if(QAPT_FOUND)<br>
+ find_package(AppstreamQt REQUIRED)<br>
add_subdirectory(libmuonapt)<br>
add_subdirectory(muon)<br>
add_subdirectory(installer)<br>
diff --git a/libmuon/backends/ApplicationBackend/Application.cpp \
b/libmuon/backends/ApplicationBackend/Application.cpp<br> index b37ac12..c6a9720 \
100644<br>
--- a/libmuon/backends/ApplicationBackend/Application.cpp<br>
+++ b/libmuon/backends/ApplicationBackend/Application.cpp<br>
@@ -49,9 +49,8 @@<br>
//QJSON includes<br>
#include <qjson/parser.h><br>
<br>
-Application::Application(Asmara::Component comp, QApt::Backend* backend)<br>
+Application::Application(QApt::Backend* backend)<br>
: AbstractResource(0)<br>
- , m_component(comp)<br>
, m_backend(backend)<br>
, m_package(0)<br>
, m_isValid(true)<br>
@@ -59,10 +58,7 @@ Application::Application(Asmara::Component comp, QApt::Backend* \
backend)<br> , m_isExtrasApp(false)<br>
, m_sourceHasScreenshot(true)<br>
{<br>
- static QByteArray currentDesktop = \
qgetenv("XDG_CURRENT_DESKTOP");<br> <br>
- m_isTechnical = m_component.kind() != Asmara::Component::KindDesktop;<br>
- m_packageName = m_component.packageName().toLatin1();<br>
}<br>
<br>
Application::Application(QApt::Package* package, QApt::Backend* backend)<br>
@@ -102,7 +98,7 @@ QString Application::name()<br>
<br>
QString Application::untranslatedName()<br>
{<br>
- QString name = <a href="http://m_component.name" \
target="_blank">m_component.name</a>();<br> + QString name = \
QString::fromUtf8(getField("Name")).trimmed();<br> if (name.isEmpty() \
&& package()) {<br>
// <a href="http://extras.ubuntu.com" \
target="_blank">extras.ubuntu.com</a> packages can have this<br> if \
(m_isExtrasApp)<br> @@ -116,7 +112,14 @@ QString Application::untranslatedName()<br>
<br>
QString Application::comment()<br>
{<br>
- QString comment = m_component.summary();<br>
+ QString comment = getField("Comment");<br>
+ if (comment.isEmpty()) {<br>
+ // Sometimes GenericName is used instead of Comment<br>
+ comment = getField("GenericName");<br>
+ if (comment.isEmpty()) {<br>
+ return package()->shortDescription();<br>
+ }<br>
+ }<br>
<br>
return i18n(comment.toUtf8());<br>
}<br>
@@ -144,12 +147,12 @@ QApt::Package *Application::package()<br>
<br>
QString Application::icon() const<br>
{<br>
- return m_component.iconUrl().toString();<br>
+ return getField("Icon", "applications-other");<br>
}<br>
<br>
QStringList Application::mimetypes() const<br>
{<br>
- return m_component.categories();<br>
+ return QString(getField("MimeType")).split(';');<br>
}<br>
<br>
QString Application::menuPath()<br>
@@ -244,7 +247,7 @@ QVector<QPair<QString, QString> > \
Application::locateApplication(const QString &<br> <br>
QStringList Application::categories()<br>
{<br>
- QStringList categories = m_component.categories();<br>
+ QStringList categories = \
QString(getField("Categories")).split(',', \
QString::SkipEmptyParts);<br> <br>
if (categories.isEmpty()) {<br>
// <a href="http://extras.ubuntu.com" \
target="_blank">extras.ubuntu.com</a> packages can have this field<br> @@ -363,6 \
+366,21 @@ bool Application::isTechnical() const<br> return m_isTechnical;<br>
}<br>
<br>
+QByteArray Application::getField(const char* field, const QByteArray& \
defaultvalue) const<br> +{<br>
+ if(m_data) {<br>
+ KConfigGroup group = m_data->group("Desktop Entry");<br>
+ return group.readEntry(field, defaultvalue);<br>
+ } else<br>
+ return defaultvalue;<br>
+<br>
+}<br>
+<br>
+bool Application::hasField(const char* field) const<br>
+{<br>
+ return m_data && m_data->group("Desktop \
Entry").hasKey(field);<br> +}<br>
+<br>
QUrl Application::homepage()<br>
{<br>
if(!m_package) return QString();<br>
@@ -465,7 +483,7 @@ AbstractResource::State Application::state()<br>
int s = package()->state();<br>
if(s & QApt::Package::Upgradeable) ret = Upgradeable;<br>
else if(s & QApt::Package::Installed) ret = Installed;<br>
-<br>
+<br>
return ret;<br>
}<br>
<br>
@@ -473,7 +491,7 @@ void Application::fetchScreenshots()<br>
{<br>
if(!m_sourceHasScreenshot)<br>
return;<br>
-<br>
+<br>
QString dest = KStandardDirs::locate("tmp", \
"screenshots."+m_packageName);<br>
const KUrl packageUrl(MuonDataSources::screenshotsSource(), \
"/json/package/"+m_packageName);<br>
KIO::StoredTransferJob* job = KIO::storedGet(packageUrl, KIO::NoReload, \
KIO::HideProgressInfo);<br> @@ -490,7 +508,7 @@ void \
Application::downloadingScreenshotsFinished(KJob* j)<br>
QVariantMap values = p.parse(job->data(), &ok).toMap();<br>
if(ok) {<br>
QVariantList screenshots = \
values["screenshots"].toList();<br>
-<br>
+<br>
QList<QUrl> thumbnailUrls, screenshotUrls;<br>
foreach(const QVariant& screenshot, screenshots) {<br>
QVariantMap s = screenshot.toMap();<br>
@@ -594,3 +612,14 @@ QString Application::buildDescription(const QByteArray& \
data, const QString& sou<br> <br>
return description;<br>
}<br>
+<br>
+void Application::setPackageName(QByteArray pkgName)<br>
+{<br>
+ Q_ASSERT(!m_package);<br>
+ m_packageName = pkgName;<br>
+}<br>
+<br>
+void Application::setTechnical(bool technical)<br>
+{<br>
+ m_isTechnical = technical;<br>
+}<br>
diff --git a/libmuon/backends/ApplicationBackend/Application.h \
b/libmuon/backends/ApplicationBackend/Application.h<br> index dda9ebe..dcc0eb8 \
100644<br>
--- a/libmuon/backends/ApplicationBackend/Application.h<br>
+++ b/libmuon/backends/ApplicationBackend/Application.h<br>
@@ -32,7 +32,6 @@<br>
<br>
#include "libmuonprivate_export.h"<br>
#include "resources/AbstractResource.h"<br>
-#include <Asmara/database.h><br>
<br>
class KJob;<br>
namespace QApt {<br>
@@ -44,7 +43,7 @@ class MUONPRIVATE_EXPORT Application : public AbstractResource<br>
Q_OBJECT<br>
Q_PROPERTY(QString menuPath READ menuPath CONSTANT)<br>
public:<br>
- explicit Application(Asmara::Component comp, QApt::Backend *backend);<br>
+ explicit Application(QApt::Backend *backend);<br>
explicit Application(QApt::Package *package, QApt::Backend *backend);<br>
<br>
QString name();<br>
@@ -63,6 +62,9 @@ public:<br>
bool isTechnical() const;<br>
QString packageName() const;<br>
<br>
+ void setTechnical(bool technical);<br>
+ void setPackageName(QByteArray pkgName);<br>
+<br>
//QApt::Package forwarding<br>
QUrl homepage();<br>
QString longDescription();<br>
@@ -74,24 +76,25 @@ public:<br>
<br>
bool hasScreenshot() const { return m_sourceHasScreenshot; }<br>
void setHasScreenshot(bool has);<br>
-<br>
+<br>
void clearPackage();<br>
QVector<KService::Ptr> findExecutables() const;<br>
virtual QStringList executables() const;<br>
-<br>
+<br>
/** Used to trigger the stateChanged signal from the ApplicationBackend \
*/<br> void emitStateChanged();<br>
-<br>
+<br>
void invokeApplication() const;<br>
-<br>
+<br>
bool canExecute() const;<br>
QString section();<br>
-<br>
+<br>
virtual State state();<br>
virtual void fetchScreenshots();<br>
virtual void fetchChangelog();<br>
-<br>
+<br>
bool isFromSecureOrigin() const;<br>
+ QByteArray getField(const char* field, const QByteArray& defaultvalue = \
QByteArray()) const;<br> <br>
private slots:<br>
void processChangelog(KJob*);<br>
@@ -99,8 +102,8 @@ private slots:<br>
<br>
private:<br>
QString buildDescription(const QByteArray& data, const QString& \
source);<br>
-<br>
- Asmara::Component m_component;<br>
+<br>
+ QSharedPointer<KConfig> m_data;<br>
QApt::Backend *m_backend;<br>
QApt::Package *m_package;<br>
QByteArray m_packageName;<br>
@@ -112,6 +115,7 @@ private:<br>
<br>
QApt::PackageList addons();<br>
QVector<QPair<QString, QString> > locateApplication(const QString \
&_relPath, const QString &menuId) const;<br> + bool hasField(const char* \
field) const;<br> };<br>
<br>
#endif<br>
diff --git a/libmuon/backends/ApplicationBackend/ApplicationBackend.cpp \
b/libmuon/backends/ApplicationBackend/ApplicationBackend.cpp<br> index \
67bb6a2..7b1da1a 100644<br>
--- a/libmuon/backends/ApplicationBackend/ApplicationBackend.cpp<br>
+++ b/libmuon/backends/ApplicationBackend/ApplicationBackend.cpp<br>
@@ -48,8 +48,8 @@<br>
#include <qjson/parser.h><br>
<br>
// Asmara includes<br>
-#include <Asmara/database.h><br>
-#include <Asmara/component.h><br>
+#include <AppstreamQt/database.h><br>
+#include <AppstreamQt/component.h><br>
<br>
//libmuonapt includes<br>
#include "MuonStrings.h"<br>
@@ -58,6 +58,7 @@<br>
<br>
// Own includes<br>
#include "Application.h"<br>
+#include "AppstreamApplication.h"<br>
#include "ReviewsBackend.h"<br>
#include "Transaction/Transaction.h"<br>
#include "Transaction/TransactionModel.h"<br>
@@ -101,17 +102,17 @@ QVector<Application *> init(QApt::Backend *backend, \
QThread* thread)<br> QSet<QString> packages;<br>
QList<Application *> tempList;<br>
<br>
- QList <Asmara::Component> components;<br>
- Asmara::Database \
db(QLatin1String("/var/cache/app-info/xapian"));<br> + QList \
<Appstream::Component> components;<br> + Appstream::Database \
db(QLatin1String("/var/cache/app-info/xapian"));<br> <br>
bool success = db.open();<br>
<br>
if(!success) {<br>
- qDebug()<<"Opening database failed";<br>
- }else{<br>
+ qWarning()<<"Opening database failed";<br>
+ } else {<br>
components = db.allComponents();<br>
- for(int i=0;i<components.size();i++){<br>
- Application *app = new Application(<a href="http://components.at" \
target="_blank">components.at</a>(i), backend);<br> + foreach(const \
Appstream::Component &comp, components){<br> + \
AppstreamApplication *app = new AppstreamApplication(comp, backend);<br> \
packages.insert(app->packageName());<br> tempList << app;<br>
}<br>
diff --git a/libmuon/backends/ApplicationBackend/AppstreamApplication.cpp \
b/libmuon/backends/ApplicationBackend/AppstreamApplication.cpp<br> new file mode \
100644<br> index 0000000..15c0bc0<br>
--- /dev/null<br>
+++ b/libmuon/backends/ApplicationBackend/AppstreamApplication.cpp<br>
@@ -0,0 +1,40 @@<br>
+#include "AppstreamApplication.h"<br>
+#include "Application.h"<br>
+<br>
+AppstreamApplication::AppstreamApplication(Appstream::Component comp, QApt::Backend* \
backend)<br> + : Application(backend)<br>
+ , m_component(comp)<br>
+{<br>
+ setTechnical(m_component.kind() != Appstream::Component::KindDesktop);<br>
+ setPackageName(m_component.packageName().toLatin1());<br>
+}<br>
+<br>
+QString AppstreamApplication::untranslatedName()<br>
+{<br>
+ return <a href="http://m_component.name" \
target="_blank">m_component.name</a>();<br> +}<br>
+<br>
+QString AppstreamApplication::comment()<br>
+{<br>
+ return m_component.summary();<br>
+}<br>
+<br>
+QString AppstreamApplication::icon() const<br>
+{<br>
+ //TODO return icon path from cache<br>
+ return QString();<br>
+}<br>
+<br>
+QStringList AppstreamApplication::mimetypes() const<br>
+{<br>
+ QStringList mimeValues;<br>
+ foreach(const Appstream::Provides &provides, \
m_component.provides(Appstream::Provides::KindMimetype)){<br> + mimeValues \
<< provides.value();<br> + }<br>
+ return mimeValues;<br>
+}<br>
+<br>
+QStringList AppstreamApplication::categories()<br>
+{<br>
+ return m_component.categories();<br>
+}<br>
diff --git a/libmuon/backends/ApplicationBackend/AppstreamApplication.h \
b/libmuon/backends/ApplicationBackend/AppstreamApplication.h<br> new file mode \
100644<br> index 0000000..e000350<br>
--- /dev/null<br>
+++ b/libmuon/backends/ApplicationBackend/AppstreamApplication.h<br>
@@ -0,0 +1,22 @@<br>
+#ifndef APPSTREAMAPPLICATION_H<br>
+#define APPSTREAMAPPLICATION_H<br>
+<br>
+#include "Application.h"<br>
+#include <AppstreamQt/database.h><br>
+<br>
+class Application;<br>
+<br>
+class AppstreamApplication : public Application<br>
+{<br>
+public:<br>
+ explicit AppstreamApplication(Appstream::Component comp, QApt::Backend \
*backend);<br> + QString untranslatedName();<br>
+ QString comment();<br>
+ QString icon() const;<br>
+ QStringList mimetypes() const;<br>
+ QStringList categories();<br>
+private:<br>
+ Appstream::Component m_component;<br>
+};<br>
+<br>
+#endif<br>
\ No newline at end of file<br>
diff --git a/libmuon/backends/ApplicationBackend/CMakeLists.txt \
b/libmuon/backends/ApplicationBackend/CMakeLists.txt<br> index 571baf8..6589d40 \
100644<br>
--- a/libmuon/backends/ApplicationBackend/CMakeLists.txt<br>
+++ b/libmuon/backends/ApplicationBackend/CMakeLists.txt<br>
@@ -29,6 +29,7 @@ add_subdirectory(tests)<br>
set(appsbackend_SRCS<br>
ApplicationBackend.cpp<br>
Application.cpp<br>
+ AppstreamApplication.cpp<br>
ApplicationUpdates.cpp<br>
ReviewsBackend.cpp #TODO: rename to AptReviewsBackend<br>
UbuntuLoginBackend.cpp<br>
@@ -39,7 +40,7 @@ qt4_add_dbus_interface(appsbackend_SRCS \
ubuntu_sso_dbus_interface.xml ubuntu_sso<br> kde4_add_plugin(muon-appsbackend SHARED \
${appsbackend_SRCS})<br> target_link_libraries(muon-appsbackend ${QT_QTCORE_LIBRARY} \
${QT_QTGUI_LIBRARY} ${QT_QTDBUS_LIBRARY}<br>
${KDE4_KDECORE_LIBS} ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS} \
${DEBCONF_KDE_LIB}<br>
- ${qjson_LIBRARIES} ${QTOAUTH_LIBRARY} ${QAPT_LIBRARY} muonprivate muonapt \
Asmara<br> + ${qjson_LIBRARIES} ${QTOAUTH_LIBRARY} ${QAPT_LIBRARY} muonprivate \
muonapt AppstreamQt<br> )<br>
install(TARGETS muon-appsbackend DESTINATION ${PLUGIN_INSTALL_DIR})<br>
install(FILES muon-applications-backend.desktop DESTINATION \
${SERVICES_INSTALL_DIR})<br> <br>
</blockquote></div><br></div>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic