From 56054f03a2482314742da7741defe01f6672213b Mon Sep 17 00:00:00 2001 From: stom79 Date: Wed, 9 Jan 2019 18:26:25 +0100 Subject: [PATCH] Layout updates + fixes --- .../etalab/mastodon/client/PeertubeAPI.java | 579 ------------------ .../mastodon/drawers/PeertubeAdapter.java | 2 +- app/src/main/res/layout/drawer_peertube.xml | 7 +- 3 files changed, 5 insertions(+), 583 deletions(-) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/PeertubeAPI.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/PeertubeAPI.java index 52d4fbf22..2977717c0 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/PeertubeAPI.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/PeertubeAPI.java @@ -41,14 +41,12 @@ import java.util.Map; import fr.gouv.etalab.mastodon.R; import fr.gouv.etalab.mastodon.client.Entities.Account; import fr.gouv.etalab.mastodon.client.Entities.Attachment; -import fr.gouv.etalab.mastodon.client.Entities.Card; import fr.gouv.etalab.mastodon.client.Entities.Conversation; import fr.gouv.etalab.mastodon.client.Entities.Emojis; import fr.gouv.etalab.mastodon.client.Entities.Error; import fr.gouv.etalab.mastodon.client.Entities.Filters; import fr.gouv.etalab.mastodon.client.Entities.HowToVideo; import fr.gouv.etalab.mastodon.client.Entities.Instance; -import fr.gouv.etalab.mastodon.client.Entities.InstanceSocial; import fr.gouv.etalab.mastodon.client.Entities.Peertube; import fr.gouv.etalab.mastodon.client.Entities.PeertubeInformation; import fr.gouv.etalab.mastodon.client.Entities.Relationship; @@ -649,82 +647,6 @@ public class PeertubeAPI { } - /** - * Retrieves accounts that reblogged the status *synchronously* - * - * @param statusId String Id of the status - * @param max_id String id max - * @return APIResponse - */ - @SuppressWarnings("SameParameterValue") - public APIResponse getRebloggedBy(String statusId, String max_id) { - - HashMap params = new HashMap<>(); - if (max_id != null) - params.put("max_id", max_id); - params.put("limit", "80"); - accounts = new ArrayList<>(); - try { - HttpsConnection httpsConnection = new HttpsConnection(context); - String response = httpsConnection.get(getAbsoluteUrl(String.format("/statuses/%s/reblogged_by", statusId)), 60, params, prefKeyOauthTokenT); - accounts = parseAccountResponse(new JSONArray(response)); - apiResponse.setSince_id(httpsConnection.getSince_id()); - apiResponse.setMax_id(httpsConnection.getMax_id()); - } catch (HttpsConnection.HttpsConnectionException e) { - setError(e.getStatusCode(), e); - e.printStackTrace(); - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } catch (KeyManagementException e) { - e.printStackTrace(); - } catch (JSONException e) { - e.printStackTrace(); - } - apiResponse.setAccounts(accounts); - return apiResponse; - } - - - /** - * Retrieves accounts that favourited the status *synchronously* - * - * @param statusId String Id of the status - * @param max_id String id max - * @return APIResponse - */ - @SuppressWarnings("SameParameterValue") - public APIResponse getFavouritedBy(String statusId, String max_id) { - - HashMap params = new HashMap<>(); - if (max_id != null) - params.put("max_id", max_id); - params.put("limit", "80"); - accounts = new ArrayList<>(); - try { - HttpsConnection httpsConnection = new HttpsConnection(context); - String response = httpsConnection.get(getAbsoluteUrl(String.format("/statuses/%s/favourited_by", statusId)), 60, params, prefKeyOauthTokenT); - accounts = parseAccountResponse(new JSONArray(response)); - apiResponse.setSince_id(httpsConnection.getSince_id()); - apiResponse.setMax_id(httpsConnection.getMax_id()); - } catch (HttpsConnection.HttpsConnectionException e) { - setError(e.getStatusCode(), e); - e.printStackTrace(); - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } catch (KeyManagementException e) { - e.printStackTrace(); - } catch (JSONException e) { - e.printStackTrace(); - } - apiResponse.setAccounts(accounts); - return apiResponse; - } - - /** @@ -1047,72 +969,6 @@ public class PeertubeAPI { - /** - * Retrieves following for the account specified by targetedId *synchronously* - * @param targetedId String targetedId - * @param max_id String id max - * @return APIResponse - */ - public APIResponse getFollowing(String targetedId, String max_id){ - return getAccounts(String.format("/accounts/%s/following",targetedId),max_id, null, accountPerPage); - } - - /** - * Retrieves followers for the account specified by targetedId *synchronously* - * @param targetedId String targetedId - * @param max_id String id max - * @return APIResponse - */ - public APIResponse getFollowers(String targetedId, String max_id){ - return getAccounts(String.format("/accounts/%s/followers",targetedId),max_id, null, accountPerPage); - } - - /** - * Retrieves blocked users by the authenticated account *synchronously* - * @param max_id String id max - * @param since_id String since the id - * @param limit int limit - max value 40 - * @return APIResponse - */ - @SuppressWarnings("SameParameterValue") - private APIResponse getAccounts(String action, String max_id, String since_id, int limit){ - - HashMap params = new HashMap<>(); - if( max_id != null ) - params.put("max_id", max_id); - if( since_id != null ) - params.put("since_id", since_id); - if( 0 > limit || limit > 40) - limit = 40; - params.put("limit",String.valueOf(limit)); - accounts = new ArrayList<>(); - try { - HttpsConnection httpsConnection = new HttpsConnection(context); - String response = httpsConnection.get(getAbsoluteUrl(action), 60, params, prefKeyOauthTokenT); - apiResponse.setSince_id(httpsConnection.getSince_id()); - apiResponse.setMax_id(httpsConnection.getMax_id()); - accounts = parseAccountResponse(new JSONArray(response)); - if( accounts != null && accounts.size() == 1 ){ - if(accounts.get(0).getAcct() == null){ - Throwable error = new Throwable(context.getString(R.string.toast_error)); - setError(500, error); - } - } - } 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.setAccounts(accounts); - return apiResponse; - } - /** @@ -1270,88 +1126,6 @@ public class PeertubeAPI { } - /** - * Retrieves Accounts when searching (ie: via @...) *synchronously* - * Not limited to following - * @param query String search - * @return APIResponse - */ - @SuppressWarnings("SameParameterValue") - public APIResponse searchAccounts(String query, int count) { - return searchAccounts(query, count, false); - } - - /** - * Retrieves Accounts when searching (ie: via @...) *synchronously* - * @param query String search - * @param count int limit - * @param following boolean following only - * @return APIResponse - */ - public APIResponse searchAccounts(String query, int count, boolean following) { - - HashMap params = new HashMap<>(); - params.put("q", query); - if( count < 5) - count = 5; - if( count > 40 ) - count = 40; - if( following) - params.put("following", Boolean.toString(true)); - params.put("limit", String.valueOf(count)); - - try { - HttpsConnection httpsConnection = new HttpsConnection(context); - String response = httpsConnection.get(getAbsoluteUrl("/accounts/search"), 60, params, prefKeyOauthTokenT); - accounts = parseAccountResponse(new JSONArray(response)); - apiResponse.setSince_id(httpsConnection.getSince_id()); - apiResponse.setMax_id(httpsConnection.getMax_id()); - } catch (HttpsConnection.HttpsConnectionException e) { - setError(e.getStatusCode(), e); - e.printStackTrace(); - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } catch (KeyManagementException e) { - e.printStackTrace(); - } catch (JSONException e) { - e.printStackTrace(); - } - apiResponse.setAccounts(accounts); - return apiResponse; - } - - - - /** - * Retrieves Accounts when searching (ie: via @...) *synchronously* - * - * @return APIResponse - */ - public APIResponse getCustomEmoji() { - List emojis = new ArrayList<>(); - try { - HttpsConnection httpsConnection = new HttpsConnection(context); - String response = httpsConnection.get(getAbsoluteUrl("/custom_emojis"), 60, null, prefKeyOauthTokenT); - emojis = parseEmojis(new JSONArray(response)); - apiResponse.setSince_id(httpsConnection.getSince_id()); - apiResponse.setMax_id(httpsConnection.getMax_id()); - - } 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.setEmojis(emojis); - return apiResponse; - } /** @@ -1560,218 +1334,6 @@ public class PeertubeAPI { return apiResponse; } - - - /** - * Get accounts in a list for a user - * @param listId String, id of the list - * @param limit int, limit of results - * @return APIResponse - */ - @SuppressWarnings("SameParameterValue") - public APIResponse getAccountsInList(String listId, int limit){ - - HashMap params = new HashMap<>(); - if( limit < 0) - limit = 0; - if( limit > 50 ) - limit = 50; - params.put("limit",String.valueOf(limit)); - try { - HttpsConnection httpsConnection = new HttpsConnection(context); - String response = httpsConnection.get(getAbsoluteUrl(String.format("/lists/%s/accounts", listId)), 60, params, prefKeyOauthTokenT); - accounts = parseAccountResponse(new JSONArray(response)); - apiResponse.setSince_id(httpsConnection.getSince_id()); - apiResponse.setMax_id(httpsConnection.getMax_id()); - } 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.setAccounts(accounts); - return apiResponse; - } - - - - /** - * Get a list - * @param id String, id of the list - * @return APIResponse - */ - @SuppressWarnings("unused") - public APIResponse getList(String id){ - - List lists = new ArrayList<>(); - fr.gouv.etalab.mastodon.client.Entities.List list; - try { - String response = new HttpsConnection(context).get(getAbsoluteUrl(String.format("/lists/%s",id)), 60, null, prefKeyOauthTokenT); - list = parseList(new JSONObject(response)); - lists.add(list); - } 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.setLists(lists); - return apiResponse; - } - - - - - - /** - * Parse json response an unique Car - * @param resobj JSONObject - * @return Card - */ - private static Card parseCardResponse(JSONObject resobj){ - - Card card = new Card(); - try { - card.setUrl(resobj.get("url").toString()); - card.setTitle(resobj.get("title").toString()); - card.setDescription(resobj.get("description").toString()); - card.setImage(resobj.get("image").toString()); - card.setHtml(resobj.get("html").toString()); - card.setType(resobj.get("type").toString()); - try { - card.setAuthor_name(resobj.get("author_name").toString()); - }catch (Exception e){ - e.printStackTrace(); - card.setAuthor_name(null); - } - try { - card.setAuthor_url(resobj.get("author_url").toString()); - }catch (Exception e){ - e.printStackTrace(); - card.setAuthor_url(null); - } - try { - card.setEmbed_url(resobj.get("embed_url").toString()); - }catch (Exception e){ - e.printStackTrace(); - card.setEmbed_url(null); - } - try { - card.setProvider_name(resobj.get("provider_name").toString()); - }catch (Exception e){ - e.printStackTrace(); - card.setProvider_name(null); - } - try { - card.setProvider_url(resobj.get("provider_url").toString()); - }catch (Exception e){ - e.printStackTrace(); - card.setProvider_url(null); - } - try { - card.setHeight(Integer.parseInt(resobj.get("height").toString())); - }catch (Exception e){ - e.printStackTrace(); - card.setHeight(0); - } - try { - card.setWidth(Integer.parseInt(resobj.get("width").toString())); - }catch (Exception e){ - e.printStackTrace(); - card.setWidth(0); - } - } catch (JSONException e) { - e.printStackTrace(); - card = null; - } - return card; - } - - /** - * Parse json response an unique instance social result - * @param resobj JSONObject - * @return InstanceSocial - */ - public static InstanceSocial parseInstanceSocialResponse(Context context, JSONObject resobj){ - - InstanceSocial instanceSocial = new InstanceSocial(); - try { - - - instanceSocial.setUptime(Float.parseFloat(resobj.get("uptime").toString())); - instanceSocial.setUp(Boolean.parseBoolean(resobj.get("up").toString())); - - instanceSocial.setConnections(Long.parseLong(resobj.get("connections").toString())); - instanceSocial.setDead(Boolean.parseBoolean(resobj.get("dead").toString())); - - - instanceSocial.setId(resobj.get("id").toString()); - - instanceSocial.setInfo(resobj.get("info").toString()); - instanceSocial.setVersion(resobj.get("version").toString()); - instanceSocial.setName(resobj.get("name").toString()); - instanceSocial.setObs_rank(resobj.get("obs_rank").toString()); - instanceSocial.setThumbnail(resobj.get("thumbnail").toString()); - instanceSocial.setIpv6(Boolean.parseBoolean(resobj.get("ipv6").toString())); - instanceSocial.setObs_score(Integer.parseInt(resobj.get("obs_score").toString())); - instanceSocial.setOpen_registrations(Boolean.parseBoolean(resobj.get("open_registrations").toString())); - - instanceSocial.setUsers(Long.parseLong(resobj.get("users").toString())); - instanceSocial.setStatuses(Long.parseLong(resobj.get("statuses").toString())); - - instanceSocial.setHttps_rank(resobj.get("https_rank").toString()); - instanceSocial.setHttps_score(Integer.parseInt(resobj.get("https_score").toString())); - instanceSocial.setAdded_at(Helper.mstStringToDate(context, resobj.get("added_at").toString())); - instanceSocial.setChecked_at(Helper.mstStringToDate(context, resobj.get("checked_at").toString())); - instanceSocial.setUpdated_at(Helper.mstStringToDate(context, resobj.get("updated_at").toString())); - - } catch (Exception e) { - e.printStackTrace(); - } - return instanceSocial; - } - - - /** - * Parse Domains - * @param jsonArray JSONArray - * @return List of domains - */ - private List parseDomains(JSONArray jsonArray){ - List list_tmp = new ArrayList<>(); - for(int i = 0; i < jsonArray.length(); i++){ - try { - list_tmp.add(jsonArray.getString(i)); - } catch (JSONException ignored) {} - } - return list_tmp; - } - - - /** - * Parse Tags - * @param jsonArray JSONArray - * @return List of tags - */ - private List parseTags(JSONArray jsonArray){ - List list_tmp = new ArrayList<>(); - for(int i = 0; i < jsonArray.length(); i++){ - try { - list_tmp.add(jsonArray.getString(i)); - } catch (JSONException ignored) {} - } - return list_tmp; - } /** * Parse json response for several howto * @param jsonArray JSONArray @@ -2271,149 +1833,8 @@ public class PeertubeAPI { return account; } - /** - * Parse json response an unique account - * @param resobj JSONObject - * @return Account - */ - @SuppressWarnings("InfiniteRecursion") - private static Account parseAccountResponse(Context context, JSONObject resobj){ - - Account account = new Account(); - try { - account.setId(resobj.get("id").toString()); - account.setUsername(resobj.get("username").toString()); - account.setAcct(resobj.get("acct").toString()); - account.setDisplay_name(resobj.get("display_name").toString()); - account.setLocked(Boolean.parseBoolean(resobj.get("locked").toString())); - account.setCreated_at(Helper.mstStringToDate(context, resobj.get("created_at").toString())); - account.setFollowers_count(Integer.valueOf(resobj.get("followers_count").toString())); - account.setFollowing_count(Integer.valueOf(resobj.get("following_count").toString())); - account.setStatuses_count(Integer.valueOf(resobj.get("statuses_count").toString())); - account.setNote(resobj.get("note").toString()); - try { - account.setBot(Boolean.parseBoolean(resobj.get("bot").toString())); - }catch (Exception e){ - account.setBot(false); - } - try{ - account.setMoved_to_account(parseAccountResponse(context, resobj.getJSONObject("moved"))); - }catch (Exception ignored){account.setMoved_to_account(null);} - account.setUrl(resobj.get("url").toString()); - account.setAvatar(resobj.get("avatar").toString()); - account.setAvatar_static(resobj.get("avatar_static").toString()); - account.setHeader(resobj.get("header").toString()); - account.setHeader_static(resobj.get("header_static").toString()); - try { - JSONArray fields = resobj.getJSONArray("fields"); - LinkedHashMap fieldsMap = new LinkedHashMap<>(); - LinkedHashMap fieldsMapVerified = new LinkedHashMap<>(); - if( fields != null){ - for(int j = 0 ; j < fields.length() ; j++){ - fieldsMap.put(fields.getJSONObject(j).getString("name"),fields.getJSONObject(j).getString("value")); - try { - fieldsMapVerified.put(fields.getJSONObject(j).getString("name"),(fields.getJSONObject(j).getString("verified_at")!= null && !fields.getJSONObject(j).getString("verified_at").equals("null"))); - }catch (Exception e){ - fieldsMapVerified.put(fields.getJSONObject(j).getString("name"),false); - } - - } - } - account.setFields(fieldsMap); - account.setFieldsVerified(fieldsMapVerified); - }catch (Exception ignored){} - - //Retrieves emjis - List emojiList = new ArrayList<>(); - try { - JSONArray emojisTag = resobj.getJSONArray("emojis"); - if( emojisTag != null){ - for(int j = 0 ; j < emojisTag.length() ; j++){ - JSONObject emojisObj = emojisTag.getJSONObject(j); - Emojis emojis = parseEmojis(emojisObj); - emojiList.add(emojis); - } - } - account.setEmojis(emojiList); - }catch (Exception e){ - account.setEmojis(new ArrayList<>()); - } - } catch (JSONException ignored) {} catch (ParseException e) { - e.printStackTrace(); - } - return account; - } - /** - * Parse json response an unique account - * @param resobj JSONObject - * @return Account - */ - @SuppressWarnings("InfiniteRecursion") - private static Account parseMisskeyAccountResponse(Context context, String instance, JSONObject resobj){ - - Account account = new Account(); - try { - account.setId(resobj.get("id").toString()); - account.setUsername(resobj.get("username").toString()); - String host = resobj.get("host").toString(); - String acct; - if( host == null || host.equals("null")) - acct = resobj.get("username").toString(); - else - acct = resobj.get("username").toString() + "@" + host; - account.setAcct(acct); - account.setDisplay_name(resobj.get("name").toString()); - account.setCreated_at(new Date()); - - account.setUrl("https://" + instance + "/@"+account.getUsername()); - account.setAvatar(resobj.get("avatarUrl").toString()); - account.setAvatar_static(resobj.get("avatarUrl").toString()); - try { - account.setBot(Boolean.parseBoolean(resobj.get("isBot").toString())); - }catch (Exception e){ - account.setBot(false); - } - //Retrieves emjis - List emojiList = new ArrayList<>(); - try { - JSONArray emojisTag = resobj.getJSONArray("emojis"); - if( emojisTag != null){ - for(int j = 0 ; j < emojisTag.length() ; j++){ - JSONObject emojisObj = emojisTag.getJSONObject(j); - Emojis emojis = parseEmojis(emojisObj); - emojiList.add(emojis); - } - } - account.setEmojis(emojiList); - }catch (Exception e){ - account.setEmojis(new ArrayList<>()); - } - } catch (JSONException ignored) {} - return account; - } - /** - * Parse json response for list of accounts - * @param jsonArray JSONArray - * @return List - */ - private List parseAccountResponse(JSONArray jsonArray){ - - List accounts = new ArrayList<>(); - try { - int i = 0; - while (i < jsonArray.length() ) { - JSONObject resobj = jsonArray.getJSONObject(i); - Account account = parseAccountResponse(context, resobj); - accounts.add(account); - i++; - } - } catch (JSONException e) { - setDefaultError(e); - } - return accounts; - } /** diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/PeertubeAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/PeertubeAdapter.java index cb325f144..6a26df057 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/PeertubeAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/PeertubeAdapter.java @@ -116,7 +116,7 @@ public class PeertubeAdapter extends RecyclerView.Adapter implements OnListActio Glide.with(holder.peertube_video_image.getContext()) .load("https://" + peertube.getInstance() + peertube.getThumbnailPath()) .into(holder.peertube_video_image); - if (account.getAvatar() != null && !account.getAvatar().startsWith("http")) + if (account.getAvatar() != null && !account.getAvatar().equals("null") && !account.getAvatar().startsWith("http")) account.setAvatar("https://" + peertube.getInstance() + account.getAvatar()); Helper.loadGiF(context, account.getAvatar(), holder.peertube_profile); diff --git a/app/src/main/res/layout/drawer_peertube.xml b/app/src/main/res/layout/drawer_peertube.xml index ac6f273de..d0f895bac 100644 --- a/app/src/main/res/layout/drawer_peertube.xml +++ b/app/src/main/res/layout/drawer_peertube.xml @@ -21,13 +21,11 @@ android:id="@+id/main_container" android:divider="?android:dividerHorizontal" android:showDividers="end" - android:paddingBottom="10dp" android:orientation="vertical"> @@ -37,6 +35,7 @@ android:orientation="horizontal">