Skip to content

Commit

Permalink
Implement the developer element for unique developer IDs
Browse files Browse the repository at this point in the history
Resolves: #244
  • Loading branch information
ximion committed Oct 3, 2023
1 parent ad30597 commit c3f5db4
Show file tree
Hide file tree
Showing 23 changed files with 862 additions and 103 deletions.
1 change: 1 addition & 0 deletions data/its/metainfo.its
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
/component/description |
/component/developer_name |
/component/name_variant_suffix |
/component/developer/name |
/component/keywords/keyword |
/component/screenshots/screenshot/caption |
/component/releases/release/description |
Expand Down
11 changes: 5 additions & 6 deletions qt/component.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include "icon.h"
#include "screenshot.h"
#include "release.h"
#include "developer.h"
#include "relation.h"
#include "bundle.h"
#include "suggested.h"
Expand Down Expand Up @@ -293,16 +294,14 @@ void Component::setProjectGroup(const QString &group)
as_component_set_project_group(d->cpt, qPrintable(group));
}

QString Component::developerName() const
Developer Component::developer() const
{
return valueWrap(as_component_get_developer_name(d->cpt));
return Developer(as_component_get_developer(d->cpt));
}

void Component::setDeveloperName(const QString &developerName, const QString &lang)
void Component::setDeveloper(const Developer &developer)
{
as_component_set_developer_name(d->cpt,
qPrintable(developerName),
lang.isEmpty() ? NULL : qPrintable(lang));
as_component_set_developer(d->cpt, developer.asDeveloper());
}

QStringList Component::compulsoryForDesktops() const
Expand Down
5 changes: 3 additions & 2 deletions qt/component.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ namespace AppStream
class Icon;
class Screenshot;
class Suggested;
class Developer;
class RelationCheckResult;

class ComponentData;
Expand Down Expand Up @@ -175,8 +176,8 @@ class APPSTREAMQT_EXPORT Component
QString projectGroup() const;
void setProjectGroup(const QString &group);

QString developerName() const;
void setDeveloperName(const QString &developerName, const QString &lang = {});
Developer developer() const;
void setDeveloper(const Developer &developer);

QStringList compulsoryForDesktops() const;
void setCompulsoryForDesktop(const QString &desktop);
Expand Down
111 changes: 111 additions & 0 deletions qt/developer.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
/*
* Copyright (C) 2016-2023 Matthias Klumpp <[email protected]>
*
* Licensed under the GNU Lesser General Public License Version 2.1
*
* This library is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 2.1 of the license, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library. If not, see <http://www.gnu.org/licenses/>.
*/

#include "appstream.h"
#include "developer.h"

#include <QDebug>
#include "chelpers.h"

using namespace AppStream;

class AppStream::DeveloperData : public QSharedData
{
public:
DeveloperData()
{
devp = as_developer_new();
}

DeveloperData(AsDeveloper *developer)
: devp(developer)
{
g_object_ref(devp);
}

~DeveloperData()
{
g_object_unref(devp);
}

bool operator==(const DeveloperData &rd) const
{
return rd.devp == devp;
}

AsDeveloper *devp;
};

Developer::Developer()
: d(new DeveloperData)
{
}

Developer::Developer(_AsDeveloper *devp)
: d(new DeveloperData(devp))
{
}

Developer::Developer(const Developer &devp) = default;

Developer::~Developer() = default;

Developer &Developer::operator=(const Developer &devp) = default;

bool Developer::operator==(const Developer &other) const
{
if (this->d == other.d) {
return true;
}
if (this->d && other.d) {
return *(this->d) == *other.d;
}
return false;
}

_AsDeveloper *AppStream::Developer::asDeveloper() const
{
return d->devp;
}

QString AppStream::Developer::id() const
{
return valueWrap(as_developer_get_id(d->devp));
}

void AppStream::Developer::setId(const QString &id)
{
as_developer_set_id(d->devp, qPrintable(id));
}

QString Developer::name() const
{
return valueWrap(as_developer_get_name(d->devp));
}

void Developer::setName(const QString &name, const QString &lang)
{
as_developer_set_name(d->devp, qPrintable(name), lang.isEmpty() ? NULL : qPrintable(lang));
}

QDebug operator<<(QDebug s, const AppStream::Developer &devp)
{
s.nospace() << "AppStream::Developer(" << devp.id() << ":" << devp.name() << ")";
return s.space();
}
63 changes: 63 additions & 0 deletions qt/developer.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/*
* Copyright (C) 2016-2023 Matthias Klumpp <[email protected]>
*
* Licensed under the GNU Lesser General Public License Version 2.1
*
* This library is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 2.1 of the license, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library. If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once

#include <QSharedDataPointer>
#include <QString>
#include <QObject>
#include "appstreamqt_export.h"

struct _AsDeveloper;

namespace AppStream
{

class DeveloperData;

class APPSTREAMQT_EXPORT Developer
{
Q_GADGET

public:
Developer();
Developer(_AsDeveloper *devp);
Developer(const Developer &devp);
~Developer();

Developer &operator=(const Developer &devp);
bool operator==(const Developer &r) const;

/**
* \returns the internally stored AsDeveloper
*/
_AsDeveloper *asDeveloper() const;

QString id() const;
void setId(const QString &id);

QString name() const;
void setName(const QString &name, const QString &lang = {});

private:
QSharedDataPointer<DeveloperData> d;
};
}

APPSTREAMQT_EXPORT QDebug operator<<(QDebug s, const AppStream::Developer &devp);
2 changes: 2 additions & 0 deletions qt/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ asqt_src = [
'component-box.cpp',
'component.cpp',
'contentrating.cpp',
'developer.cpp',
'icon.cpp',
'image.cpp',
'launchable.cpp',
Expand All @@ -59,6 +60,7 @@ asqt_pub_headers = [
'component-box.h',
'component.h',
'contentrating.h',
'developer.h',
'icon.h',
'image.h',
'launchable.h',
Expand Down
1 change: 1 addition & 0 deletions src/appstream.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#include <as-metadata.h>
#include <as-pool.h>
#include <as-category.h>
#include <as-developer.h>
#include <as-icon.h>
#include <as-screenshot.h>
#include <as-image.h>
Expand Down
Loading

0 comments on commit c3f5db4

Please sign in to comment.