NOISSUE remove unused version range filtering
This commit is contained in:
		| @@ -75,6 +75,7 @@ void Version::parse() | ||||
| { | ||||
| 	m_sections.clear(); | ||||
|  | ||||
| 	// FIXME: this is bad. versions can contain a lot more separators... | ||||
| 	QStringList parts = m_string.split('.'); | ||||
|  | ||||
| 	for (const auto part : parts) | ||||
| @@ -82,59 +83,3 @@ void Version::parse() | ||||
| 		m_sections.append(Section(part)); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| bool versionIsInInterval(const QString &version, const QString &interval) | ||||
| { | ||||
| 	return versionIsInInterval(Version(version), interval); | ||||
| } | ||||
| bool versionIsInInterval(const Version &version, const QString &interval) | ||||
| { | ||||
| 	if (interval.isEmpty() || version.toString() == interval) | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	// Interval notation is used | ||||
| 	QRegularExpression exp( | ||||
| 		"(?<start>[\\[\\]\\(\\)])(?<bottom>.*?)(,(?<top>.*?))?(?<end>[\\[\\]\\(\\)]),?"); | ||||
| 	QRegularExpressionMatch match = exp.match(interval); | ||||
| 	if (match.hasMatch()) | ||||
| 	{ | ||||
| 		const QChar start = match.captured("start").at(0); | ||||
| 		const QChar end = match.captured("end").at(0); | ||||
| 		const QString bottom = match.captured("bottom"); | ||||
| 		const QString top = match.captured("top"); | ||||
|  | ||||
| 		// check if in range (bottom) | ||||
| 		if (!bottom.isEmpty()) | ||||
| 		{ | ||||
| 			const auto bottomVersion = Version(bottom); | ||||
| 			if ((start == '[') && !(version >= bottomVersion)) | ||||
| 			{ | ||||
| 				return false; | ||||
| 			} | ||||
| 			else if ((start == '(') && !(version > bottomVersion)) | ||||
| 			{ | ||||
| 				return false; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		// check if in range (top) | ||||
| 		if (!top.isEmpty()) | ||||
| 		{ | ||||
| 			const auto topVersion = Version(top); | ||||
| 			if ((end == ']') && !(version <= topVersion)) | ||||
| 			{ | ||||
| 				return false; | ||||
| 			} | ||||
| 			else if ((end == ')') && !(version < topVersion)) | ||||
| 			{ | ||||
| 				return false; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	return false; | ||||
| } | ||||
|   | ||||
| @@ -104,7 +104,3 @@ private: | ||||
|  | ||||
| 	void parse(); | ||||
| }; | ||||
|  | ||||
| MULTIMC_LOGIC_EXPORT bool versionIsInInterval(const QString &version, const QString &interval); | ||||
| MULTIMC_LOGIC_EXPORT bool versionIsInInterval(const Version &version, const QString &interval); | ||||
|  | ||||
|   | ||||
| @@ -60,44 +60,6 @@ private slots: | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	void test_versionIsInInterval_data() | ||||
| 	{ | ||||
| 		QTest::addColumn<QString>("version"); | ||||
| 		QTest::addColumn<QString>("interval"); | ||||
| 		QTest::addColumn<bool>("result"); | ||||
|  | ||||
| 		QTest::newRow("empty, true") << "1.2.3" << "" << true; | ||||
| 		QTest::newRow("one version, true") << "1.2.3" << "1.2.3" << true; | ||||
| 		QTest::newRow("one version, false") << "1.2.3" << "1.2.2" << false; | ||||
|  | ||||
| 		QTest::newRow("one version inclusive <-> infinity, true") << "1.2.3" << "[1.2.3,)" << true; | ||||
| 		QTest::newRow("one version exclusive <-> infinity, true") << "1.2.3" << "(1.2.2,)" << true; | ||||
| 		QTest::newRow("one version inclusive <-> infitity, false") << "1.2.3" << "[1.2.4,)" << false; | ||||
| 		QTest::newRow("one version exclusive <-> infinity, false") << "1.2.3" << "(1.2.3,)" << false; | ||||
|  | ||||
| 		QTest::newRow("infinity <-> one version inclusive, true") << "1.2.3" << "(,1.2.3]" << true; | ||||
| 		QTest::newRow("infinity <-> one version exclusive, true") << "1.2.3" << "(,1.2.4)" << true; | ||||
| 		QTest::newRow("infinity <-> one version inclusive, false") << "1.2.3" << "(,1.2.2]" << false; | ||||
| 		QTest::newRow("infinity <-> one version exclusive, false") << "1.2.3" << "(,1.2.3)" << false; | ||||
|  | ||||
| 		QTest::newRow("inclusive <-> inclusive, true") << "1.2.3" << "[1.2.2,1.2.3]" << true; | ||||
| 		QTest::newRow("inclusive <-> exclusive, true") << "1.2.3" << "[1.2.3,1.2.4)" << true; | ||||
| 		QTest::newRow("exclusive <-> inclusive, true") << "1.2.3" << "(1.2.2,1.2.3]" << true; | ||||
| 		QTest::newRow("exclusive <-> exclusive, true") << "1.2.3" << "(1.2.2,1.2.4)" << true; | ||||
| 		QTest::newRow("inclusive <-> inclusive, false") << "1.2.3" << "[1.0.0,1.2.2]" << false; | ||||
| 		QTest::newRow("inclusive <-> exclusive, false") << "1.2.3" << "[1.0.0,1.2.3)" << false; | ||||
| 		QTest::newRow("exclusive <-> inclusive, false") << "1.2.3" << "(1.2.3,2.0.0]" << false; | ||||
| 		QTest::newRow("exclusive <-> exclusive, false") << "1.2.3" << "(1.0.0,1.2.3)" << false; | ||||
| 	} | ||||
| 	void test_versionIsInInterval() | ||||
| 	{ | ||||
| 		QFETCH(QString, version); | ||||
| 		QFETCH(QString, interval); | ||||
| 		QFETCH(bool, result); | ||||
|  | ||||
| 		QCOMPARE(versionIsInInterval(version, interval), result); | ||||
| 	} | ||||
|  | ||||
| 	void test_versionCompare_data() | ||||
| 	{ | ||||
| 		setupVersions(); | ||||
|   | ||||
| @@ -28,17 +28,7 @@ public: | ||||
| 			{ | ||||
| 				case BaseVersionList::ParentVersionRole: | ||||
| 				case BaseVersionList::VersionIdRole: | ||||
| 				{ | ||||
| 					auto versionString = data.toString(); | ||||
| 					if(it.value().exact) | ||||
| 					{ | ||||
| 						return versionString == it.value().string; | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						return versionIsInInterval(versionString, it.value().string); | ||||
| 					} | ||||
| 				} | ||||
| 					// TODO: work with metadata here. Previous implementation based on the Version class is not sufficient | ||||
| 				default: | ||||
| 				{ | ||||
| 					auto match = data.toString(); | ||||
|   | ||||
| @@ -168,4 +168,4 @@ void VersionSelectWidget::setExactFilter(BaseVersionList::ModelRoles role, QStri | ||||
| void VersionSelectWidget::setFuzzyFilter(BaseVersionList::ModelRoles role, QString filter) | ||||
| { | ||||
| 	m_proxyModel->setFilter(role, filter, false); | ||||
| } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user