swift
distributionlist.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2017 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include "misc/stringutils.h"
7 
8 SWIFT_DEFINE_SEQUENCE_MIXINS(swift::misc::db, CDistribution, CDistributionList)
9 
10 namespace swift::misc::db
11 {
13 
15 
16  QStringList CDistributionList::getChannels() const
17  {
18  QStringList channels;
19  for (const CDistribution &distribution : *this)
20  {
21  if (distribution.getChannel().isEmpty()) { continue; }
22  channels << distribution.getChannel();
23  }
24  return channels;
25  }
26 
27  void CDistributionList::sortByStability(Qt::SortOrder order)
28  {
29  this->sort([order](const CDistribution &a, const CDistribution &b) {
30  const int as = a.getStability();
31  const int bs = b.getStability();
32  return order == Qt::AscendingOrder ? as < bs : bs < as;
33  });
34  }
35 
37  {
38  return containsBy(
39  [&distribution](const CDistribution &dist) { return dist.isStabilitySameOrBetter(distribution); });
40  }
41 
43 
44  bool CDistributionList::containsChannel(const QString &channel) const
45  {
46  return this->contains(&CDistribution::getChannel, channel);
47  }
48 
50  {
51  return this->findFirstByOrDefault(&CDistribution::getChannel, channel);
52  }
53 
55  {
56  return this->findBy(&CDistribution::isRestricted, restricted);
57  }
58 
60  {
61  if (this->size() < 2) { return this->frontOrDefault(); }
62  CDistributionList copy(*this);
63  copy.sortByStability();
64  return copy.back();
65  }
66 
68  {
69  if (this->size() < 2) { return this->frontOrDefault(); }
70  CDistributionList copy(*this);
71  copy.sortByStability();
72  return copy.front();
73  }
74 
76  {
77  CDistributionList distributions;
78  for (const QJsonValue &value : array)
79  {
80  const CDistribution distribution(CDistribution::fromDatabaseJson(value.toObject()));
81  distributions.push_back(distribution);
82  }
83  return distributions;
84  }
85 
87  {
88  if (json.isEmpty()) { return CDistributionList(); }
90  }
91 } // namespace swift::misc::db
auto findFirstByOrDefault(Predicate p, const Value &def) const
Return a copy of the first element for which a given predicate returns true, or a default value if th...
Definition: range.h:70
bool containsBy(Predicate p) const
Return true if there is an element for which a given predicate returns true.
Definition: range.h:101
bool contains(const T &object) const
Return true if there is an element equal to given object. Uses the most efficient implementation avai...
Definition: range.h:109
size_type size() const
Returns number of elements in the sequence.
Definition: sequence.h:273
const_reference frontOrDefault() const
Access the first element, or a default-initialized value if the sequence is empty.
Definition: sequence.h:239
CSequence findBy(Predicate p) const
Return a copy containing only those elements for which a given predicate returns true.
Definition: sequence.h:398
void push_back(const T &value)
Appends an element at the end of the sequence.
Definition: sequence.h:305
reference front()
Access the first element.
Definition: sequence.h:225
reference back()
Access the last element.
Definition: sequence.h:249
void sort(Predicate p)
In-place sort by a given comparator predicate.
Definition: sequence.h:560
Distributions for channel.
Definition: distribution.h:27
bool isRestricted() const
Restricted channel?
Definition: distribution.h:66
int getStability() const
Stability (higher is more stable)
Definition: distribution.h:51
const QString & getChannel() const
Version channel (Alpha, Beta, Stable ..)
Definition: distribution.h:45
bool isStabilitySameOrBetter(const CDistribution &otherDistribution) const
"this" having same or better stability than other distribution?
static CDistribution fromDatabaseJson(const QJsonObject &json, const QString &prefix={})
Object from database JSON format.
Multiple distributions for different channels:
bool containsUnrestricted() const
Contains any unrestricted.
CDistribution getMostStableOrDefault() const
Most stable or default.
CDistribution findFirstByChannelOrDefault(const QString &channel) const
Find by channel.
QStringList getChannels() const
All channels.
void sortByStability(Qt::SortOrder order=Qt::AscendingOrder)
Stability.
CDistributionList findByRestriction(bool restricted) const
Find by restriction flag.
bool containsChannel(const QString &channel) const
Contains channel?
CDistribution getLeastStableOrDefault() const
Least stable or default.
static CDistributionList fromDatabaseJson(const QJsonArray &array)
From database JSON by array.
bool containsEqualOrMoreStable(CDistribution &distribution) const
Contains distributions considered of same stability or more stable.
QJsonArray jsonArrayFromString(const QString &json)
JSON Array from string.
Definition: json.cpp:431
#define SWIFT_DEFINE_SEQUENCE_MIXINS(Namespace, T, List)
Explicit template definition of mixins for a CSequence subclass.
Definition: sequence.h:63