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 81fde8d34..2befa94bc 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 @@ -1409,6 +1409,134 @@ public class API { } + /** + * Get filters for the user + * @return APIResponse + */ + public APIResponse getFilters(){ + + List filters = new ArrayList<>(); + try { + String response = new HttpsConnection(context).get(getAbsoluteUrl("/filters"), 60, null, prefKeyOauthTokenT); + filters = parseFilters(new JSONArray(response)); + } catch (HttpsConnection.HttpsConnectionException e) { + setError(e.getStatusCode(), e); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (KeyManagementException e) { + e.printStackTrace(); + } catch (JSONException e) { + e.printStackTrace(); + } + apiResponse.setFilters(filters); + return apiResponse; + } + + /** + * Get a Filter by its id + * @return APIResponse + */ + @SuppressWarnings("unused") + public APIResponse getFilters(String filterId){ + + List filters = new ArrayList<>(); + fr.gouv.etalab.mastodon.client.Entities.Filters filter; + try { + String response = new HttpsConnection(context).get(getAbsoluteUrl(String.format("/filters/%s", filterId)), 60, null, prefKeyOauthTokenT); + filter = parseFilter(new JSONObject(response)); + filters.add(filter); + } catch (HttpsConnection.HttpsConnectionException e) { + setError(e.getStatusCode(), e); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (KeyManagementException e) { + e.printStackTrace(); + } catch (JSONException e) { + e.printStackTrace(); + } + apiResponse.setFilters(filters); + return apiResponse; + } + + + /** + * Create a filter + * @param filter Filter + * @return APIResponse + */ + public APIResponse addFilters(Filters filter){ + HashMap params = new HashMap<>(); + params.put("custom_filter[phrase]", filter.getPhrase()); + for(String context: filter.getContext()) + params.put("custom_filter[context]", context); + params.put("custom_filter[irreversible]", String.valueOf(filter.isIrreversible())); + params.put("custom_filter[whole_word]", String.valueOf(filter.isWhole_word())); + params.put("custom_filter[expires_in]", String.valueOf(filter.getExpires_in())); + try { + new HttpsConnection(context).post(getAbsoluteUrl("/filters"), 60, params, prefKeyOauthTokenT); + } catch (HttpsConnection.HttpsConnectionException e) { + setError(e.getStatusCode(), e); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (KeyManagementException e) { + e.printStackTrace(); + } + return apiResponse; + } + + /** + * Delete a filter + * @param filter Filter + * @return APIResponse + */ + public APIResponse deleteFilters(Filters filter){ + + try { + new HttpsConnection(context).delete(getAbsoluteUrl(String.format("/filters/%s", filter.getId())), 60, null, prefKeyOauthTokenT); + } catch (HttpsConnection.HttpsConnectionException e) { + setError(e.getStatusCode(), e); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (KeyManagementException e) { + e.printStackTrace(); + } + return apiResponse; + } + + /** + * Delete a filter + * @param filter Filter + * @return APIResponse + */ + public APIResponse updateFilters(Filters filter){ + HashMap params = new HashMap<>(); + params.put("custom_filter[phrase]", filter.getPhrase()); + for(String context: filter.getContext()) + params.put("custom_filter[context]", context); + params.put("custom_filter[irreversible]", String.valueOf(filter.isIrreversible())); + params.put("custom_filter[whole_word]", String.valueOf(filter.isWhole_word())); + params.put("custom_filter[expires_in]", String.valueOf(filter.getExpires_in())); + try { + new HttpsConnection(context).put(getAbsoluteUrl(String.format("/filters/%s", filter.getId())), 60, params, prefKeyOauthTokenT); + } catch (HttpsConnection.HttpsConnectionException e) { + setError(e.getStatusCode(), e); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (KeyManagementException e) { + e.printStackTrace(); + } + return apiResponse; + } /** * Get lists for the user @@ -2054,6 +2182,57 @@ public class API { } + + /** + * Parse Filters + * @param jsonArray JSONArray + * @return List of filters + */ + private List parseFilters(JSONArray jsonArray){ + List filters = new ArrayList<>(); + try { + int i = 0; + while (i < jsonArray.length() ) { + JSONObject resobj = jsonArray.getJSONObject(i); + fr.gouv.etalab.mastodon.client.Entities.Filters filter = parseFilter(resobj); + filters.add(filter); + i++; + } + } catch (JSONException e) { + setDefaultError(e); + } + return filters; + } + + /** + * Parse json response for filter + * @param resobj JSONObject + * @return Filter + */ + private static fr.gouv.etalab.mastodon.client.Entities.Filters parseFilter(JSONObject resobj){ + fr.gouv.etalab.mastodon.client.Entities.Filters filter = new fr.gouv.etalab.mastodon.client.Entities.Filters(); + try { + filter.setPhrase(resobj.get("phrase").toString()); + filter.setExpires_in(Integer.parseInt(resobj.get("expires_in").toString())); + filter.setWhole_word(Boolean.parseBoolean(resobj.get("whole_word").toString())); + filter.setIrreversible(Boolean.parseBoolean(resobj.get("irreversible").toString())); + String contextString = resobj.get("context").toString(); + contextString = contextString.replace("[",""); + contextString = contextString.replace("]",""); + if( contextString != null) { + String[] context = contextString.split(","); + if( contextString.length() > 0 ){ + ArrayList finalContext = new ArrayList<>(); + for(String c: context) + finalContext.add(c.trim()); + filter.setContext(finalContext); + } + } + }catch (Exception ignored){} + return filter; + } + + /** * Parse Lists * @param jsonArray JSONArray diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/APIResponse.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/APIResponse.java index 955977767..4e19e2355 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/APIResponse.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/APIResponse.java @@ -30,6 +30,7 @@ public class APIResponse { private List contexts = null; private List notifications = null; private List relationships = null; + private List filters = null; private List lists = null; private List emojis = null; private fr.gouv.etalab.mastodon.client.Entities.Error error = null; @@ -123,4 +124,12 @@ public class APIResponse { public void setLists(List lists) { this.lists = lists; } + + public List getFilters() { + return filters; + } + + public void setFilters(List filters) { + this.filters = filters; + } } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Filters.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Filters.java new file mode 100644 index 000000000..3d4335fd0 --- /dev/null +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Filters.java @@ -0,0 +1,81 @@ +package fr.gouv.etalab.mastodon.client.Entities; +/* Copyright 2018 Thomas Schneider + * + * This file is a part of Mastalab + * + * This program 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. + * + * Mastalab 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 Mastalab; if not, + * see . */ + + +import java.util.ArrayList; + +/** + * Created by Thomas on 05/09/2018. + * Manage filters + */ + +public class Filters { + + private String id; + private String phrase; + private ArrayList context; + private boolean irreversible; + private boolean whole_word; + private int expires_in; + + public String getPhrase() { + return phrase; + } + + public void setPhrase(String phrase) { + this.phrase = phrase; + } + + public ArrayList getContext() { + return context; + } + + public void setContext(ArrayList context) { + this.context = context; + } + + public boolean isIrreversible() { + return irreversible; + } + + public void setIrreversible(boolean irreversible) { + this.irreversible = irreversible; + } + + public boolean isWhole_word() { + return whole_word; + } + + public void setWhole_word(boolean whole_word) { + this.whole_word = whole_word; + } + + public int getExpires_in() { + return expires_in; + } + + public void setExpires_in(int expires_in) { + this.expires_in = expires_in; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } +}