Browse Source

It can happen that client is null during thumbnail generation via SAF, if so let us create it

Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
tobiasKaminsky 4 years ago
parent
commit
2fddaab17a

+ 10 - 4
src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java

@@ -1205,7 +1205,7 @@ public final class ThumbnailsCacheManager {
         }
     }
 
-    public static void generateThumbnailFromOCFile(OCFile file) {
+    public static void generateThumbnailFromOCFile(OCFile file, Account account, Context context) {
         int pxW;
         int pxH;
         pxW = pxH = getThumbnailDimension();
@@ -1216,7 +1216,13 @@ public final class ThumbnailsCacheManager {
         try {
             Bitmap thumbnail = null;
 
-            String uri = mClient.getBaseUri() + "/index.php/apps/files/api/v1/thumbnail/" +
+            OwnCloudClient client = mClient;
+            if (client == null) {
+                OwnCloudAccount ocAccount = new OwnCloudAccount(account, context);
+                client = OwnCloudClientManagerFactory.getDefaultSingleton().getClientFor(ocAccount, context);
+            }
+
+            String uri = client.getBaseUri() + "/index.php/apps/files/api/v1/thumbnail/" +
                 pxW + "/" + pxH + Uri.encode(file.getRemotePath(), "/");
 
             Log_OC.d(TAG, "generate thumbnail: " + file.getFileName() + " URI: " + uri);
@@ -1226,13 +1232,13 @@ public final class ThumbnailsCacheManager {
             getMethod.setRequestHeader(RemoteOperation.OCS_API_HEADER,
                                        RemoteOperation.OCS_API_HEADER_VALUE);
 
-            int status = mClient.executeMethod(getMethod);
+            int status = client.executeMethod(getMethod);
             if (status == HttpStatus.SC_OK) {
                 InputStream inputStream = getMethod.getResponseBodyAsStream();
                 Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                 thumbnail = ThumbnailUtils.extractThumbnail(bitmap, pxW, pxH);
             } else {
-                mClient.exhaustResponse(getMethod.getResponseBodyAsStream());
+                client.exhaustResponse(getMethod.getResponseBodyAsStream());
             }
 
             // Add thumbnail to cache

+ 3 - 2
src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java

@@ -304,12 +304,13 @@ public class DocumentsStorageProvider extends DocumentsProvider {
             throws FileNotFoundException {
         Log.d(TAG, "openDocumentThumbnail(), id=" + documentId);
 
-        OCFile file = toDocument(documentId).getFile();
+        Document document = toDocument(documentId);
+        OCFile file = document.getFile();
 
         boolean exists = ThumbnailsCacheManager.containsBitmap(ThumbnailsCacheManager.PREFIX_THUMBNAIL
                                                                    + file.getRemoteId());
         if (!exists) {
-            ThumbnailsCacheManager.generateThumbnailFromOCFile(file);
+            ThumbnailsCacheManager.generateThumbnailFromOCFile(file, document.getAccount(), getContext());
         }
 
         return new AssetFileDescriptor(DiskLruImageCacheFileProvider.getParcelFileDescriptorForOCFile(file),