From 0662769696daa16c071943217fd1a2e94c135a26 Mon Sep 17 00:00:00 2001
From: Andrey Meshkov <am@adguard.com>
Date: Mon, 20 Jul 2020 17:29:13 +0300
Subject: [PATCH] Fix version change check

---
 client/src/actions/index.js          |  4 +-
 client/src/helpers/helpers.js        |  5 ---
 client/src/helpers/versionCompare.js | 63 ----------------------------
 client/src/reducers/index.js         |  3 +-
 4 files changed, 3 insertions(+), 72 deletions(-)
 delete mode 100644 client/src/helpers/versionCompare.js

diff --git a/client/src/actions/index.js b/client/src/actions/index.js
index 3d3f1b63..8edffc08 100644
--- a/client/src/actions/index.js
+++ b/client/src/actions/index.js
@@ -2,7 +2,7 @@ import { createAction } from 'redux-actions';
 import i18next from 'i18next';
 import axios from 'axios';
 
-import { isVersionGreater, splitByNewLine, sortClients } from '../helpers/helpers';
+import { splitByNewLine, sortClients } from '../helpers/helpers';
 import { CHECK_TIMEOUT, SETTINGS_NAMES } from '../helpers/constants';
 import { getTlsStatus } from './encryption';
 import apiClient from '../api/Api';
@@ -121,7 +121,7 @@ export const getVersion = (recheck = false) => async (dispatch, getState) => {
             const { dnsVersion } = getState().dashboard;
             const currentVersion = dnsVersion === 'undefined' ? 0 : dnsVersion;
 
-            if (data && isVersionGreater(currentVersion, data.new_version)) {
+            if (data && currentVersion !== data.new_version) {
                 dispatch(addSuccessToast('updates_checked'));
             } else {
                 dispatch(addSuccessToast('updates_version_equal'));
diff --git a/client/src/helpers/helpers.js b/client/src/helpers/helpers.js
index bd246609..b7bfd142 100644
--- a/client/src/helpers/helpers.js
+++ b/client/src/helpers/helpers.js
@@ -12,7 +12,6 @@ import i18n from 'i18next';
 import uniqBy from 'lodash/uniqBy';
 import ipaddr from 'ipaddr.js';
 import queryString from 'query-string';
-import versionCompare from './versionCompare';
 import { getTrackerData } from './trackers/trackers';
 
 import {
@@ -418,10 +417,6 @@ export const secondsToMilliseconds = (seconds) => {
 export const normalizeRulesTextarea = (text) => text?.replace(/^\n/g, '')
     .replace(/\n\s*\n/g, '\n');
 
-export const isVersionGreater = (currentVersion, previousVersion) => (
-    versionCompare(currentVersion, previousVersion) === -1
-);
-
 export const normalizeWhois = (whois) => {
     if (Object.keys(whois).length > 0) {
         const {
diff --git a/client/src/helpers/versionCompare.js b/client/src/helpers/versionCompare.js
deleted file mode 100644
index 913d3e11..00000000
--- a/client/src/helpers/versionCompare.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-* Project: tiny-version-compare https://github.com/bfred-it/tiny-version-compare
-* License (MIT) https://github.com/bfred-it/tiny-version-compare/blob/master/LICENSE
-*/
-const split = (v) => String(v).replace(/^[vr]/, '') // Drop initial 'v' or 'r'
-    .replace(/([a-z]+)/gi, '.$1.') // Sort each word separately
-    .replace(/[-.]+/g, '.') // Consider dashes as separators (+ trim multiple separators)
-    .split('.');
-
-// Development versions are considered "negative",
-// but localeCompare doesn't handle negative numbers.
-// This offset is applied to reset the lowest development version to 0
-const offset = (part) => {
-    // Not numeric, return as is
-    if (Number.isNaN(part)) {
-        return part;
-    }
-    return 5 + Number(part);
-};
-
-const parsePart = (part) => {
-    // Missing, consider it zero
-    if (typeof part === 'undefined') {
-        return 0;
-    }
-    // Sort development versions
-    switch (part.toLowerCase()) {
-        case 'dev':
-            return -5;
-        case 'alpha':
-            return -4;
-        case 'beta':
-            return -3;
-        case 'rc':
-            return -2;
-        case 'pre':
-            return -1;
-        default:
-    }
-    // Return as is, it’s either a plain number or text that will be sorted alphabetically
-    return part;
-};
-
-const versionCompare = (prev, next) => {
-    const a = split(prev);
-    const b = split(next);
-    for (let i = 0; i < a.length || i < b.length; i += 1) {
-        const ai = offset(parsePart(a[i]));
-        const bi = offset(parsePart(b[i]));
-        const sort = String(ai).localeCompare(bi, 'en', {
-            numeric: true,
-        });
-        // Once the difference is found,
-        // stop comparing the rest of the parts
-        if (sort !== 0) {
-            return sort;
-        }
-    }
-    // No difference found
-    return 0;
-};
-
-export default versionCompare;
diff --git a/client/src/reducers/index.js b/client/src/reducers/index.js
index cc25a4b9..050ae116 100644
--- a/client/src/reducers/index.js
+++ b/client/src/reducers/index.js
@@ -2,7 +2,6 @@ import { combineReducers } from 'redux';
 import { handleActions } from 'redux-actions';
 import { loadingBarReducer } from 'react-redux-loading-bar';
 import { reducer as formReducer } from 'redux-form';
-import { isVersionGreater } from '../helpers/helpers';
 
 import * as actions from '../actions';
 import toasts from './toasts';
@@ -82,7 +81,7 @@ const dashboard = handleActions(
         [actions.getVersionSuccess]: (state, { payload }) => {
             const currentVersion = state.dnsVersion === 'undefined' ? 0 : state.dnsVersion;
 
-            if (!payload.disabled && isVersionGreater(currentVersion, payload.new_version)) {
+            if (!payload.disabled && currentVersion !== payload.new_version) {
                 const {
                     announcement_url: announcementUrl,
                     new_version: newVersion,