swift
voicecapabilities.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include <QList>
7 #include <QString>
8 #include <QtGlobal>
9 
10 #include "misc/icons.h"
11 
12 using namespace swift::misc;
13 
14 SWIFT_DEFINE_VALUEOBJECT_MIXINS(swift::misc::network, CVoiceCapabilities)
15 
16 namespace swift::misc::network
17 {
18  CVoiceCapabilities::CVoiceCapabilities(const QString &flightPlanRemarks)
19  {
20  this->setFromFlightPlanRemarks(flightPlanRemarks);
21  }
22 
24  {
25  static const QString v("/V/");
26  static const QString t("/T/");
27  static const QString r("/R/");
28  static const QString u("");
29 
30  switch (m_voiceCapabilities)
31  {
32  case Voice: return v;
33  case TextOnly: return t;
34  case Unknown: return u;
35  case VoiceReceivingOnly: return r;
36  default: break;
37  }
38  Q_ASSERT_X(false, Q_FUNC_INFO, "Illegal mode");
39  return u;
40  }
41 
42  QString CVoiceCapabilities::convertToQString(bool i18n) const
43  {
44  Q_UNUSED(i18n);
45  static const QString v("voice");
46  static const QString t("text only");
47  static const QString r("voice listening only");
48  static const QString u("unknown");
49 
50  switch (m_voiceCapabilities)
51  {
52  case Voice: return v;
53  case TextOnly: return t;
54  case VoiceReceivingOnly: return r;
55  case Unknown: return u;
56  default: break;
57  }
58  Q_ASSERT_X(false, Q_FUNC_INFO, "Illegal mode");
59  return u;
60  }
61 
62  void CVoiceCapabilities::setFromFlightPlanRemarks(const QString &flightPlanRemarks)
63  {
64  // http://www.vatpac.org/cms/index.php?option=com_content&view=article&id=608&Itemid=213
65 
66  // this function is very frequently called, so I put the most likely scenarios on top
67  const QString r = flightPlanRemarks.toUpper().trimmed();
68  if (flightPlanRemarks.isEmpty())
69  {
70  this->setCapabilities(Unknown);
71  return;
72  }
73  if (r.contains("/V/"))
74  {
75  this->setCapabilities(Voice);
76  return;
77  }
78  if (r.contains("/T/"))
79  {
80  this->setCapabilities(TextOnly);
81  return;
82  }
83  if (r.contains("/R/"))
84  {
85  this->setCapabilities(VoiceReceivingOnly);
86  return;
87  }
88  if (r.contains("/VOICE/"))
89  {
90  this->setCapabilities(Voice);
91  return;
92  }
93  if (r.contains("/TEXT/"))
94  {
95  this->setCapabilities(TextOnly);
96  return;
97  }
98  this->setCapabilities(Unknown);
99  }
100 
102  {
103  switch (m_voiceCapabilities)
104  {
105  case Voice: return CIcons::NetworkCapabilityVoiceBackground;
106  case TextOnly: return CIcons::NetworkCapabilityTextOnly;
107  case VoiceReceivingOnly: return CIcons::NetworkCapabilityVoiceReceiveOnlyBackground;
108  case Unknown: return CIcons::NetworkCapabilityUnknown;
109  default: break;
110  }
111  Q_ASSERT_X(false, Q_FUNC_INFO, "Illegal mode");
112  return CIcons::NetworkCapabilityUnknown; // never reached
113  }
114 
115  const CVoiceCapabilities &
117  {
118  static const CVoiceCapabilities u(CVoiceCapabilities::Unknown);
119  static const CVoiceCapabilities to(CVoiceCapabilities::TextOnly);
120  static const CVoiceCapabilities v(CVoiceCapabilities::Voice);
121  static const CVoiceCapabilities vro(CVoiceCapabilities::VoiceReceivingOnly);
122 
123  switch (capabilities)
124  {
125  case CVoiceCapabilities::TextOnly: return to;
126  case CVoiceCapabilities::Voice: return v;
127  case CVoiceCapabilities::VoiceReceivingOnly: return vro;
128  case CVoiceCapabilities::Unknown: return u;
129  default: break;
130  }
131  Q_ASSERT_X(false, Q_FUNC_INFO, "Illegal mode");
132  return u; // normally never reached
133  }
134 
136  {
137  return CVoiceCapabilities(remarks);
138  }
139 
141  {
142  if (text.startsWith("/"))
143  {
144  const CVoiceCapabilities vc(text);
145  return vc;
146  }
147  if (text.contains("TEXT", Qt::CaseInsensitive)) { return CVoiceCapabilities(TextOnly); }
148  if (text.contains("ONLY", Qt::CaseInsensitive)) { return CVoiceCapabilities(TextOnly); }
149  if (text.contains("RECEIVE", Qt::CaseInsensitive)) { return CVoiceCapabilities(VoiceReceivingOnly); }
150  if (text.contains("VOICE", Qt::CaseInsensitive)) { return CVoiceCapabilities(Voice); }
151  return CVoiceCapabilities(Unknown);
152  }
153 
154  const QList<CVoiceCapabilities> &CVoiceCapabilities::allCapabilities()
155  {
156  static const QList<CVoiceCapabilities> all({ fromVoiceCapabilities(Unknown), fromVoiceCapabilities(Voice),
157  fromVoiceCapabilities(VoiceReceivingOnly),
158  fromVoiceCapabilities(TextOnly) });
159  return all;
160  }
161 } // namespace swift::misc::network
IconIndex
Index for each icon, allows to send them via DBus, efficiently store them, etc.
Definition: icons.h:32
Value object encapsulating information for voice capabilities.
static const QList< CVoiceCapabilities > & allCapabilities()
All capabilities as list.
CVoiceCapabilities()=default
Default constructor.
static const CVoiceCapabilities & fromVoiceCapabilities(VoiceCapabilities capabilities)
From enum.
static CVoiceCapabilities fromFlightPlanRemarks(const QString &remarks)
From flight plan remarks.
const QString & toFlightPlanRemarks() const
To flight plan remarks.
CIcons::IconIndex toIcon() const
As icon, not implemented by all classes.
void setCapabilities(VoiceCapabilities capabilites)
Set capabilites.
static CVoiceCapabilities fromText(const QString &text)
From text like "text only".
QString convertToQString(bool i18n=false) const
Cast as QString.
Free functions in swift::misc.
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.
Definition: valueobject.h:67