2017-01-20 19:09:10 +11:00
|
|
|
/* Copyright 2017 Andrew Dawson
|
|
|
|
*
|
|
|
|
* This file is part of Tusky.
|
|
|
|
*
|
|
|
|
* Tusky is free software: you can redistribute it and/or modify it under the terms of the GNU
|
|
|
|
* General Public License as published by the Free Software Foundation, either version 3 of the
|
|
|
|
* License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
|
|
|
|
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
|
|
|
* Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License along with Tusky. If not, see
|
|
|
|
* <http://www.gnu.org/licenses/>. */
|
|
|
|
|
2017-01-08 09:24:02 +11:00
|
|
|
package com.keylesspalace.tusky;
|
|
|
|
|
|
|
|
import android.support.annotation.Nullable;
|
|
|
|
|
2017-01-25 15:35:54 +11:00
|
|
|
import org.json.JSONArray;
|
|
|
|
import org.json.JSONException;
|
|
|
|
import org.json.JSONObject;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
|
2017-02-23 06:13:51 +11:00
|
|
|
class Notification {
|
|
|
|
enum Type {
|
2017-01-08 09:24:02 +11:00
|
|
|
MENTION,
|
|
|
|
REBLOG,
|
|
|
|
FAVOURITE,
|
|
|
|
FOLLOW,
|
|
|
|
}
|
|
|
|
private Type type;
|
|
|
|
private String id;
|
|
|
|
private String displayName;
|
2017-02-27 12:14:13 +11:00
|
|
|
private String username;
|
|
|
|
private String avatar;
|
|
|
|
private String accountId;
|
2017-01-08 09:24:02 +11:00
|
|
|
/** Which of the user's statuses has been mentioned, reblogged, or favourited. */
|
|
|
|
private Status status;
|
|
|
|
|
2017-02-27 12:14:13 +11:00
|
|
|
private Notification(Type type, String id, String displayName, String username, String avatar,
|
|
|
|
String accountId) {
|
2017-01-08 09:24:02 +11:00
|
|
|
this.type = type;
|
|
|
|
this.id = id;
|
|
|
|
this.displayName = displayName;
|
2017-02-27 12:14:13 +11:00
|
|
|
this.username = username;
|
|
|
|
this.avatar = avatar;
|
|
|
|
this.accountId = accountId;
|
2017-01-08 09:24:02 +11:00
|
|
|
}
|
|
|
|
|
2017-02-23 06:13:51 +11:00
|
|
|
Type getType() {
|
2017-01-08 09:24:02 +11:00
|
|
|
return type;
|
|
|
|
}
|
|
|
|
|
2017-02-23 06:13:51 +11:00
|
|
|
String getId() {
|
2017-01-08 09:24:02 +11:00
|
|
|
return id;
|
|
|
|
}
|
|
|
|
|
2017-02-23 06:13:51 +11:00
|
|
|
String getDisplayName() {
|
2017-01-08 09:24:02 +11:00
|
|
|
return displayName;
|
|
|
|
}
|
|
|
|
|
2017-02-27 12:14:13 +11:00
|
|
|
String getUsername() {
|
|
|
|
return username;
|
|
|
|
}
|
|
|
|
|
|
|
|
String getAvatar() {
|
|
|
|
return avatar;
|
|
|
|
}
|
|
|
|
|
|
|
|
String getAccountId() {
|
|
|
|
return accountId;
|
|
|
|
}
|
|
|
|
|
2017-02-23 06:13:51 +11:00
|
|
|
@Nullable Status getStatus() {
|
2017-01-08 09:24:02 +11:00
|
|
|
return status;
|
|
|
|
}
|
|
|
|
|
2017-02-23 06:13:51 +11:00
|
|
|
void setStatus(Status status) {
|
2017-01-08 09:24:02 +11:00
|
|
|
this.status = status;
|
|
|
|
}
|
2017-01-23 16:19:30 +11:00
|
|
|
|
2017-02-23 06:13:51 +11:00
|
|
|
private boolean hasStatusType() {
|
2017-01-23 16:19:30 +11:00
|
|
|
return type == Type.MENTION
|
|
|
|
|| type == Type.FAVOURITE
|
|
|
|
|| type == Type.REBLOG;
|
|
|
|
}
|
2017-01-25 15:35:54 +11:00
|
|
|
|
2017-02-23 06:13:51 +11:00
|
|
|
static List<Notification> parse(JSONArray array) throws JSONException {
|
2017-01-25 15:35:54 +11:00
|
|
|
List<Notification> notifications = new ArrayList<>();
|
|
|
|
for (int i = 0; i < array.length(); i++) {
|
|
|
|
JSONObject object = array.getJSONObject(i);
|
|
|
|
String id = object.getString("id");
|
|
|
|
Notification.Type type = Notification.Type.valueOf(
|
|
|
|
object.getString("type").toUpperCase());
|
|
|
|
JSONObject account = object.getJSONObject("account");
|
|
|
|
String displayName = account.getString("display_name");
|
|
|
|
if (displayName.isEmpty()) {
|
|
|
|
displayName = account.getString("username");
|
|
|
|
}
|
2017-02-27 12:14:13 +11:00
|
|
|
String username = account.getString("acct");
|
|
|
|
String avatar = account.getString("avatar");
|
|
|
|
String accountId = account.getString("id");
|
|
|
|
Notification notification = new Notification(type, id, displayName, username, avatar,
|
|
|
|
accountId);
|
2017-01-25 15:35:54 +11:00
|
|
|
if (notification.hasStatusType()) {
|
|
|
|
JSONObject statusObject = object.getJSONObject("status");
|
|
|
|
Status status = Status.parse(statusObject, false);
|
|
|
|
notification.setStatus(status);
|
|
|
|
}
|
|
|
|
notifications.add(notification);
|
|
|
|
}
|
|
|
|
return notifications;
|
|
|
|
}
|
2017-02-08 08:47:05 +11:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public int hashCode() {
|
|
|
|
return id.hashCode();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean equals(Object other) {
|
|
|
|
if (this.id == null) {
|
|
|
|
return this == other;
|
|
|
|
} else if (!(other instanceof Notification)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
Notification notification = (Notification) other;
|
|
|
|
return notification.getId().equals(this.id);
|
|
|
|
}
|
2017-01-08 09:24:02 +11:00
|
|
|
}
|