From de98ca8d7905f670534e8c3b763ca07a87c1f0e5 Mon Sep 17 00:00:00 2001 From: stom79 Date: Wed, 9 Jan 2019 10:13:35 +0100 Subject: [PATCH] Front end + back end video updates --- .../PeertubeEditUploadActivity.java | 159 +++++++++++++++++- .../asynctasks/PostPeertubeAsyncTask.java | 65 +++++++ .../mastodon/client/Entities/Peertube.java | 18 ++ .../etalab/mastodon/client/PeertubeAPI.java | 39 ++++- app/src/main/res/values/strings.xml | 1 + 5 files changed, 271 insertions(+), 11 deletions(-) create mode 100644 app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/PostPeertubeAsyncTask.java diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/PeertubeEditUploadActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/PeertubeEditUploadActivity.java index f6b236088..319436f57 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/PeertubeEditUploadActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/PeertubeEditUploadActivity.java @@ -43,6 +43,7 @@ import java.util.Map; import es.dmoral.toasty.Toasty; import fr.gouv.etalab.mastodon.R; +import fr.gouv.etalab.mastodon.asynctasks.PostPeertubeAsyncTask; import fr.gouv.etalab.mastodon.asynctasks.RetrievePeertubeChannelsAsyncTask; import fr.gouv.etalab.mastodon.asynctasks.RetrievePeertubeSingleAsyncTask; import fr.gouv.etalab.mastodon.client.APIResponse; @@ -52,6 +53,7 @@ import fr.gouv.etalab.mastodon.helper.Helper; import fr.gouv.etalab.mastodon.interfaces.OnRetrievePeertubeInterface; import mabbas007.tagsedittext.TagsEditText; +import static android.os.AsyncTask.THREAD_POOL_EXECUTOR; import static fr.gouv.etalab.mastodon.asynctasks.RetrievePeertubeInformationAsyncTask.peertubeInformation; import static fr.gouv.etalab.mastodon.helper.Helper.THEME_LIGHT; import static fr.gouv.etalab.mastodon.helper.Helper.changeMaterialSpinnerColor; @@ -67,6 +69,11 @@ public class PeertubeEditUploadActivity extends BaseActivity implements OnRetrie private LinkedHashMap channels; private String videoId; private Account channel; + HashMap categoryToSend; + HashMap licenseToSend; + HashMap privacyToSend; + HashMap languageToSend; + HashMap channelToSend; @Override protected void onCreate(Bundle savedInstanceState) { @@ -131,6 +138,9 @@ public class PeertubeEditUploadActivity extends BaseActivity implements OnRetrie set_upload_nsfw = findViewById(R.id.set_upload_nsfw); set_upload_enable_comments = findViewById(R.id.set_upload_enable_comments); + + + //Change spinner colors changeMaterialSpinnerColor(PeertubeEditUploadActivity.this, set_upload_channel); changeMaterialSpinnerColor(PeertubeEditUploadActivity.this, set_upload_categories); changeMaterialSpinnerColor(PeertubeEditUploadActivity.this, set_upload_licenses); @@ -138,6 +148,7 @@ public class PeertubeEditUploadActivity extends BaseActivity implements OnRetrie changeMaterialSpinnerColor(PeertubeEditUploadActivity.this, set_upload_privacy); + //Get params from the API LinkedHashMap categories = new LinkedHashMap<>(peertubeInformation.getCategories()); LinkedHashMap licences = new LinkedHashMap<>(peertubeInformation.getLicences()); LinkedHashMap privacies = new LinkedHashMap<>(peertubeInformation.getPrivacies()); @@ -242,18 +253,24 @@ public class PeertubeEditUploadActivity extends BaseActivity implements OnRetrie Peertube peertube = apiResponse.getPeertubes().get(0); new RetrievePeertubeChannelsAsyncTask(PeertubeEditUploadActivity.this, PeertubeEditUploadActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - HashMap languageM = peertube.getLanguage(); - HashMap licenseM = peertube.getLicense(); - HashMap privacyM = peertube.getPrivacy(); - HashMap categoryM = peertube.getCategory(); + if( peertube.isUpdate()){ + Toasty.success(PeertubeEditUploadActivity.this, getString(R.string.toast_peertube_video_updated), Toast.LENGTH_LONG).show(); + peertube.setUpdate(false); + } - Map.Entry entryString = languageM.entrySet().iterator().next(); + languageToSend = peertube.getLanguage(); + licenseToSend = peertube.getLicense(); + privacyToSend = peertube.getPrivacy(); + categoryToSend = peertube.getCategory(); + + + Map.Entry entryString = languageToSend.entrySet().iterator().next(); String language = entryString.getValue(); - Map.Entry entryInt = licenseM.entrySet().iterator().next(); + Map.Entry entryInt = licenseToSend.entrySet().iterator().next(); String license = entryInt.getValue(); - entryInt = privacyM.entrySet().iterator().next(); + entryInt = privacyToSend.entrySet().iterator().next(); String privacy = entryInt.getValue(); - entryInt = categoryM.entrySet().iterator().next(); + entryInt = categoryToSend.entrySet().iterator().next(); String category = entryInt.getValue(); channel = peertube.getChannel(); @@ -322,6 +339,129 @@ public class PeertubeEditUploadActivity extends BaseActivity implements OnRetrie } } + //Manage privacies + set_upload_privacy.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, String item) { + LinkedHashMap privaciesCheck = new LinkedHashMap<>(peertubeInformation.getPrivacies()); + Iterator it = privaciesCheck.entrySet().iterator(); + int i = 0; + while (it.hasNext()) { + Map.Entry pair = (Map.Entry)it.next(); + if( i == position){ + privacyToSend = new HashMap<>(); + privacyToSend.put((Integer)pair.getKey(), (String)pair.getValue()); + break; + } + it.remove(); + i++; + } + } + }); + //Manage license + set_upload_licenses.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, String item) { + LinkedHashMap licensesCheck = new LinkedHashMap<>(peertubeInformation.getLicences()); + Iterator it = licensesCheck.entrySet().iterator(); + int i = 0; + while (it.hasNext()) { + Map.Entry pair = (Map.Entry)it.next(); + if( i == position){ + licenseToSend = new HashMap<>(); + licenseToSend.put((Integer)pair.getKey(), (String)pair.getValue()); + break; + } + it.remove(); + i++; + } + } + }); + //Manage categories + set_upload_categories.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, String item) { + LinkedHashMap categoriesCheck = new LinkedHashMap<>(peertubeInformation.getCategories()); + Iterator it = categoriesCheck.entrySet().iterator(); + int i = 0; + while (it.hasNext()) { + Map.Entry pair = (Map.Entry)it.next(); + if( i == position){ + categoryToSend = new HashMap<>(); + categoryToSend.put((Integer)pair.getKey(), (String)pair.getValue()); + break; + } + it.remove(); + i++; + } + } + }); + //Manage languages + set_upload_languages.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, String item) { + LinkedHashMap languagesCheck = new LinkedHashMap<>(peertubeInformation.getLanguages()); + Iterator it = languagesCheck.entrySet().iterator(); + int i = 0; + while (it.hasNext()) { + Map.Entry pair = (Map.Entry)it.next(); + if( i == position){ + languageToSend = new HashMap<>(); + languageToSend.put((String)pair.getKey(), (String)pair.getValue()); + break; + } + it.remove(); + i++; + } + } + }); + + + //Manage languages + set_upload_channel.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, String item) { + LinkedHashMap channelsCheck = new LinkedHashMap<>(channels); + Iterator it = channelsCheck.entrySet().iterator(); + int i = 0; + while (it.hasNext()) { + Map.Entry pair = (Map.Entry)it.next(); + if( i == position){ + channelToSend = new HashMap<>(); + channelToSend.put((String)pair.getKey(), (String)pair.getValue()); + break; + } + it.remove(); + i++; + } + } + }); + + + set_upload_submit.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String title = p_video_title.getText().toString().trim(); + String description = p_video_description.getText().toString().trim(); + boolean isNSFW = set_upload_nsfw.isChecked(); + boolean commentEnabled = set_upload_enable_comments.isChecked(); + Peertube peertubeSent = new Peertube(); + peertube.setName(title); + peertube.setDescription(description); + peertube.setSensitive(isNSFW); + peertube.setCommentsEnabled(commentEnabled); + peertube.setCategory(categoryToSend); + peertube.setLicense(licenseToSend); + peertube.setLanguage(languageToSend); + peertube.setChannelForUpdate(channelToSend); + List tags = p_video_tags.getTags(); + if( tags != null && tags.size() > 0) + peertube.setTags(tags); + set_upload_submit.setEnabled(false); + new PostPeertubeAsyncTask(PeertubeEditUploadActivity.this, peertube, PeertubeEditUploadActivity.this).executeOnExecutor(THREAD_POOL_EXECUTOR); + } + }); + set_upload_privacy.setSelectedIndex(privacyPosition); set_upload_languages.setSelectedIndex(languagePosition); set_upload_licenses.setSelectedIndex(licensePosition); @@ -365,7 +505,8 @@ public class PeertubeEditUploadActivity extends BaseActivity implements OnRetrie int channelPosition = 0; if( channels.containsKey(channel.getUsername())){ - Iterator it = channels.entrySet().iterator(); + LinkedHashMap channelsIterator = new LinkedHashMap<>(channels); + Iterator it = channelsIterator.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = (Map.Entry)it.next(); if(pair.getKey().equals(channel.getUsername())) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/PostPeertubeAsyncTask.java b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/PostPeertubeAsyncTask.java new file mode 100644 index 000000000..8051eb925 --- /dev/null +++ b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/PostPeertubeAsyncTask.java @@ -0,0 +1,65 @@ +/* Copyright 2019 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.APIResponse; +import fr.gouv.etalab.mastodon.client.Entities.Peertube; +import fr.gouv.etalab.mastodon.client.PeertubeAPI; +import fr.gouv.etalab.mastodon.interfaces.OnRetrievePeertubeInterface; + + +/** + * Created by Thomas on 09/01/2019. + * Update a Peertube video + */ + +public class PostPeertubeAsyncTask extends AsyncTask { + + + + private APIResponse apiResponse; + private OnRetrievePeertubeInterface listener; + private WeakReference contextReference; + private Peertube peertube; + + + + public PostPeertubeAsyncTask(Context context, Peertube peertube, OnRetrievePeertubeInterface onRetrievePeertubeInterface){ + this.contextReference = new WeakReference<>(context); + this.listener = onRetrievePeertubeInterface; + this.peertube = peertube; + } + + + + @Override + protected Void doInBackground(Void... params) { + PeertubeAPI peertubeAPI = new PeertubeAPI(this.contextReference.get()); + apiResponse = peertubeAPI.updateVideo(peertube); + if( apiResponse != null && apiResponse.getPeertubes() != null && apiResponse.getPeertubes().size() > 0) + apiResponse.getPeertubes().get(0).setUpdate(true); + return null; + } + + @Override + protected void onPostExecute(Void result) { + listener.onRetrievePeertube(apiResponse); + } +} 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 cb8656258..c81328965 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 @@ -50,7 +50,9 @@ public class Peertube { private HashMap license; private HashMap language; private HashMap privacy; + private HashMap channelForUpdate; private String myRating = "none"; + private boolean isUpdate = false; // I allow to set it to true when dealing with API updates private JSONObject cache; @@ -304,4 +306,20 @@ public class Peertube { public void setPrivacy(HashMap privacy) { this.privacy = privacy; } + + public HashMap getChannelForUpdate() { + return channelForUpdate; + } + + public void setChannelForUpdate(HashMap channelForUpdate) { + this.channelForUpdate = channelForUpdate; + } + + public boolean isUpdate() { + return isUpdate; + } + + public void setUpdate(boolean update) { + isUpdate = update; + } } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/PeertubeAPI.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/PeertubeAPI.java index 3811f4fd1..c842821d9 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/PeertubeAPI.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/PeertubeAPI.java @@ -160,10 +160,45 @@ public class PeertubeAPI { * @return APIResponse */ @SuppressWarnings("SameParameterValue") - private APIResponse updateVideo(Peertube peertube) { + public APIResponse updateVideo(Peertube peertube) { HashMap params = new HashMap<>(); - params.put("id",peertube.getId()); + + //Category + Map.Entry categoryM = peertube.getCategory().entrySet().iterator().next(); + Integer idCategory = categoryM.getKey(); + params.put("category", String.valueOf(idCategory)); + //License + Map.Entry licenseM = peertube.getLicense().entrySet().iterator().next(); + Integer idLicense= licenseM.getKey(); + params.put("licence", String.valueOf(idLicense)); + //language + Map.Entry languagesM = peertube.getLanguage().entrySet().iterator().next(); + String iDlanguage = languagesM.getKey(); + params.put("language", iDlanguage); + //Privacy + Map.Entry privacyM = peertube.getPrivacy().entrySet().iterator().next(); + Integer idPrivacy = privacyM.getKey(); + params.put("privacy", String.valueOf(idPrivacy)); + //Channel + Map.Entry channelsM = peertube.getChannelForUpdate().entrySet().iterator().next(); + String iDChannel = channelsM.getKey(); + params.put("channelId", iDChannel); + + + params.put("name", peertube.getName()); + params.put("description", peertube.getDescription()); + + params.put("nsfw", String.valueOf(peertube.isSensitive())); + params.put("commentsEnabled", String.valueOf(peertube.isCommentsEnabled())); + if( peertube.getTags() != null && peertube.getTags().size() > 0){ + int i = 0; + for(String tag: peertube.getTags()){ + params.put("tags["+i+"]", tag); + i++; + } + } + params.put("support", "null"); List peertubes = new ArrayList<>(); try { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0ae0faba2..99d303df4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -809,6 +809,7 @@ Enable video comments Update video Description + The video has been updated!