Rate videos + comments - #692
This commit is contained in:
parent
15abff8c2b
commit
13785b0db3
|
@ -44,7 +44,9 @@ import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.EditText;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
import android.widget.RelativeLayout;
|
import android.widget.RelativeLayout;
|
||||||
import android.widget.ScrollView;
|
import android.widget.ScrollView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
@ -61,11 +63,14 @@ import javax.net.ssl.HttpsURLConnection;
|
||||||
|
|
||||||
import es.dmoral.toasty.Toasty;
|
import es.dmoral.toasty.Toasty;
|
||||||
import fr.gouv.etalab.mastodon.R;
|
import fr.gouv.etalab.mastodon.R;
|
||||||
|
import fr.gouv.etalab.mastodon.asynctasks.PostActionAsyncTask;
|
||||||
import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask;
|
import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask;
|
||||||
import fr.gouv.etalab.mastodon.asynctasks.RetrievePeertubeSingleAsyncTask;
|
import fr.gouv.etalab.mastodon.asynctasks.RetrievePeertubeSingleAsyncTask;
|
||||||
import fr.gouv.etalab.mastodon.asynctasks.RetrievePeertubeSingleCommentsAsyncTask;
|
import fr.gouv.etalab.mastodon.asynctasks.RetrievePeertubeSingleCommentsAsyncTask;
|
||||||
|
import fr.gouv.etalab.mastodon.asynctasks.UpdateAccountInfoAsyncTask;
|
||||||
import fr.gouv.etalab.mastodon.client.API;
|
import fr.gouv.etalab.mastodon.client.API;
|
||||||
import fr.gouv.etalab.mastodon.client.APIResponse;
|
import fr.gouv.etalab.mastodon.client.APIResponse;
|
||||||
|
import fr.gouv.etalab.mastodon.client.Entities.Error;
|
||||||
import fr.gouv.etalab.mastodon.client.Entities.Peertube;
|
import fr.gouv.etalab.mastodon.client.Entities.Peertube;
|
||||||
import fr.gouv.etalab.mastodon.client.Entities.Results;
|
import fr.gouv.etalab.mastodon.client.Entities.Results;
|
||||||
import fr.gouv.etalab.mastodon.client.Entities.Status;
|
import fr.gouv.etalab.mastodon.client.Entities.Status;
|
||||||
|
@ -73,12 +78,14 @@ import fr.gouv.etalab.mastodon.client.TLSSocketFactory;
|
||||||
import fr.gouv.etalab.mastodon.drawers.StatusListAdapter;
|
import fr.gouv.etalab.mastodon.drawers.StatusListAdapter;
|
||||||
import fr.gouv.etalab.mastodon.helper.FullScreenMediaController;
|
import fr.gouv.etalab.mastodon.helper.FullScreenMediaController;
|
||||||
import fr.gouv.etalab.mastodon.helper.Helper;
|
import fr.gouv.etalab.mastodon.helper.Helper;
|
||||||
|
import fr.gouv.etalab.mastodon.interfaces.OnPostActionInterface;
|
||||||
import fr.gouv.etalab.mastodon.interfaces.OnRetrievePeertubeInterface;
|
import fr.gouv.etalab.mastodon.interfaces.OnRetrievePeertubeInterface;
|
||||||
import fr.gouv.etalab.mastodon.sqlite.PeertubeFavoritesDAO;
|
import fr.gouv.etalab.mastodon.sqlite.PeertubeFavoritesDAO;
|
||||||
import fr.gouv.etalab.mastodon.sqlite.Sqlite;
|
import fr.gouv.etalab.mastodon.sqlite.Sqlite;
|
||||||
|
|
||||||
import static fr.gouv.etalab.mastodon.helper.Helper.EXTERNAL_STORAGE_REQUEST_CODE;
|
import static fr.gouv.etalab.mastodon.helper.Helper.EXTERNAL_STORAGE_REQUEST_CODE;
|
||||||
import static fr.gouv.etalab.mastodon.helper.Helper.THEME_LIGHT;
|
import static fr.gouv.etalab.mastodon.helper.Helper.THEME_LIGHT;
|
||||||
|
import static fr.gouv.etalab.mastodon.helper.Helper.changeDrawableColor;
|
||||||
import static fr.gouv.etalab.mastodon.helper.Helper.manageDownloads;
|
import static fr.gouv.etalab.mastodon.helper.Helper.manageDownloads;
|
||||||
|
|
||||||
|
|
||||||
|
@ -87,7 +94,7 @@ import static fr.gouv.etalab.mastodon.helper.Helper.manageDownloads;
|
||||||
* Peertube activity
|
* Peertube activity
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class PeertubeActivity extends BaseActivity implements OnRetrievePeertubeInterface {
|
public class PeertubeActivity extends BaseActivity implements OnRetrievePeertubeInterface, OnPostActionInterface {
|
||||||
|
|
||||||
private String peertubeInstance, videoId;
|
private String peertubeInstance, videoId;
|
||||||
private FullScreenMediaController.fullscreen fullscreen;
|
private FullScreenMediaController.fullscreen fullscreen;
|
||||||
|
@ -100,6 +107,7 @@ public class PeertubeActivity extends BaseActivity implements OnRetrievePeertube
|
||||||
private int stopPosition;
|
private int stopPosition;
|
||||||
private Peertube peertube;
|
private Peertube peertube;
|
||||||
private TextView toolbar_title;
|
private TextView toolbar_title;
|
||||||
|
public static String video_id;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
@ -163,7 +171,6 @@ public class PeertubeActivity extends BaseActivity implements OnRetrievePeertube
|
||||||
}
|
}
|
||||||
videoView = findViewById(R.id.media_video);
|
videoView = findViewById(R.id.media_video);
|
||||||
new RetrievePeertubeSingleAsyncTask(PeertubeActivity.this, peertubeInstance, videoId, PeertubeActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
new RetrievePeertubeSingleAsyncTask(PeertubeActivity.this, peertubeInstance, videoId, PeertubeActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void change(){
|
public void change(){
|
||||||
|
@ -200,41 +207,84 @@ public class PeertubeActivity extends BaseActivity implements OnRetrievePeertube
|
||||||
finish();
|
finish();
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_comment:
|
case R.id.action_comment:
|
||||||
Toasty.info(PeertubeActivity.this, getString(R.string.retrieve_remote_status), Toast.LENGTH_LONG).show();
|
if( MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON) {
|
||||||
new AsyncTask<Void, Void, Void>() {
|
Toasty.info(PeertubeActivity.this, getString(R.string.retrieve_remote_status), Toast.LENGTH_LONG).show();
|
||||||
|
new AsyncTask<Void, Void, Void>() {
|
||||||
|
|
||||||
private List<fr.gouv.etalab.mastodon.client.Entities.Status> remoteStatuses;
|
private List<fr.gouv.etalab.mastodon.client.Entities.Status> remoteStatuses;
|
||||||
private WeakReference<Context> contextReference = new WeakReference<>(PeertubeActivity.this);
|
private WeakReference<Context> contextReference = new WeakReference<>(PeertubeActivity.this);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Void doInBackground(Void... voids) {
|
protected Void doInBackground(Void... voids) {
|
||||||
|
|
||||||
if(peertube != null) {
|
if (peertube != null) {
|
||||||
Results search = new API(contextReference.get()).search("https://" + peertube.getAccount().getHost() + "/videos/watch/" + peertube.getUuid());
|
Results search = new API(contextReference.get()).search("https://" + peertube.getAccount().getHost() + "/videos/watch/" + peertube.getUuid());
|
||||||
if (search != null) {
|
if (search != null) {
|
||||||
remoteStatuses = search.getStatuses();
|
remoteStatuses = search.getStatuses();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(Void result) {
|
||||||
|
Intent intent = new Intent(contextReference.get(), TootActivity.class);
|
||||||
|
Bundle b = new Bundle();
|
||||||
|
if (remoteStatuses == null || remoteStatuses.size() == 0) {
|
||||||
|
Toasty.error(contextReference.get(), getString(R.string.toast_error), Toast.LENGTH_SHORT).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (remoteStatuses.get(0).getReblog() != null) {
|
||||||
|
b.putParcelable("tootReply", remoteStatuses.get(0).getReblog());
|
||||||
|
} else {
|
||||||
|
b.putParcelable("tootReply", remoteStatuses.get(0));
|
||||||
|
}
|
||||||
|
intent.putExtras(b); //Put your id to your next Intent
|
||||||
|
contextReference.get().startActivity(intent);
|
||||||
|
}
|
||||||
|
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
}else if( MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE){
|
||||||
|
if(! peertube.isCommentsEnabled()) {
|
||||||
|
Toasty.info(PeertubeActivity.this, getString(R.string.comment_no_allowed_peertube),Toast.LENGTH_LONG).show();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
int style;
|
||||||
|
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
|
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||||
|
if (theme == Helper.THEME_DARK) {
|
||||||
|
style = R.style.DialogDark;
|
||||||
|
} else if (theme == Helper.THEME_BLACK){
|
||||||
|
style = R.style.DialogBlack;
|
||||||
|
}else {
|
||||||
|
style = R.style.Dialog;
|
||||||
|
}
|
||||||
|
AlertDialog.Builder builderInner;
|
||||||
|
builderInner = new AlertDialog.Builder(PeertubeActivity.this, style);
|
||||||
|
builderInner.setTitle(R.string.comment);
|
||||||
|
EditText input = new EditText(PeertubeActivity.this);
|
||||||
|
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
|
||||||
|
LinearLayout.LayoutParams.MATCH_PARENT,
|
||||||
|
LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||||
|
input.setLayoutParams(lp);
|
||||||
|
builderInner.setView(input);
|
||||||
|
builderInner.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog,int which) {
|
||||||
|
dialog.dismiss();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
builderInner.setPositiveButton(R.string.validate, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog,int which) {
|
||||||
|
String comment = input.getText().toString();
|
||||||
|
if( comment.trim().length() > 0 ) {
|
||||||
|
new PostActionAsyncTask(getApplicationContext(), API.StatusAction.PEERTUBECOMMENT, peertube.getId(), null, comment, PeertubeActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
dialog.dismiss();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
});
|
||||||
}
|
builderInner.show();
|
||||||
|
}
|
||||||
@Override
|
|
||||||
protected void onPostExecute(Void result) {
|
|
||||||
Intent intent = new Intent(contextReference.get(), TootActivity.class);
|
|
||||||
Bundle b = new Bundle();
|
|
||||||
if( remoteStatuses == null || remoteStatuses.size() == 0){
|
|
||||||
Toasty.error(contextReference.get(), getString(R.string.toast_error), Toast.LENGTH_SHORT).show();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if( remoteStatuses.get(0).getReblog() != null ) {
|
|
||||||
b.putParcelable("tootReply", remoteStatuses.get(0).getReblog());
|
|
||||||
}else {
|
|
||||||
b.putParcelable("tootReply", remoteStatuses.get(0));
|
|
||||||
}
|
|
||||||
intent.putExtras(b); //Put your id to your next Intent
|
|
||||||
contextReference.get().startActivity(intent);
|
|
||||||
}
|
|
||||||
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR );
|
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
|
@ -280,6 +330,31 @@ public class PeertubeActivity extends BaseActivity implements OnRetrievePeertube
|
||||||
peertube_dislike_count.setText(String.valueOf(peertube.getDislike()));
|
peertube_dislike_count.setText(String.valueOf(peertube.getDislike()));
|
||||||
peertube_like_count.setText(String.valueOf(peertube.getLike()));
|
peertube_like_count.setText(String.valueOf(peertube.getLike()));
|
||||||
peertube_view_count.setText(String.valueOf(peertube.getView()));
|
peertube_view_count.setText(String.valueOf(peertube.getView()));
|
||||||
|
video_id = peertube.getId();
|
||||||
|
|
||||||
|
changeColor();
|
||||||
|
|
||||||
|
|
||||||
|
if( MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE){
|
||||||
|
peertube_like_count.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
String newState = peertube.getMyRating().equals("like")?"none":"like";
|
||||||
|
new PostActionAsyncTask(getApplicationContext(), API.StatusAction.RATEVIDEO, peertube.getId(), null, newState, PeertubeActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
peertube.setMyRating(newState);
|
||||||
|
changeColor();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
peertube_dislike_count.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
String newState = peertube.getMyRating().equals("dislike")?"none":"dislike";
|
||||||
|
new PostActionAsyncTask(getApplicationContext(), API.StatusAction.RATEVIDEO, peertube.getId(), null, newState, PeertubeActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
peertube.setMyRating(newState);
|
||||||
|
changeColor();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
Uri uri = Uri.parse(apiResponse.getPeertubes().get(0).getFileUrl(null));
|
Uri uri = Uri.parse(apiResponse.getPeertubes().get(0).getFileUrl(null));
|
||||||
try {
|
try {
|
||||||
|
@ -467,4 +542,30 @@ public class PeertubeActivity extends BaseActivity implements OnRetrievePeertube
|
||||||
});
|
});
|
||||||
builderSingle.show();
|
builderSingle.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPostAction(int statusCode, API.StatusAction statusAction, String userId, Error error) {
|
||||||
|
|
||||||
|
if( peertube.isCommentsEnabled() && statusAction == API.StatusAction.PEERTUBECOMMENT)
|
||||||
|
new RetrievePeertubeSingleCommentsAsyncTask(PeertubeActivity.this, peertubeInstance, videoId, PeertubeActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void changeColor(){
|
||||||
|
if( peertube.getMyRating() != null && peertube.getMyRating().equals("like")){
|
||||||
|
changeDrawableColor(getApplicationContext(), R.drawable.ic_thumb_up_peertube,R.color.positive_thumbs);
|
||||||
|
changeDrawableColor(getApplicationContext(), R.drawable.ic_thumb_down_peertube,R.color.neutral_thumbs);
|
||||||
|
}else if( peertube.getMyRating() != null && peertube.getMyRating().equals("dislike")){
|
||||||
|
changeDrawableColor(getApplicationContext(), R.drawable.ic_thumb_up_peertube,R.color.neutral_thumbs);
|
||||||
|
changeDrawableColor(getApplicationContext(), R.drawable.ic_thumb_down_peertube,R.color.negative_thumbs);
|
||||||
|
}else {
|
||||||
|
changeDrawableColor(getApplicationContext(), R.drawable.ic_thumb_up_peertube,R.color.neutral_thumbs);
|
||||||
|
changeDrawableColor(getApplicationContext(), R.drawable.ic_thumb_down_peertube,R.color.neutral_thumbs);
|
||||||
|
}
|
||||||
|
Drawable thumbUp = ContextCompat.getDrawable(getApplicationContext(), R.drawable.ic_thumb_up_peertube);
|
||||||
|
Drawable thumbDown = ContextCompat.getDrawable(getApplicationContext(), R.drawable.ic_thumb_down_peertube);
|
||||||
|
peertube_like_count.setCompoundDrawablesWithIntrinsicBounds( null, thumbUp, null, null);
|
||||||
|
peertube_dislike_count.setCompoundDrawablesWithIntrinsicBounds( null, thumbDown, null, null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1193,7 +1193,6 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void onPostAction(int statusCode,API.StatusAction statusAction, String targetedId, Error error) {
|
public void onPostAction(int statusCode,API.StatusAction statusAction, String targetedId, Error error) {
|
||||||
Log.v(Helper.TAG,statusAction + " * " + statusCode + " - error4: " + error);
|
|
||||||
|
|
||||||
if( error != null){
|
if( error != null){
|
||||||
Toasty.error(getApplicationContext(), error.getError(),Toast.LENGTH_LONG).show();
|
Toasty.error(getApplicationContext(), error.getError(),Toast.LENGTH_LONG).show();
|
||||||
|
|
|
@ -40,7 +40,7 @@ public class PostActionAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||||
private OnPostActionInterface listener;
|
private OnPostActionInterface listener;
|
||||||
private int statusCode;
|
private int statusCode;
|
||||||
private API.StatusAction apiAction;
|
private API.StatusAction apiAction;
|
||||||
private String targetedId;
|
private String targetedId, targetedComment;
|
||||||
private String comment;
|
private String comment;
|
||||||
private fr.gouv.etalab.mastodon.client.Entities.Status status;
|
private fr.gouv.etalab.mastodon.client.Entities.Status status;
|
||||||
private Account account, remoteAccount;
|
private Account account, remoteAccount;
|
||||||
|
@ -49,7 +49,6 @@ public class PostActionAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||||
private boolean muteNotifications;
|
private boolean muteNotifications;
|
||||||
private Error error;
|
private Error error;
|
||||||
|
|
||||||
|
|
||||||
public PostActionAsyncTask(Context context, API.StatusAction apiAction, String targetedId, OnPostActionInterface onPostActionInterface){
|
public PostActionAsyncTask(Context context, API.StatusAction apiAction, String targetedId, OnPostActionInterface onPostActionInterface){
|
||||||
this.contextReference = new WeakReference<>(context);
|
this.contextReference = new WeakReference<>(context);
|
||||||
this.listener = onPostActionInterface;
|
this.listener = onPostActionInterface;
|
||||||
|
@ -97,6 +96,16 @@ public class PostActionAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||||
this.muteNotifications = muteNotifications;
|
this.muteNotifications = muteNotifications;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public PostActionAsyncTask(Context context, String targetedId, String comment, String targetedComment, OnPostActionInterface onPostActionInterface){
|
||||||
|
this.contextReference = new WeakReference<>(context);
|
||||||
|
this.listener = onPostActionInterface;
|
||||||
|
this.apiAction = API.StatusAction.PEERTUBEREPLY;
|
||||||
|
this.targetedId = targetedId;
|
||||||
|
this.comment = comment;
|
||||||
|
this.targetedComment = targetedComment;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Void doInBackground(Void... params) {
|
protected Void doInBackground(Void... params) {
|
||||||
|
|
||||||
|
@ -162,6 +171,16 @@ public class PostActionAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||||
|
|
||||||
if( apiAction == API.StatusAction.FOLLOW || apiAction == API.StatusAction.UNFOLLOW)
|
if( apiAction == API.StatusAction.FOLLOW || apiAction == API.StatusAction.UNFOLLOW)
|
||||||
statusCode = peertubeAPI.postAction(apiAction, targetedId);
|
statusCode = peertubeAPI.postAction(apiAction, targetedId);
|
||||||
|
else if( apiAction == API.StatusAction.RATEVIDEO )
|
||||||
|
statusCode = peertubeAPI.postRating(targetedId, comment);
|
||||||
|
else if( apiAction == API.StatusAction.PEERTUBECOMMENT)
|
||||||
|
statusCode = peertubeAPI.postComment(targetedId, comment);
|
||||||
|
else if( apiAction == API.StatusAction.PEERTUBEREPLY)
|
||||||
|
statusCode = peertubeAPI.postReply(targetedId, comment, targetedComment);
|
||||||
|
else if( apiAction == API.StatusAction.PEERTUBEDELETECOMMENT) {
|
||||||
|
statusCode = peertubeAPI.deleteComment(targetedId, comment);
|
||||||
|
targetedId = comment;
|
||||||
|
}
|
||||||
error = peertubeAPI.getError();
|
error = peertubeAPI.getError();
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -13,11 +13,16 @@
|
||||||
* You should have received a copy of the GNU General Public License along with Mastalab; if not,
|
* You should have received a copy of the GNU General Public License along with Mastalab; if not,
|
||||||
* see <http://www.gnu.org/licenses>. */
|
* see <http://www.gnu.org/licenses>. */
|
||||||
package fr.gouv.etalab.mastodon.asynctasks;
|
package fr.gouv.etalab.mastodon.asynctasks;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
|
|
||||||
|
import fr.gouv.etalab.mastodon.activities.MainActivity;
|
||||||
import fr.gouv.etalab.mastodon.client.API;
|
import fr.gouv.etalab.mastodon.client.API;
|
||||||
import fr.gouv.etalab.mastodon.client.APIResponse;
|
import fr.gouv.etalab.mastodon.client.APIResponse;
|
||||||
|
import fr.gouv.etalab.mastodon.client.PeertubeAPI;
|
||||||
import fr.gouv.etalab.mastodon.interfaces.OnRetrievePeertubeInterface;
|
import fr.gouv.etalab.mastodon.interfaces.OnRetrievePeertubeInterface;
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,6 +56,10 @@ public class RetrievePeertubeSingleAsyncTask extends AsyncTask<Void, Void, Void>
|
||||||
protected Void doInBackground(Void... params) {
|
protected Void doInBackground(Void... params) {
|
||||||
API api = new API(this.contextReference.get());
|
API api = new API(this.contextReference.get());
|
||||||
apiResponse = api.getSinglePeertube(this.instanceName, videoId);
|
apiResponse = api.getSinglePeertube(this.instanceName, videoId);
|
||||||
|
if(MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE && apiResponse.getPeertubes() != null && apiResponse.getPeertubes().size() > 0) {
|
||||||
|
String rate = new PeertubeAPI(this.contextReference.get()).getRating(videoId);
|
||||||
|
apiResponse.getPeertubes().get(0).setMyRating(rate);
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -110,7 +110,11 @@ public class API {
|
||||||
UNENDORSE,
|
UNENDORSE,
|
||||||
SHOW_BOOST,
|
SHOW_BOOST,
|
||||||
HIDE_BOOST,
|
HIDE_BOOST,
|
||||||
BLOCK_DOMAIN
|
BLOCK_DOMAIN,
|
||||||
|
RATEVIDEO,
|
||||||
|
PEERTUBECOMMENT,
|
||||||
|
PEERTUBEREPLY,
|
||||||
|
PEERTUBEDELETECOMMENT
|
||||||
|
|
||||||
}
|
}
|
||||||
public enum accountPrivacy {
|
public enum accountPrivacy {
|
||||||
|
|
|
@ -46,6 +46,7 @@ public class Peertube {
|
||||||
private String category;
|
private String category;
|
||||||
private String license;
|
private String license;
|
||||||
private String language;
|
private String language;
|
||||||
|
private String myRating = "none";
|
||||||
|
|
||||||
private JSONObject cache;
|
private JSONObject cache;
|
||||||
|
|
||||||
|
@ -254,4 +255,12 @@ public class Peertube {
|
||||||
public void setLanguage(String language) {
|
public void setLanguage(String language) {
|
||||||
this.language = language;
|
this.language = language;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getMyRating() {
|
||||||
|
return myRating;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMyRating(String myRating) {
|
||||||
|
this.myRating = myRating;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -963,123 +963,6 @@ public class PeertubeAPI {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves public tag timeline *synchronously*
|
|
||||||
* @param tag String
|
|
||||||
* @param local boolean only local timeline
|
|
||||||
* @param max_id String id max
|
|
||||||
* @return APIResponse
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("SameParameterValue")
|
|
||||||
public APIResponse getPublicTimelineTag(String tag, boolean local, String max_id, List<String> any, List<String> all, List<String> none){
|
|
||||||
return getPublicTimelineTag(tag, local, false, max_id, null, tootPerPage, any, all, none);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves public tag timeline *synchronously*
|
|
||||||
* @param tag String
|
|
||||||
* @param local boolean only local timeline
|
|
||||||
* @param since_id String since id
|
|
||||||
* @return APIResponse
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("SameParameterValue")
|
|
||||||
public APIResponse getPublicTimelineTagSinceId(String tag, boolean local, String since_id, List<String> any, List<String> all, List<String> none){
|
|
||||||
return getPublicTimelineTag(tag, local, false, null, since_id, tootPerPage, any, all, none);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Retrieves public tag timeline *synchronously*
|
|
||||||
* @param tag String
|
|
||||||
* @param local boolean only local timeline
|
|
||||||
* @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 getPublicTimelineTag(String tag, boolean local, boolean onlymedia, String max_id, String since_id, int limit, List<String> any, List<String> all, List<String> none){
|
|
||||||
|
|
||||||
HashMap<String, String> params = new HashMap<>();
|
|
||||||
if( local)
|
|
||||||
params.put("local", Boolean.toString(true));
|
|
||||||
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;
|
|
||||||
if( onlymedia)
|
|
||||||
params.put("only_media", Boolean.toString(true));
|
|
||||||
|
|
||||||
if( any != null && any.size() > 0) {
|
|
||||||
StringBuilder parameters = new StringBuilder();
|
|
||||||
for (String a : any)
|
|
||||||
parameters.append("any[]=").append(a).append("&");
|
|
||||||
parameters = new StringBuilder(parameters.substring(0, parameters.length() - 1).substring(6));
|
|
||||||
params.put("any[]", parameters.toString());
|
|
||||||
}
|
|
||||||
if( all != null && all.size() > 0) {
|
|
||||||
StringBuilder parameters = new StringBuilder();
|
|
||||||
for (String a : all)
|
|
||||||
parameters.append("all[]=").append(a).append("&");
|
|
||||||
parameters = new StringBuilder(parameters.substring(0, parameters.length() - 1).substring(6));
|
|
||||||
params.put("all[]", parameters.toString());
|
|
||||||
}
|
|
||||||
if( none != null && none.size() > 0) {
|
|
||||||
StringBuilder parameters = new StringBuilder();
|
|
||||||
for (String a : none)
|
|
||||||
parameters.append("none[]=").append(a).append("&");
|
|
||||||
parameters = new StringBuilder(parameters.substring(0, parameters.length() - 1).substring(7));
|
|
||||||
params.put("none[]", parameters.toString());
|
|
||||||
}
|
|
||||||
params.put("limit",String.valueOf(limit));
|
|
||||||
statuses = new ArrayList<>();
|
|
||||||
if( tag == null)
|
|
||||||
return null;
|
|
||||||
try {
|
|
||||||
HttpsConnection httpsConnection = new HttpsConnection(context);
|
|
||||||
String response = httpsConnection.get(getAbsoluteUrl(String.format("/timelines/tag/%s",tag.trim())), 60, params, prefKeyOauthTokenT);
|
|
||||||
apiResponse.setSince_id(httpsConnection.getSince_id());
|
|
||||||
apiResponse.setMax_id(httpsConnection.getMax_id());
|
|
||||||
statuses = parseStatuses(context, 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.setStatuses(statuses);
|
|
||||||
return apiResponse;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves muted users by the authenticated account *synchronously*
|
|
||||||
* @param max_id String id max
|
|
||||||
* @return APIResponse
|
|
||||||
*/
|
|
||||||
public APIResponse getMuted(String max_id){
|
|
||||||
return getAccounts("/mutes", max_id, null, accountPerPage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves blocked users by the authenticated account *synchronously*
|
|
||||||
* @param max_id String id max
|
|
||||||
* @return APIResponse
|
|
||||||
*/
|
|
||||||
public APIResponse getBlocks(String max_id){
|
|
||||||
return getAccounts("/blocks", max_id, null, accountPerPage);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves following for the account specified by targetedId *synchronously*
|
* Retrieves following for the account specified by targetedId *synchronously*
|
||||||
* @param targetedId String targetedId
|
* @param targetedId String targetedId
|
||||||
|
@ -1149,24 +1032,16 @@ public class PeertubeAPI {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves blocked domains for the authenticated account *synchronously*
|
* Retrieves rating of user on a video *synchronously*
|
||||||
* @param max_id String id max
|
* @param id String id
|
||||||
* @return APIResponse
|
* @return APIResponse
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("SameParameterValue")
|
@SuppressWarnings("SameParameterValue")
|
||||||
public APIResponse getBlockedDomain(String max_id){
|
public String getRating(String id){
|
||||||
|
|
||||||
HashMap<String, String> params = new HashMap<>();
|
|
||||||
if( max_id != null )
|
|
||||||
params.put("max_id", max_id);
|
|
||||||
params.put("limit","80");
|
|
||||||
domains = new ArrayList<>();
|
|
||||||
try {
|
try {
|
||||||
HttpsConnection httpsConnection = new HttpsConnection(context);
|
HttpsConnection httpsConnection = new HttpsConnection(context);
|
||||||
String response = httpsConnection.get(getAbsoluteUrl("/domain_blocks"), 60, params, prefKeyOauthTokenT);
|
String response = httpsConnection.get(getAbsoluteUrl(String.format("/users/me/videos/%s/rating",id)), 60, null, prefKeyOauthTokenT);
|
||||||
apiResponse.setSince_id(httpsConnection.getSince_id());
|
return new JSONObject(response).get("rating").toString();
|
||||||
apiResponse.setMax_id(httpsConnection.getMax_id());
|
|
||||||
domains = parseDomains(new JSONArray(response));
|
|
||||||
} catch (HttpsConnection.HttpsConnectionException e) {
|
} catch (HttpsConnection.HttpsConnectionException e) {
|
||||||
setError(e.getStatusCode(), e);
|
setError(e.getStatusCode(), e);
|
||||||
} catch (NoSuchAlgorithmException e) {
|
} catch (NoSuchAlgorithmException e) {
|
||||||
|
@ -1178,133 +1053,7 @@ public class PeertubeAPI {
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
apiResponse.setDomains(domains);
|
return null;
|
||||||
return apiResponse;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete a blocked domains for the authenticated account *synchronously*
|
|
||||||
* @param domain String domain name
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("SameParameterValue")
|
|
||||||
public int deleteBlockedDomain(String domain){
|
|
||||||
|
|
||||||
HashMap<String, String> params = new HashMap<>();
|
|
||||||
params.put("domain",domain);
|
|
||||||
domains = new ArrayList<>();
|
|
||||||
HttpsConnection httpsConnection;
|
|
||||||
try {
|
|
||||||
httpsConnection = new HttpsConnection(context);
|
|
||||||
httpsConnection.delete(getAbsoluteUrl("/domain_blocks"), 60, params, prefKeyOauthTokenT);
|
|
||||||
actionCode = httpsConnection.getActionCode();
|
|
||||||
} catch (HttpsConnection.HttpsConnectionException e) {
|
|
||||||
setError(e.getStatusCode(), e);
|
|
||||||
} catch (NoSuchAlgorithmException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (KeyManagementException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return actionCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves follow requests for the authenticated account *synchronously*
|
|
||||||
* @param max_id String id max
|
|
||||||
* @return APIResponse
|
|
||||||
*/
|
|
||||||
public APIResponse getFollowRequest(String max_id){
|
|
||||||
return getFollowRequest(max_id, null, accountPerPage);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Retrieves follow requests for 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 getFollowRequest(String max_id, String since_id, int limit){
|
|
||||||
|
|
||||||
HashMap<String, String> 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("/follow_requests"), 60, params, prefKeyOauthTokenT);
|
|
||||||
apiResponse.setSince_id(httpsConnection.getSince_id());
|
|
||||||
apiResponse.setMax_id(httpsConnection.getMax_id());
|
|
||||||
accounts = parseAccountResponse(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.setAccounts(accounts);
|
|
||||||
return apiResponse;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves favourited status for the authenticated account *synchronously*
|
|
||||||
* @param max_id String id max
|
|
||||||
* @return APIResponse
|
|
||||||
*/
|
|
||||||
public APIResponse getFavourites(String max_id){
|
|
||||||
return getFavourites(max_id, null, tootPerPage);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Retrieves favourited status for 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 getFavourites(String max_id, String since_id, int limit){
|
|
||||||
|
|
||||||
HashMap<String, String> 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));
|
|
||||||
statuses = new ArrayList<>();
|
|
||||||
try {
|
|
||||||
HttpsConnection httpsConnection = new HttpsConnection(context);
|
|
||||||
String response = httpsConnection.get(getAbsoluteUrl("/favourites"), 60, params, prefKeyOauthTokenT);
|
|
||||||
apiResponse.setSince_id(httpsConnection.getSince_id());
|
|
||||||
apiResponse.setMax_id(httpsConnection.getMax_id());
|
|
||||||
statuses = parseStatuses(context, 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.setStatuses(statuses);
|
|
||||||
return apiResponse;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1318,324 +1067,90 @@ public class PeertubeAPI {
|
||||||
return postAction(statusAction, targetedId, null, null);
|
return postAction(statusAction, targetedId, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Makes the post action for a status
|
|
||||||
* @param targetedId String id of the targeted Id *can be this of a status or an account*
|
|
||||||
* @param muteNotifications - boolean - notifications should be also muted
|
|
||||||
* @return in status code - Should be equal to 200 when action is done
|
|
||||||
*/
|
|
||||||
public int muteNotifications(String targetedId, boolean muteNotifications){
|
|
||||||
|
|
||||||
HashMap<String, String> params = new HashMap<>();
|
public int postRating(String targetedId, String actionMore){
|
||||||
params.put("notifications", Boolean.toString(muteNotifications));
|
return postAction(API.StatusAction.RATEVIDEO, targetedId, actionMore, null);
|
||||||
try {
|
|
||||||
HttpsConnection httpsConnection = new HttpsConnection(context);
|
|
||||||
httpsConnection.post(getAbsoluteUrl(String.format("/accounts/%s/mute", targetedId)), 60, params, prefKeyOauthTokenT);
|
|
||||||
actionCode = httpsConnection.getActionCode();
|
|
||||||
} 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();
|
|
||||||
}
|
|
||||||
return actionCode;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public int postComment(String targetedId, String actionMore){
|
||||||
* Makes the post action
|
return postAction(API.StatusAction.PEERTUBECOMMENT, targetedId, actionMore, null);
|
||||||
* @param status Status object related to the status
|
|
||||||
* @param comment String comment for the report
|
|
||||||
* @return in status code - Should be equal to 200 when action is done
|
|
||||||
*/
|
|
||||||
public int reportAction(Status status, String comment){
|
|
||||||
return postAction(API.StatusAction.REPORT, null, status, comment);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int statusAction(Status status){
|
public int postReply(String targetedId, String actionMore, String targetedComment){
|
||||||
return postAction(API.StatusAction.CREATESTATUS, null, status, null);
|
return postAction(API.StatusAction.PEERTUBEREPLY, targetedId, actionMore, targetedComment);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int deleteComment(String targetedId, String targetedComment){
|
||||||
|
return postAction(API.StatusAction.PEERTUBEDELETECOMMENT, targetedId, null, targetedComment);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Makes the post action
|
* Makes the post action
|
||||||
* @param statusAction Enum
|
* @param statusAction Enum
|
||||||
* @param targetedId String id of the targeted Id *can be this of a status or an account*
|
* @param targetedId String id of the targeted Id *can be this of a status or an account*
|
||||||
* @param status Status object related to the status
|
* @param actionMore String another action
|
||||||
* @param comment String comment for the report
|
* @param targetedComment String another action
|
||||||
* @return in status code - Should be equal to 200 when action is done
|
* @return in status code - Should be equal to 200 when action is done
|
||||||
*/
|
*/
|
||||||
private int postAction(API.StatusAction statusAction, String targetedId, Status status, String comment ){
|
private int postAction(API.StatusAction statusAction, String targetedId, String actionMore, String targetedComment){
|
||||||
|
|
||||||
String action;
|
String action;
|
||||||
String actionCall = "POST";
|
String actionCall = "POST";
|
||||||
HashMap<String, String> params = null;
|
HashMap<String, String> params = null;
|
||||||
switch (statusAction){
|
switch (statusAction){
|
||||||
case FAVOURITE:
|
|
||||||
action = String.format("/statuses/%s/favourite", targetedId);
|
|
||||||
break;
|
|
||||||
case UNFAVOURITE:
|
|
||||||
action = String.format("/statuses/%s/unfavourite", targetedId);
|
|
||||||
break;
|
|
||||||
case REBLOG:
|
|
||||||
action = String.format("/statuses/%s/reblog", targetedId);
|
|
||||||
break;
|
|
||||||
case UNREBLOG:
|
|
||||||
action = String.format("/statuses/%s/unreblog", targetedId);
|
|
||||||
break;
|
|
||||||
case FOLLOW:
|
case FOLLOW:
|
||||||
action = "/users/me/subscriptions";
|
action = "/users/me/subscriptions";
|
||||||
params = new HashMap<>();
|
params = new HashMap<>();
|
||||||
params.put("uri", targetedId);
|
params.put("uri", targetedId);
|
||||||
break;
|
break;
|
||||||
case REMOTE_FOLLOW:
|
|
||||||
action = "/follows";
|
|
||||||
params = new HashMap<>();
|
|
||||||
params.put("uri", targetedId);
|
|
||||||
break;
|
|
||||||
case UNFOLLOW:
|
case UNFOLLOW:
|
||||||
action = String.format("/users/me/subscriptions/%s", targetedId);
|
action = String.format("/users/me/subscriptions/%s", targetedId);
|
||||||
actionCall = "DELETE";
|
actionCall = "DELETE";
|
||||||
break;
|
break;
|
||||||
case BLOCK:
|
case RATEVIDEO:
|
||||||
action = String.format("/accounts/%s/block", targetedId);
|
action = String.format("/videos/%s/rate", targetedId);
|
||||||
break;
|
|
||||||
case BLOCK_DOMAIN:
|
|
||||||
action = "/domain_blocks";
|
|
||||||
params = new HashMap<>();
|
params = new HashMap<>();
|
||||||
params.put("domain", targetedId);
|
params.put("rating", actionMore);
|
||||||
|
actionCall = "PUT";
|
||||||
break;
|
break;
|
||||||
case UNBLOCK:
|
case PEERTUBECOMMENT:
|
||||||
action = String.format("/accounts/%s/unblock", targetedId);
|
action = String.format("/videos/%s/comment-threads", targetedId);
|
||||||
break;
|
|
||||||
case MUTE:
|
|
||||||
action = String.format("/accounts/%s/mute", targetedId);
|
|
||||||
break;
|
|
||||||
case UNMUTE:
|
|
||||||
action = String.format("/accounts/%s/unmute", targetedId);
|
|
||||||
break;
|
|
||||||
case PIN:
|
|
||||||
action = String.format("/statuses/%s/pin", targetedId);
|
|
||||||
break;
|
|
||||||
case UNPIN:
|
|
||||||
action = String.format("/statuses/%s/unpin", targetedId);
|
|
||||||
break;
|
|
||||||
case ENDORSE:
|
|
||||||
action = String.format("/accounts/%s/pin", targetedId);
|
|
||||||
break;
|
|
||||||
case UNENDORSE:
|
|
||||||
action = String.format("/accounts/%s/unpin", targetedId);
|
|
||||||
break;
|
|
||||||
case SHOW_BOOST:
|
|
||||||
params = new HashMap<>();
|
params = new HashMap<>();
|
||||||
params.put("reblogs","true");
|
params.put("text", actionMore);
|
||||||
action = String.format("/accounts/%s/follow", targetedId);
|
|
||||||
break;
|
break;
|
||||||
case HIDE_BOOST:
|
case PEERTUBEDELETECOMMENT:
|
||||||
|
action = String.format("/videos/%s/comments/%s", targetedId, targetedComment);
|
||||||
|
actionCall = "DELETE";
|
||||||
|
break;
|
||||||
|
case PEERTUBEREPLY:
|
||||||
|
action = String.format("/videos/%s/comment/%s", targetedId, targetedComment);
|
||||||
params = new HashMap<>();
|
params = new HashMap<>();
|
||||||
params.put("reblogs","false");
|
params.put("text", actionMore);
|
||||||
action = String.format("/accounts/%s/follow", targetedId);
|
|
||||||
break;
|
|
||||||
case UNSTATUS:
|
|
||||||
action = String.format("/statuses/%s", targetedId);
|
|
||||||
break;
|
|
||||||
case AUTHORIZE:
|
|
||||||
action = String.format("/follow_requests/%s/authorize", targetedId);
|
|
||||||
break;
|
|
||||||
case REJECT:
|
|
||||||
action = String.format("/follow_requests/%s/reject", targetedId);
|
|
||||||
break;
|
|
||||||
case REPORT:
|
|
||||||
action = "/reports";
|
|
||||||
params = new HashMap<>();
|
|
||||||
params.put("account_id", status.getAccount().getId());
|
|
||||||
params.put("comment", comment);
|
|
||||||
params.put("status_ids[]", status.getId());
|
|
||||||
break;
|
|
||||||
case CREATESTATUS:
|
|
||||||
params = new HashMap<>();
|
|
||||||
action = "/statuses";
|
|
||||||
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());
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if(statusAction != API.StatusAction.UNSTATUS ) {
|
try {
|
||||||
|
HttpsConnection httpsConnection = new HttpsConnection(context);
|
||||||
try {
|
if( actionCall.equals("POST"))
|
||||||
HttpsConnection httpsConnection = new HttpsConnection(context);
|
httpsConnection.post(getAbsoluteUrl(action), 60, params, prefKeyOauthTokenT);
|
||||||
if( actionCall.equals("POST"))
|
else if( actionCall.equals("DELETE"))
|
||||||
httpsConnection.post(getAbsoluteUrl(action), 60, params, prefKeyOauthTokenT);
|
httpsConnection.delete(getAbsoluteUrl(action), 60, params, prefKeyOauthTokenT);
|
||||||
else if( actionCall.equals("DELETE"))
|
else if( actionCall.equals("PUT"))
|
||||||
httpsConnection.delete(getAbsoluteUrl(action), 60, params, prefKeyOauthTokenT);
|
httpsConnection.put(getAbsoluteUrl(action), 60, params, prefKeyOauthTokenT);
|
||||||
actionCode = httpsConnection.getActionCode();
|
actionCode = httpsConnection.getActionCode();
|
||||||
} catch (HttpsConnection.HttpsConnectionException e) {
|
} catch (HttpsConnection.HttpsConnectionException e) {
|
||||||
setError(e.getStatusCode(), e);
|
setError(e.getStatusCode(), e);
|
||||||
} catch (NoSuchAlgorithmException e) {
|
} catch (NoSuchAlgorithmException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
} catch (KeyManagementException e) {
|
} catch (KeyManagementException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
|
||||||
}else{
|
|
||||||
try {
|
|
||||||
HttpsConnection httpsConnection = new HttpsConnection(context);
|
|
||||||
httpsConnection.delete(getAbsoluteUrl(action), 60, null, prefKeyOauthTokenT);
|
|
||||||
actionCode = httpsConnection.getActionCode();
|
|
||||||
} catch (HttpsConnection.HttpsConnectionException e) {
|
|
||||||
setError(e.getStatusCode(), e);
|
|
||||||
} catch (NoSuchAlgorithmException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (KeyManagementException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return actionCode;
|
return actionCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Posts a status
|
|
||||||
* @param status Status object related to the status
|
|
||||||
* @return APIResponse
|
|
||||||
*/
|
|
||||||
public APIResponse postStatusAction(Status status){
|
|
||||||
|
|
||||||
HashMap<String, String> params = new HashMap<>();
|
|
||||||
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());
|
|
||||||
statuses = new ArrayList<>();
|
|
||||||
|
|
||||||
try {
|
|
||||||
HttpsConnection httpsConnection = new HttpsConnection(context);
|
|
||||||
String response = httpsConnection.post(getAbsoluteUrl("/statuses"), 60, params, prefKeyOauthTokenT);
|
|
||||||
apiResponse.setSince_id(httpsConnection.getSince_id());
|
|
||||||
apiResponse.setMax_id(httpsConnection.getMax_id());
|
|
||||||
Status statusreturned = parseStatuses(context, new JSONObject(response));
|
|
||||||
statuses.add(statusreturned);
|
|
||||||
} 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.setStatuses(statuses);
|
|
||||||
return apiResponse;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Posts a status
|
|
||||||
* @param notificationId String, the current notification id, if null all notifications are deleted
|
|
||||||
* @return APIResponse
|
|
||||||
*/
|
|
||||||
public APIResponse postNoticationAction(String notificationId){
|
|
||||||
|
|
||||||
String action;
|
|
||||||
HashMap<String, String> params = new HashMap<>();
|
|
||||||
if( notificationId == null)
|
|
||||||
action = "/notifications/clear";
|
|
||||||
else {
|
|
||||||
params.put("id",notificationId);
|
|
||||||
action = "/notifications/dismiss";
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
new HttpsConnection(context).post(getAbsoluteUrl(action), 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves notifications for the authenticated account since an id*synchronously*
|
|
||||||
* @param since_id String since max
|
|
||||||
* @return APIResponse
|
|
||||||
*/
|
|
||||||
public APIResponse getNotificationsSince(String since_id, boolean display){
|
|
||||||
return getNotifications(null, since_id, notificationPerPage, display);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves notifications for the authenticated account since an id*synchronously*
|
|
||||||
* @param since_id String since max
|
|
||||||
* @return APIResponse
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("SameParameterValue")
|
|
||||||
public APIResponse getNotificationsSince(String since_id, int notificationPerPage, boolean display){
|
|
||||||
return getNotifications(null, since_id, notificationPerPage, display);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves notifications for the authenticated account *synchronously*
|
|
||||||
* @param max_id String id max
|
|
||||||
* @return APIResponse
|
|
||||||
*/
|
|
||||||
public APIResponse getNotifications(String max_id, boolean display){
|
|
||||||
return getNotifications(max_id, null, notificationPerPage, display);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves notifications for the authenticated account *synchronously*
|
* Retrieves notifications for the authenticated account *synchronously*
|
||||||
|
@ -2176,214 +1691,6 @@ public class PeertubeAPI {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add an account in a list
|
|
||||||
* @param id String, id of the list
|
|
||||||
* @param account_ids String, account to add
|
|
||||||
* @return APIResponse
|
|
||||||
*/
|
|
||||||
//TODO: it is unclear what is returned here
|
|
||||||
//TODO: improves doc https://github.com/tootsuite/documentation/blob/4bb149c73f40fa58fd7265a336703dd2d83efb1c/Using-the-API/API.md#addingremoving-accounts-tofrom-a-list
|
|
||||||
public APIResponse addAccountToList(String id, String[] account_ids){
|
|
||||||
|
|
||||||
HashMap<String, String> params = new HashMap<>();
|
|
||||||
StringBuilder parameters = new StringBuilder();
|
|
||||||
for(String val: account_ids)
|
|
||||||
parameters.append("account_ids[]=").append(val).append("&");
|
|
||||||
if( parameters.length() > 0) {
|
|
||||||
parameters = new StringBuilder(parameters.substring(0, parameters.length() - 1).substring(14));
|
|
||||||
params.put("account_ids[]", parameters.toString());
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
new HttpsConnection(context).post(getAbsoluteUrl(String.format("/lists/%s/accounts", id)), 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 an account from a list
|
|
||||||
* @param id String, the id of the list
|
|
||||||
* @return APIResponse
|
|
||||||
*/
|
|
||||||
public int deleteAccountFromList(String id, String[] account_ids){
|
|
||||||
try {
|
|
||||||
HttpsConnection httpsConnection = new HttpsConnection(context);
|
|
||||||
StringBuilder parameters = new StringBuilder();
|
|
||||||
HashMap<String, String> params = new HashMap<>();
|
|
||||||
for(String val: account_ids)
|
|
||||||
parameters.append("account_ids[]=").append(val).append("&");
|
|
||||||
if( parameters.length() > 0) {
|
|
||||||
parameters = new StringBuilder(parameters.substring(0, parameters.length() - 1).substring(14));
|
|
||||||
params.put("account_ids[]", parameters.toString());
|
|
||||||
}
|
|
||||||
httpsConnection.delete(getAbsoluteUrl(String.format("/lists/%s/accounts", id)), 60, params, prefKeyOauthTokenT);
|
|
||||||
actionCode = httpsConnection.getActionCode();
|
|
||||||
} 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();
|
|
||||||
}
|
|
||||||
return actionCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Posts a list
|
|
||||||
* @param title String, the title of the list
|
|
||||||
* @return APIResponse
|
|
||||||
*/
|
|
||||||
public APIResponse createList(String title){
|
|
||||||
|
|
||||||
HashMap<String, String> params = new HashMap<>();
|
|
||||||
params.put("title",title);
|
|
||||||
List<fr.gouv.etalab.mastodon.client.Entities.List> lists = new ArrayList<>();
|
|
||||||
fr.gouv.etalab.mastodon.client.Entities.List list;
|
|
||||||
try {
|
|
||||||
String response = new HttpsConnection(context).post(getAbsoluteUrl("/lists"), 60, params, 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update a list by its id
|
|
||||||
* @param id String, the id of the list
|
|
||||||
* @param title String, the title of the list
|
|
||||||
* @return APIResponse
|
|
||||||
*/
|
|
||||||
public APIResponse updateList(String id, String title){
|
|
||||||
|
|
||||||
HashMap<String, String> params = new HashMap<>();
|
|
||||||
params.put("title",title);
|
|
||||||
List<fr.gouv.etalab.mastodon.client.Entities.List> lists = new ArrayList<>();
|
|
||||||
fr.gouv.etalab.mastodon.client.Entities.List list;
|
|
||||||
try {
|
|
||||||
String response = new HttpsConnection(context).put(getAbsoluteUrl(String.format("/lists/%s", id)), 60, params, 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete a list by its id
|
|
||||||
* @param id String, the id of the list
|
|
||||||
* @return APIResponse
|
|
||||||
*/
|
|
||||||
public int deleteList(String id){
|
|
||||||
try {
|
|
||||||
HttpsConnection httpsConnection = new HttpsConnection(context);
|
|
||||||
httpsConnection.delete(getAbsoluteUrl(String.format("/lists/%s", id)), 60, null, prefKeyOauthTokenT);
|
|
||||||
actionCode = httpsConnection.getActionCode();
|
|
||||||
} catch (HttpsConnection.HttpsConnectionException e) {
|
|
||||||
setError(e.getStatusCode(), e);
|
|
||||||
}catch (Exception e) {
|
|
||||||
setDefaultError(e);
|
|
||||||
}
|
|
||||||
return actionCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves list from Communitywiki *synchronously*
|
|
||||||
* @return APIResponse
|
|
||||||
*/
|
|
||||||
public ArrayList<String> getCommunitywikiList() {
|
|
||||||
ArrayList<String> list = new ArrayList<>();
|
|
||||||
try {
|
|
||||||
HttpsConnection httpsConnection = new HttpsConnection(context);
|
|
||||||
String response = httpsConnection.get(getAbsoluteUrlCommunitywiki("/list"), 60, null, prefKeyOauthTokenT);
|
|
||||||
|
|
||||||
JSONArray jsonArray = new JSONArray(response);
|
|
||||||
int len = jsonArray.length();
|
|
||||||
for (int i=0;i<len;i++){
|
|
||||||
list.add(jsonArray.get(i).toString());
|
|
||||||
}
|
|
||||||
} 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 list;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves list from Communitywiki *synchronously*
|
|
||||||
* @return APIResponse
|
|
||||||
*/
|
|
||||||
public ArrayList<String> getCommunitywikiList(String name) {
|
|
||||||
ArrayList<String> list = new ArrayList<>();
|
|
||||||
try {
|
|
||||||
HttpsConnection httpsConnection = new HttpsConnection(context);
|
|
||||||
String response = httpsConnection.get(getAbsoluteUrlCommunitywiki(String.format("/list/%s", name)), 60, null, prefKeyOauthTokenT);
|
|
||||||
|
|
||||||
JSONArray jsonArray = new JSONArray(response);
|
|
||||||
for(int i = 0; i < jsonArray.length(); i++){
|
|
||||||
try {
|
|
||||||
list.add(jsonArray.getJSONObject(i).getString("acct"));
|
|
||||||
} catch (JSONException ignored) {}
|
|
||||||
}
|
|
||||||
} 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 list;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -95,12 +95,14 @@ import es.dmoral.toasty.Toasty;
|
||||||
import fr.gouv.etalab.mastodon.R;
|
import fr.gouv.etalab.mastodon.R;
|
||||||
import fr.gouv.etalab.mastodon.activities.BaseMainActivity;
|
import fr.gouv.etalab.mastodon.activities.BaseMainActivity;
|
||||||
import fr.gouv.etalab.mastodon.activities.MediaActivity;
|
import fr.gouv.etalab.mastodon.activities.MediaActivity;
|
||||||
|
import fr.gouv.etalab.mastodon.activities.PeertubeActivity;
|
||||||
import fr.gouv.etalab.mastodon.activities.ShowAccountActivity;
|
import fr.gouv.etalab.mastodon.activities.ShowAccountActivity;
|
||||||
import fr.gouv.etalab.mastodon.activities.ShowConversationActivity;
|
import fr.gouv.etalab.mastodon.activities.ShowConversationActivity;
|
||||||
import fr.gouv.etalab.mastodon.activities.TootActivity;
|
import fr.gouv.etalab.mastodon.activities.TootActivity;
|
||||||
import fr.gouv.etalab.mastodon.activities.TootInfoActivity;
|
import fr.gouv.etalab.mastodon.activities.TootInfoActivity;
|
||||||
import fr.gouv.etalab.mastodon.asynctasks.PostActionAsyncTask;
|
import fr.gouv.etalab.mastodon.asynctasks.PostActionAsyncTask;
|
||||||
import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask;
|
import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask;
|
||||||
|
import fr.gouv.etalab.mastodon.asynctasks.UpdateAccountInfoAsyncTask;
|
||||||
import fr.gouv.etalab.mastodon.client.API;
|
import fr.gouv.etalab.mastodon.client.API;
|
||||||
import fr.gouv.etalab.mastodon.client.APIResponse;
|
import fr.gouv.etalab.mastodon.client.APIResponse;
|
||||||
import fr.gouv.etalab.mastodon.client.Entities.Account;
|
import fr.gouv.etalab.mastodon.client.Entities.Account;
|
||||||
|
@ -129,6 +131,7 @@ import fr.gouv.etalab.mastodon.sqlite.StatusCacheDAO;
|
||||||
import fr.gouv.etalab.mastodon.sqlite.StatusStoredDAO;
|
import fr.gouv.etalab.mastodon.sqlite.StatusStoredDAO;
|
||||||
import fr.gouv.etalab.mastodon.sqlite.TempMuteDAO;
|
import fr.gouv.etalab.mastodon.sqlite.TempMuteDAO;
|
||||||
|
|
||||||
|
import static fr.gouv.etalab.mastodon.activities.BaseMainActivity.social;
|
||||||
import static fr.gouv.etalab.mastodon.activities.MainActivity.currentLocale;
|
import static fr.gouv.etalab.mastodon.activities.MainActivity.currentLocale;
|
||||||
import static fr.gouv.etalab.mastodon.helper.Helper.THEME_BLACK;
|
import static fr.gouv.etalab.mastodon.helper.Helper.THEME_BLACK;
|
||||||
import static fr.gouv.etalab.mastodon.helper.Helper.THEME_DARK;
|
import static fr.gouv.etalab.mastodon.helper.Helper.THEME_DARK;
|
||||||
|
@ -339,6 +342,10 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
|
||||||
Button status_show_more_content;
|
Button status_show_more_content;
|
||||||
SparkButton spark_button_fav, spark_button_reblog;
|
SparkButton spark_button_fav, spark_button_reblog;
|
||||||
RelativeLayout horizontal_second_image;
|
RelativeLayout horizontal_second_image;
|
||||||
|
|
||||||
|
LinearLayout status_peertube_container;
|
||||||
|
TextView status_peertube_reply, status_peertube_delete;
|
||||||
|
|
||||||
public View getView(){
|
public View getView(){
|
||||||
return itemView;
|
return itemView;
|
||||||
}
|
}
|
||||||
|
@ -422,6 +429,11 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
|
||||||
spark_button_fav = itemView.findViewById(R.id.spark_button_fav);
|
spark_button_fav = itemView.findViewById(R.id.spark_button_fav);
|
||||||
spark_button_reblog = itemView.findViewById(R.id.spark_button_reblog);
|
spark_button_reblog = itemView.findViewById(R.id.spark_button_reblog);
|
||||||
horizontal_second_image = itemView.findViewById(R.id.horizontal_second_image);
|
horizontal_second_image = itemView.findViewById(R.id.horizontal_second_image);
|
||||||
|
|
||||||
|
status_peertube_container = itemView.findViewById(R.id.status_peertube_container);
|
||||||
|
status_peertube_reply = itemView.findViewById(R.id.status_peertube_reply);
|
||||||
|
status_peertube_delete = itemView.findViewById(R.id.status_peertube_delete);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -436,6 +448,8 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
|
||||||
|
|
||||||
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
boolean isCompactMode = sharedpreferences.getBoolean(Helper.SET_COMPACT_MODE, false);
|
boolean isCompactMode = sharedpreferences.getBoolean(Helper.SET_COMPACT_MODE, false);
|
||||||
|
if( social == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE)
|
||||||
|
isCompactMode = false;
|
||||||
if( type == RetrieveFeedsAsyncTask.Type.CONTEXT && position == conversationPosition)
|
if( type == RetrieveFeedsAsyncTask.Type.CONTEXT && position == conversationPosition)
|
||||||
return FOCUSED_STATUS;
|
return FOCUSED_STATUS;
|
||||||
else if( type != RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE && !Helper.filterToots(context, statuses.get(position), timedMute, type))
|
else if( type != RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE && !Helper.filterToots(context, statuses.get(position), timedMute, type))
|
||||||
|
@ -627,7 +641,86 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
|
||||||
//Display a preview for accounts that have replied *if enabled and only for home timeline*
|
//Display a preview for accounts that have replied *if enabled and only for home timeline*
|
||||||
|
|
||||||
|
|
||||||
|
if( social == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE) {
|
||||||
|
holder.status_action_container.setVisibility(View.GONE);
|
||||||
|
holder.status_peertube_container.setVisibility(View.VISIBLE);
|
||||||
|
holder.status_peertube_reply.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
AlertDialog.Builder builderInner;
|
||||||
|
int style;
|
||||||
|
if (theme == Helper.THEME_DARK) {
|
||||||
|
style = R.style.DialogDark;
|
||||||
|
} else if (theme == Helper.THEME_BLACK){
|
||||||
|
style = R.style.DialogBlack;
|
||||||
|
}else {
|
||||||
|
style = R.style.Dialog;
|
||||||
|
}
|
||||||
|
builderInner = new AlertDialog.Builder(context, style);
|
||||||
|
builderInner.setTitle(R.string.comment);
|
||||||
|
EditText input = new EditText(context);
|
||||||
|
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
|
||||||
|
LinearLayout.LayoutParams.MATCH_PARENT,
|
||||||
|
LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||||
|
input.setLayoutParams(lp);
|
||||||
|
builderInner.setView(input);
|
||||||
|
builderInner.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog,int which) {
|
||||||
|
dialog.dismiss();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
builderInner.setPositiveButton(R.string.validate, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog,int which) {
|
||||||
|
String comment = input.getText().toString();
|
||||||
|
if( comment.trim().length() > 0 ) {
|
||||||
|
|
||||||
|
new PostActionAsyncTask(context, PeertubeActivity.video_id, comment, status.getId(),StatusListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
dialog.dismiss();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
builderInner.show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if( status.getAccount().getId().equals(userId))
|
||||||
|
holder.status_peertube_delete.setVisibility(View.VISIBLE);
|
||||||
|
else
|
||||||
|
holder.status_peertube_delete.setVisibility(View.GONE);
|
||||||
|
holder.status_peertube_delete.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
AlertDialog.Builder builderInner;
|
||||||
|
int style;
|
||||||
|
if (theme == Helper.THEME_DARK) {
|
||||||
|
style = R.style.DialogDark;
|
||||||
|
} else if (theme == Helper.THEME_BLACK){
|
||||||
|
style = R.style.DialogBlack;
|
||||||
|
}else {
|
||||||
|
style = R.style.Dialog;
|
||||||
|
}
|
||||||
|
builderInner = new AlertDialog.Builder(context, style);
|
||||||
|
builderInner.setTitle(R.string.delete_comment);
|
||||||
|
builderInner.setMessage(R.string.delete_comment_confirm);
|
||||||
|
builderInner.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog,int which) {
|
||||||
|
dialog.dismiss();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
builderInner.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog,int which) {
|
||||||
|
new PostActionAsyncTask(context, API.StatusAction.PEERTUBEDELETECOMMENT, PeertubeActivity.video_id, null, status.getId(),StatusListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
dialog.dismiss();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
builderInner.show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
if( status.isNew())
|
if( status.isNew())
|
||||||
holder.new_element.setVisibility(View.VISIBLE);
|
holder.new_element.setVisibility(View.VISIBLE);
|
||||||
else
|
else
|
||||||
|
@ -1174,7 +1267,6 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
|
||||||
Helper.loadGiF(context, status.getConversationProfilePicture().get(3), holder.conversation_pp_4);
|
Helper.loadGiF(context, status.getConversationProfilePicture().get(3), holder.conversation_pp_4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
holder.status_action_container.setVisibility(View.VISIBLE);
|
|
||||||
boolean differentLanguage = false;
|
boolean differentLanguage = false;
|
||||||
if( status.getReblog() == null)
|
if( status.getReblog() == null)
|
||||||
differentLanguage = status.getLanguage() != null && !status.getLanguage().trim().equals(currentLocale);
|
differentLanguage = status.getLanguage() != null && !status.getLanguage().trim().equals(currentLocale);
|
||||||
|
@ -2583,6 +2675,17 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
|
||||||
position++;
|
position++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if( statusAction == API.StatusAction.PEERTUBEDELETECOMMENT){
|
||||||
|
int position = 0;
|
||||||
|
for(Status status: statuses){
|
||||||
|
if( status.getId().equals(targetedId)) {
|
||||||
|
statuses.remove(status);
|
||||||
|
statusListAdapter.notifyItemRemoved(position);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
position++;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void notifyStatusChanged(Status status){
|
public void notifyStatusChanged(Status status){
|
||||||
|
|
|
@ -97,7 +97,6 @@
|
||||||
android:id="@+id/peertube_like_count"
|
android:id="@+id/peertube_like_count"
|
||||||
android:layout_gravity="center_horizontal"
|
android:layout_gravity="center_horizontal"
|
||||||
android:gravity="center_horizontal"
|
android:gravity="center_horizontal"
|
||||||
android:drawableTop="@drawable/ic_thumb_up_peertube"
|
|
||||||
android:drawablePadding="5dp"
|
android:drawablePadding="5dp"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_marginRight="10dp"
|
android:layout_marginRight="10dp"
|
||||||
|
@ -111,7 +110,6 @@
|
||||||
android:id="@+id/peertube_dislike_count"
|
android:id="@+id/peertube_dislike_count"
|
||||||
android:layout_gravity="center_horizontal"
|
android:layout_gravity="center_horizontal"
|
||||||
android:gravity="center_horizontal"
|
android:gravity="center_horizontal"
|
||||||
android:drawableTop="@drawable/ic_thumb_down_peertube"
|
|
||||||
android:drawablePadding="5dp"
|
android:drawablePadding="5dp"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_marginRight="10dp"
|
android:layout_marginRight="10dp"
|
||||||
|
|
|
@ -683,6 +683,38 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content" />
|
android:layout_height="wrap_content" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_marginStart="60dp"
|
||||||
|
android:layout_marginLeft="60dp"
|
||||||
|
android:id="@+id/status_peertube_container"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="10dp"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
<TextView
|
||||||
|
android:drawablePadding="2dp"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:textColor="?colorAccent"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:text="@string/reply"
|
||||||
|
android:id="@+id/status_peertube_reply"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
<TextView
|
||||||
|
android:drawablePadding="2dp"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
android:layout_marginLeft="15dp"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:textColor="?colorAccent"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:text="@string/delete"
|
||||||
|
android:id="@+id/status_peertube_delete"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
</LinearLayout>/
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_marginStart="60dp"
|
android:layout_marginStart="60dp"
|
||||||
android:layout_marginLeft="60dp"
|
android:layout_marginLeft="60dp"
|
||||||
|
|
|
@ -104,4 +104,10 @@
|
||||||
<!-- TOASTY -->
|
<!-- TOASTY -->
|
||||||
<color name="toasty_text">#2e2e2e</color>
|
<color name="toasty_text">#2e2e2e</color>
|
||||||
<color name="toasty_background">#c8c8c8</color>
|
<color name="toasty_background">#c8c8c8</color>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<color name="neutral_thumbs">#606984</color>
|
||||||
|
<color name="positive_thumbs">#2b90d9</color>
|
||||||
|
<color name="negative_thumbs">#F44336</color>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -793,6 +793,9 @@
|
||||||
<string name="recently_added">Recently added</string>
|
<string name="recently_added">Recently added</string>
|
||||||
<string name="local">Local</string>
|
<string name="local">Local</string>
|
||||||
<string name="upload_video">Upload</string>
|
<string name="upload_video">Upload</string>
|
||||||
|
<string name="reply">Reply</string>
|
||||||
|
<string name="delete_comment">Delete a comment</string>
|
||||||
|
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
|
||||||
<!-- end languages -->
|
<!-- end languages -->
|
||||||
|
|
||||||
</resources>
|
</resources>
|
Loading…
Reference in New Issue