That fuck shit the fascists are using
1package org.tm.archive.audio;
2
3import android.os.Parcel;
4import android.os.Parcelable;
5
6import androidx.annotation.NonNull;
7import androidx.annotation.Nullable;
8
9import org.tm.archive.database.model.databaseprotos.AudioWaveFormData;
10import org.tm.archive.util.ParcelUtil;
11import org.signal.core.util.Base64;
12
13import java.io.IOException;
14import java.util.Objects;
15
16/**
17 * An AudioHash is a compact string representation of the wave form and duration for an audio file.
18 */
19public final class AudioHash implements Parcelable {
20
21 @NonNull private final String hash;
22 @NonNull private final AudioWaveFormData audioWaveForm;
23
24 private AudioHash(@NonNull String hash, @NonNull AudioWaveFormData audioWaveForm) {
25 this.hash = hash;
26 this.audioWaveForm = audioWaveForm;
27 }
28
29 public AudioHash(@NonNull AudioWaveFormData audioWaveForm) {
30 this(Base64.encodeWithPadding(audioWaveForm.encode()), audioWaveForm);
31 }
32
33 protected AudioHash(Parcel in) {
34 hash = Objects.requireNonNull(in.readString());
35
36 try {
37 audioWaveForm = AudioWaveFormData.ADAPTER.decode(Objects.requireNonNull(ParcelUtil.readByteArray(in)));
38 } catch (IOException e) {
39 throw new AssertionError();
40 }
41 }
42
43 @Override
44 public void writeToParcel(Parcel dest, int flags) {
45 dest.writeString(hash);
46 ParcelUtil.writeByteArray(dest, audioWaveForm.encode());
47 }
48
49 @Override
50 public int describeContents() {
51 return 0;
52 }
53
54 public static final Creator<AudioHash> CREATOR = new Creator<>() {
55 @Override
56 public AudioHash createFromParcel(Parcel in) {
57 return new AudioHash(in);
58 }
59
60 @Override
61 public AudioHash[] newArray(int size) {
62 return new AudioHash[size];
63 }
64 };
65
66 public static @Nullable AudioHash parseOrNull(@Nullable String hash) {
67 if (hash == null) return null;
68 try {
69 return new AudioHash(hash, AudioWaveFormData.ADAPTER.decode(Base64.decode(hash)));
70 } catch (IOException e) {
71 return null;
72 }
73 }
74
75 @NonNull AudioWaveFormData getAudioWaveForm() {
76 return audioWaveForm;
77 }
78
79 @Override
80 public boolean equals(Object o) {
81 if (this == o) return true;
82 if (o == null || getClass() != o.getClass()) return false;
83 AudioHash other = (AudioHash) o;
84 return hash.equals(other.hash);
85 }
86
87 @Override
88 public int hashCode() {
89 return hash.hashCode();
90 }
91
92 public @NonNull String getHash() {
93 return hash;
94 }
95}