create avatar path before saving avatar

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/persistance/FileBackend.java | 21 
1 file changed, 17 insertions(+), 4 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/persistance/FileBackend.java 🔗

@@ -665,10 +665,14 @@ public class FileBackend {
 			avatar.size = file.length();
 		} else {
 			file = new File(mXmppConnectionService.getCacheDir().getAbsolutePath() + "/" + UUID.randomUUID().toString());
-			file.getParentFile().mkdirs();
+			if (file.getParentFile().mkdirs()) {
+				Log.d(Config.LOGTAG,"created cache directory");
+			}
 			OutputStream os = null;
 			try {
-				file.createNewFile();
+				if (!file.createNewFile()) {
+					Log.d(Config.LOGTAG,"unable to create temporary file "+file.getAbsolutePath());
+				}
 				os = new FileOutputStream(file);
 				MessageDigest digest = MessageDigest.getInstance("SHA-1");
 				digest.reset();
@@ -679,11 +683,20 @@ public class FileBackend {
 				mDigestOutputStream.close();
 				String sha1sum = CryptoHelper.bytesToHex(digest.digest());
 				if (sha1sum.equals(avatar.sha1sum)) {
+					File outputFile = new File(getAvatarPath(avatar.getFilename()));
+					if (outputFile.getParentFile().mkdirs()) {
+						Log.d(Config.LOGTAG,"created avatar directory");
+					}
 					String filename = getAvatarPath(avatar.getFilename());
-					file.renameTo(new File(filename));
+					if (!file.renameTo(new File(filename))) {
+						Log.d(Config.LOGTAG,"unable to rename "+file.getAbsolutePath()+" to "+outputFile);
+						return false;
+					}
 				} else {
 					Log.d(Config.LOGTAG, "sha1sum mismatch for " + avatar.owner);
-					file.delete();
+					if (!file.delete()) {
+						Log.d(Config.LOGTAG,"unable to delete temporary file");
+					}
 					return false;
 				}
 				avatar.size = bytes.length;