diff options
Diffstat (limited to 'app/src/main/java/fr/gouv/etalab/mastodon/client')
3 files changed, 142 insertions, 35 deletions
diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java index 254db6b55..b95181034 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java @@ -120,7 +120,9 @@ public class API { PEERTUBECOMMENT, PEERTUBEREPLY, PEERTUBEDELETECOMMENT, - PEERTUBEDELETEVIDEO + PEERTUBEDELETEVIDEO, + UPDATESERVERSCHEDULE, + DELETESCHEDULED } public enum accountPrivacy { @@ -1856,33 +1858,12 @@ public class API { * @param status Status object related to the status * @return APIResponse */ - public APIResponse scheduledAction(String call, Status status, String max_id){ + public APIResponse scheduledAction(String call, Status status, String max_id, String targetedId){ HashMap<String, String> params = new HashMap<>(); if( call.equals("PUT")){ - try { - params.put("status", URLEncoder.encode(status.getContent(), "UTF-8")); - } catch (UnsupportedEncodingException e) { - params.put("status", status.getContent()); - } - if( status.getIn_reply_to_id() != null) - params.put("in_reply_to_id", status.getIn_reply_to_id()); - if( status.getMedia_attachments() != null && status.getMedia_attachments().size() > 0 ) { - StringBuilder parameters = new StringBuilder(); - for(Attachment attachment: status.getMedia_attachments()) - parameters.append("media_ids[]=").append(attachment.getId()).append("&"); - parameters = new StringBuilder(parameters.substring(0, parameters.length() - 1).substring(12)); - params.put("media_ids[]", parameters.toString()); - } - if( status.isSensitive()) - params.put("sensitive", Boolean.toString(status.isSensitive())); - if( status.getSpoiler_text() != null) - try { - params.put("spoiler_text", URLEncoder.encode(status.getSpoiler_text(), "UTF-8")); - } catch (UnsupportedEncodingException e) { - params.put("spoiler_text", status.getSpoiler_text()); - } - params.put("visibility", status.getVisibility()); + if( status.getScheduled_at() != null) + params.put("scheduled_at", status.getScheduled_at()); }else if(call.equals("GET")){ if( max_id != null ) params.put("max_id", max_id); @@ -1891,30 +1872,30 @@ public class API { try { HttpsConnection httpsConnection = new HttpsConnection(context); String response = null; - int responseCode; + int responseCode = -1; if( call.equals("GET")) response = httpsConnection.get(getAbsoluteUrl("/scheduled_statuses/"), 60, null, prefKeyOauthTokenT); else if( call.equals("PUT")) - response = httpsConnection.get(getAbsoluteUrl(String.format("/scheduled_statuses/%s", status.getId())), 60, params, prefKeyOauthTokenT); + response = httpsConnection.put(getAbsoluteUrl(String.format("/scheduled_statuses/%s", targetedId)), 60, params, prefKeyOauthTokenT); else if( call.equals("DELETE")) - responseCode = httpsConnection.delete(getAbsoluteUrl(String.format("/scheduled_statuses/%s", status.getId())), 60, params, prefKeyOauthTokenT); + responseCode = httpsConnection.delete(getAbsoluteUrl(String.format("/scheduled_statuses/%s",targetedId)), 60, null, prefKeyOauthTokenT); if(call.equals("GET")) { apiResponse.setSince_id(httpsConnection.getSince_id()); apiResponse.setMax_id(httpsConnection.getMax_id()); } if (response != null && call.equals("PUT")) { - Status statusreturned = parseStatuses(context, new JSONObject(response)); + Schedule schedule = parseSimpleSchedule(context, new JSONObject(response)); StoredStatus st = new StoredStatus(); st.setCreation_date(status.getCreated_at()); st.setId(-1); st.setJobId(-1); - st.setScheduled_date(new Date(Long.parseLong(status.getScheduled_at()))); + st.setScheduled_date(schedule.getScheduled_at()); st.setStatusReply(null); st.setSent_date(null); final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); st.setUserId(userId); - st.setStatus(statusreturned); + st.setStatus(schedule.getStatus()); storedStatus.add(st); }else if (response != null && call.equals("GET")) { List<Schedule> scheduleList = parseSchedule(context, new JSONArray(response)); @@ -1923,7 +1904,7 @@ public class API { for(Schedule schedule: scheduleList){ StoredStatus st = new StoredStatus(); st.setCreation_date(null); - st.setId(-1); + st.setScheduledServerdId(schedule.getId()); st.setJobId(-1); st.setScheduled_date(schedule.getScheduled_at()); st.setStatusReply(null); @@ -3196,6 +3177,29 @@ public class API { return conversation; } + /** + * Parse json response for several scheduled toots + * @param jsonObject JSONObject + * @return List<Status> + */ + private static Schedule parseSimpleSchedule(Context context, JSONObject jsonObject){ + Schedule schedule = new Schedule(); + try { + JSONObject resobj = jsonObject.getJSONObject("params"); + Status status = parseSchedule(context, resobj); + List<Attachment> attachements = parseAttachmentResponse(jsonObject.getJSONArray("media_attachments")); + status.setMedia_attachments((ArrayList<Attachment>) attachements); + schedule.setStatus(status); + schedule.setAttachmentList(attachements); + schedule.setId(jsonObject.get("id").toString()); + schedule.setScheduled_at(Helper.mstStringToDate(context, jsonObject.get("scheduled_at").toString())); + } catch (JSONException e) { + e.printStackTrace(); + } catch (ParseException e) { + e.printStackTrace(); + } + return schedule; + } /** * Parse json response for several scheduled toots @@ -3217,11 +3221,13 @@ public class API { schedule.setAttachmentList(attachements); schedules.add(schedule); schedule.setId(jsonArray.getJSONObject(i).get("id").toString()); - schedule.setScheduled_at(Helper.stringToDate(context, resobj.get("scheduled_at").toString())); + schedule.setScheduled_at(Helper.mstStringToDate(context, jsonArray.getJSONObject(i).get("scheduled_at").toString())); i++; } } catch (JSONException e) { e.printStackTrace(); + } catch (ParseException e) { + e.printStackTrace(); } return schedules; } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Schedule.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Schedule.java index 6013e4c9d..11de94c1e 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Schedule.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Schedule.java @@ -15,6 +15,9 @@ package fr.gouv.etalab.mastodon.client.Entities; +import android.os.Parcel; +import android.os.Parcelable; + import java.util.Date; import java.util.List; @@ -23,7 +26,7 @@ import java.util.List; * Manages scheduled toots */ -public class Schedule { +public class Schedule implements Parcelable { private String id; private Date scheduled_at; @@ -64,4 +67,37 @@ public class Schedule { public void setAttachmentList(List<Attachment> attachmentList) { this.attachmentList = attachmentList; } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(this.id); + dest.writeLong(this.scheduled_at != null ? this.scheduled_at.getTime() : -1); + dest.writeParcelable(this.status, flags); + dest.writeTypedList(this.attachmentList); + } + + protected Schedule(Parcel in) { + this.id = in.readString(); + long tmpScheduled_at = in.readLong(); + this.scheduled_at = tmpScheduled_at == -1 ? null : new Date(tmpScheduled_at); + this.status = in.readParcelable(Status.class.getClassLoader()); + this.attachmentList = in.createTypedArrayList(Attachment.CREATOR); + } + + public static final Parcelable.Creator<Schedule> CREATOR = new Parcelable.Creator<Schedule>() { + @Override + public Schedule createFromParcel(Parcel source) { + return new Schedule(source); + } + + @Override + public Schedule[] newArray(int size) { + return new Schedule[size]; + } + }; } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/StoredStatus.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/StoredStatus.java index 82d0c428b..6062fbad6 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/StoredStatus.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/StoredStatus.java @@ -1,5 +1,8 @@ package fr.gouv.etalab.mastodon.client.Entities; +import android.os.Parcel; +import android.os.Parcelable; + import java.util.Date; @@ -8,7 +11,7 @@ import java.util.Date; * Manage Stored status */ -public class StoredStatus { +public class StoredStatus implements Parcelable { private int id; private Date creation_date; @@ -20,6 +23,7 @@ public class StoredStatus { private Status statusReply; private String instance; private String userId; + private String scheduledServerdId; public int getId() { return id; @@ -101,4 +105,65 @@ public class StoredStatus { public void setStatusReply(Status statusReply) { this.statusReply = statusReply; } + + + public String getScheduledServerdId() { + return scheduledServerdId; + } + + public void setScheduledServerdId(String scheduledServerdId) { + this.scheduledServerdId = scheduledServerdId; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(this.id); + dest.writeLong(this.creation_date != null ? this.creation_date.getTime() : -1); + dest.writeLong(this.scheduled_date != null ? this.scheduled_date.getTime() : -1); + dest.writeLong(this.sent_date != null ? this.sent_date.getTime() : -1); + dest.writeInt(this.jobId); + dest.writeByte(this.isSent ? (byte) 1 : (byte) 0); + dest.writeParcelable(this.status, flags); + dest.writeParcelable(this.statusReply, flags); + dest.writeString(this.instance); + dest.writeString(this.userId); + dest.writeString(this.scheduledServerdId); + } + + public StoredStatus() { + } + + protected StoredStatus(Parcel in) { + this.id = in.readInt(); + long tmpCreation_date = in.readLong(); + this.creation_date = tmpCreation_date == -1 ? null : new Date(tmpCreation_date); + long tmpScheduled_date = in.readLong(); + this.scheduled_date = tmpScheduled_date == -1 ? null : new Date(tmpScheduled_date); + long tmpSent_date = in.readLong(); + this.sent_date = tmpSent_date == -1 ? null : new Date(tmpSent_date); + this.jobId = in.readInt(); + this.isSent = in.readByte() != 0; + this.status = in.readParcelable(Status.class.getClassLoader()); + this.statusReply = in.readParcelable(Status.class.getClassLoader()); + this.instance = in.readString(); + this.userId = in.readString(); + this.scheduledServerdId = in.readString(); + } + + public static final Creator<StoredStatus> CREATOR = new Creator<StoredStatus>() { + @Override + public StoredStatus createFromParcel(Parcel source) { + return new StoredStatus(source); + } + + @Override + public StoredStatus[] newArray(int size) { + return new StoredStatus[size]; + } + }; } |