From 90144343bd56579a71a8b5eee87c2cae166d6a64 Mon Sep 17 00:00:00 2001 From: stom79 Date: Wed, 17 Oct 2018 11:32:16 +0200 Subject: [PATCH] Improve peertube - 1 --- app/src/main/AndroidManifest.xml | 1 - .../mastodon/activities/PeertubeActivity.java | 160 +++++++++++++++- ...trievePeertubeSingleCommentsAsyncTask.java | 64 +++++++ .../fr/gouv/etalab/mastodon/client/API.java | 108 ++++++++++- .../mastodon/client/Entities/Peertube.java | 47 +++++ .../gouv/etalab/mastodon/helper/Helper.java | 7 + .../OnRetrievePeertubeInterface.java | 1 + .../ic_cloud_download_peertube.xml | 9 + .../res/drawable-anydpi/ic_share_peertube.xml | 9 + .../ic_thumb_down_peertube.xml | 9 + .../drawable-anydpi/ic_thumb_up_peertube.xml | 9 + .../ic_visibility_peertube.xml | 9 + app/src/main/res/drawable/missing.png | Bin 0 -> 3292 bytes app/src/main/res/layout/activity_peertube.xml | 179 ++++++++++++++++-- app/src/main/res/values/strings.xml | 2 + 15 files changed, 588 insertions(+), 26 deletions(-) create mode 100644 app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrievePeertubeSingleCommentsAsyncTask.java create mode 100644 app/src/main/res/drawable-anydpi/ic_cloud_download_peertube.xml create mode 100644 app/src/main/res/drawable-anydpi/ic_share_peertube.xml create mode 100644 app/src/main/res/drawable-anydpi/ic_thumb_down_peertube.xml create mode 100644 app/src/main/res/drawable-anydpi/ic_thumb_up_peertube.xml create mode 100644 app/src/main/res/drawable-anydpi/ic_visibility_peertube.xml create mode 100644 app/src/main/res/drawable/missing.png diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3c7f270ea..57facc615 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -141,7 +141,6 @@ /> statuses = apiResponse.getStatuses(); + Log.v(Helper.TAG,"statuses " + statuses); + if( statuses != null) + Log.v(Helper.TAG,"size " + statuses.size()); + if( statuses == null || statuses.size() == 0){ + RelativeLayout no_action = findViewById(R.id.no_action); + no_action.setVisibility(View.VISIBLE); + RecyclerView lv_comments = findViewById(R.id.peertube_comments); + lv_comments.setVisibility(View.GONE); + }else { + SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); + boolean isOnWifi = Helper.isOnWIFI(PeertubeActivity.this); + int behaviorWithAttachments = sharedpreferences.getInt(Helper.SET_ATTACHMENT_ACTION, Helper.ATTACHMENT_ALWAYS); + int positionSpinnerTrans = sharedpreferences.getInt(Helper.SET_TRANSLATOR, Helper.TRANS_YANDEX); + String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); + StatusListAdapter statusListAdapter = new StatusListAdapter(PeertubeActivity.this, RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE, userId, isOnWifi, behaviorWithAttachments, positionSpinnerTrans, statuses); + RecyclerView lv_comments = findViewById(R.id.peertube_comments); + LinearLayoutManager mLayoutManager = new LinearLayoutManager(PeertubeActivity.this); + lv_comments.setLayoutManager(mLayoutManager); + lv_comments.setNestedScrollingEnabled(false); + lv_comments.setAdapter(statusListAdapter); + + } + } + + @Override + protected Dialog onCreateDialog(int id) { + switch (id) { + case progress_bar_type: // we set this to 0 + pDialog = new ProgressDialog(PeertubeActivity.this); + pDialog.setMessage(getString(R.string.download_wait)); + pDialog.setIndeterminate(false); + pDialog.setMax(100); + pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + pDialog.setCancelable(true); + pDialog.show(); + return pDialog; + default: + return null; + } + } + + + /** + * https://stackoverflow.com/a/15758953 + */ + @SuppressLint("StaticFieldLeak") + class DownloadFileFromURL extends AsyncTask { + + @Override + protected void onPreExecute() { + super.onPreExecute(); + showDialog(progress_bar_type); + } + @Override + protected String doInBackground(String... f_url) { + int count; + try { + URL url = new URL(f_url[0]); + URLConnection conection = url.openConnection(); + conection.connect(); + int lenghtOfFile = conection.getContentLength(); + InputStream input = new BufferedInputStream(url.openStream(), + 8192); + OutputStream output = new FileOutputStream(Environment + .getExternalStorageDirectory().toString() + + "/2011.kml"); + byte data[] = new byte[1024]; + long total = 0; + while ((count = input.read(data)) != -1) { + total += count; + publishProgress("" + (int) ((total * 100) / lenghtOfFile)); + output.write(data, 0, count); + } + output.flush(); + output.close(); + input.close(); + + } catch (Exception e) { + } + + return null; + } + protected void onProgressUpdate(String... progress) { + pDialog.setProgress(Integer.parseInt(progress[0])); + } + + @Override + protected void onPostExecute(String file_url) { + dismissDialog(progress_bar_type); + } + + } } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrievePeertubeSingleCommentsAsyncTask.java b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrievePeertubeSingleCommentsAsyncTask.java new file mode 100644 index 000000000..7f95dab70 --- /dev/null +++ b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrievePeertubeSingleCommentsAsyncTask.java @@ -0,0 +1,64 @@ +/* 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 . */ +package fr.gouv.etalab.mastodon.asynctasks; + +import android.content.Context; +import android.os.AsyncTask; + +import java.lang.ref.WeakReference; + +import fr.gouv.etalab.mastodon.client.API; +import fr.gouv.etalab.mastodon.client.APIResponse; +import fr.gouv.etalab.mastodon.interfaces.OnRetrievePeertubeInterface; + + +/** + * Created by Thomas on 16/10/2018. + * Retrieves peertube single + */ + +public class RetrievePeertubeSingleCommentsAsyncTask extends AsyncTask { + + + + private APIResponse apiResponse; + private String videoId; + private OnRetrievePeertubeInterface listener; + private WeakReference contextReference; + private String instanceName; + + + + public RetrievePeertubeSingleCommentsAsyncTask(Context context, String instanceName, String videoId, OnRetrievePeertubeInterface onRetrievePeertubeInterface){ + this.contextReference = new WeakReference<>(context); + this.videoId = videoId; + this.listener = onRetrievePeertubeInterface; + this.instanceName = instanceName; + } + + + + @Override + protected Void doInBackground(Void... params) { + API api = new API(this.contextReference.get()); + apiResponse = api.getSinglePeertubeComments(this.instanceName, videoId); + return null; + } + + @Override + protected void onPostExecute(Void result) { + listener.onRetrievePeertubeComments(apiResponse); + } +} 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 50089b710..1cb2164e6 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 @@ -649,7 +649,7 @@ public class API { HttpsConnection httpsConnection = new HttpsConnection(context); String response = httpsConnection.get(String.format("https://"+instance+"/api/v1/videos/%s", videoId), 60, null, null); JSONObject jsonObject = new JSONObject(response); - peertube = parseSinglePeertube(jsonObject); + peertube = parseSinglePeertube(context, jsonObject); } catch (HttpsConnection.HttpsConnectionException e) { setError(e.getStatusCode(), e); } catch (NoSuchAlgorithmException e) { @@ -667,6 +667,31 @@ public class API { return apiResponse; } + /** + * Retrieves Peertube videos from an instance *synchronously* + * @return APIResponse + */ + public APIResponse getSinglePeertubeComments(String instance, String videoId) { + statuses = new ArrayList<>(); + try { + HttpsConnection httpsConnection = new HttpsConnection(context); + String response = httpsConnection.get(String.format("https://"+instance+"/api/v1/videos/%s/comment-threads", videoId), 60, null, null); + JSONObject jsonObject = new JSONObject(response); + statuses = parseSinglePeertubeComments(context, instance, jsonObject); + } 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.setStatuses(statuses); + return apiResponse; + } /** * Retrieves home timeline for the account *synchronously* @@ -2355,9 +2380,10 @@ public class API { * @param resobj JSONObject * @return Peertube */ - private static Peertube parseSinglePeertube(JSONObject resobj){ + private static Peertube parseSinglePeertube(Context context, JSONObject resobj){ Peertube peertube = new Peertube(); try { + Log.v(Helper.TAG,"resobj= " + resobj); peertube.setId(resobj.get("id").toString()); peertube.setUuid(resobj.get("uuid").toString()); peertube.setName(resobj.get("name").toString()); @@ -2365,6 +2391,15 @@ public class API { peertube.setEmbedPath(resobj.get("embedPath").toString()); peertube.setPreviewPath(resobj.get("previewPath").toString()); peertube.setThumbnailPath(resobj.get("thumbnailPath").toString()); + peertube.setView(Integer.parseInt(resobj.get("views").toString())); + peertube.setLike(Integer.parseInt(resobj.get("likes").toString())); + peertube.setDislike(Integer.parseInt(resobj.get("dislikes").toString())); + peertube.setDuration(Integer.parseInt(resobj.get("duration").toString())); + try { + peertube.setCreated_at(Helper.mstStringToDate(context, resobj.get("createdAt").toString())); + } catch (ParseException e) { + e.printStackTrace(); + } JSONArray files = resobj.getJSONArray("files"); for(int j = 0 ; j < files.length() ; j++){ @@ -2378,6 +2413,44 @@ public class API { return peertube; } + /** + * Parse json response for peertube comments + * @param resobj JSONObject + * @return Peertube + */ + private static List parseSinglePeertubeComments(Context context, String instance, JSONObject resobj){ + Peertube peertube = new Peertube(); + List statuses = new ArrayList<>(); + try { + JSONArray jsonArray = resobj.getJSONArray("data"); + int i = 0; + while (i < jsonArray.length() ){ + Status status = new Status(); + JSONObject comment = jsonArray.getJSONObject(i); + status.setId(comment.get("id").toString()); + status.setUri(comment.get("url").toString()); + status.setUrl(comment.get("url").toString()); + status.setSensitive(false); + status.setSpoiler_text(""); + status.setContent(comment.get("text").toString()); + status.setIn_reply_to_id(comment.get("inReplyToCommentId").toString()); + status.setAccount(parseAccountResponsePeertube(context, instance, comment.getJSONObject("account"))); + status.setCreated_at(Helper.mstStringToDate(context, comment.get("createdAt").toString())); + status.setMentions(new ArrayList<>()); + status.setEmojis(new ArrayList<>()); + status.setMedia_attachments(new ArrayList<>()); + status.setVisibility("public"); + i++; + statuses.add(status); + } + } catch (JSONException e) { + e.printStackTrace(); + } catch (ParseException e) { + e.printStackTrace(); + } + return statuses; + } + /** * Parse json response for unique how to * @param resobj JSONObject @@ -2718,6 +2791,37 @@ public class API { } + /** + * Parse json response an unique peertube account + * @param resobj JSONObject + * @return Account + */ + @SuppressWarnings("InfiniteRecursion") + private static Account parseAccountResponsePeertube(Context context, String instance, JSONObject resobj){ + + Account account = new Account(); + try { + account.setId(resobj.get("id").toString()); + account.setUsername(resobj.get("name").toString()); + account.setAcct(resobj.get("name").toString() + "@"+ resobj.get("host").toString()); + account.setDisplay_name(resobj.get("displayName").toString()); + account.setCreated_at(Helper.mstStringToDate(context, resobj.get("createdAt").toString())); + account.setFollowers_count(Integer.valueOf(resobj.get("followersCount").toString())); + account.setFollowing_count(Integer.valueOf(resobj.get("followingCount").toString())); + account.setStatuses_count(0); + account.setNote(resobj.get("description").toString()); + account.setUrl(resobj.get("url").toString()); + if( resobj.get("avatar").toString() != null && !resobj.get("avatar").toString().equals("null")){ + account.setAvatar("https://" + instance + resobj.getJSONObject("avatar").get("path")); + }else + account.setAvatar(null); + account.setAvatar_static(resobj.get("avatar").toString()); + } catch (JSONException ignored) {} catch (ParseException e) { + e.printStackTrace(); + } + return account; + } + /** * Parse json response an unique account * @param resobj JSONObject diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Peertube.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Peertube.java index 71d00eb6c..5dbf9ed6b 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Peertube.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Peertube.java @@ -14,6 +14,8 @@ * see . */ package fr.gouv.etalab.mastodon.client.Entities; +import java.util.Date; + /** * Created by Thomas on 29/09/2018. * Manage how to videos @@ -28,6 +30,11 @@ public class Peertube { private String previewPath; private String embedPath; private String streamURL; + private int view; + private int like; + private int dislike; + private Date created_at; + private int duration; public String getId() { return id; @@ -92,4 +99,44 @@ public class Peertube { public void setStreamURL(String streamURL) { this.streamURL = streamURL; } + + public int getView() { + return view; + } + + public void setView(int view) { + this.view = view; + } + + public int getLike() { + return like; + } + + public void setLike(int like) { + this.like = like; + } + + public int getDislike() { + return dislike; + } + + public void setDislike(int dislike) { + this.dislike = dislike; + } + + public Date getCreated_at() { + return created_at; + } + + public void setCreated_at(Date created_at) { + this.created_at = created_at; + } + + public int getDuration() { + return duration; + } + + public void setDuration(int duration) { + this.duration = duration; + } } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java index f8d00ca2b..55adbce4d 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java @@ -2066,6 +2066,13 @@ public class Helper { return; } } + if( url == null) { + Glide.with(imageView.getContext()) + .load(R.drawable.missing) + .apply(new RequestOptions().transforms(new CenterCrop(), new RoundedCorners(10))) + .into(imageView); + return; + } if( !disableGif) Glide.with(imageView.getContext()) .load(url) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/interfaces/OnRetrievePeertubeInterface.java b/app/src/main/java/fr/gouv/etalab/mastodon/interfaces/OnRetrievePeertubeInterface.java index 506c52f34..8c64cf4e0 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/interfaces/OnRetrievePeertubeInterface.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/interfaces/OnRetrievePeertubeInterface.java @@ -22,4 +22,5 @@ import fr.gouv.etalab.mastodon.client.APIResponse; */ public interface OnRetrievePeertubeInterface { void onRetrievePeertube(APIResponse apiResponse); + void onRetrievePeertubeComments(APIResponse apiResponse); } diff --git a/app/src/main/res/drawable-anydpi/ic_cloud_download_peertube.xml b/app/src/main/res/drawable-anydpi/ic_cloud_download_peertube.xml new file mode 100644 index 000000000..d11e9d8d2 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_cloud_download_peertube.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_share_peertube.xml b/app/src/main/res/drawable-anydpi/ic_share_peertube.xml new file mode 100644 index 000000000..5f7aed400 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_share_peertube.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_thumb_down_peertube.xml b/app/src/main/res/drawable-anydpi/ic_thumb_down_peertube.xml new file mode 100644 index 000000000..6cb0649c9 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_thumb_down_peertube.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_thumb_up_peertube.xml b/app/src/main/res/drawable-anydpi/ic_thumb_up_peertube.xml new file mode 100644 index 000000000..fb115d5d2 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_thumb_up_peertube.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_visibility_peertube.xml b/app/src/main/res/drawable-anydpi/ic_visibility_peertube.xml new file mode 100644 index 000000000..42ed85bee --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_visibility_peertube.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/missing.png b/app/src/main/res/drawable/missing.png new file mode 100644 index 0000000000000000000000000000000000000000..34c8e45e61ce1e1ddeb6a9f69dc1979816a7286e GIT binary patch literal 3292 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 T1m@pU{u3x2G_pqP0p|YzWF96{ literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_peertube.xml b/app/src/main/res/layout/activity_peertube.xml index 5ab77f279..c3d8402bb 100644 --- a/app/src/main/res/layout/activity_peertube.xml +++ b/app/src/main/res/layout/activity_peertube.xml @@ -24,26 +24,165 @@ android:layout_height="match_parent" tools:context=".activities.PeertubeActivity"> - - - - - + android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 334fa7819..9892cdb73 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -636,6 +636,8 @@ Peertube instance Display private messages timeline Keep background process when app is closed + Downloading file. Please wait... + Be the first to leave a comment on this video with the top right button! Never