package im.actor.core.js.modules;
import com.google.gwt.typedarrays.shared.TypedArrays;
import com.google.gwt.typedarrays.shared.Uint8Array;
import java.util.HashMap;
import java.util.HashSet;
import im.actor.core.api.ApiFileLocation;
import im.actor.core.api.rpc.RequestGetFileUrl;
import im.actor.core.api.rpc.ResponseGetFileUrl;
import im.actor.core.modules.AbsModule;
import im.actor.core.modules.ModuleContext;
import im.actor.core.network.RpcCallback;
import im.actor.core.network.RpcException;
import im.actor.runtime.js.fs.JsBlob;
import im.actor.runtime.js.http.JsHttpRequest;
import im.actor.runtime.js.http.JsHttpRequestHandler;
public class JsSmallAvatarFileCache extends AbsModule {
private HashMap<Long, String> cachedImages = new HashMap<Long, String>();
private HashSet<Long> requested = new HashSet<Long>();
public JsSmallAvatarFileCache(ModuleContext context) {
super(context);
}
public String getSmallAvatar(long id, long accessHash) {
if (cachedImages.containsKey(id)) {
// Support returning nulls intentionally
return cachedImages.get(id);
}
loadAvatar(id, accessHash);
return null;
}
private void loadAvatar(final long id, long accessHash) {
if (requested.contains(id)) {
return;
}
request(new RequestGetFileUrl(new ApiFileLocation(id, accessHash)),
new RpcCallback<ResponseGetFileUrl>() {
@Override
public void onResult(ResponseGetFileUrl response) {
onAvatarUrlLoaded(id, response.getUrl());
}
@Override
public void onError(RpcException e) {
cachedImages.put(id, null);
}
});
}
private void onAvatarUrlLoaded(final long id, String url) {
JsHttpRequest request = JsHttpRequest.create();
request.open("GET", url);
request.setOnLoadHandler(new JsHttpRequestHandler() {
@Override
public void onStateChanged(JsHttpRequest request) {
if (request.getReadyState() == 4) {
if (request.getStatus() == 200) {
JsBlob blob = request.getResponseBlob();
onAvatarDownloaded(id, blob);
} else {
// TODO: Implement better
cachedImages.put(id, null);
}
}
}
});
request.send();
}
private void onAvatarDownloaded(long id, JsBlob blob) {
}
}