diff --git a/app/src/com/trovebox/android/app/AlbumsFragment.java b/app/src/com/trovebox/android/app/AlbumsFragment.java
index b486abd..fa53f3a 100644
--- a/app/src/com/trovebox/android/app/AlbumsFragment.java
+++ b/app/src/com/trovebox/android/app/AlbumsFragment.java
@@ -143,6 +143,12 @@ public void run(Photo photo) {
.loadImage(photo.getUrl(thumbSize.toString()), image);
}
+ }, new Runnable() {
+
+ @Override
+ public void run() {
+ mImageWorker.loadImage(null, image);
+ }
}, loadingControl);
} else
{
diff --git a/app/src/com/trovebox/android/app/FacebookFragment.java b/app/src/com/trovebox/android/app/FacebookFragment.java
index 692ce50..6600c20 100644
--- a/app/src/com/trovebox/android/app/FacebookFragment.java
+++ b/app/src/com/trovebox/android/app/FacebookFragment.java
@@ -157,7 +157,8 @@ public void run(Photo photo) {
new PostPhotoTask(photo).execute();
}
};
- PhotoUtils.validateUrlForSizeExistAsyncAndRun(photo, thumbSize, runnable, loadingControl);
+ PhotoUtils.validateUrlForSizeExistAsyncAndRun(photo, thumbSize, runnable, null,
+ loadingControl);
}
private void performFacebookLogout()
diff --git a/app/src/com/trovebox/android/app/SelectAlbumsActivity.java b/app/src/com/trovebox/android/app/SelectAlbumsActivity.java
index 978b744..5571d4e 100644
--- a/app/src/com/trovebox/android/app/SelectAlbumsActivity.java
+++ b/app/src/com/trovebox/android/app/SelectAlbumsActivity.java
@@ -230,6 +230,12 @@ public void run(Photo photo) {
.loadImage(photo.getUrl(thumbSize.toString()), vh.cover);
}
+ }, new Runnable() {
+
+ @Override
+ public void run() {
+ mImageWorker.loadImage(null, vh.cover);
+ }
}, SelectAlbumsUiFragment.this);
} else
{
diff --git a/common/res/values-pt/strings.xml b/common/res/values-pt/strings.xml
index fe1a901..1c9c000 100644
--- a/common/res/values-pt/strings.xml
+++ b/common/res/values-pt/strings.xml
@@ -25,6 +25,9 @@
Mostre todas
ENVIADA!
+
+ %1$s tirada em %2$s
+
Enviando %1$s
Falha no envio
diff --git a/common/src/com/trovebox/android/common/fragment/gallery/GalleryFragment.java b/common/src/com/trovebox/android/common/fragment/gallery/GalleryFragment.java
index 34e0750..0701ba8 100644
--- a/common/src/com/trovebox/android/common/fragment/gallery/GalleryFragment.java
+++ b/common/src/com/trovebox/android/common/fragment/gallery/GalleryFragment.java
@@ -431,6 +431,12 @@ public void run(Photo photo) {
photo, photo.getUrl(thumbSize.toString()));
mImageWorker.loadImage(fo, imageView);
}
+ }, new Runnable() {
+
+ @Override
+ public void run() {
+ mImageWorker.loadImage(null, imageView);
+ }
}, loadingControl);
}
};
diff --git a/common/src/com/trovebox/android/common/fragment/photo_details/PhotoDetailsFragment.java b/common/src/com/trovebox/android/common/fragment/photo_details/PhotoDetailsFragment.java
index 9f6cdb7..756e235 100644
--- a/common/src/com/trovebox/android/common/fragment/photo_details/PhotoDetailsFragment.java
+++ b/common/src/com/trovebox/android/common/fragment/photo_details/PhotoDetailsFragment.java
@@ -501,7 +501,15 @@ public void run(Photo photo) {
GuiUtils.noAlertError(TAG, ex);
}
}
- }, loadingControl);
+ },
+ new Runnable() {
+
+ @Override
+ public void run() {
+ mImageWorker.loadImage(null, imageView);
+ }
+ },
+ loadingControl);
loadingControl.stopLoading();
@@ -601,6 +609,12 @@ public void run(Photo photo) {
String url = photo.getUrl(thumbSize.toString());
mImageWorker2.loadImage(url, imageView);
}
+ }, new Runnable() {
+
+ @Override
+ public void run() {
+ mImageWorker2.loadImage(null, imageView);
+ }
}, null);
return view;
}
diff --git a/common/src/com/trovebox/android/common/model/Photo.java b/common/src/com/trovebox/android/common/model/Photo.java
index 686d12f..2912776 100644
--- a/common/src/com/trovebox/android/common/model/Photo.java
+++ b/common/src/com/trovebox/android/common/model/Photo.java
@@ -35,6 +35,8 @@ public class Photo implements Parcelable {
protected String mId;
protected final List mTags;
protected String mAppId;
+ protected String mHost;
+ protected String mToken;
protected final Map mUrls;
protected String mTitle;
protected String mDescription;
@@ -149,6 +151,42 @@ public String getAppId() {
return mAppId;
}
+ /**
+ * Returns the host of the server on which this Photo is located.
+ *
+ * @return host
+ */
+ public String getHost() {
+ return mHost;
+ }
+
+ /**
+ * Set the host of the server on which the Photo is located
+ *
+ * @param host
+ */
+ public void setHost(String host) {
+ mHost = host;
+ }
+
+ /**
+ * Returns the access token of the photo.
+ *
+ * @return token
+ */
+ public String getToken() {
+ return mToken;
+ }
+
+ /**
+ * Set the access token of the photo
+ *
+ * @param token
+ */
+ public void setToken(String token) {
+ mToken = token;
+ }
+
/**
* Get URL for a specific size. Examples are: 50x50xCR and 640x960 . CR
* stands for cropped.
@@ -247,6 +285,8 @@ public void writeToParcel(Parcel out, int flags) {
out.writeString(mTitle);
out.writeString(mDescription);
out.writeString(mAppId);
+ out.writeString(mHost);
+ out.writeString(mToken);
out.writeStringList(mTags);
out.writeInt(mPermission);
out.writeLong(mDateTaken.getTime());
@@ -283,6 +323,8 @@ private Photo(Parcel in) {
mTitle = in.readString();
mDescription = in.readString();
mAppId = in.readString();
+ mHost = in.readString();
+ mToken = in.readString();
in.readStringList(mTags);
mPermission = in.readInt();
mDateTaken = new Date(in.readLong());
diff --git a/common/src/com/trovebox/android/common/model/utils/PhotoUtils.java b/common/src/com/trovebox/android/common/model/utils/PhotoUtils.java
index 8d1bc71..c07c8f1 100644
--- a/common/src/com/trovebox/android/common/model/utils/PhotoUtils.java
+++ b/common/src/com/trovebox/android/common/model/utils/PhotoUtils.java
@@ -54,10 +54,13 @@ public class PhotoUtils {
* @param photo the photo to check
* @param photoSize the required photo size
* @param runnable the runnable which will run with the validated photo
+ * @param preSizeRetrievalRunnable runnable to run before the retrieval task
+ * started
* @param loadingControl the loading control to display loading indicator
*/
public static void validateUrlForSizeExistAsyncAndRun(Photo photo, ReturnSizes photoSize,
- RunnableWithParameter runnable, LoadingControl loadingControl) {
+ RunnableWithParameter runnable, Runnable preSizeRetrievalRunnable,
+ LoadingControl loadingControl) {
String size = photoSize.toString();
if (photo.getUrl(size) != null) {
CommonUtils.debug(TAG, "Url for the size " + size + " exists. Running action.");
@@ -65,6 +68,9 @@ public static void validateUrlForSizeExistAsyncAndRun(Photo photo, ReturnSizes p
} else {
CommonUtils.debug(TAG, "Url for the size " + size
+ " doesn't exist. Running size retrieval task.");
+ if (preSizeRetrievalRunnable != null) {
+ preSizeRetrievalRunnable.run();
+ }
new RetrieveThumbUrlTask(photo, photoSize, runnable, loadingControl).execute();
}
}
@@ -154,7 +160,7 @@ public static Photo getThePhotoWithReturnSize(Photo photo, ReturnSizes photoSize
TrackerUtils.trackBackgroundEvent("getThePhotoWithReturnSize", TAG);
long start = System.currentTimeMillis();
PhotoResponse response = CommonConfigurationUtils.getApi().getPhoto(photo.getId(),
- photoSize);
+ photoSize, photo.getToken(), photo.getHost());
photo = response.getPhoto();
TrackerUtils.trackDataLoadTiming(System.currentTimeMillis() - start,
"getThePhotoWithReturnSize", TAG);
@@ -204,6 +210,7 @@ public static String getShareUrl(Photo photo, boolean appendToken) {
private static class RetrieveThumbUrlTask extends SimpleAsyncTaskEx {
private Photo mPhoto;
+ private Photo mPhoto2;
private ReturnSizes photoSize;
private RunnableWithParameter runnable;
@@ -218,9 +225,7 @@ public RetrieveThumbUrlTask(Photo photo, ReturnSizes photoSize,
@Override
protected Boolean doInBackground(Void... params) {
try {
- Photo mPhoto2 = getThePhotoWithReturnSize(mPhoto, photoSize);
- String size = photoSize.toString();
- mPhoto.putUrl(size, mPhoto2.getUrl(size));
+ mPhoto2 = getThePhotoWithReturnSize(mPhoto, photoSize);
return true;
} catch (Exception e) {
GuiUtils.error(TAG, R.string.errorCouldNotGetPhoto, e);
@@ -230,7 +235,13 @@ protected Boolean doInBackground(Void... params) {
@Override
protected void onSuccessPostExecute() {
- runnable.run(mPhoto);
+ try {
+ String size = photoSize.toString();
+ mPhoto.putUrl(size, mPhoto2.getUrl(size));
+ runnable.run(mPhoto);
+ } catch (Exception ex) {
+ GuiUtils.error(TAG, R.string.errorCouldNotGetPhoto, ex);
+ }
}
}
diff --git a/common/src/com/trovebox/android/common/net/ITroveboxApi.java b/common/src/com/trovebox/android/common/net/ITroveboxApi.java
index 6578aec..7c67c7e 100644
--- a/common/src/com/trovebox/android/common/net/ITroveboxApi.java
+++ b/common/src/com/trovebox/android/common/net/ITroveboxApi.java
@@ -67,13 +67,15 @@ AlbumResponse getAlbum(String albumId) throws ClientProtocolException,
*
* @param photoId id of the photo
* @param returnSize which sizes should be returned
+ * @param token access token for the photo if required
+ * @param host alternate host
* @return the photo
* @throws IOException
* @throws ClientProtocolException
* @throws JSONException
* @throws IllegalStateException
*/
- PhotoResponse getPhoto(String photoId, ReturnSizes returnSize)
+ PhotoResponse getPhoto(String photoId, ReturnSizes returnSize, String token, String host)
throws ClientProtocolException, IOException, IllegalStateException,
JSONException;
diff --git a/common/src/com/trovebox/android/common/net/TroveboxApi.java b/common/src/com/trovebox/android/common/net/TroveboxApi.java
index d905358..f961502 100644
--- a/common/src/com/trovebox/android/common/net/TroveboxApi.java
+++ b/common/src/com/trovebox/android/common/net/TroveboxApi.java
@@ -79,15 +79,20 @@ public AlbumResponse getAlbum(String albumId) throws ClientProtocolException, IO
}
@Override
- public PhotoResponse getPhoto(String photoId, ReturnSizes returnSize)
+ public PhotoResponse getPhoto(String photoId, ReturnSizes returnSize, String token, String host)
throws ClientProtocolException, IOException, IllegalStateException,
JSONException {
- ApiRequest request = new ApiRequest(ApiRequest.GET, "/photo/" + photoId
- + "/view.json");
+ StringBuilder path = new StringBuilder("/photo/" + photoId);
+
+ if (!TextUtils.isEmpty(token)) {
+ path.append("/token-" + token);
+ }
+ path.append("/view.json");
+ ApiRequest request = new ApiRequest(ApiRequest.GET, path.toString());
if (returnSize != null) {
request.addParameter("returnSizes", returnSize.toString());
}
- ApiResponse response = execute(request);
+ ApiResponse response = TextUtils.isEmpty(host) ? execute(request) : execute(request, host);
return new PhotoResponse(RequestType.PHOTO, response.getJSONObject());
}
diff --git a/common/src/com/trovebox/android/common/service/AbstractUploaderService.java b/common/src/com/trovebox/android/common/service/AbstractUploaderService.java
index cccbdca..1f654da 100644
--- a/common/src/com/trovebox/android/common/service/AbstractUploaderService.java
+++ b/common/src/com/trovebox/android/common/service/AbstractUploaderService.java
@@ -270,6 +270,8 @@ public boolean isCancelled() {
if (uploadResponse.isSuccess()) {
Log.i(TAG, "Upload to Trovebox completed for: " + photoUpload.getPhotoUri());
photo = uploadResponse.getPhoto();
+ photo.setHost(photoUpload.getHost());
+ photo.setToken(photoUpload.getToken());
TrackerUtils.trackDataLoadTiming(System.currentTimeMillis() - start,
"photoUpload", TAG);
} else {
diff --git a/test/src/com/trovebox/android/test/GalleryActivityTest.java b/test/src/com/trovebox/android/test/GalleryActivityTest.java
index 664e840..d64f969 100644
--- a/test/src/com/trovebox/android/test/GalleryActivityTest.java
+++ b/test/src/com/trovebox/android/test/GalleryActivityTest.java
@@ -58,7 +58,8 @@ public void testLoadsImages() throws ClientProtocolException,
R.raw.json_photos_get))).times(2);
getApiMock().getPhoto(
(String) EasyMock.anyObject(),
- (ReturnSizes) EasyMock.anyObject()
+ (ReturnSizes) EasyMock.anyObject(),
+ (String) EasyMock.anyObject(), (String) EasyMock.anyObject()
);
PowerMock
.expectLastCall()
diff --git a/test/src/com/trovebox/android/test/PhotoDetailsActivityTest.java b/test/src/com/trovebox/android/test/PhotoDetailsActivityTest.java
index 7f10166..406bd28 100644
--- a/test/src/com/trovebox/android/test/PhotoDetailsActivityTest.java
+++ b/test/src/com/trovebox/android/test/PhotoDetailsActivityTest.java
@@ -47,7 +47,8 @@ public void testPreconditions() throws JSONException,
getApiMock().getPhoto(
(String) EasyMock.anyObject(),
- (ReturnSizes) EasyMock.anyObject()
+ (ReturnSizes) EasyMock.anyObject(),
+ (String) EasyMock.anyObject(), (String) EasyMock.anyObject()
);
PowerMock
.expectLastCall()