|
7 | 7 |
|
8 | 8 | package com.nextcloud.utils.extensions |
9 | 9 |
|
| 10 | +import com.nextcloud.utils.OCFileUtils |
10 | 11 | import com.nextcloud.utils.TimeConstants |
11 | 12 | import com.owncloud.android.lib.resources.files.model.RemoteFile |
12 | 13 | import com.owncloud.android.utils.FileUtil |
| 14 | +import com.owncloud.android.utils.MimeTypeUtil |
13 | 15 |
|
14 | 16 | fun RemoteFile.isSame(path: String?): Boolean { |
15 | 17 | val localFile = path?.toFile() ?: return false |
16 | 18 |
|
17 | | - // remote file timestamp in milli not micro sec |
| 19 | + // remote file timestamp in millisecond not microsecond |
18 | 20 | val localLastModifiedTimestamp = localFile.lastModified() / TimeConstants.MILLIS_PER_SECOND |
19 | 21 | val localCreationTimestamp = FileUtil.getCreationTimestamp(localFile) |
20 | 22 | val localSize: Long = localFile.length() |
21 | 23 |
|
22 | 24 | return size == localSize && |
23 | 25 | localCreationTimestamp != null && |
24 | 26 | localCreationTimestamp == creationTimestamp && |
25 | | - modifiedTimestamp == localLastModifiedTimestamp * TimeConstants.MILLIS_PER_SECOND |
| 27 | + modifiedTimestamp == localLastModifiedTimestamp * TimeConstants.MILLIS_PER_SECOND && |
| 28 | + this.areImageDimensionsSame(path) |
| 29 | +} |
| 30 | + |
| 31 | +@Suppress("ReturnCount") |
| 32 | +private fun RemoteFile.areImageDimensionsSame(path: String): Boolean { |
| 33 | + if (!MimeTypeUtil.isImage(mimeType)) { |
| 34 | + // can't compare it's not image |
| 35 | + return true |
| 36 | + } |
| 37 | + |
| 38 | + val localFileImageDimension = OCFileUtils.getExifSize(path) ?: OCFileUtils.getBitmapSize(path) |
| 39 | + if (localFileImageDimension == null) { |
| 40 | + // can't compare local file image dimension is not determined |
| 41 | + return true |
| 42 | + } |
| 43 | + |
| 44 | + return localFileImageDimension.first.toFloat() == imageDimension?.width && |
| 45 | + localFileImageDimension.second.toFloat() == imageDimension?.height |
26 | 46 | } |
0 commit comments