2e0bf2d5feae207e89685d68671e7aef86985db4
[gpgme.git] / lang / cpp / src / swdbresult.h
1 /*
2   swdbresult.h - wraps a gpgme swdb query / rsult
3   Copyright (C) 2016 by Bundesamt für Sicherheit in der Informationstechnik
4   Software engineering by Intevation GmbH
5
6   This file is part of GPGME++.
7
8   GPGME++ is free software; you can redistribute it and/or
9   modify it under the terms of the GNU Library General Public
10   License as published by the Free Software Foundation; either
11   version 2 of the License, or (at your option) any later version.
12
13   GPGME++ is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU Library General Public License for more details.
17
18   You should have received a copy of the GNU Library General Public License
19   along with GPGME++; see the file COPYING.LIB.  If not, write to the
20   Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21   Boston, MA 02110-1301, USA.
22 */
23 #ifndef __GPGMEPP_SWDB_H__
24 #define __GPGMEPP_SWDB_H__
25
26 #include "gpgmepp_export.h"
27
28 #include "global.h"
29 #include "engineinfo.h"
30
31 #include <vector>
32 #include <string>
33 #include <iostream>
34 #include <ostream>
35
36 namespace GpgME
37 {
38
39 class GPGMEPP_EXPORT SwdbResult
40 {
41 public:
42     /* Obtain swdb results through query() */
43     SwdbResult();
44     explicit SwdbResult(gpgme_query_swdb_result_t result);
45
46     /** Query the swdb to get information about updates.
47      *
48      * Runs gpgconf --query-swdb through gpgme and
49      * returns a list of results.
50      * If iversion is given as NULL a check is only done if GPGME
51      * can figure out the version by itself (for example when using
52      * "gpgme" or "gnupg").
53      *
54      * If NULL is used for name the current gpgme version is
55      * checked.
56      *
57      * @param name: Name of the component to query.
58      * @param iversion: Optionally the installed version.
59      * @param err: Optional error.
60      */
61     static std::vector<SwdbResult> query(const char *name,
62                                          const char *iversion = NULL,
63                                          Error *err = NULL);
64
65     const SwdbResult &operator=(SwdbResult other)
66     {
67         swap(other);
68         return *this;
69     }
70
71     void swap(SwdbResult &other)
72     {
73         using std::swap;
74         swap(this->d, other.d);
75     }
76     bool isNull() const;
77
78     /* The name of the package (e.g. "gpgme", "gnupg") */
79     std::string name() const;
80
81     /* The version of the installed version.  */
82     EngineInfo::Version installedVersion() const;
83
84     /* The time the online info was created.  */
85     unsigned long created() const;
86
87     /* The time the online info was retrieved.  */
88     unsigned long retrieved() const;
89
90     /* This bit is set if an error occured or some of the information
91      * in this structure may not be set.  */
92     bool warning() const;
93
94     /* An update is available.  */
95     bool update() const;
96
97     /* The update is important.  */
98     bool urgent() const;
99
100     /* No information at all available.  */
101     bool noinfo() const;
102
103     /* The package name is not known. */
104     bool unknown() const;
105
106     /* The information here is too old.  */
107     bool tooOld() const;
108
109     /* Other error.  */
110     bool error() const;
111
112     /* The version of the latest released version.  */
113     EngineInfo::Version version() const;
114
115     /* The release date of that version.  */
116     unsigned long releaseDate() const;
117
118 private:
119     class Private;
120     std::shared_ptr<Private> d;
121 };
122
123 GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, const SwdbResult &info);
124
125 } // namespace GpgME
126
127 GPGMEPP_MAKE_STD_SWAP_SPECIALIZATION(SwdbResult)
128
129 #endif