From 3159af19cb3fb376b90e1c5667a275a1baa796a3 Mon Sep 17 00:00:00 2001 From: Philipp Crocoll Date: Sun, 23 Mar 2014 15:04:46 +0100 Subject: [PATCH] Fixed bug in IOConnection.cs: Errors when uploading data to http(s) were not handled correctly Improved logging in CachingFileStorage --- .../Serialization/IOConnection.cs | 3 +- .../Io/CachingFileStorage.cs | 34 +++++++++++++------ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/KeePassLib2Android/Serialization/IOConnection.cs b/src/KeePassLib2Android/Serialization/IOConnection.cs index d7a3a5ef..e02452be 100644 --- a/src/KeePassLib2Android/Serialization/IOConnection.cs +++ b/src/KeePassLib2Android/Serialization/IOConnection.cs @@ -506,11 +506,12 @@ namespace KeePassLib.Serialization } catch (WebException ex) { - if ((ex.Response is HttpWebResponse) && (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.Unauthorized)) + if ((ex.Response is HttpWebResponse) && (((HttpWebResponse) ex.Response).StatusCode == HttpStatusCode.Unauthorized)) { req = CreateWebRequest(ioc, true); f(req); } + else throw; } } diff --git a/src/Kp2aBusinessLogic/Io/CachingFileStorage.cs b/src/Kp2aBusinessLogic/Io/CachingFileStorage.cs index 13732716..a1c48b8a 100644 --- a/src/Kp2aBusinessLogic/Io/CachingFileStorage.cs +++ b/src/Kp2aBusinessLogic/Io/CachingFileStorage.cs @@ -146,10 +146,12 @@ namespace keepass2android.Io if (!IsCached(ioc) || GetLocalVersionHash(ioc) == GetBaseVersionHash(ioc)) { + Kp2aLog.Log("CFS: OpenWhenNoLocalChanges"); return OpenFileForReadWhenNoLocalChanges(ioc, cachedFilePath); } else { + Kp2aLog.Log("CFS: OpenWhenLocalChanges"); return OpenFileForReadWhenLocalChanges(ioc, cachedFilePath); } } @@ -174,16 +176,21 @@ namespace keepass2android.Io if (File.ReadAllText(BaseVersionFilePath(ioc)) == hash) { + Kp2aLog.Log("CFS: No changes in remote"); //no changes in remote file -> upload using (Stream localData = File.OpenRead(CachedFilePath(ioc))) { if (TryUpdateRemoteFile(localData, ioc, true, hash)) + { _cacheSupervisor.UpdatedRemoteFileOnLoad(ioc); + Kp2aLog.Log("CFS: Updated remote file"); + } return File.OpenRead(cachedFilePath); } } else { + Kp2aLog.Log("CFS: Files in conflict"); //conflict: both files changed. return OpenFileForReadWithConflict(ioc, cachedFilePath); } @@ -232,20 +239,27 @@ namespace keepass2android.Io string previousHash = null; string baseVersionFilePath = BaseVersionFilePath(ioc); if (File.Exists(baseVersionFilePath)) + { + Kp2aLog.Log("CFS: hashing cached version"); previousHash = File.ReadAllText(baseVersionFilePath); + } + //copy to cache: + var fileHash = UpdateCacheFromRemote(ioc, cachedFilePath); + //notify supervisor what we did: + if (previousHash != fileHash) + { + Kp2aLog.Log("CFS: Updated Cache"); + _cacheSupervisor.UpdatedCachedFileOnLoad(ioc); + } + else + { + Kp2aLog.Log("CFS: Files in Sync"); + _cacheSupervisor.LoadedFromRemoteInSync(ioc); + } - //copy to cache: - var fileHash = UpdateCacheFromRemote(ioc, cachedFilePath); - - //notify supervisor what we did: - if (previousHash != fileHash) - _cacheSupervisor.UpdatedCachedFileOnLoad(ioc); - else - _cacheSupervisor.LoadedFromRemoteInSync(ioc); - - return File.OpenRead(cachedFilePath); + return File.OpenRead(cachedFilePath); }