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 channels;
17  for (const CDistribution &distribution : *this)
18  {
19  if (distribution.getChannel().isEmpty()) { continue; }
20  channels << distribution.getChannel();
21  }
22  return channels;
23  }
24 
26  {
27  this->sort([order](const CDistribution &a, const CDistribution &b) {
28  const int as = a.getStability();
29  const int bs = b.getStability();
30  return order == Qt::AscendingOrder ? as < bs : bs < as;
31  });
32  }
33 
35  {
36  return containsBy(
37  [&distribution](const CDistribution &dist) { return dist.isStabilitySameOrBetter(distribution); });
38  }
39 
41 
42  bool CDistributionList::containsChannel(const QString &channel) const
43  {
44  return this->contains(&CDistribution::getChannel, channel);
45  }
46 
48  {
49  return this->findFirstByOrDefault(&CDistribution::getChannel, channel);
50  }
51 
53  {
54  return this->findBy(&CDistribution::isRestricted, restricted);
55  }
56 
58  {
59  if (this->size() < 2) { return this->frontOrDefault(); }
60  CDistributionList copy(*this);
61  copy.sortByStability();
62  return copy.back();
63  }
64 
66  {
67  if (this->size() < 2) { return this->frontOrDefault(); }
68  CDistributionList copy(*this);
69  copy.sortByStability();
70  return copy.front();
71  }
72 
74  {
75  CDistributionList distributions;
76  for (const QJsonValue &value : array)
77  {
78  const CDistribution distribution(CDistribution::fromDatabaseJson(value.toObject()));
79  distributions.push_back(distribution);
80  }
81  return distributions;
82  }
83 
85  {
86  if (json.isEmpty()) { return {}; }
88  }
89 } // 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.
CDistributionList()=default
Empty constructor.
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
bool isEmpty() const const
SortOrder
#define SWIFT_DEFINE_SEQUENCE_MIXINS(Namespace, T, List)
Explicit template definition of mixins for a CSequence subclass.
Definition: sequence.h:63