Add option to always merge on conflict, closes https://github.com/PhilippC/keepass2android/issues/1218
This commit is contained in:
@@ -21,6 +21,7 @@ using System.Security.Cryptography;
|
||||
using Android.App;
|
||||
using Android.Content;
|
||||
using Android.OS;
|
||||
using Android.Preferences;
|
||||
using Java.Lang;
|
||||
using KeePassLib;
|
||||
using KeePassLib.Serialization;
|
||||
@@ -37,7 +38,7 @@ namespace keepass2android
|
||||
private readonly Database _db;
|
||||
private readonly bool _dontSave;
|
||||
|
||||
/// <summary>
|
||||
/// <summary>
|
||||
/// stream for reading the data from the original file. If this is set to a non-null value, we know we need to sync
|
||||
/// </summary>
|
||||
private readonly Stream _streamForOrigFile;
|
||||
@@ -51,7 +52,7 @@ namespace keepass2android
|
||||
_ctx = ctx;
|
||||
_app = app;
|
||||
_dontSave = dontSave;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Constructor for sync
|
||||
@@ -129,6 +130,17 @@ namespace keepass2android
|
||||
{
|
||||
Kp2aLog.Log("Conflict. " + hasStreamForOrigFile + " " + hasChangeFast + " " + hasHashChanged);
|
||||
|
||||
bool alwaysMerge = (PreferenceManager.GetDefaultSharedPreferences(Application.Context)
|
||||
.GetBoolean("AlwaysMergeOnConflict", false));
|
||||
|
||||
if (alwaysMerge)
|
||||
{
|
||||
MergeAndFinish(fileStorage, ioc);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
//ask user...
|
||||
_app.AskYesNoCancel(UiStringKey.TitleSyncQuestion, UiStringKey.MessageSyncQuestion,
|
||||
UiStringKey.YesSynchronize,
|
||||
@@ -136,16 +148,7 @@ namespace keepass2android
|
||||
//yes = sync
|
||||
(sender, args) =>
|
||||
{
|
||||
Action runHandler = () =>
|
||||
{
|
||||
//note: when synced, the file might be downloaded once again from the server. Caching the data
|
||||
//in the hashing function would solve this but increases complexity. I currently assume the files are
|
||||
//small.
|
||||
MergeIn(fileStorage, ioc);
|
||||
PerformSaveWithoutCheck(fileStorage, ioc);
|
||||
_db.UpdateGlobals();
|
||||
Finish(true);
|
||||
};
|
||||
Action runHandler = () => { MergeAndFinish(fileStorage, ioc); };
|
||||
RunInWorkerThread(runHandler);
|
||||
},
|
||||
//no = overwrite
|
||||
@@ -164,6 +167,8 @@ namespace keepass2android
|
||||
},
|
||||
_ctx
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -193,7 +198,18 @@ namespace keepass2android
|
||||
|
||||
}
|
||||
|
||||
private void RunInWorkerThread(Action runHandler)
|
||||
private void MergeAndFinish(IFileStorage fileStorage, IOConnectionInfo ioc)
|
||||
{
|
||||
//note: when synced, the file might be downloaded once again from the server. Caching the data
|
||||
//in the hashing function would solve this but increases complexity. I currently assume the files are
|
||||
//small.
|
||||
MergeIn(fileStorage, ioc);
|
||||
PerformSaveWithoutCheck(fileStorage, ioc);
|
||||
_db.UpdateGlobals();
|
||||
Finish(true);
|
||||
}
|
||||
|
||||
private void RunInWorkerThread(Action runHandler)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@@ -50,6 +50,7 @@
|
||||
|
||||
<!-- Preference settings -->
|
||||
<string name="AutoReturnFromQuery_key">AutoReturnFromQuery_key</string>
|
||||
<string name="AlwaysMergeOnConflict_key">AlwaysMergeOnConflict</string>
|
||||
<string name="NoDalVerification_key">NoDalVerification_key</string>
|
||||
<string name="InlineSuggestions_key">InlineSuggestions_key</string>
|
||||
<string name="algorithm_key">algorithm</string>
|
||||
|
@@ -311,6 +311,8 @@
|
||||
<string name="please_note">Please note</string>
|
||||
<string name="contributors">Contributors</string>
|
||||
<string name="regular_expression">Regular expression</string>
|
||||
<string name="AlwaysMergeOnConflict_title">Always merge on conflict</string>
|
||||
<string name="AlwaysMergeOnConflict_summary">When Keepass2Android detects that the remote file was modified, always merge the local changes with the remote changes.</string>
|
||||
<string name="TanExpiresOnUse_title">TAN expires on use</string>
|
||||
<string name="TanExpiresOnUse_summary">Mark TAN entries expired when using them</string>
|
||||
<string name="ShowUsernameInList_title">Display username in list</string>
|
||||
|
@@ -576,6 +576,14 @@
|
||||
android:key="@string/SyncAfterQuickUnlock_key" />
|
||||
|
||||
<CheckBoxPreference
|
||||
android:enabled="true"
|
||||
android:persistent="true"
|
||||
android:summary="@string/AlwaysMergeOnConflict_summary"
|
||||
android:defaultValue="false"
|
||||
android:title="@string/AlwaysMergeOnConflict_title"
|
||||
android:key="@string/AlwaysMergeOnConflict_key" />
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="@string/TanExpiresOnUse_key"
|
||||
android:title="@string/TanExpiresOnUse_title"
|
||||
android:summary="@string/TanExpiresOnUse_summary"
|
||||
|
Reference in New Issue
Block a user