LeechCraft 0.6.70-17609-g3dde4097dd
Modular cross-platform feature rich live environment.
Loading...
Searching...
No Matches
anutil.cpp
Go to the documentation of this file.
1/**********************************************************************
2 * LeechCraft - modular cross-platform feature rich internet client.
3 * Copyright (C) 2006-2014 Georg Rudoy
4 *
5 * Distributed under the Boost Software License, Version 1.0.
6 * (See accompanying file LICENSE or copy at https://www.boost.org/LICENSE_1_0.txt)
7 **********************************************************************/
8
9#include "anutil.h"
10#include <QObject>
11#include <QMap>
14#include <util/sll/qtutil.h>
15#include <util/sll/visitor.h>
16
17namespace LC::Util::AN
18{
19 namespace LAN = LC::AN;
20
22 {
23 static const QMap<QString, QString> cat2hr
24 {
25 { LAN::CatIM, QObject::tr ("Instant messaging") },
26 { LAN::CatOrganizer, QObject::tr ("Organizer") },
27 { LAN::CatDownloads, QObject::tr ("Downloads") },
28 { LAN::CatPackageManager, QObject::tr ("Package manager") },
29 { LAN::CatMediaPlayer, QObject::tr ("Media player") },
30 { LAN::CatTerminal, QObject::tr ("Terminal") },
31 { LAN::CatNews, QObject::tr ("News") },
32 { LAN::CatGeneric, QObject::tr ("Generic") }
33 };
34 return cat2hr;
35 }
36
37 QStringList GetKnownEventTypes (const QString& category)
38 {
39 static const QMap<QString, QStringList> cat2types
40 {
41 {
42 LAN::CatIM,
43 {
44 LAN::TypeIMAttention,
45 LAN::TypeIMIncFile,
46 LAN::TypeIMIncMsg,
47 LAN::TypeIMMUCHighlight,
48 LAN::TypeIMMUCInvite,
49 LAN::TypeIMMUCMsg,
50 LAN::TypeIMStatusChange,
51 LAN::TypeIMSubscrGrant,
52 LAN::TypeIMSubscrRequest,
53 LAN::TypeIMSubscrRevoke,
54 LAN::TypeIMSubscrSub,
55 LAN::TypeIMSubscrUnsub,
56 LAN::TypeIMEventTuneChange,
57 LAN::TypeIMEventMoodChange,
58 LAN::TypeIMEventActivityChange,
59 LAN::TypeIMEventLocationChange
60 }
61 },
62 {
63 LAN::CatOrganizer,
64 {
65 LAN::TypeOrganizerEventDue
66 }
67 },
68 {
69 LAN::CatDownloads,
70 {
71 LAN::TypeDownloadError,
72 LAN::TypeDownloadFinished
73 }
74 },
75 {
76 LAN::CatPackageManager,
77 {
78 LAN::TypePackageUpdated
79 }
80 },
81 {
82 LAN::CatMediaPlayer,
83 {
84 LAN::TypeMediaPlaybackStatus
85 }
86 },
87 {
88 LAN::CatTerminal,
89 {
90 LAN::TypeTerminalActivity,
91 LAN::TypeTerminalInactivity,
92 LAN::TypeTerminalBell
93 }
94 },
95 {
96 LAN::CatNews,
97 {
98 LAN::TypeNewsSourceUpdated,
99 LAN::TypeNewsSourceBroken
100 }
101 },
102 {
103 LAN::CatGeneric,
104 {
105 LAN::TypeGeneric
106 }
107 }
108 };
109 return cat2types.value (category);
110 }
111
112 QString GetCategoryName (const QString& category)
113 {
114 return GetCategoryNameMap ().value (category, category);
115 }
116
117 QString GetTypeName (const QString& type)
118 {
119 static const QMap<QString, QString> type2hr
120 {
121 { LAN::TypeIMAttention, QObject::tr ("Attention request") },
122 { LAN::TypeIMIncFile, QObject::tr ("Incoming file transfer request") },
123 { LAN::TypeIMIncMsg, QObject::tr ("Incoming chat message") },
124 { LAN::TypeIMMUCHighlight, QObject::tr ("MUC highlight") },
125 { LAN::TypeIMMUCInvite, QObject::tr ("MUC invitation") },
126 { LAN::TypeIMMUCMsg, QObject::tr ("General MUC message") },
127 { LAN::TypeIMStatusChange, QObject::tr ("Contact status change") },
128 { LAN::TypeIMSubscrGrant, QObject::tr ("Authorization granted") },
129 { LAN::TypeIMSubscrRevoke, QObject::tr ("Authorization revoked") },
130 { LAN::TypeIMSubscrRequest, QObject::tr ("Authorization requested") },
131 { LAN::TypeIMSubscrSub, QObject::tr ("Contact subscribed") },
132 { LAN::TypeIMSubscrUnsub, QObject::tr ("Contact unsubscribed") },
133 { LAN::TypeIMEventTuneChange, QObject::tr ("Contact's tune changed") },
134 { LAN::TypeIMEventMoodChange, QObject::tr ("Contact's mood changed") },
135 { LAN::TypeIMEventActivityChange, QObject::tr ("Contact's activity changed") },
136 { LAN::TypeIMEventLocationChange, QObject::tr ("Contact's location changed") },
137
138 { LAN::TypeOrganizerEventDue, QObject::tr ("Event is due") },
139
140 { LAN::TypeDownloadError, QObject::tr ("Download error") },
141 { LAN::TypeDownloadFinished, QObject::tr ("Download finished") },
142
143 { LAN::TypePackageUpdated, QObject::tr ("Package updated") },
144
145 { LAN::TypeMediaPlaybackStatus, QObject::tr ("Media playback status changed") },
146
147 { LAN::TypeTerminalBell, QObject::tr ("Bell in a terminal") },
148 { LAN::TypeTerminalActivity, QObject::tr ("Activity in a terminal") },
149 { LAN::TypeTerminalInactivity, QObject::tr ("Inactivity in a terminal") },
150
151 { LAN::TypeNewsSourceUpdated, QObject::tr ("News source got updated") },
152 { LAN::TypeNewsSourceBroken, QObject::tr ("News source is detected to be broken") },
153
154 { LAN::TypeGeneric, QObject::tr ("Generic") }
155 };
156 return type2hr.value (type, type);
157 }
158
159 QVariant ToVariant (const LC::AN::StringMatcher& matcher)
160 {
161 const auto value = Util::Visit (matcher,
162 [] (const QRegularExpression& expr) { return QVariant { expr }; },
163 [] (const auto& wrapper) { return QVariant { wrapper.Pattern_ }; });
164 return QVariantMap
165 {
166 { "index"_qs, static_cast<int> (matcher.index ()) },
167 { "value"_qs, value },
168 };
169 }
170
172 {
173 const auto& map = var.toMap ();
174 const auto idx = map ["index"_qs].toInt ();
175 const auto value = map ["value"_qs];
176 switch (idx)
177 {
178 case 0:
179 return LC::AN::Substring { value.toString () };
180 case 1:
181 return LC::AN::Wildcard { value.toString () };
182 case 2:
183 return value.toRegularExpression ();
184 default:
185 qWarning () << "unknown type index" << idx << map;
186 return LC::AN::Substring {};
187 }
188 }
189
190 namespace
191 {
192 bool GenericMatch (auto&& val, const LC::AN::StringMatcher& pattern)
193 {
194 const auto pos = Util::Visit (pattern,
195 [&val] (const QRegularExpression& rx) { return val.indexOf (rx); },
196 [&val] (const LC::AN::Substring& em) { return val.indexOf (em.Pattern_); },
197 [&val] (const LC::AN::Wildcard& wc) { return val.indexOf (wc.Compiled_); });
198 return pos >= 0;
199 }
200 }
201
202 bool Matches (const QString& string, const LC::AN::StringMatcher& pattern)
203 {
204 return GenericMatch (string, pattern);
205 }
206
207 bool Matches (const QStringList& strings, const LC::AN::StringMatcher& pattern)
208 {
209 return GenericMatch (strings, pattern);
210 }
211}
Definition anutil.h:15
QMap< QString, QString > GetCategoryNameMap()
Returns the map from the category ID to its name.
Definition anutil.cpp:21
LC::AN::StringMatcher StringMatcherFromVariant(const QVariant &var)
Definition anutil.cpp:171
QStringList GetKnownEventTypes(const QString &category)
Returns the known events types for the given category.
Definition anutil.cpp:37
QVariant ToVariant(const LC::AN::StringMatcher &matcher)
Definition anutil.cpp:159
QString GetTypeName(const QString &type)
Returns the human-readable name of the event type.
Definition anutil.cpp:117
bool Matches(const QString &string, const LC::AN::StringMatcher &pattern)
Definition anutil.cpp:202
QString GetCategoryName(const QString &category)
Returns the human-readable name of the event category.
Definition anutil.cpp:112
auto Visit(const Either< Left, Right > &either, Args &&... args)
Definition either.h:207