diff --git a/app/src/main/java/org/mian/gitnex/activities/CommitsActivity.java b/app/src/main/java/org/mian/gitnex/activities/CommitsActivity.java index fc46f954..ee7042d2 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CommitsActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CommitsActivity.java @@ -24,7 +24,7 @@ import org.mian.gitnex.clients.AppApiService; import org.mian.gitnex.helpers.Authorization; import org.mian.gitnex.helpers.StaticGlobalVariables; import org.mian.gitnex.helpers.Toasty; -import org.mian.gitnex.helpers.VersionCheck; +import org.mian.gitnex.helpers.Version; import org.mian.gitnex.interfaces.ApiInterface; import org.mian.gitnex.models.Commits; import org.mian.gitnex.util.TinyDB; @@ -92,7 +92,7 @@ public class CommitsActivity extends BaseActivity { closeActivity.setOnClickListener(onClickListener); // if gitea is 1.12 or higher use the new limit (resultLimitNewGiteaInstances) - if(VersionCheck.compareVersion("1.12.0", tinyDb.getString("giteaVersion")) >= 1) { + if(new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12")) { resultLimit = StaticGlobalVariables.resultLimitNewGiteaInstances; } diff --git a/app/src/main/java/org/mian/gitnex/activities/CreateMilestoneActivity.java b/app/src/main/java/org/mian/gitnex/activities/CreateMilestoneActivity.java index dfada6b8..044223b9 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateMilestoneActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateMilestoneActivity.java @@ -18,7 +18,7 @@ import org.mian.gitnex.R; import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.helpers.AlertDialogs; import org.mian.gitnex.helpers.Authorization; -import org.mian.gitnex.helpers.VersionCheck; +import org.mian.gitnex.helpers.Version; import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.models.Milestones; import org.mian.gitnex.util.AppUtil; @@ -134,7 +134,7 @@ public class CreateMilestoneActivity extends BaseActivity implements View.OnClic String finalMilestoneDueDate = null; if(!newMilestoneDueDate.isEmpty()) { finalMilestoneDueDate = (AppUtil.customDateCombine(AppUtil.customDateFormat(newMilestoneDueDate))); - } else if (VersionCheck.compareVersion("1.10.0", tinyDb.getString("giteaVersion")) > 1) { + } else if (new Version(tinyDb.getString("giteaVersion")).less("1.10.0")) { // if Gitea version is less than 1.10.0 DueDate is required Toasty.info(ctx, getString(R.string.milestoneDateEmpty)); return; diff --git a/app/src/main/java/org/mian/gitnex/activities/LoginActivity.java b/app/src/main/java/org/mian/gitnex/activities/LoginActivity.java index 30be44c5..c6866ee5 100644 --- a/app/src/main/java/org/mian/gitnex/activities/LoginActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/LoginActivity.java @@ -25,7 +25,7 @@ import org.mian.gitnex.R; import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.helpers.NetworkObserver; import org.mian.gitnex.helpers.SnackBar; -import org.mian.gitnex.helpers.VersionCheck; +import org.mian.gitnex.helpers.Version; import org.mian.gitnex.models.GiteaVersion; import org.mian.gitnex.models.UserInfo; import org.mian.gitnex.models.UserTokens; @@ -35,7 +35,6 @@ import java.net.URI; import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.util.List; -import java.util.Objects; import java.util.UUID; import okhttp3.Credentials; import retrofit2.Call; @@ -448,47 +447,56 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener GiteaVersion version = responseVersion.body(); assert version != null; - VersionCheck vt = VersionCheck.check(getString(R.string.versionLow), getString(R.string.versionHigh), version.getVersion()); + // init + Version gitea_version = new Version(getString(R.string.versionLow)); + try { + gitea_version = new Version(version.getVersion()); + } catch(Error e) { + SnackBar.error(ctx, layoutView, getResources().getString(R.string.versionUnknow)); + enableProcessButton(); + } + //(getString(R.string.versionLow), getString(), version.getVersion()); - switch (vt) { - case UNSUPPORTED_NEW: - //SnackBar.warning(ctx, layoutView, getResources().getString(R.string.versionUnsupportedNew)); - case SUPPORTED_LATEST: - case SUPPORTED_OLD: - case DEVELOPMENT: - login(loginType, instanceUrl, loginUid, loginPass, loginOTP, loginToken_); - return; - case UNSUPPORTED_OLD: + // UNSUPPORTED_OLD + if (gitea_version.less(getString(R.string.versionLow))) { - AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(ctx); + AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(ctx); - alertDialogBuilder - .setTitle(getString(R.string.versionAlertDialogHeader)) - .setMessage(getResources().getString(R.string.versionUnsupportedOld, version.getVersion())) - .setCancelable(true) - .setIcon(R.drawable.ic_warning) - .setNegativeButton(getString(R.string.cancelButton), (dialog, which) -> { + alertDialogBuilder + .setTitle(getString(R.string.versionAlertDialogHeader)) + .setMessage(getResources().getString(R.string.versionUnsupportedOld, version.getVersion())) + .setCancelable(true) + .setIcon(R.drawable.ic_warning) + .setNegativeButton(getString(R.string.cancelButton), (dialog, which) -> { - dialog.dismiss(); - enableProcessButton(); + dialog.dismiss(); + enableProcessButton(); - }) - .setPositiveButton(getString(R.string.textContinue), (dialog, which) -> { + }) + .setPositiveButton(getString(R.string.textContinue), (dialog, which) -> { - dialog.dismiss(); - login(loginType, instanceUrl, loginUid, loginPass, loginOTP, loginToken_); + dialog.dismiss(); + login(loginType, instanceUrl, loginUid, loginPass, loginOTP, loginToken_); - }); + }); - AlertDialog alertDialog = alertDialogBuilder.create(); + AlertDialog alertDialog = alertDialogBuilder.create(); - alertDialog.show(); - return; - default: // UNKNOWN - SnackBar.error(ctx, layoutView, getResources().getString(R.string.versionUnknow)); - enableProcessButton(); + alertDialog.show(); + return; } + // SUPPORTED + else if (gitea_version.lessOrEqual(getString(R.string.versionHigh))) { + login(loginType, instanceUrl, loginUid, loginPass, loginOTP, loginToken_); + return; + } + // UNSUPPORTED_NEW + else { + SnackBar.info(ctx, layoutView, getResources().getString(R.string.versionUnsupportedNew)); + login(loginType, instanceUrl, loginUid, loginPass, loginOTP, loginToken_); + return; + } } else if (responseVersion.code() == 403) { diff --git a/app/src/main/java/org/mian/gitnex/activities/MergePullRequestActivity.java b/app/src/main/java/org/mian/gitnex/activities/MergePullRequestActivity.java index 0505362c..ed8879ec 100644 --- a/app/src/main/java/org/mian/gitnex/activities/MergePullRequestActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/MergePullRequestActivity.java @@ -23,7 +23,7 @@ import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.helpers.AlertDialogs; import org.mian.gitnex.helpers.Authorization; import org.mian.gitnex.helpers.Toasty; -import org.mian.gitnex.helpers.VersionCheck; +import org.mian.gitnex.helpers.Version; import org.mian.gitnex.models.Collaborators; import org.mian.gitnex.models.MergePullRequest; import org.mian.gitnex.models.MergePullRequestSpinner; @@ -110,7 +110,7 @@ public class MergePullRequestActivity extends BaseActivity { if(!tinyDb.getString("issueTitle").isEmpty()) { toolbar_title.setText(tinyDb.getString("issueTitle")); - mergeTitle.setText(tinyDb.getString("issueTitle") + " (#" + tinyDb.getString("issueNumber")+ ")"); + mergeTitle.setText(tinyDb.getString("issueTitle") + " (#" + tinyDb.getString("issueNumber") + ")"); } initCloseListener(); @@ -140,8 +140,8 @@ public class MergePullRequestActivity extends BaseActivity { mergeList.add(new MergePullRequestSpinner("merge", getResources().getString(R.string.mergeOptionMerge))); mergeList.add(new MergePullRequestSpinner("rebase", getResources().getString(R.string.mergeOptionRebase))); mergeList.add(new MergePullRequestSpinner("rebase-merge", getResources().getString(R.string.mergeOptionRebaseCommit))); - //squash merge works only on gitea v1.11.5 and higher due to a bug - if(VersionCheck.compareVersion("1.11.5", tinyDb.getString("giteaVersion")) < 1) { + //squash merge works only on gitea > v1.11.4 due to a bug + if(new Version(tinyDb.getString("giteaVersion")).higher("1.11.4")) { mergeList.add(new MergePullRequestSpinner("squash", getResources().getString(R.string.mergeOptionSquash))); } diff --git a/app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java b/app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java index 8a8b7ddf..9214f721 100644 --- a/app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java @@ -38,7 +38,7 @@ import org.mian.gitnex.fragments.PullRequestsFragment; import org.mian.gitnex.fragments.ReleasesFragment; import org.mian.gitnex.fragments.RepoInfoFragment; import org.mian.gitnex.helpers.Authorization; -import org.mian.gitnex.helpers.VersionCheck; +import org.mian.gitnex.helpers.Version; import org.mian.gitnex.models.UserRepositories; import org.mian.gitnex.models.WatchRepository; import org.mian.gitnex.util.AppUtil; @@ -222,7 +222,7 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF } // release count - if(VersionCheck.compareVersion("1.11.5", tinyDb.getString("giteaVersion")) < 1) { + if(new Version("1.11.4").less(tinyDb.getString("giteaVersion"))) { if(textViewBadgeRelease.getText() != "") { // only show if API returned a number Objects.requireNonNull(tabLayout.getTabAt(5)).setCustomView(tabHeader6); TabLayout.Tab tabOpenRelease = tabLayout.getTabAt(5); diff --git a/app/src/main/java/org/mian/gitnex/fragments/IssuesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/IssuesFragment.java index 22586172..2cfbee83 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/IssuesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/IssuesFragment.java @@ -26,7 +26,7 @@ import org.mian.gitnex.clients.AppApiService; import org.mian.gitnex.helpers.Authorization; import org.mian.gitnex.helpers.StaticGlobalVariables; import org.mian.gitnex.helpers.Toasty; -import org.mian.gitnex.helpers.VersionCheck; +import org.mian.gitnex.helpers.Version; import org.mian.gitnex.interfaces.ApiInterface; import org.mian.gitnex.models.Issues; import org.mian.gitnex.util.TinyDB; @@ -76,7 +76,7 @@ public class IssuesFragment extends Fragment { final SwipeRefreshLayout swipeRefresh = v.findViewById(R.id.pullToRefresh); // if gitea is 1.12 or higher use the new limit - if(VersionCheck.compareVersion("1.12.0", tinyDb.getString("giteaVersion")) >= 1) { + if(new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.0")) { resultLimit = StaticGlobalVariables.resultLimitNewGiteaInstances; } diff --git a/app/src/main/java/org/mian/gitnex/fragments/PullRequestsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/PullRequestsFragment.java index 13479762..6a5a9bd6 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/PullRequestsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/PullRequestsFragment.java @@ -27,7 +27,7 @@ import org.mian.gitnex.clients.AppApiService; import org.mian.gitnex.helpers.Authorization; import org.mian.gitnex.helpers.StaticGlobalVariables; import org.mian.gitnex.helpers.Toasty; -import org.mian.gitnex.helpers.VersionCheck; +import org.mian.gitnex.helpers.Version; import org.mian.gitnex.interfaces.ApiInterface; import org.mian.gitnex.models.PullRequests; import org.mian.gitnex.util.TinyDB; @@ -76,7 +76,7 @@ public class PullRequestsFragment extends Fragment { final SwipeRefreshLayout swipeRefresh = v.findViewById(R.id.pullToRefresh); // if gitea is 1.12 or higher use the new limit - if(VersionCheck.compareVersion("1.12.0", tinyDb.getString("giteaVersion")) >= 1) { + if(new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.0")) { resultLimit = StaticGlobalVariables.resultLimitNewGiteaInstances; } diff --git a/app/src/main/java/org/mian/gitnex/helpers/VersionCheck.java b/app/src/main/java/org/mian/gitnex/helpers/VersionCheck.java deleted file mode 100644 index ae69c1e4..00000000 --- a/app/src/main/java/org/mian/gitnex/helpers/VersionCheck.java +++ /dev/null @@ -1,151 +0,0 @@ -package org.mian.gitnex.helpers; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * Author 6543 - */ - -public enum VersionCheck { - - UNKNOWN, - SUPPORTED_LATEST, - SUPPORTED_OLD, - DEVELOPMENT, - UNSUPPORTED_OLD, - UNSUPPORTED_NEW; - - public static VersionCheck check(String min, String last, String value) { - - final Pattern pattern_stable_release = Pattern.compile("^(\\d)\\.(\\d+)\\.(\\d+)$"); - final Pattern pattern_dev_release = Pattern.compile("^(\\d).(\\d+).(\\d+)(\\D)(.+)"); - Matcher match; - - if (!pattern_stable_release.matcher(min).find() || !pattern_stable_release.matcher(last).find()) { - throw new IllegalArgumentException("VersionCheck: wrong format for min or last version given"); - } - - match = pattern_stable_release.matcher(value); - if (match.find()) { - - switch (correlate(min, last, match.group())){ - case 0: - return UNSUPPORTED_OLD; - case 1: - return SUPPORTED_OLD; - case 2: - return SUPPORTED_LATEST; - default: - return UNSUPPORTED_NEW; - } - - } - - match = pattern_dev_release.matcher(value); - if (match.find()) { - - match = Pattern.compile("^(\\d)\\.(\\d+)\\.(\\d+)").matcher(value); - match.find(); - - if (correlate(min, last, match.group())>0) { - return DEVELOPMENT; - } - else { - return UNSUPPORTED_OLD; - } - - } - - return UNKNOWN; - - } - - //helper - // 0 to less - // 1 in range - // 2 at the top - // 3 above - private static int correlate(String min, String last, String value){ - int min_check = compareVersion(value,min); - int max_check = compareVersion(value,last); - int range_check = compareVersion(min,last); - - switch (range_check) { - case 2: - throw new IllegalArgumentException("Minimum Version higher than Last Version"); - case 1: //min == last - switch (min_check) { - case 0: - return 0; - case 1: - return 2; - default: - return 3; - } - default: - if (max_check >1) return 3; - if (max_check == 1) return 2; - if (min_check < 1) return 0; - return 1; - } - - } - - /** - * @description compare doted formatted Versions - * @param A doted formatted Versions - * @param B doted formatted Versions - * @return 0|1|2 - * 0 = less - * 1 = same - * 2 = more - */ - public static int compareVersion(String A, String B) { - final Pattern pattern_stable_release = Pattern.compile("^(\\d)\\.(\\d+)\\.(\\d+)"); - final Pattern pattern_dev_release = Pattern.compile("^(\\d).(\\d+).(\\d+)(\\D)(.+)"); - Matcher match; - match = pattern_dev_release.matcher(A); - if (match.find()) { - match = pattern_stable_release.matcher(A); - match.find(); - A = match.group(); - } - match = pattern_dev_release.matcher(B); - if (match.find()) { - match = pattern_stable_release.matcher(B); - match.find(); - B = match.group(); - } - - //throw new IllegalArgumentException - if((!A.matches("[0-9]+(\\.[0-9]+)*")) || (!B.matches("[0-9]+(\\.[0-9]+)*"))) throw new IllegalArgumentException("Invalid version format"); - - if (A.contains(".") || B.contains(".")) { - // example 2 vs 1.3 - if (!(A.contains(".") && B.contains("."))) { - if (A.contains(".")) { - return compareVersion(A,B + ".0"); - } - if (B.contains(".")) { - return compareVersion(A + ".0",B); - } - } - - //normal compare - int a = Integer.parseInt(A.substring(0,A.indexOf("."))); - int b = Integer.parseInt(B.substring(0,B.indexOf("."))); - if (a < b) return 0; - if (a == b) return compareVersion(A.substring(A.indexOf(".")+1),B.substring(B.indexOf(".")+1)); - return 2; //if (a > b) - } - else { - int a = Integer.parseInt(A); - int b = Integer.parseInt(B); - if (a < b) return 0; - if (a == b) return 1; - return 2; //if (a > b) - } - } - -} \ No newline at end of file diff --git a/app/src/main/res/values/gitea_version.xml b/app/src/main/res/values/gitea_version.xml index 72939a96..adf04723 100644 --- a/app/src/main/res/values/gitea_version.xml +++ b/app/src/main/res/values/gitea_version.xml @@ -1,7 +1,7 @@ - 1.10.0 - 1.11.15 + 1.10 + 1.12 \ No newline at end of file