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();
    }
}