Browse Source
Convert some retrofit response classes to kotlin
renovate/org.robolectric-robolectric-4.x
Convert some retrofit response classes to kotlin
renovate/org.robolectric-robolectric-4.x
Ammar Githam
4 years ago
32 changed files with 443 additions and 1509 deletions
-
6app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemViewHolder.java
-
14app/src/main/java/awais/instagrabber/fragments/PostViewV2Fragment.java
-
57app/src/main/java/awais/instagrabber/repositories/responses/AnimatedMediaFixedHeight.java
-
5app/src/main/java/awais/instagrabber/repositories/responses/AnimatedMediaFixedHeight.kt
-
29app/src/main/java/awais/instagrabber/repositories/responses/AnimatedMediaImages.java
-
5app/src/main/java/awais/instagrabber/repositories/responses/AnimatedMediaImages.kt
-
62app/src/main/java/awais/instagrabber/repositories/responses/Audio.java
-
11app/src/main/java/awais/instagrabber/repositories/responses/Audio.kt
-
22app/src/main/java/awais/instagrabber/repositories/responses/AymlResponse.java
-
14app/src/main/java/awais/instagrabber/repositories/responses/AymlResponse.kt
-
34app/src/main/java/awais/instagrabber/repositories/responses/AymlUser.java
-
15app/src/main/java/awais/instagrabber/repositories/responses/AymlUserList.java
-
88app/src/main/java/awais/instagrabber/repositories/responses/Caption.java
-
5app/src/main/java/awais/instagrabber/repositories/responses/Caption.kt
-
31app/src/main/java/awais/instagrabber/repositories/responses/FriendshipChangeResponse.java
-
3app/src/main/java/awais/instagrabber/repositories/responses/FriendshipChangeResponse.kt
-
79app/src/main/java/awais/instagrabber/repositories/responses/FriendshipListFetchResponse.java
-
27app/src/main/java/awais/instagrabber/repositories/responses/FriendshipListFetchResponse.kt
-
32app/src/main/java/awais/instagrabber/repositories/responses/FriendshipRestrictResponse.java
-
3app/src/main/java/awais/instagrabber/repositories/responses/FriendshipRestrictResponse.kt
-
121app/src/main/java/awais/instagrabber/repositories/responses/FriendshipStatus.java
-
16app/src/main/java/awais/instagrabber/repositories/responses/FriendshipStatus.kt
-
332app/src/main/java/awais/instagrabber/repositories/responses/Media.java
-
71app/src/main/java/awais/instagrabber/repositories/responses/Media.kt
-
306app/src/main/java/awais/instagrabber/repositories/responses/directmessages/DirectItem.java
-
74app/src/main/java/awais/instagrabber/repositories/responses/directmessages/DirectItem.kt
-
41app/src/main/java/awais/instagrabber/repositories/serializers/CaptionDeserializer.java
-
264app/src/main/java/awais/instagrabber/utils/DirectItemFactory.java
-
126app/src/main/java/awais/instagrabber/utils/DirectItemFactory.kt
-
40app/src/main/java/awais/instagrabber/utils/ResponseBodyUtils.java
-
16app/src/main/java/awais/instagrabber/viewmodels/PostViewV2ViewModel.java
-
3app/src/main/java/awais/instagrabber/webservices/RetrofitFactory.java
@ -1,57 +0,0 @@ |
|||
package awais.instagrabber.repositories.responses; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Objects; |
|||
|
|||
public class AnimatedMediaFixedHeight implements Serializable { |
|||
private final int height; |
|||
private final int width; |
|||
private final String mp4; |
|||
private final String url; |
|||
private final String webp; |
|||
|
|||
public AnimatedMediaFixedHeight(final int height, final int width, final String mp4, final String url, final String webp) { |
|||
this.height = height; |
|||
this.width = width; |
|||
this.mp4 = mp4; |
|||
this.url = url; |
|||
this.webp = webp; |
|||
} |
|||
|
|||
public int getHeight() { |
|||
return height; |
|||
} |
|||
|
|||
public int getWidth() { |
|||
return width; |
|||
} |
|||
|
|||
public String getMp4() { |
|||
return mp4; |
|||
} |
|||
|
|||
public String getUrl() { |
|||
return url; |
|||
} |
|||
|
|||
public String getWebp() { |
|||
return webp; |
|||
} |
|||
|
|||
@Override |
|||
public boolean equals(final Object o) { |
|||
if (this == o) return true; |
|||
if (o == null || getClass() != o.getClass()) return false; |
|||
final AnimatedMediaFixedHeight that = (AnimatedMediaFixedHeight) o; |
|||
return height == that.height && |
|||
width == that.width && |
|||
Objects.equals(mp4, that.mp4) && |
|||
Objects.equals(url, that.url) && |
|||
Objects.equals(webp, that.webp); |
|||
} |
|||
|
|||
@Override |
|||
public int hashCode() { |
|||
return Objects.hash(height, width, mp4, url, webp); |
|||
} |
|||
} |
@ -0,0 +1,5 @@ |
|||
package awais.instagrabber.repositories.responses |
|||
|
|||
import java.io.Serializable |
|||
|
|||
data class AnimatedMediaFixedHeight(val height: Int, val width: Int, val mp4: String?, val url: String?, val webp: String?) : Serializable |
@ -1,29 +0,0 @@ |
|||
package awais.instagrabber.repositories.responses; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Objects; |
|||
|
|||
public class AnimatedMediaImages implements Serializable { |
|||
private final AnimatedMediaFixedHeight fixedHeight; |
|||
|
|||
public AnimatedMediaImages(final AnimatedMediaFixedHeight fixedHeight) { |
|||
this.fixedHeight = fixedHeight; |
|||
} |
|||
|
|||
public AnimatedMediaFixedHeight getFixedHeight() { |
|||
return fixedHeight; |
|||
} |
|||
|
|||
@Override |
|||
public boolean equals(final Object o) { |
|||
if (this == o) return true; |
|||
if (o == null || getClass() != o.getClass()) return false; |
|||
final AnimatedMediaImages that = (AnimatedMediaImages) o; |
|||
return Objects.equals(fixedHeight, that.fixedHeight); |
|||
} |
|||
|
|||
@Override |
|||
public int hashCode() { |
|||
return Objects.hash(fixedHeight); |
|||
} |
|||
} |
@ -0,0 +1,5 @@ |
|||
package awais.instagrabber.repositories.responses |
|||
|
|||
import java.io.Serializable |
|||
|
|||
data class AnimatedMediaImages(val fixedHeight: AnimatedMediaFixedHeight?) : Serializable |
@ -1,62 +0,0 @@ |
|||
package awais.instagrabber.repositories.responses; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.List; |
|||
import java.util.Objects; |
|||
|
|||
public class Audio implements Serializable { |
|||
private final String audioSrc; |
|||
private final long duration; |
|||
private final List<Float> waveformData; |
|||
private final int waveformSamplingFrequencyHz; |
|||
private final long audioSrcExpirationTimestampUs; |
|||
|
|||
public Audio(final String audioSrc, |
|||
final long duration, |
|||
final List<Float> waveformData, |
|||
final int waveformSamplingFrequencyHz, |
|||
final long audioSrcExpirationTimestampUs) { |
|||
this.audioSrc = audioSrc; |
|||
this.duration = duration; |
|||
this.waveformData = waveformData; |
|||
this.waveformSamplingFrequencyHz = waveformSamplingFrequencyHz; |
|||
this.audioSrcExpirationTimestampUs = audioSrcExpirationTimestampUs; |
|||
} |
|||
|
|||
public String getAudioSrc() { |
|||
return audioSrc; |
|||
} |
|||
|
|||
public long getDuration() { |
|||
return duration; |
|||
} |
|||
|
|||
public List<Float> getWaveformData() { |
|||
return waveformData; |
|||
} |
|||
|
|||
public int getWaveformSamplingFrequencyHz() { |
|||
return waveformSamplingFrequencyHz; |
|||
} |
|||
|
|||
public long getAudioSrcExpirationTimestampUs() { |
|||
return audioSrcExpirationTimestampUs; |
|||
} |
|||
|
|||
@Override |
|||
public boolean equals(final Object o) { |
|||
if (this == o) return true; |
|||
if (o == null || getClass() != o.getClass()) return false; |
|||
final Audio audio = (Audio) o; |
|||
return duration == audio.duration && |
|||
waveformSamplingFrequencyHz == audio.waveformSamplingFrequencyHz && |
|||
audioSrcExpirationTimestampUs == audio.audioSrcExpirationTimestampUs && |
|||
Objects.equals(audioSrc, audio.audioSrc) && |
|||
Objects.equals(waveformData, audio.waveformData); |
|||
} |
|||
|
|||
@Override |
|||
public int hashCode() { |
|||
return Objects.hash(audioSrc, duration, waveformData, waveformSamplingFrequencyHz, audioSrcExpirationTimestampUs); |
|||
} |
|||
} |
@ -0,0 +1,11 @@ |
|||
package awais.instagrabber.repositories.responses |
|||
|
|||
import java.io.Serializable |
|||
|
|||
data class Audio( |
|||
val audioSrc: String?, |
|||
val duration: Long, |
|||
val waveformData: List<Float>?, |
|||
val waveformSamplingFrequencyHz: Int, |
|||
val audioSrcExpirationTimestampUs: Long |
|||
) : Serializable |
@ -1,22 +0,0 @@ |
|||
package awais.instagrabber.repositories.responses; |
|||
|
|||
import java.util.List; |
|||
|
|||
public class AymlResponse { |
|||
private final AymlUserList newSuggestedUsers; |
|||
private final AymlUserList suggestedUsers; |
|||
|
|||
public AymlResponse(final AymlUserList newSuggestedUsers, |
|||
final AymlUserList suggestedUsers) { |
|||
this.newSuggestedUsers = newSuggestedUsers; |
|||
this.suggestedUsers = suggestedUsers; |
|||
} |
|||
|
|||
public AymlUserList getNewSuggestedUsers() { |
|||
return newSuggestedUsers; |
|||
} |
|||
|
|||
public AymlUserList getSuggestedUsers() { |
|||
return suggestedUsers; |
|||
} |
|||
} |
@ -0,0 +1,14 @@ |
|||
package awais.instagrabber.repositories.responses |
|||
|
|||
import java.io.Serializable |
|||
|
|||
data class AymlResponse(val newSuggestedUsers: AymlUserList?, val suggestedUsers: AymlUserList?) : Serializable |
|||
|
|||
data class AymlUser( |
|||
val user: User?, |
|||
val algorithm: String?, |
|||
val socialContext: String?, |
|||
val uuid: String? |
|||
) : Serializable |
|||
|
|||
data class AymlUserList(val suggestions: List<AymlUser>?) : Serializable |
@ -1,34 +0,0 @@ |
|||
package awais.instagrabber.repositories.responses; |
|||
|
|||
public class AymlUser { |
|||
private final User user; |
|||
private final String algorithm; |
|||
private final String socialContext; |
|||
private final String uuid; |
|||
|
|||
public AymlUser(final User user, |
|||
final String algorithm, |
|||
final String socialContext, |
|||
final String uuid) { |
|||
this.user = user; |
|||
this.algorithm = algorithm; |
|||
this.socialContext = socialContext; |
|||
this.uuid = uuid; |
|||
} |
|||
|
|||
public User getUser() { |
|||
return user; |
|||
} |
|||
|
|||
public String getAlgorithm() { |
|||
return algorithm; |
|||
} |
|||
|
|||
public String getSocialContext() { |
|||
return socialContext; |
|||
} |
|||
|
|||
public String getUuid() { |
|||
return uuid; |
|||
} |
|||
} |
@ -1,15 +0,0 @@ |
|||
package awais.instagrabber.repositories.responses; |
|||
|
|||
import java.util.List; |
|||
|
|||
public class AymlUserList { |
|||
private final List<AymlUser> suggestions; |
|||
|
|||
public AymlUserList(final List<AymlUser> suggestions) { |
|||
this.suggestions = suggestions; |
|||
} |
|||
|
|||
public List<AymlUser> getSuggestions() { |
|||
return suggestions; |
|||
} |
|||
} |
@ -1,88 +0,0 @@ |
|||
package awais.instagrabber.repositories.responses; |
|||
|
|||
import android.util.Log; |
|||
|
|||
import com.google.gson.Gson; |
|||
import com.google.gson.JsonDeserializationContext; |
|||
import com.google.gson.JsonDeserializer; |
|||
import com.google.gson.JsonElement; |
|||
import com.google.gson.JsonObject; |
|||
import com.google.gson.JsonParseException; |
|||
|
|||
import java.io.Serializable; |
|||
import java.lang.reflect.Type; |
|||
import java.util.Objects; |
|||
|
|||
public class Caption implements Serializable { |
|||
private long mPk; |
|||
private final long userId; |
|||
private String text; |
|||
|
|||
public Caption(final long userId, final String text) { |
|||
this.userId = userId; |
|||
this.text = text; |
|||
} |
|||
|
|||
public long getPk() { |
|||
return mPk; |
|||
} |
|||
|
|||
public void setPk(final long pk) { |
|||
this.mPk = pk; |
|||
} |
|||
|
|||
public long getUserId() { |
|||
return userId; |
|||
} |
|||
|
|||
public String getText() { |
|||
return text; |
|||
} |
|||
|
|||
public void setText(String text) { |
|||
this.text = text; |
|||
} |
|||
|
|||
@Override |
|||
public boolean equals(final Object o) { |
|||
if (this == o) return true; |
|||
if (o == null || getClass() != o.getClass()) return false; |
|||
final Caption caption = (Caption) o; |
|||
return mPk == caption.mPk && |
|||
userId == caption.userId && |
|||
Objects.equals(text, caption.text); |
|||
} |
|||
|
|||
@Override |
|||
public int hashCode() { |
|||
return Objects.hash(mPk, userId, text); |
|||
} |
|||
|
|||
public static class CaptionDeserializer implements JsonDeserializer<Caption> { |
|||
|
|||
private static final String TAG = CaptionDeserializer.class.getSimpleName(); |
|||
|
|||
@Override |
|||
public Caption deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { |
|||
final Caption caption = new Gson().fromJson(json, Caption.class); |
|||
final JsonObject jsonObject = json.getAsJsonObject(); |
|||
if (jsonObject.has("pk")) { |
|||
JsonElement elem = jsonObject.get("pk"); |
|||
if (elem != null && !elem.isJsonNull()) { |
|||
if (!elem.isJsonPrimitive()) return caption; |
|||
String pkString = elem.getAsString(); |
|||
if (pkString.contains("_")) { |
|||
pkString = pkString.substring(0, pkString.indexOf("_")); |
|||
} |
|||
try { |
|||
caption.setPk(Long.parseLong(pkString)); |
|||
} catch (NumberFormatException e) { |
|||
Log.e(TAG, "deserialize: ", e); |
|||
} |
|||
} |
|||
} |
|||
return caption; |
|||
} |
|||
} |
|||
|
|||
} |
@ -0,0 +1,5 @@ |
|||
package awais.instagrabber.repositories.responses |
|||
|
|||
import java.io.Serializable |
|||
|
|||
data class Caption(var pk: Long = 0, val userId: Long, var text: String) : Serializable |
@ -1,31 +0,0 @@ |
|||
package awais.instagrabber.repositories.responses; |
|||
|
|||
import androidx.annotation.NonNull; |
|||
|
|||
public class FriendshipChangeResponse { |
|||
private final FriendshipStatus friendshipStatus; |
|||
private final String status; |
|||
|
|||
public FriendshipChangeResponse(final FriendshipStatus friendshipStatus, |
|||
final String status) { |
|||
this.friendshipStatus = friendshipStatus; |
|||
this.status = status; |
|||
} |
|||
|
|||
public FriendshipStatus getFriendshipStatus() { |
|||
return friendshipStatus; |
|||
} |
|||
|
|||
public String getStatus() { |
|||
return status; |
|||
} |
|||
|
|||
@NonNull |
|||
@Override |
|||
public String toString() { |
|||
return "FriendshipChangeResponse{" + |
|||
"friendshipStatus=" + friendshipStatus + |
|||
", status='" + status + '\'' + |
|||
'}'; |
|||
} |
|||
} |
@ -0,0 +1,3 @@ |
|||
package awais.instagrabber.repositories.responses |
|||
|
|||
data class FriendshipChangeResponse(val friendshipStatus: FriendshipStatus?, val status: String?) |
@ -1,79 +0,0 @@ |
|||
package awais.instagrabber.repositories.responses; |
|||
|
|||
import androidx.annotation.NonNull; |
|||
|
|||
import java.util.List; |
|||
import java.util.Objects; |
|||
|
|||
import awais.instagrabber.models.FollowModel; |
|||
import awais.instagrabber.utils.TextUtils; |
|||
|
|||
public class FriendshipListFetchResponse { |
|||
private String nextMaxId; |
|||
private String status; |
|||
private List<FollowModel> items; |
|||
|
|||
public FriendshipListFetchResponse(final String nextMaxId, |
|||
final String status, |
|||
final List<FollowModel> items) { |
|||
this.nextMaxId = nextMaxId; |
|||
this.status = status; |
|||
this.items = items; |
|||
} |
|||
|
|||
public boolean isMoreAvailable() { |
|||
return !TextUtils.isEmpty(nextMaxId); |
|||
} |
|||
|
|||
public String getNextMaxId() { |
|||
return nextMaxId; |
|||
} |
|||
|
|||
public FriendshipListFetchResponse setNextMaxId(final String nextMaxId) { |
|||
this.nextMaxId = nextMaxId; |
|||
return this; |
|||
} |
|||
|
|||
public String getStatus() { |
|||
return status; |
|||
} |
|||
|
|||
public FriendshipListFetchResponse setStatus(final String status) { |
|||
this.status = status; |
|||
return this; |
|||
} |
|||
|
|||
public List<FollowModel> getItems() { |
|||
return items; |
|||
} |
|||
|
|||
public FriendshipListFetchResponse setItems(final List<FollowModel> items) { |
|||
this.items = items; |
|||
return this; |
|||
} |
|||
|
|||
@Override |
|||
public boolean equals(final Object o) { |
|||
if (this == o) return true; |
|||
if (o == null || getClass() != o.getClass()) return false; |
|||
final FriendshipListFetchResponse that = (FriendshipListFetchResponse) o; |
|||
return Objects.equals(nextMaxId, that.nextMaxId) && |
|||
Objects.equals(status, that.status) && |
|||
Objects.equals(items, that.items); |
|||
} |
|||
|
|||
@Override |
|||
public int hashCode() { |
|||
return Objects.hash(nextMaxId, status, items); |
|||
} |
|||
|
|||
@NonNull |
|||
@Override |
|||
public String toString() { |
|||
return "FriendshipRepoListFetchResponse{" + |
|||
"nextMaxId='" + nextMaxId + '\'' + |
|||
", status='" + status + '\'' + |
|||
", items=" + items + |
|||
'}'; |
|||
} |
|||
} |
@ -0,0 +1,27 @@ |
|||
package awais.instagrabber.repositories.responses |
|||
|
|||
import awais.instagrabber.models.FollowModel |
|||
|
|||
data class FriendshipListFetchResponse( |
|||
var nextMaxId: String?, |
|||
var status: String?, |
|||
var items: List<FollowModel>? |
|||
) { |
|||
val isMoreAvailable: Boolean |
|||
get() = !nextMaxId.isNullOrBlank() |
|||
|
|||
fun setNextMaxId(nextMaxId: String): FriendshipListFetchResponse { |
|||
this.nextMaxId = nextMaxId |
|||
return this |
|||
} |
|||
|
|||
fun setStatus(status: String): FriendshipListFetchResponse { |
|||
this.status = status |
|||
return this |
|||
} |
|||
|
|||
fun setItems(items: List<FollowModel>): FriendshipListFetchResponse { |
|||
this.items = items |
|||
return this |
|||
} |
|||
} |
@ -1,32 +0,0 @@ |
|||
package awais.instagrabber.repositories.responses; |
|||
|
|||
import androidx.annotation.NonNull; |
|||
|
|||
import java.util.List; |
|||
|
|||
public class FriendshipRestrictResponse { |
|||
private final List<User> users; |
|||
private final String status; |
|||
|
|||
public FriendshipRestrictResponse(final List<User> users, final String status) { |
|||
this.users = users; |
|||
this.status = status; |
|||
} |
|||
|
|||
public List<User> getUsers() { |
|||
return users; |
|||
} |
|||
|
|||
public String getStatus() { |
|||
return status; |
|||
} |
|||
|
|||
@NonNull |
|||
@Override |
|||
public String toString() { |
|||
return "FriendshipRestrictResponse{" + |
|||
"users=" + users + |
|||
", status='" + status + '\'' + |
|||
'}'; |
|||
} |
|||
} |
@ -0,0 +1,3 @@ |
|||
package awais.instagrabber.repositories.responses |
|||
|
|||
data class FriendshipRestrictResponse(val users: List<User>?, val status: String?) |
@ -1,121 +0,0 @@ |
|||
package awais.instagrabber.repositories.responses; |
|||
|
|||
import androidx.annotation.NonNull; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Objects; |
|||
|
|||
public class FriendshipStatus implements Serializable { |
|||
private final boolean following; |
|||
private final boolean followedBy; |
|||
private final boolean blocking; |
|||
private final boolean muting; |
|||
private final boolean isPrivate; |
|||
private final boolean incomingRequest; |
|||
private final boolean outgoingRequest; |
|||
private final boolean isBestie; |
|||
private final boolean isRestricted; |
|||
private final boolean isMutingReel; |
|||
|
|||
public FriendshipStatus(final boolean following, |
|||
final boolean followedBy, |
|||
final boolean blocking, |
|||
final boolean muting, |
|||
final boolean isPrivate, |
|||
final boolean incomingRequest, |
|||
final boolean outgoingRequest, |
|||
final boolean isBestie, |
|||
final boolean isRestricted, |
|||
final boolean isMutingReel) { |
|||
this.following = following; |
|||
this.followedBy = followedBy; |
|||
this.blocking = blocking; |
|||
this.muting = muting; |
|||
this.isPrivate = isPrivate; |
|||
this.incomingRequest = incomingRequest; |
|||
this.outgoingRequest = outgoingRequest; |
|||
this.isBestie = isBestie; |
|||
this.isRestricted = isRestricted; |
|||
this.isMutingReel = isMutingReel; |
|||
} |
|||
|
|||
public boolean isFollowing() { |
|||
return following; |
|||
} |
|||
|
|||
public boolean isFollowedBy() { |
|||
return followedBy; |
|||
} |
|||
|
|||
public boolean isBlocking() { |
|||
return blocking; |
|||
} |
|||
|
|||
public boolean isMuting() { |
|||
return muting; |
|||
} |
|||
|
|||
public boolean isPrivate() { |
|||
return isPrivate; |
|||
} |
|||
|
|||
public boolean isIncomingRequest() { |
|||
return incomingRequest; |
|||
} |
|||
|
|||
public boolean isOutgoingRequest() { |
|||
return outgoingRequest; |
|||
} |
|||
|
|||
public boolean isBestie() { |
|||
return isBestie; |
|||
} |
|||
|
|||
public boolean isRestricted() { |
|||
return isRestricted; |
|||
} |
|||
|
|||
public boolean isMutingReel() { |
|||
return isMutingReel; |
|||
} |
|||
|
|||
@Override |
|||
public boolean equals(final Object o) { |
|||
if (this == o) return true; |
|||
if (o == null || getClass() != o.getClass()) return false; |
|||
final FriendshipStatus that = (FriendshipStatus) o; |
|||
return following == that.following && |
|||
followedBy == that.followedBy && |
|||
blocking == that.blocking && |
|||
muting == that.muting && |
|||
isPrivate == that.isPrivate && |
|||
incomingRequest == that.incomingRequest && |
|||
outgoingRequest == that.outgoingRequest && |
|||
isBestie == that.isBestie && |
|||
isRestricted == that.isRestricted && |
|||
isMutingReel == that.isMutingReel; |
|||
} |
|||
|
|||
@Override |
|||
public int hashCode() { |
|||
return Objects.hash(following, followedBy, blocking, muting, isPrivate, incomingRequest, outgoingRequest, isBestie, isRestricted, |
|||
isMutingReel); |
|||
} |
|||
|
|||
@NonNull |
|||
@Override |
|||
public String toString() { |
|||
return "FriendshipStatus{" + |
|||
"following=" + following + |
|||
", followedBy=" + followedBy + |
|||
", blocking=" + blocking + |
|||
", muting=" + muting + |
|||
", isPrivate=" + isPrivate + |
|||
", incomingRequest=" + incomingRequest + |
|||
", outgoingRequest=" + outgoingRequest + |
|||
", isBestie=" + isBestie + |
|||
", isRestricted=" + isRestricted + |
|||
", isMutingReel=" + isMutingReel + |
|||
'}'; |
|||
} |
|||
} |
@ -0,0 +1,16 @@ |
|||
package awais.instagrabber.repositories.responses |
|||
|
|||
import java.io.Serializable |
|||
|
|||
data class FriendshipStatus( |
|||
val isFollowing: Boolean, |
|||
val isFollowedBy: Boolean, |
|||
val isBlocking: Boolean, |
|||
val isMuting: Boolean, |
|||
val isPrivate: Boolean, |
|||
val isIncomingRequest: Boolean, |
|||
val isOutgoingRequest: Boolean, |
|||
val isBestie: Boolean, |
|||
val isRestricted: Boolean, |
|||
val isMutingReel: Boolean |
|||
) : Serializable |
@ -1,332 +0,0 @@ |
|||
package awais.instagrabber.repositories.responses; |
|||
|
|||
import androidx.annotation.Nullable; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.Objects; |
|||
|
|||
import awais.instagrabber.models.enums.MediaItemType; |
|||
import awais.instagrabber.repositories.responses.feed.EndOfFeedDemarcator; |
|||
import awais.instagrabber.utils.Utils; |
|||
|
|||
public class Media implements Serializable { |
|||
private final String pk; |
|||
private final String id; |
|||
private final String code; |
|||
private final long takenAt; |
|||
private final User user; |
|||
private final MediaItemType mediaType; |
|||
private final boolean canViewerReshare; |
|||
private final boolean commentLikesEnabled; |
|||
private final boolean commentsDisabled; |
|||
private final long nextMaxId; |
|||
private final long commentCount; |
|||
private final ImageVersions2 imageVersions2; |
|||
private final int originalWidth; |
|||
private final int originalHeight; |
|||
private long likeCount; |
|||
private boolean hasLiked; |
|||
private final boolean isReelMedia; |
|||
private final List<VideoVersion> videoVersions; |
|||
private final boolean hasAudio; |
|||
private final double videoDuration; |
|||
private final long viewCount; |
|||
private Caption caption; |
|||
private final boolean canViewerSave; |
|||
private final Audio audio; |
|||
private final String title; |
|||
private final Location location; |
|||
private final Usertags usertags; |
|||
private final List<Media> carouselMedia; |
|||
private boolean isSidecarChild; |
|||
private boolean hasViewerSaved; |
|||
private final Map<String, Object> injected; |
|||
private final EndOfFeedDemarcator endOfFeedDemarcator; |
|||
|
|||
private String dateString; |
|||
|
|||
public Media(final String pk, |
|||
final String id, |
|||
final String code, |
|||
final long takenAt, |
|||
final User user, |
|||
final boolean canViewerReshare, |
|||
final ImageVersions2 imageVersions2, |
|||
final int originalWidth, |
|||
final int originalHeight, |
|||
final MediaItemType mediaType, |
|||
final boolean commentLikesEnabled, |
|||
final boolean commentsDisabled, |
|||
final long nextMaxId, |
|||
final long commentCount, |
|||
final long likeCount, |
|||
final boolean hasLiked, |
|||
final boolean isReelMedia, |
|||
final List<VideoVersion> videoVersions, |
|||
final boolean hasAudio, |
|||
final double videoDuration, |
|||
final long viewCount, |
|||
final Caption caption, |
|||
final boolean canViewerSave, |
|||
final Audio audio, |
|||
final String title, |
|||
final List<Media> carouselMedia, |
|||
final Location location, |
|||
final Usertags usertags, |
|||
final boolean isSidecarChild, |
|||
final boolean hasViewerSaved, |
|||
final Map<String, Object> injected, |
|||
final EndOfFeedDemarcator endOfFeedDemarcator) { |
|||
this.pk = pk; |
|||
this.id = id; |
|||
this.code = code; |
|||
this.takenAt = takenAt; |
|||
this.user = user; |
|||
this.canViewerReshare = canViewerReshare; |
|||
this.imageVersions2 = imageVersions2; |
|||
this.originalWidth = originalWidth; |
|||
this.originalHeight = originalHeight; |
|||
this.mediaType = mediaType; |
|||
this.commentLikesEnabled = commentLikesEnabled; |
|||
this.commentsDisabled = commentsDisabled; |
|||
this.nextMaxId = nextMaxId; |
|||
this.commentCount = commentCount; |
|||
this.likeCount = likeCount; |
|||
this.hasLiked = hasLiked; |
|||
this.isReelMedia = isReelMedia; |
|||
this.videoVersions = videoVersions; |
|||
this.hasAudio = hasAudio; |
|||
this.videoDuration = videoDuration; |
|||
this.viewCount = viewCount; |
|||
this.caption = caption; |
|||
this.canViewerSave = canViewerSave; |
|||
this.audio = audio; |
|||
this.title = title; |
|||
this.carouselMedia = carouselMedia; |
|||
this.location = location; |
|||
this.usertags = usertags; |
|||
this.isSidecarChild = isSidecarChild; |
|||
this.hasViewerSaved = hasViewerSaved; |
|||
this.injected = injected; |
|||
this.endOfFeedDemarcator = endOfFeedDemarcator; |
|||
} |
|||
|
|||
public String getPk() { |
|||
return pk; |
|||
} |
|||
|
|||
public String getId() { |
|||
return id; |
|||
} |
|||
|
|||
public String getCode() { |
|||
return code; |
|||
} |
|||
|
|||
public long getTakenAt() { |
|||
return takenAt; |
|||
} |
|||
|
|||
@Nullable |
|||
public User getUser() { |
|||
return user; |
|||
} |
|||
|
|||
public boolean canViewerReshare() { |
|||
return canViewerReshare; |
|||
} |
|||
|
|||
public ImageVersions2 getImageVersions2() { |
|||
return imageVersions2; |
|||
} |
|||
|
|||
public int getOriginalWidth() { |
|||
return originalWidth; |
|||
} |
|||
|
|||
public int getOriginalHeight() { |
|||
return originalHeight; |
|||
} |
|||
|
|||
public MediaItemType getMediaType() { |
|||
return mediaType; |
|||
} |
|||
|
|||
public boolean isReelMedia() { |
|||
return isReelMedia; |
|||
} |
|||
|
|||
public List<VideoVersion> getVideoVersions() { |
|||
return videoVersions; |
|||
} |
|||
|
|||
public boolean isHasAudio() { |
|||
return hasAudio; |
|||
} |
|||
|
|||
public Caption getCaption() { |
|||
return caption; |
|||
} |
|||
|
|||
public Audio getAudio() { |
|||
return audio; |
|||
} |
|||
|
|||
public String getTitle() { |
|||
return title; |
|||
} |
|||
|
|||
public List<Media> getCarouselMedia() { |
|||
return carouselMedia; |
|||
} |
|||
|
|||
public boolean isCommentLikesEnabled() { |
|||
return commentLikesEnabled; |
|||
} |
|||
|
|||
public boolean isCommentsDisabled() { |
|||
return commentsDisabled; |
|||
} |
|||
|
|||
public long getNextMaxId() { |
|||
return nextMaxId; |
|||
} |
|||
|
|||
public long getCommentCount() { |
|||
return commentCount; |
|||
} |
|||
|
|||
public long getLikeCount() { |
|||
return likeCount; |
|||
} |
|||
|
|||
public boolean hasLiked() { |
|||
return hasLiked; |
|||
} |
|||
|
|||
public double getVideoDuration() { |
|||
return videoDuration; |
|||
} |
|||
|
|||
public long getViewCount() { |
|||
return viewCount; |
|||
} |
|||
|
|||
public boolean canViewerSave() { |
|||
return canViewerSave; |
|||
} |
|||
|
|||
public Location getLocation() { |
|||
return location; |
|||
} |
|||
|
|||
public Usertags getUsertags() { |
|||
return usertags; |
|||
} |
|||
|
|||
public void setIsSidecarChild(boolean isSidecarChild) { |
|||
this.isSidecarChild = isSidecarChild; |
|||
} |
|||
|
|||
public boolean isSidecarChild() { |
|||
return isSidecarChild; |
|||
} |
|||
|
|||
public boolean hasViewerSaved() { |
|||
return hasViewerSaved; |
|||
} |
|||
|
|||
public boolean isInjected() { |
|||
return injected != null; |
|||
} |
|||
|
|||
@Nullable |
|||
public String getDate() { |
|||
if (takenAt <= 0) { |
|||
return null; |
|||
} |
|||
if (dateString == null) { |
|||
dateString = Utils.datetimeParser.format(new Date(takenAt * 1000L)); |
|||
} |
|||
return dateString; |
|||
} |
|||
|
|||
public EndOfFeedDemarcator getEndOfFeedDemarcator() { |
|||
return endOfFeedDemarcator; |
|||
} |
|||
|
|||
public void setHasLiked(final boolean liked) { |
|||
this.hasLiked = liked; |
|||
} |
|||
|
|||
public void setLikeCount(final long likeCount) { |
|||
this.likeCount = likeCount; |
|||
} |
|||
|
|||
public void setHasViewerSaved(final boolean hasViewerSaved) { |
|||
this.hasViewerSaved = hasViewerSaved; |
|||
} |
|||
|
|||
public void setPostCaption(final String caption) { |
|||
Caption caption1 = getCaption(); |
|||
if (caption1 == null) { |
|||
final User user = getUser(); |
|||
if (user == null) return; |
|||
caption1 = new Caption(user.getPk(), caption); |
|||
this.caption = caption1; |
|||
return; |
|||
} |
|||
caption1.setText(caption); |
|||
} |
|||
|
|||
@Override |
|||
public boolean equals(final Object o) { |
|||
if (this == o) return true; |
|||
if (o == null || getClass() != o.getClass()) return false; |
|||
final Media media = (Media) o; |
|||
return takenAt == media.takenAt && |
|||
canViewerReshare == media.canViewerReshare && |
|||
commentLikesEnabled == media.commentLikesEnabled && |
|||
commentsDisabled == media.commentsDisabled && |
|||
nextMaxId == media.nextMaxId && |
|||
commentCount == media.commentCount && |
|||
originalWidth == media.originalWidth && |
|||
originalHeight == media.originalHeight && |
|||
likeCount == media.likeCount && |
|||
hasLiked == media.hasLiked && |
|||
isReelMedia == media.isReelMedia && |
|||
hasAudio == media.hasAudio && |
|||
Double.compare(media.videoDuration, videoDuration) == 0 && |
|||
viewCount == media.viewCount && |
|||
canViewerSave == media.canViewerSave && |
|||
isSidecarChild == media.isSidecarChild && |
|||
hasViewerSaved == media.hasViewerSaved && |
|||
Objects.equals(pk, media.pk) && |
|||
Objects.equals(id, media.id) && |
|||
Objects.equals(code, media.code) && |
|||
Objects.equals(user, media.user) && |
|||
mediaType == media.mediaType && |
|||
Objects.equals(imageVersions2, media.imageVersions2) && |
|||
Objects.equals(videoVersions, media.videoVersions) && |
|||
Objects.equals(caption, media.caption) && |
|||
Objects.equals(audio, media.audio) && |
|||
Objects.equals(title, media.title) && |
|||
Objects.equals(location, media.location) && |
|||
Objects.equals(usertags, media.usertags) && |
|||
Objects.equals(carouselMedia, media.carouselMedia) && |
|||
Objects.equals(injected, media.injected) && |
|||
Objects.equals(endOfFeedDemarcator, media.endOfFeedDemarcator) && |
|||
Objects.equals(dateString, media.dateString); |
|||
} |
|||
|
|||
@Override |
|||
public int hashCode() { |
|||
return Objects.hash(pk, id, code, takenAt, user, mediaType, canViewerReshare, commentLikesEnabled, commentsDisabled, nextMaxId, commentCount, |
|||
imageVersions2, originalWidth, originalHeight, likeCount, hasLiked, isReelMedia, videoVersions, hasAudio, videoDuration, |
|||
viewCount, caption, canViewerSave, audio, title, location, usertags, carouselMedia, isSidecarChild, hasViewerSaved, |
|||
injected, endOfFeedDemarcator, dateString); |
|||
} |
|||
} |
@ -0,0 +1,71 @@ |
|||
package awais.instagrabber.repositories.responses |
|||
|
|||
import awais.instagrabber.models.enums.MediaItemType |
|||
import awais.instagrabber.repositories.responses.feed.EndOfFeedDemarcator |
|||
import awais.instagrabber.utils.Utils |
|||
import java.io.Serializable |
|||
import java.util.* |
|||
|
|||
data class Media( |
|||
val pk: String? = null, |
|||
val id: String? = null, |
|||
val code: String? = null, |
|||
val takenAt: Long = -1, |
|||
val user: User? = null, |
|||
val canViewerReshare: Boolean = false, |
|||
val imageVersions2: ImageVersions2? = null, |
|||
val originalWidth: Int = 0, |
|||
val originalHeight: Int = 0, |
|||
val mediaType: MediaItemType? = null, |
|||
val commentLikesEnabled: Boolean = false, |
|||
val commentsDisabled: Boolean = false, |
|||
val nextMaxId: Long = -1, |
|||
val commentCount: Long = 0, |
|||
var likeCount: Long = 0, |
|||
var hasLiked: Boolean = false, |
|||
val isReelMedia: Boolean = false, |
|||
val videoVersions: List<VideoVersion>? = null, |
|||
val hasAudio: Boolean = false, |
|||
val videoDuration: Double = 0.0, |
|||
val viewCount: Long = 0, |
|||
var caption: Caption? = null, |
|||
val canViewerSave: Boolean = false, |
|||
val audio: Audio? = null, |
|||
val title: String? = null, |
|||
val carouselMedia: List<Media>? = null, |
|||
val location: Location? = null, |
|||
val usertags: Usertags? = null, |
|||
var isSidecarChild: Boolean = false, |
|||
var hasViewerSaved: Boolean = false, |
|||
private val injected: Map<String, Any>? = null, |
|||
val endOfFeedDemarcator: EndOfFeedDemarcator? = null |
|||
) : Serializable { |
|||
private var dateString: String? = null |
|||
|
|||
fun isInjected(): Boolean { |
|||
return injected != null |
|||
} |
|||
|
|||
// TODO use extension once all usages are converted to kotlin |
|||
// val date: String by lazy { |
|||
// if (takenAt <= 0) "" else Utils.datetimeParser.format(Date(takenAt * 1000L)) |
|||
// } |
|||
val date: String |
|||
get() { |
|||
if (takenAt <= 0) return "" |
|||
if (dateString != null) return dateString ?: "" |
|||
dateString = Utils.datetimeParser.format(Date(takenAt * 1000L)) |
|||
return dateString ?: "" |
|||
} |
|||
|
|||
fun setPostCaption(caption: String?) { |
|||
var caption1: Caption? = this.caption |
|||
if (caption1 == null) { |
|||
user ?: return |
|||
caption1 = Caption(userId = user.pk, text = caption ?: "") |
|||
this.caption = caption1 |
|||
return |
|||
} |
|||
caption1.text = caption ?: "" |
|||
} |
|||
} |
@ -1,306 +0,0 @@ |
|||
package awais.instagrabber.repositories.responses.directmessages; |
|||
|
|||
import androidx.annotation.NonNull; |
|||
|
|||
import java.io.Serializable; |
|||
import java.time.Instant; |
|||
import java.time.LocalDateTime; |
|||
import java.time.ZoneId; |
|||
import java.util.Date; |
|||
import java.util.List; |
|||
import java.util.Objects; |
|||
|
|||
import awais.instagrabber.models.enums.DirectItemType; |
|||
import awais.instagrabber.repositories.responses.Location; |
|||
import awais.instagrabber.repositories.responses.Media; |
|||
import awais.instagrabber.repositories.responses.User; |
|||
|
|||
public class DirectItem implements Cloneable, Serializable { |
|||
private String itemId; |
|||
private final long userId; |
|||
private long timestamp; |
|||
private final DirectItemType itemType; |
|||
private final String text; |
|||
private final String like; |
|||
private final DirectItemLink link; |
|||
private final String clientContext; |
|||
private final DirectItemReelShare reelShare; |
|||
private final DirectItemStoryShare storyShare; |
|||
private final Media mediaShare; |
|||
private final User profile; |
|||
private final DirectItemPlaceholder placeholder; |
|||
private final Media media; |
|||
private final List<Media> previewMedias; |
|||
private final DirectItemActionLog actionLog; |
|||
private final DirectItemVideoCallEvent videoCallEvent; |
|||
private final DirectItemClip clip; |
|||
private final DirectItemFelixShare felixShare; |
|||
private final DirectItemVisualMedia visualMedia; |
|||
private final DirectItemAnimatedMedia animatedMedia; |
|||
private DirectItemReactions reactions; |
|||
private final DirectItem repliedToMessage; |
|||
private final DirectItemVoiceMedia voiceMedia; |
|||
private final Location location; |
|||
private final DirectItemXma xma; |
|||
private final int hideInThread; |
|||
private Date date; |
|||
private boolean isPending; |
|||
private final boolean showForwardAttribution; |
|||
private LocalDateTime localDateTime; |
|||
|
|||
public DirectItem(final String itemId, |
|||
final long userId, |
|||
final long timestamp, |
|||
final DirectItemType itemType, |
|||
final String text, |
|||
final String like, |
|||
final DirectItemLink link, |
|||
final String clientContext, |
|||
final DirectItemReelShare reelShare, |
|||
final DirectItemStoryShare storyShare, |
|||
final Media mediaShare, |
|||
final User profile, |
|||
final DirectItemPlaceholder placeholder, |
|||
final Media media, |
|||
final List<Media> previewMedias, |
|||
final DirectItemActionLog actionLog, |
|||
final DirectItemVideoCallEvent videoCallEvent, |
|||
final DirectItemClip clip, |
|||
final DirectItemFelixShare felixShare, |
|||
final DirectItemVisualMedia visualMedia, |
|||
final DirectItemAnimatedMedia animatedMedia, |
|||
final DirectItemReactions reactions, |
|||
final DirectItem repliedToMessage, |
|||
final DirectItemVoiceMedia voiceMedia, |
|||
final Location location, |
|||
final DirectItemXma xma, |
|||
final int hideInThread, |
|||
final boolean showForwardAttribution) { |
|||
this.itemId = itemId; |
|||
this.userId = userId; |
|||
this.timestamp = timestamp; |
|||
this.itemType = itemType; |
|||
this.text = text; |
|||
this.like = like; |
|||
this.link = link; |
|||
this.clientContext = clientContext; |
|||
this.reelShare = reelShare; |
|||
this.storyShare = storyShare; |
|||
this.mediaShare = mediaShare; |
|||
this.profile = profile; |
|||
this.placeholder = placeholder; |
|||
this.media = media; |
|||
this.previewMedias = previewMedias; |
|||
this.actionLog = actionLog; |
|||
this.videoCallEvent = videoCallEvent; |
|||
this.clip = clip; |
|||
this.felixShare = felixShare; |
|||
this.visualMedia = visualMedia; |
|||
this.animatedMedia = animatedMedia; |
|||
this.reactions = reactions; |
|||
this.repliedToMessage = repliedToMessage; |
|||
this.voiceMedia = voiceMedia; |
|||
this.location = location; |
|||
this.xma = xma; |
|||
this.hideInThread = hideInThread; |
|||
this.showForwardAttribution = showForwardAttribution; |
|||
} |
|||
|
|||
public String getItemId() { |
|||
return itemId; |
|||
} |
|||
|
|||
public long getUserId() { |
|||
return userId; |
|||
} |
|||
|
|||
public long getTimestamp() { |
|||
return timestamp; |
|||
} |
|||
|
|||
public void setTimestamp(final long timestamp) { |
|||
this.timestamp = timestamp; |
|||
this.date = null; |
|||
} |
|||
|
|||
public DirectItemType getItemType() { |
|||
return itemType; |
|||
} |
|||
|
|||
public String getText() { |
|||
return text; |
|||
} |
|||
|
|||
public DirectItemLink getLink() { |
|||
return link; |
|||
} |
|||
|
|||
public String getClientContext() { |
|||
return clientContext; |
|||
} |
|||
|
|||
public DirectItemReelShare getReelShare() { |
|||
return reelShare; |
|||
} |
|||
|
|||
public User getProfile() { |
|||
return profile; |
|||
} |
|||
|
|||
public DirectItemPlaceholder getPlaceholder() { |
|||
return placeholder; |
|||
} |
|||
|
|||
public Media getMediaShare() { |
|||
return mediaShare; |
|||
} |
|||
|
|||
public String getLike() { |
|||
return like; |
|||
} |
|||
|
|||
public Media getMedia() { |
|||
return media; |
|||
} |
|||
|
|||
public List<Media> getPreviewMedias() { |
|||
return previewMedias; |
|||
} |
|||
|
|||
public DirectItemStoryShare getStoryShare() { |
|||
return storyShare; |
|||
} |
|||
|
|||
public DirectItemActionLog getActionLog() { |
|||
return actionLog; |
|||
} |
|||
|
|||
public DirectItemVideoCallEvent getVideoCallEvent() { |
|||
return videoCallEvent; |
|||
} |
|||
|
|||
public DirectItemClip getClip() { |
|||
return clip; |
|||
} |
|||
|
|||
public DirectItemFelixShare getFelixShare() { |
|||
return felixShare; |
|||
} |
|||
|
|||
public DirectItemVisualMedia getVisualMedia() { |
|||
return visualMedia; |
|||
} |
|||
|
|||
public DirectItemAnimatedMedia getAnimatedMedia() { |
|||
return animatedMedia; |
|||
} |
|||
|
|||
public DirectItemReactions getReactions() { |
|||
return reactions; |
|||
} |
|||
|
|||
public DirectItem getRepliedToMessage() { |
|||
return repliedToMessage; |
|||
} |
|||
|
|||
public DirectItemVoiceMedia getVoiceMedia() { |
|||
return voiceMedia; |
|||
} |
|||
|
|||
public Location getLocation() { |
|||
return location; |
|||
} |
|||
|
|||
public DirectItemXma getXma() { |
|||
return xma; |
|||
} |
|||
|
|||
public int getHideInThread() { |
|||
return hideInThread; |
|||
} |
|||
|
|||
public Date getDate() { |
|||
if (date == null) { |
|||
date = new Date(timestamp / 1000); |
|||
} |
|||
return date; |
|||
} |
|||
|
|||
public LocalDateTime getLocalDateTime() { |
|||
if (localDateTime == null) { |
|||
localDateTime = Instant.ofEpochMilli(timestamp / 1000).atZone(ZoneId.systemDefault()).toLocalDateTime(); |
|||
} |
|||
return localDateTime; |
|||
} |
|||
|
|||
public void setItemId(final String itemId) { |
|||
this.itemId = itemId; |
|||
} |
|||
|
|||
public boolean isPending() { |
|||
return isPending; |
|||
} |
|||
|
|||
public void setPending(final boolean pending) { |
|||
isPending = pending; |
|||
} |
|||
|
|||
public void setReactions(final DirectItemReactions reactions) { |
|||
this.reactions = reactions; |
|||
} |
|||
|
|||
public boolean showForwardAttribution() { |
|||
return showForwardAttribution; |
|||
} |
|||
|
|||
@NonNull |
|||
@Override |
|||
public Object clone() throws CloneNotSupportedException { |
|||
return super.clone(); |
|||
} |
|||
|
|||
@Override |
|||
public boolean equals(final Object o) { |
|||
if (this == o) return true; |
|||
if (o == null || getClass() != o.getClass()) return false; |
|||
final DirectItem that = (DirectItem) o; |
|||
return userId == that.userId && |
|||
timestamp == that.timestamp && |
|||
hideInThread == that.hideInThread && |
|||
isPending == that.isPending && |
|||
showForwardAttribution == that.showForwardAttribution && |
|||
Objects.equals(itemId, that.itemId) && |
|||
itemType == that.itemType && |
|||
Objects.equals(text, that.text) && |
|||
Objects.equals(like, that.like) && |
|||
Objects.equals(link, that.link) && |
|||
Objects.equals(clientContext, that.clientContext) && |
|||
Objects.equals(reelShare, that.reelShare) && |
|||
Objects.equals(storyShare, that.storyShare) && |
|||
Objects.equals(mediaShare, that.mediaShare) && |
|||
Objects.equals(profile, that.profile) && |
|||
Objects.equals(placeholder, that.placeholder) && |
|||
Objects.equals(media, that.media) && |
|||
Objects.equals(previewMedias, that.previewMedias) && |
|||
Objects.equals(actionLog, that.actionLog) && |
|||
Objects.equals(videoCallEvent, that.videoCallEvent) && |
|||
Objects.equals(clip, that.clip) && |
|||
Objects.equals(felixShare, that.felixShare) && |
|||
Objects.equals(visualMedia, that.visualMedia) && |
|||
Objects.equals(animatedMedia, that.animatedMedia) && |
|||
Objects.equals(reactions, that.reactions) && |
|||
Objects.equals(repliedToMessage, that.repliedToMessage) && |
|||
Objects.equals(voiceMedia, that.voiceMedia) && |
|||
Objects.equals(location, that.location) && |
|||
Objects.equals(xma, that.xma) && |
|||
Objects.equals(date, that.date); |
|||
} |
|||
|
|||
@Override |
|||
public int hashCode() { |
|||
return Objects |
|||
.hash(itemId, userId, timestamp, itemType, text, like, link, clientContext, reelShare, storyShare, mediaShare, profile, placeholder, |
|||
media, previewMedias, actionLog, videoCallEvent, clip, felixShare, visualMedia, animatedMedia, reactions, repliedToMessage, |
|||
voiceMedia, location, xma, hideInThread, date, isPending, showForwardAttribution); |
|||
} |
|||
} |
@ -0,0 +1,74 @@ |
|||
package awais.instagrabber.repositories.responses.directmessages |
|||
|
|||
import awais.instagrabber.models.enums.DirectItemType |
|||
import awais.instagrabber.repositories.responses.Location |
|||
import awais.instagrabber.repositories.responses.Media |
|||
import awais.instagrabber.repositories.responses.User |
|||
import java.io.Serializable |
|||
import java.time.Instant |
|||
import java.time.LocalDateTime |
|||
import java.time.ZoneId |
|||
import java.util.* |
|||
|
|||
data class DirectItem( |
|||
var itemId: String? = null, |
|||
val userId: Long = 0, |
|||
private var timestamp: Long = 0, |
|||
val itemType: DirectItemType? = null, |
|||
val text: String? = null, |
|||
val like: String? = null, |
|||
val link: DirectItemLink? = null, |
|||
val clientContext: String? = null, |
|||
val reelShare: DirectItemReelShare? = null, |
|||
val storyShare: DirectItemStoryShare? = null, |
|||
val mediaShare: Media? = null, |
|||
val profile: User? = null, |
|||
val placeholder: DirectItemPlaceholder? = null, |
|||
val media: Media? = null, |
|||
val previewMedias: List<Media>? = null, |
|||
val actionLog: DirectItemActionLog? = null, |
|||
val videoCallEvent: DirectItemVideoCallEvent? = null, |
|||
val clip: DirectItemClip? = null, |
|||
val felixShare: DirectItemFelixShare? = null, |
|||
val visualMedia: DirectItemVisualMedia? = null, |
|||
val animatedMedia: DirectItemAnimatedMedia? = null, |
|||
var reactions: DirectItemReactions? = null, |
|||
val repliedToMessage: DirectItem? = null, |
|||
val voiceMedia: DirectItemVoiceMedia? = null, |
|||
val location: Location? = null, |
|||
val xma: DirectItemXma? = null, |
|||
val hideInThread: Int? = 0, |
|||
val showForwardAttribution: Boolean = false |
|||
) : Cloneable, Serializable { |
|||
private var date: Date? = null |
|||
var isPending = false |
|||
var localDateTime: LocalDateTime? = null |
|||
get() { |
|||
if (field == null) { |
|||
field = Instant.ofEpochMilli(timestamp / 1000).atZone(ZoneId.systemDefault()).toLocalDateTime() |
|||
} |
|||
return field |
|||
} |
|||
private set |
|||
|
|||
fun getTimestamp(): Long { |
|||
return timestamp |
|||
} |
|||
|
|||
fun setTimestamp(timestamp: Long) { |
|||
this.timestamp = timestamp |
|||
date = null |
|||
} |
|||
|
|||
fun getDate(): Date? { |
|||
if (date == null) { |
|||
date = Date(timestamp / 1000) |
|||
} |
|||
return date |
|||
} |
|||
|
|||
@Throws(CloneNotSupportedException::class) |
|||
public override fun clone(): Any { |
|||
return super.clone() |
|||
} |
|||
} |
@ -0,0 +1,41 @@ |
|||
package awais.instagrabber.repositories.serializers; |
|||
|
|||
import android.util.Log; |
|||
|
|||
import com.google.gson.Gson; |
|||
import com.google.gson.JsonDeserializationContext; |
|||
import com.google.gson.JsonDeserializer; |
|||
import com.google.gson.JsonElement; |
|||
import com.google.gson.JsonObject; |
|||
import com.google.gson.JsonParseException; |
|||
|
|||
import java.lang.reflect.Type; |
|||
|
|||
import awais.instagrabber.repositories.responses.Caption; |
|||
|
|||
public class CaptionDeserializer implements JsonDeserializer<Caption> { |
|||
|
|||
private static final String TAG = CaptionDeserializer.class.getSimpleName(); |
|||
|
|||
@Override |
|||
public Caption deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { |
|||
final Caption caption = new Gson().fromJson(json, Caption.class); |
|||
final JsonObject jsonObject = json.getAsJsonObject(); |
|||
if (jsonObject.has("pk")) { |
|||
JsonElement elem = jsonObject.get("pk"); |
|||
if (elem != null && !elem.isJsonNull()) { |
|||
if (!elem.isJsonPrimitive()) return caption; |
|||
String pkString = elem.getAsString(); |
|||
if (pkString.contains("_")) { |
|||
pkString = pkString.substring(0, pkString.indexOf("_")); |
|||
} |
|||
try { |
|||
caption.setPk(Long.parseLong(pkString)); |
|||
} catch (NumberFormatException e) { |
|||
Log.e(TAG, "deserialize: ", e); |
|||
} |
|||
} |
|||
} |
|||
return caption; |
|||
} |
|||
} |
@ -1,264 +0,0 @@ |
|||
package awais.instagrabber.utils; |
|||
|
|||
import android.net.Uri; |
|||
|
|||
import java.util.Collections; |
|||
import java.util.List; |
|||
import java.util.UUID; |
|||
|
|||
import awais.instagrabber.models.enums.DirectItemType; |
|||
import awais.instagrabber.models.enums.MediaItemType; |
|||
import awais.instagrabber.repositories.responses.AnimatedMediaImages; |
|||
import awais.instagrabber.repositories.responses.Audio; |
|||
import awais.instagrabber.repositories.responses.ImageVersions2; |
|||
import awais.instagrabber.repositories.responses.Media; |
|||
import awais.instagrabber.repositories.responses.MediaCandidate; |
|||
import awais.instagrabber.repositories.responses.VideoVersion; |
|||
import awais.instagrabber.repositories.responses.directmessages.DirectItem; |
|||
import awais.instagrabber.repositories.responses.directmessages.DirectItemAnimatedMedia; |
|||
import awais.instagrabber.repositories.responses.directmessages.DirectItemVoiceMedia; |
|||
import awais.instagrabber.repositories.responses.giphy.GiphyGif; |
|||
|
|||
public final class DirectItemFactory { |
|||
|
|||
public static DirectItem createText(final long userId, |
|||
final String clientContext, |
|||
final String text, |
|||
final DirectItem repliedToMessage) { |
|||
return new DirectItem( |
|||
UUID.randomUUID().toString(), |
|||
userId, |
|||
System.currentTimeMillis() * 1000, |
|||
DirectItemType.TEXT, |
|||
text, |
|||
null, |
|||
null, |
|||
clientContext, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
repliedToMessage, |
|||
null, |
|||
null, |
|||
null, |
|||
0, |
|||
false); |
|||
} |
|||
|
|||
public static DirectItem createImageOrVideo(final long userId, |
|||
final String clientContext, |
|||
final Uri uri, |
|||
final int width, |
|||
final int height, |
|||
final boolean isVideo) { |
|||
final ImageVersions2 imageVersions2 = new ImageVersions2(Collections.singletonList(new MediaCandidate(width, height, uri.toString()))); |
|||
List<VideoVersion> videoVersions = null; |
|||
if (isVideo) { |
|||
final VideoVersion videoVersion = new VideoVersion( |
|||
null, |
|||
null, |
|||
width, |
|||
height, |
|||
uri.toString() |
|||
); |
|||
videoVersions = Collections.singletonList(videoVersion); |
|||
} |
|||
final Media media = new Media( |
|||
null, |
|||
UUID.randomUUID().toString(), |
|||
null, |
|||
-1, |
|||
null, |
|||
false, |
|||
imageVersions2, |
|||
width, |
|||
height, |
|||
isVideo ? MediaItemType.MEDIA_TYPE_VIDEO : MediaItemType.MEDIA_TYPE_IMAGE, |
|||
false, |
|||
false, |
|||
-1, |
|||
-1, |
|||
-1, |
|||
false, |
|||
false, |
|||
videoVersions, |
|||
false, |
|||
0f, |
|||
0, |
|||
null, |
|||
false, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
false, |
|||
false, |
|||
null, |
|||
null); |
|||
return new DirectItem( |
|||
UUID.randomUUID().toString(), |
|||
userId, |
|||
System.currentTimeMillis() * 1000, |
|||
DirectItemType.MEDIA, |
|||
null, |
|||
null, |
|||
null, |
|||
clientContext, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
media, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
0, |
|||
false); |
|||
} |
|||
|
|||
public static DirectItem createVoice(final long userId, |
|||
final String clientContext, |
|||
final Uri uri, |
|||
final long duration, |
|||
final List<Float> waveform, |
|||
final int samplingFreq) { |
|||
final Audio audio = new Audio( |
|||
uri.toString(), |
|||
duration, |
|||
waveform, |
|||
samplingFreq, |
|||
0 |
|||
); |
|||
final Media media = new Media( |
|||
null, |
|||
UUID.randomUUID().toString(), |
|||
null, |
|||
-1, |
|||
null, |
|||
false, |
|||
null, |
|||
0, |
|||
0, |
|||
MediaItemType.MEDIA_TYPE_VOICE, |
|||
false, |
|||
false, |
|||
-1, |
|||
0, |
|||
0, |
|||
false, |
|||
false, |
|||
null, |
|||
false, |
|||
0f, |
|||
0, |
|||
null, |
|||
false, |
|||
audio, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
false, |
|||
false, |
|||
null, |
|||
null); |
|||
final DirectItemVoiceMedia voiceMedia = new DirectItemVoiceMedia( |
|||
media, |
|||
0, |
|||
"permanent" |
|||
); |
|||
return new DirectItem( |
|||
UUID.randomUUID().toString(), |
|||
userId, |
|||
System.currentTimeMillis() * 1000, |
|||
DirectItemType.VOICE_MEDIA, |
|||
null, |
|||
null, |
|||
null, |
|||
clientContext, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
media, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
voiceMedia, |
|||
null, |
|||
null, |
|||
0, |
|||
false); |
|||
} |
|||
|
|||
public static DirectItem createAnimatedMedia(final long userId, |
|||
final String clientContext, |
|||
final GiphyGif giphyGif) { |
|||
final AnimatedMediaImages animatedImages = new AnimatedMediaImages(giphyGif.getImages().getFixedHeight()); |
|||
final DirectItemAnimatedMedia animateMedia = new DirectItemAnimatedMedia( |
|||
giphyGif.getId(), |
|||
animatedImages, |
|||
false, |
|||
giphyGif.isSticker() |
|||
); |
|||
return new DirectItem( |
|||
UUID.randomUUID().toString(), |
|||
userId, |
|||
System.currentTimeMillis() * 1000, |
|||
DirectItemType.ANIMATED_MEDIA, |
|||
null, |
|||
null, |
|||
null, |
|||
clientContext, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
animateMedia, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
null, |
|||
0, |
|||
false |
|||
); |
|||
} |
|||
} |
@ -0,0 +1,126 @@ |
|||
@file:JvmName("DirectItemFactory") |
|||
|
|||
package awais.instagrabber.utils |
|||
|
|||
import android.net.Uri |
|||
import awais.instagrabber.models.enums.DirectItemType |
|||
import awais.instagrabber.models.enums.MediaItemType |
|||
import awais.instagrabber.repositories.responses.* |
|||
import awais.instagrabber.repositories.responses.directmessages.DirectItem |
|||
import awais.instagrabber.repositories.responses.directmessages.DirectItemAnimatedMedia |
|||
import awais.instagrabber.repositories.responses.directmessages.DirectItemVoiceMedia |
|||
import awais.instagrabber.repositories.responses.giphy.GiphyGif |
|||
import java.util.* |
|||
|
|||
fun createText( |
|||
userId: Long, |
|||
clientContext: String?, |
|||
text: String?, |
|||
repliedToMessage: DirectItem? |
|||
): DirectItem { |
|||
return DirectItem( |
|||
itemId = UUID.randomUUID().toString(), |
|||
userId = userId, |
|||
timestamp = System.currentTimeMillis() * 1000, |
|||
itemType = DirectItemType.TEXT, |
|||
text = text, |
|||
clientContext = clientContext, |
|||
repliedToMessage = repliedToMessage, |
|||
) |
|||
} |
|||
|
|||
fun createImageOrVideo( |
|||
userId: Long, |
|||
clientContext: String?, |
|||
uri: Uri, |
|||
width: Int, |
|||
height: Int, |
|||
isVideo: Boolean |
|||
): DirectItem { |
|||
val imageVersions2 = ImageVersions2(listOf(MediaCandidate(width, height, uri.toString()))) |
|||
var videoVersions: List<VideoVersion>? = null |
|||
if (isVideo) { |
|||
val videoVersion = VideoVersion( |
|||
null, |
|||
null, |
|||
width, |
|||
height, |
|||
uri.toString() |
|||
) |
|||
videoVersions = listOf(videoVersion) |
|||
} |
|||
val media = Media( |
|||
id = UUID.randomUUID().toString(), |
|||
imageVersions2 = imageVersions2, |
|||
originalWidth = width, |
|||
originalHeight = height, |
|||
mediaType = if (isVideo) MediaItemType.MEDIA_TYPE_VIDEO else MediaItemType.MEDIA_TYPE_IMAGE, |
|||
videoVersions = videoVersions, |
|||
) |
|||
return DirectItem( |
|||
itemId = UUID.randomUUID().toString(), |
|||
userId = userId, |
|||
timestamp = System.currentTimeMillis() * 1000, |
|||
itemType = DirectItemType.MEDIA, |
|||
clientContext = clientContext, |
|||
media = media, |
|||
) |
|||
} |
|||
|
|||
fun createVoice( |
|||
userId: Long, |
|||
clientContext: String?, |
|||
uri: Uri, |
|||
duration: Long, |
|||
waveform: List<Float>?, |
|||
samplingFreq: Int |
|||
): DirectItem { |
|||
val audio = Audio( |
|||
uri.toString(), |
|||
duration, |
|||
waveform, |
|||
samplingFreq, |
|||
0 |
|||
) |
|||
val media = Media( |
|||
id = UUID.randomUUID().toString(), |
|||
mediaType = MediaItemType.MEDIA_TYPE_VOICE, |
|||
audio = audio, |
|||
) |
|||
val voiceMedia = DirectItemVoiceMedia( |
|||
media, |
|||
0, |
|||
"permanent" |
|||
) |
|||
return DirectItem( |
|||
itemId = UUID.randomUUID().toString(), |
|||
userId = userId, |
|||
timestamp = System.currentTimeMillis() * 1000, |
|||
itemType = DirectItemType.VOICE_MEDIA, |
|||
clientContext = clientContext, |
|||
media = media, |
|||
voiceMedia = voiceMedia, |
|||
) |
|||
} |
|||
|
|||
fun createAnimatedMedia( |
|||
userId: Long, |
|||
clientContext: String?, |
|||
giphyGif: GiphyGif |
|||
): DirectItem { |
|||
val animatedImages = AnimatedMediaImages(giphyGif.images.fixedHeight) |
|||
val animateMedia = DirectItemAnimatedMedia( |
|||
giphyGif.id, |
|||
animatedImages, |
|||
false, |
|||
giphyGif.isSticker |
|||
) |
|||
return DirectItem( |
|||
itemId = UUID.randomUUID().toString(), |
|||
userId = userId, |
|||
timestamp = System.currentTimeMillis() * 1000, |
|||
itemType = DirectItemType.ANIMATED_MEDIA, |
|||
clientContext = clientContext, |
|||
animatedMedia = animateMedia, |
|||
) |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue