Kate Mobile v109.1版本的 MD5 值为:fcd76ded5f363ecbfac46035a4ed2a23

以下内容为反编译后的 MessageSaveActivity.java 源代码,内容仅作参考


package com.perm.kate;

import android.os.Bundle;
import android.os.Environment;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.perm.kate.api.Attachment;
import com.perm.kate.api.Group;
import com.perm.kate.api.Message;
import com.perm.kate.api.Photo;
import com.perm.kate.api.User;
import com.perm.kate.session.Callback;
import com.perm.kate.session.Session;
import com.perm.utils.TimeFix;
import com.perm.utils.UserCache;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
public class MessageSaveActivity extends BaseActivity {
    long chat_id;
    EditText fileEditText;
    long offset;
    Writer out;
    EditText pathEditText;
    boolean stop;
    long user_id;
    View view1;
    View view2;
    View view3;
    final int page_size = 200;
    final UserCache userCache = new UserCache();
    final User me = KApplication.db.fetchUser(Long.parseLong(KApplication.session.getMid()));
    final DateFormat format = DateFormat.getDateTimeInstance();
    private final View.OnClickListener startClick = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (!PhotoSaver.isScopedStorage() && ContextCompat.checkSelfPermission(MessageSaveActivity.this, "android.permission.WRITE_EXTERNAL_STORAGE") != 0) {
                ActivityCompat.requestPermissions(MessageSaveActivity.this, new String[]{"android.permission.WRITE_EXTERNAL_STORAGE"}, 1);
                return;
            }
            MessageSaveActivity.this.start();
            MessageSaveActivity messageSaveActivity = MessageSaveActivity.this;
            messageSaveActivity.showView(messageSaveActivity.view2);
        }
    };
    final Callback callback_messages = new Callback(this) {
        @Override
        public void error(Throwable th) {
            super.error(th);
            MessageSaveActivity.this.displayErrorState();
            Helper.closeStream(MessageSaveActivity.this.out);
            MessageSaveActivity messageSaveActivity = MessageSaveActivity.this;
            messageSaveActivity.showView(messageSaveActivity.view3);
            MessageSaveActivity.this.stop = true;
        }

        @Override
        public void ready(Object obj) {
            ArrayList arrayList = (ArrayList) obj;
            MessageSaveActivity.this.offset += arrayList.size();
            MessageThreadFragment.getMissingUsers(arrayList);
            try {
                MessageSaveActivity.this.saveMessages(arrayList);
                MessageSaveActivity.this.displayProgressText();
                if (arrayList.size() <= 100) {
                    MessageSaveActivity messageSaveActivity = MessageSaveActivity.this;
                    messageSaveActivity.stop = true;
                    messageSaveActivity.showView(messageSaveActivity.view3);
                    Helper.closeStream(MessageSaveActivity.this.out);
                }
            } catch (Throwable th) {
                th.printStackTrace();
                Helper.closeStream(MessageSaveActivity.this.out);
                MessageSaveActivity.this.displayErrorState();
                Helper.reportError(th);
                MessageSaveActivity messageSaveActivity2 = MessageSaveActivity.this;
                messageSaveActivity2.showView(messageSaveActivity2.view3);
                MessageSaveActivity.this.stop = true;
            }
        }
    };
    private final View.OnClickListener closeClick = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            MessageSaveActivity.this.finish();
        }
    };

    public void displayErrorState() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                ((TextView) MessageSaveActivity.this.findViewById(R.id.ready)).setText(R.string.message_save_failed);
            }
        });
    }

    private String getDefaultFileName() {
        String str = "messages";
        try {
            if (this.chat_id > 0) {
                str = (String) KApplication.db.fetchChatName(this.chat_id, Long.parseLong(KApplication.session.getMid()));
            } else if (User.isVirtualUser(this.user_id)) {
                Group fetchGroup = KApplication.db.fetchGroup(User.virtualUserIdToGroupId(this.user_id));
                if (fetchGroup != null) {
                    str = fetchGroup.name;
                }
            } else {
                User user = this.userCache.get(this.user_id);
                str = user.first_name + " " + user.last_name;
            }
        } catch (Throwable th) {
            th.printStackTrace();
            Helper.reportError(th);
        }
        return str + ".txt";
    }

    private void getMissingUsersFromForwardedMessages(Message message) {
        HashSet hashSet = new HashSet();
        Iterator<Attachment> it = message.attachments.iterator();
        while (it.hasNext()) {
            Message message2 = it.next().message;
            if (message2 != null) {
                hashSet.add(Long.valueOf(message2.uid));
            }
        }
        KApplication.getMissingUsers(new ArrayList(hashSet));
    }

    private void saveMessage(Message message, String str) {
        User user = message.is_out ? this.me : this.userCache.get(message.uid);
        this.out.write(str);
        if (user != null) {
            Writer writer = this.out;
            writer.write(user.first_name + " " + user.last_name);
        }
        Writer writer2 = this.out;
        writer2.write(" (" + this.format.format(new Date(TimeFix.fix(message.date) * 1000)) + "):");
        this.out.write("\n");
        if (!TextUtils.isEmpty(message.body)) {
            Writer writer3 = this.out;
            writer3.write(str + message.body);
            this.out.write("\n");
        }
        getMissingUsersFromForwardedMessages(message);
        if (message.attachments.size() > 0) {
            Writer writer4 = this.out;
            writer4.write(str + ((Object) getText(R.string.title_attachments)) + ":\n");
        }
        Iterator<Attachment> it = message.attachments.iterator();
        while (it.hasNext()) {
            Attachment next = it.next();
            if (next.type.equals("photo") || next.type.equals("posted_photo")) {
                Photo photo = next.photo;
                String str2 = photo.src_big;
                if (!TextUtils.isEmpty(photo.src_xbig)) {
                    str2 = next.photo.src_xbig;
                }
                Writer writer5 = this.out;
                writer5.write(str + "http://vk.com/photo" + next.photo.owner_id + "_" + next.photo.pid + " : " + str2);
                this.out.write("\n");
            } else if (next.type.equals("video")) {
                Writer writer6 = this.out;
                writer6.write(str + "http://vk.com/video" + next.video.owner_id + "_" + next.video.vid + " : " + next.video.title);
                this.out.write("\n");
            } else if (next.type.equals("doc")) {
                Writer writer7 = this.out;
                writer7.write(str + "http://vk.com/doc" + next.document.owner_id + "_" + next.document.id + " : " + next.document.title);
                this.out.write("\n");
            } else if (next.type.equals("audio")) {
                Writer writer8 = this.out;
                writer8.write(str + "http://vk.com/audio?id=" + next.audio.owner_id + "&audio_id=" + next.audio.aid + " : " + next.audio.artist + " - " + next.audio.title);
                this.out.write("\n");
            } else if (next.type.equals("gift")) {
                Writer writer9 = this.out;
                writer9.write(str + "Подарок " + next.gift.thumb_256);
                this.out.write("\n");
            } else if (next.type.equals("geo")) {
                Writer writer10 = this.out;
                writer10.write(str + getText(R.string.place).toString());
                this.out.write("\n");
            } else if (next.type.equals("wall")) {
                Writer writer11 = this.out;
                writer11.write(str + "http://vk.com/wall" + next.wallMessage.to_id + "_" + next.wallMessage.id);
                this.out.write("\n");
            } else if (next.type.equals("message")) {
                Message message2 = next.message;
                saveMessage(message2, str + "   ");
            }
        }
        if (TextUtils.isEmpty(str)) {
            this.out.write("\n");
        }
    }

    public void saveMessages(ArrayList arrayList) {
        Iterator it = arrayList.iterator();
        while (it.hasNext()) {
            saveMessage((Message) it.next(), "");
        }
        this.out.flush();
    }

    void displayProgressText() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                MessageSaveActivity messageSaveActivity = MessageSaveActivity.this;
                String string = messageSaveActivity.getString(R.string.message_save_progress, Long.valueOf(messageSaveActivity.offset));
                ((TextView) MessageSaveActivity.this.findViewById(R.id.progress_text)).setText(string);
                ((TextView) MessageSaveActivity.this.findViewById(R.id.progress_text_2)).setText(string);
            }
        });
    }

    @Override
    public void onCreate(Bundle bundle) {
        String str;
        super.onCreate(bundle);
        setContentView(R.layout.message_save);
        setHeaderTitle(R.string.label_save);
        this.chat_id = getIntent().getLongExtra("chat_id", 0L);
        this.user_id = getIntent().getLongExtra("user_id", 0L);
        findViewById(R.id.start).setOnClickListener(this.startClick);
        findViewById(R.id.close).setOnClickListener(this.closeClick);
        String str2 = Environment.getExternalStorageDirectory().getAbsolutePath() + "/KateMessages";
        if (PhotoSaver.isScopedStorage()) {
            StringBuilder sb = new StringBuilder();
            str = Environment.DIRECTORY_DOCUMENTS;
            sb.append(Environment.getExternalStoragePublicDirectory(str).getAbsolutePath());
            sb.append("/KateMessages");
            str2 = sb.toString();
        }
        EditText editText = (EditText) findViewById(R.id.path);
        this.pathEditText = editText;
        editText.setText(str2);
        EditText editText2 = (EditText) findViewById(R.id.filename);
        this.fileEditText = editText2;
        editText2.setText(getDefaultFileName());
        this.view1 = findViewById(R.id.view1);
        this.view2 = findViewById(R.id.view2);
        this.view3 = findViewById(R.id.view3);
        showView(this.view1);
    }

    @Override
    public void onRequestPermissionsResult(int i, String[] strArr, int[] iArr) {
        if (i == 1 && iArr.length > 0 && iArr[0] == 0) {
            start();
            showView(this.view2);
        }
    }

    void showView(final View view) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                View view2 = MessageSaveActivity.this.view1;
                view2.setVisibility(view == view2 ? 0 : 8);
                View view3 = MessageSaveActivity.this.view2;
                view3.setVisibility(view == view3 ? 0 : 8);
                View view4 = MessageSaveActivity.this.view3;
                view4.setVisibility(view != view4 ? 8 : 0);
            }
        });
    }

    protected void start() {
        new Thread() {
            @Override
            public void run() {
                String obj = MessageSaveActivity.this.pathEditText.getText().toString();
                String obj2 = MessageSaveActivity.this.fileEditText.getText().toString();
                new File(obj).mkdirs();
                try {
                    MessageSaveActivity messageSaveActivity = MessageSaveActivity.this;
                    messageSaveActivity.out = new OutputStreamWriter(new FileOutputStream(obj + "/" + obj2), "utf-8");
                    MessageSaveActivity messageSaveActivity2 = MessageSaveActivity.this;
                    messageSaveActivity2.offset = 0L;
                    messageSaveActivity2.stop = false;
                    messageSaveActivity2.displayProgressText();
                    do {
                        Session session = KApplication.session;
                        MessageSaveActivity messageSaveActivity3 = MessageSaveActivity.this;
                        long j = messageSaveActivity3.user_id;
                        long j2 = messageSaveActivity3.chat_id;
                        Long valueOf = Long.valueOf(messageSaveActivity3.offset);
                        MessageSaveActivity messageSaveActivity4 = MessageSaveActivity.this;
                        session.getMessagesHistory(j, j2, valueOf, 200, null, 1, messageSaveActivity4.callback_messages, messageSaveActivity4);
                    } while (!MessageSaveActivity.this.stop);
                } catch (Throwable th) {
                    th.printStackTrace();
                    Helper.reportError(th);
                    MessageSaveActivity.this.displayErrorState();
                    MessageSaveActivity messageSaveActivity5 = MessageSaveActivity.this;
                    messageSaveActivity5.showView(messageSaveActivity5.view3);
                    Helper.closeStream(MessageSaveActivity.this.out);
                }
            }
        }.start();
    }
}