Session v1.18.2版本的 MD5 值为:92ce129e957021e1a845dcaca5ce957d
以下内容为反编译后的 ProfilePictureUtilities.java 源代码,内容仅作参考
package org.session.libsession.utilities;
import android.content.Context;
import java.io.ByteArrayInputStream;
import java.util.Date;
import kotlin.Metadata;
import kotlin.Unit;
import kotlin.jvm.functions.Function0;
import kotlin.jvm.internal.Intrinsics;
import nl.komponents.kovenant.Deferred;
import nl.komponents.kovenant.KovenantApi;
import nl.komponents.kovenant.Promise;
import okio.Buffer;
import org.session.libsession.messaging.file_server.FileServerApi;
import org.session.libsignal.streams.DigestingRequestBody;
import org.session.libsignal.streams.ProfileCipherOutputStream;
import org.session.libsignal.streams.ProfileCipherOutputStreamFactory;
import org.session.libsignal.utilities.ProfileAvatarData;
import org.session.libsignal.utilities.RetryingKt;
import org.session.libsignal.utilities.ThreadUtils;
@Metadata(d1 = {"\u00000\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\u0010\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0012\n\u0000\n\u0002\u0010\u000e\n\u0000\n\u0002\u0018\u0002\n\u0000\bÆ\u0002\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002J.\u0010\u0003\u001a\u0012\u0012\u0004\u0012\u00020\u0005\u0012\b\u0012\u00060\u0006j\u0002`\u00070\u00042\u0006\u0010\b\u001a\u00020\t2\u0006\u0010\n\u001a\u00020\u000b2\u0006\u0010\f\u001a\u00020\r¨\u0006\u000e"}, d2 = {"Lorg/session/libsession/utilities/ProfilePictureUtilities;", "", "()V", "upload", "Lnl/komponents/kovenant/Promise;", "", "Ljava/lang/Exception;", "Lkotlin/Exception;", "profilePicture", "", "encodedProfileKey", "", "context", "Landroid/content/Context;", "libsession_release"}, k = 1, mv = {1, 8, 0}, xi = 48)
public final class ProfilePictureUtilities {
public static final ProfilePictureUtilities INSTANCE = new ProfilePictureUtilities();
private ProfilePictureUtilities() {
}
public final Promise<Unit, Exception> upload(final byte[] profilePicture, final String encodedProfileKey, final Context context) {
Intrinsics.checkNotNullParameter(profilePicture, "profilePicture");
Intrinsics.checkNotNullParameter(encodedProfileKey, "encodedProfileKey");
Intrinsics.checkNotNullParameter(context, "context");
final Deferred deferred$default = KovenantApi.deferred$default(null, 1, null);
ThreadUtils.INSTANCE.queue(new Function0<Unit>() {
{
super(0);
}
@Override
public Unit invoke() {
invoke2();
return Unit.INSTANCE;
}
public final void invoke2() {
long j;
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(profilePicture);
long ciphertextLength = ProfileCipherOutputStream.getCiphertextLength(profilePicture.length);
byte[] profileKeyFromEncodedString = ProfileKeyUtil.getProfileKeyFromEncodedString(encodedProfileKey);
Intrinsics.checkNotNullExpressionValue(profileKeyFromEncodedString, "getProfileKeyFromEncodedString(encodedProfileKey)");
ProfileAvatarData profileAvatarData = new ProfileAvatarData(byteArrayInputStream, ciphertextLength, "image/jpeg", new ProfileCipherOutputStreamFactory(profileKeyFromEncodedString));
DigestingRequestBody digestingRequestBody = new DigestingRequestBody(profileAvatarData.getData(), profileAvatarData.getOutputStreamFactory(), profileAvatarData.getContentType(), profileAvatarData.getDataLength(), null);
Buffer buffer = new Buffer();
digestingRequestBody.writeTo(buffer);
final byte[] readByteArray = buffer.readByteArray();
try {
j = ((Number) RetryingKt.retryIfNeeded$default(4, 0L, new Function0<Promise<? extends Long, ? extends Exception>>() {
{
super(0);
}
@Override
public final Promise<? extends Long, ? extends Exception> invoke() {
FileServerApi fileServerApi = FileServerApi.INSTANCE;
byte[] data = readByteArray;
Intrinsics.checkNotNullExpressionValue(data, "data");
return fileServerApi.upload(data);
}
}, 2, null).get()).longValue();
} catch (Exception e) {
deferred$default.reject(e);
j = 0;
}
TextSecurePreferences.INSTANCE.setLastProfilePictureUpload(context, new Date().getTime());
TextSecurePreferences.INSTANCE.setProfilePictureURL(context, "http://filev2.getsession.org/file/" + j);
deferred$default.resolve(Unit.INSTANCE);
}
});
return deferred$default.getPromise();
}
}