[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">&lt;<a \
href="mailto:floris.sm@gmail.com" target="_blank">floris.sm@gmail.com</a>&gt;</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 &#39;apt-appstream&#39;.<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 &lt;qjson/parser.h&gt;<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(&quot;XDG_CURRENT_DESKTOP&quot;);<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(&quot;Name&quot;)).trimmed();<br>  if (name.isEmpty() \
                &amp;&amp; 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(&quot;Comment&quot;);<br>
+      if (comment.isEmpty()) {<br>
+            // Sometimes GenericName is used instead of Comment<br>
+            comment = getField(&quot;GenericName&quot;);<br>
+            if (comment.isEmpty()) {<br>
+                  return package()-&gt;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(&quot;Icon&quot;, &quot;applications-other&quot;);<br>
  }<br>
<br>
  QStringList Application::mimetypes() const<br>
  {<br>
-      return m_component.categories();<br>
+      return QString(getField(&quot;MimeType&quot;)).split(&#39;;&#39;);<br>
  }<br>
<br>
  QString Application::menuPath()<br>
@@ -244,7 +247,7 @@ QVector&lt;QPair&lt;QString, QString&gt; &gt; \
Application::locateApplication(const QString &amp;<br> <br>
  QStringList Application::categories()<br>
  {<br>
-      QStringList categories = m_component.categories();<br>
+      QStringList categories = \
QString(getField(&quot;Categories&quot;)).split(&#39;,&#39;, \
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&amp; \
defaultvalue) const<br> +{<br>
+      if(m_data) {<br>
+            KConfigGroup group = m_data-&gt;group(&quot;Desktop Entry&quot;);<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 &amp;&amp; m_data-&gt;group(&quot;Desktop \
Entry&quot;).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()-&gt;state();<br>
        if(s &amp; QApt::Package::Upgradeable) ret = Upgradeable;<br>
        else if(s &amp; 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(&quot;tmp&quot;, \
                &quot;screenshots.&quot;+m_packageName);<br>
        const KUrl packageUrl(MuonDataSources::screenshotsSource(), \
                &quot;/json/package/&quot;+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-&gt;data(), &amp;ok).toMap();<br>
              if(ok) {<br>
                    QVariantList screenshots = \
                values[&quot;screenshots&quot;].toList();<br>
-<br>
+<br>
                    QList&lt;QUrl&gt; thumbnailUrls, screenshotUrls;<br>
                    foreach(const QVariant&amp; screenshot, screenshots) {<br>
                          QVariantMap s = screenshot.toMap();<br>
@@ -594,3 +612,14 @@ QString Application::buildDescription(const QByteArray&amp; \
data, const QString&amp; 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 &quot;libmuonprivate_export.h&quot;<br>
  #include &quot;resources/AbstractResource.h&quot;<br>
-#include &lt;Asmara/database.h&gt;<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&lt;KService::Ptr&gt; 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&amp; 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&amp; data, const QString&amp; \
                source);<br>
-<br>
-      Asmara::Component m_component;<br>
+<br>
+      QSharedPointer&lt;KConfig&gt; 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&lt;QPair&lt;QString, QString&gt; &gt; locateApplication(const QString \
&amp;_relPath, const QString &amp;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 &lt;qjson/parser.h&gt;<br>
<br>
  // Asmara includes<br>
-#include &lt;Asmara/database.h&gt;<br>
-#include &lt;Asmara/component.h&gt;<br>
+#include &lt;AppstreamQt/database.h&gt;<br>
+#include &lt;AppstreamQt/component.h&gt;<br>
<br>
  //libmuonapt includes<br>
  #include &quot;MuonStrings.h&quot;<br>
@@ -58,6 +58,7 @@<br>
<br>
  // Own includes<br>
  #include &quot;Application.h&quot;<br>
+#include &quot;AppstreamApplication.h&quot;<br>
  #include &quot;ReviewsBackend.h&quot;<br>
  #include &quot;Transaction/Transaction.h&quot;<br>
  #include &quot;Transaction/TransactionModel.h&quot;<br>
@@ -101,17 +102,17 @@ QVector&lt;Application *&gt; init(QApt::Backend *backend, \
QThread* thread)<br>  QSet&lt;QString&gt; packages;<br>
        QList&lt;Application *&gt; tempList;<br>
<br>
-      QList &lt;Asmara::Component&gt; components;<br>
-      Asmara::Database \
db(QLatin1String(&quot;/var/cache/app-info/xapian&quot;));<br> +      QList \
&lt;Appstream::Component&gt; components;<br> +      Appstream::Database \
db(QLatin1String(&quot;/var/cache/app-info/xapian&quot;));<br> <br>
        bool success = db.open();<br>
<br>
        if(!success) {<br>
-            qDebug()&lt;&lt;&quot;Opening database failed&quot;;<br>
-      }else{<br>
+            qWarning()&lt;&lt;&quot;Opening database failed&quot;;<br>
+      } else {<br>
              components = db.allComponents();<br>
-            for(int i=0;i&lt;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 &amp;comp, components){<br> +                  \
AppstreamApplication *app = new AppstreamApplication(comp, backend);<br>  \
packages.insert(app-&gt;packageName());<br>  tempList &lt;&lt; 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 &quot;AppstreamApplication.h&quot;<br>
+#include &quot;Application.h&quot;<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 &amp;provides,   \
m_component.provides(Appstream::Provides::KindMimetype)){<br> +            mimeValues \
&lt;&lt; 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 &quot;Application.h&quot;<br>
+#include &lt;AppstreamQt/database.h&gt;<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