1
1
package fr .free .nrw .commons .upload ;
2
2
3
- import android .content .Context ;
4
-
5
- import org .apache .commons .lang3 .StringUtils ;
6
-
7
- import javax .inject .Inject ;
8
- import javax .inject .Singleton ;
3
+ import static fr .free .nrw .commons .utils .ImageUtils .EMPTY_TITLE ;
4
+ import static fr .free .nrw .commons .utils .ImageUtils .FILE_NAME_EXISTS ;
5
+ import static fr .free .nrw .commons .utils .ImageUtils .IMAGE_OK ;
9
6
7
+ import android .content .Context ;
10
8
import fr .free .nrw .commons .media .MediaClient ;
11
9
import fr .free .nrw .commons .nearby .Place ;
12
10
import fr .free .nrw .commons .utils .ImageUtils ;
13
11
import fr .free .nrw .commons .utils .ImageUtilsWrapper ;
14
12
import io .reactivex .Single ;
13
+ import io .reactivex .schedulers .Schedulers ;
14
+ import javax .inject .Inject ;
15
+ import javax .inject .Singleton ;
16
+ import org .apache .commons .lang3 .StringUtils ;
15
17
import timber .log .Timber ;
16
18
17
- import static fr .free .nrw .commons .utils .ImageUtils .EMPTY_TITLE ;
18
- import static fr .free .nrw .commons .utils .ImageUtils .FILE_NAME_EXISTS ;
19
- import static fr .free .nrw .commons .utils .ImageUtils .IMAGE_OK ;
20
-
21
19
/**
22
20
* Methods for pre-processing images to be uploaded
23
21
*/
@@ -41,38 +39,33 @@ public ImageProcessingService(FileUtilsWrapper fileUtilsWrapper,
41
39
this .mediaClient = mediaClient ;
42
40
}
43
41
44
- /**
45
- * Check image quality before upload
46
- * - checks duplicate image
47
- * - checks dark image
48
- * - checks geolocation for image
49
- * - check for valid title
50
- */
51
- Single <Integer > validateImage (UploadModel .UploadItem uploadItem , boolean checkTitle ) {
52
- int currentImageQuality = uploadItem .getImageQuality ();
53
- Timber .d ("Current image quality is %d" , currentImageQuality );
54
- if (currentImageQuality == ImageUtils .IMAGE_KEEP ) {
55
- return Single .just (ImageUtils .IMAGE_OK );
56
- }
57
- Timber .d ("Checking the validity of image" );
58
- String filePath = uploadItem .getMediaUri ().getPath ();
59
- Single <Integer > duplicateImage = checkDuplicateImage (filePath );
60
- Single <Integer > wrongGeoLocation = checkImageGeoLocation (uploadItem .getPlace (), filePath );
61
- Single <Integer > darkImage = checkDarkImage (filePath );
62
- Single <Integer > itemTitle = checkTitle ? validateItemTitle (uploadItem ) : Single .just (ImageUtils .IMAGE_OK );
63
- Single <Integer > checkFBMD = checkFBMD (filePath );
64
- Single <Integer > checkEXIF = checkEXIF (filePath );
65
-
66
- Single <Integer > zipResult = Single .zip (duplicateImage , wrongGeoLocation , darkImage , itemTitle ,
67
- (duplicate , wrongGeo , dark , title ) -> {
68
- Timber .d ("Result for duplicate: %d, geo: %d, dark: %d, title: %d" , duplicate , wrongGeo , dark , title );
69
- return duplicate | wrongGeo | dark | title ;
70
- });
71
- return Single .zip (zipResult , checkFBMD , checkEXIF , (zip , fbmd , exif )->{
72
- Timber .d ("zip:" + zip + "fbmd:" + fbmd + "exif:" + exif );
73
- return zip | fbmd | exif ;
74
- });
42
+ /**
43
+ * Check image quality before upload - checks duplicate image - checks dark image - checks
44
+ * geolocation for image - check for valid title
45
+ */
46
+ Single <Integer > validateImage (UploadModel .UploadItem uploadItem ) {
47
+ int currentImageQuality = uploadItem .getImageQuality ();
48
+ Timber .d ("Current image quality is %d" , currentImageQuality );
49
+ if (currentImageQuality == ImageUtils .IMAGE_KEEP ) {
50
+ return Single .just (ImageUtils .IMAGE_OK );
75
51
}
52
+ Timber .d ("Checking the validity of image" );
53
+ String filePath = uploadItem .getMediaUri ().getPath ();
54
+
55
+ return Single .zip (
56
+ checkDuplicateImage (filePath ),
57
+ checkImageGeoLocation (uploadItem .getPlace (), filePath ),
58
+ checkDarkImage (filePath ),
59
+ validateItemTitle (uploadItem ),
60
+ checkFBMD (filePath ),
61
+ checkEXIF (filePath ),
62
+ (duplicateImage , wrongGeoLocation , darkImage , itemTitle , fbmd , exif ) -> {
63
+ Timber .d ("duplicate: %d, geo: %d, dark: %d, title: %d" + "fbmd:" + fbmd + "exif:" + exif ,
64
+ duplicateImage , wrongGeoLocation , darkImage , itemTitle );
65
+ return duplicateImage | wrongGeoLocation | darkImage | itemTitle | fbmd | exif ;
66
+ }
67
+ );
68
+ }
76
69
77
70
/**
78
71
* We want to discourage users from uploading images to Commons that were taken from Facebook.
@@ -113,7 +106,8 @@ private Single<Integer> validateItemTitle(UploadModel.UploadItem uploadItem) {
113
106
.map (doesFileExist -> {
114
107
Timber .d ("Result for valid title is %s" , doesFileExist );
115
108
return doesFileExist ? FILE_NAME_EXISTS : IMAGE_OK ;
116
- });
109
+ })
110
+ .subscribeOn (Schedulers .io ());
117
111
}
118
112
119
113
/**
@@ -124,14 +118,14 @@ private Single<Integer> validateItemTitle(UploadModel.UploadItem uploadItem) {
124
118
*/
125
119
private Single <Integer > checkDuplicateImage (String filePath ) {
126
120
Timber .d ("Checking for duplicate image %s" , filePath );
127
- return Single .fromCallable (() ->
128
- fileUtilsWrapper .getFileInputStream (filePath ))
121
+ return Single .fromCallable (() -> fileUtilsWrapper .getFileInputStream (filePath ))
129
122
.map (fileUtilsWrapper ::getSHA1 )
130
123
.flatMap (mediaClient ::checkFileExistsUsingSha )
131
124
.map (b -> {
132
125
Timber .d ("Result for duplicate image %s" , b );
133
126
return b ? ImageUtils .IMAGE_DUPLICATE : ImageUtils .IMAGE_OK ;
134
- });
127
+ })
128
+ .subscribeOn (Schedulers .io ());
135
129
}
136
130
137
131
/**
@@ -164,7 +158,8 @@ private Single<Integer> checkImageGeoLocation(Place place, String filePath) {
164
158
return Single .just (ImageUtils .IMAGE_OK );
165
159
}
166
160
return imageUtilsWrapper .checkImageGeolocationIsDifferent (geoLocation , place .getLocation ());
167
- });
161
+ })
162
+ .subscribeOn (Schedulers .io ());
168
163
}
169
164
}
170
165
0 commit comments