summaryrefslogtreecommitdiffstats
path: root/utils/rbutilqt/base/playerbuildinfo.h
blob: 8b7e5934d16caf7f53feb164266a1e2f22ec227c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/***************************************************************************
 *             __________               __   ___.
 *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
 *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
 *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
 *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
 *                     \/            \/     \/    \/            \/
 *
 *   Copyright (C) 2020 by Dominik Riebeling
 *
 * All files in this archive are subject to the GNU General Public License.
 * See the file COPYING in the source tree root for full license agreement.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ****************************************************************************/

#ifndef PLAYERBUILDINFO_H
#define PLAYERBUILDINFO_H

#include <QSettings>

#define STATUS_RETIRED  0
#define STATUS_UNUSABLE 1
#define STATUS_UNSTABLE 2
#define STATUS_STABLE   3

// Provide information about both player and builds.
// For build info data retrieved from the build server has to be passed.
class PlayerBuildInfo : public QObject
{
public:

    enum BuildType {
        TypeRelease,
        TypeCandidate,
        TypeDaily,
        TypeDevel,
    };
    enum BuildInfo {
        BuildUrl,
        BuildVersion,
        BuildManualUrl,
        BuildVoiceUrl,
        BuildVoiceLangs,
        BuildSourceUrl,
        BuildFontUrl,

        DoomUrl,
        Duke3DUrl,
        PuzzFontsUrl,
        QuakeUrl,
        Wolf3DUrl,
        XWorldUrl,
        XRickUrl,
        MidiPatchsetUrl,
    };
    enum DeviceInfo {
        BuildStatus,

        DisplayName,
        BootloaderMethod,
        BootloaderName,
        BootloaderFile,
        BootloaderFilter,
        Encoder,
        Brand,
        PlayerPicture,
        ThemeName,

        TargetNamesAll,
        TargetNamesEnabled,
        LanguageInfo,
        LanguageList,
        UsbIdErrorList,
        UsbIdTargetList,
    };

    enum SystemUrl {
        BootloaderUrl,
        BuildInfoUrl,
        GenlangUrl,
        ThemesUrl,
        ThemesInfoUrl,
        RbutilUrl,
    };

    static PlayerBuildInfo* instance();

    //! Update with build information from server
    void setBuildInfo(QString file);

    // Get information about a device. This data does not depend on the build type.
    QVariant value(DeviceInfo item, QString target = "");

    // Get information about a device. Make a numeric match
    // (only sensible implementation for USB IDs)
    QVariant value(DeviceInfo item, unsigned int match);

    // Get build information for currently selected player.
    QVariant value(BuildInfo item, BuildType type);

    // Get fixed download URL information
    QVariant value(SystemUrl item);

    QString statusAsString(QString target = "");

protected:
    explicit PlayerBuildInfo();

private:
    //! Return a list with all target names (as used internally).
    //! @all false filter out all targets with status = disabled.
    QStringList targetNames(bool all);

    static PlayerBuildInfo* infoInstance;
    QSettings* serverInfo;
    QSettings playerInfo;

};

#endif