Fix channel update

This commit is contained in:
Thomas 2020-09-12 17:35:21 +02:00
parent d02fdba671
commit 5660fb15e5
5 changed files with 96 additions and 93 deletions

View File

@ -15,7 +15,6 @@ package app.fedilab.fedilabtube;
* see <http://www.gnu.org/licenses>. */
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
@ -55,7 +54,6 @@ import app.fedilab.fedilabtube.client.entities.Account;
import app.fedilab.fedilabtube.client.entities.Playlist;
import app.fedilab.fedilabtube.client.entities.PlaylistElement;
import app.fedilab.fedilabtube.drawer.PlaylistAdapter;
import app.fedilab.fedilabtube.helper.Helper;
import app.fedilab.fedilabtube.viewmodel.ChannelsVM;
import app.fedilab.fedilabtube.viewmodel.PlaylistsVM;
import es.dmoral.toasty.Toasty;

View File

@ -31,7 +31,6 @@ import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.text.Format;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
@ -442,19 +441,19 @@ public class PeertubeAPI {
private static Account parseAccountResponsePeertube(JSONObject accountObject) {
Account account = new Account();
try {
account.setId(accountObject.get("id").toString());
account.setUuid(accountObject.get("id").toString());
account.setUsername(accountObject.get("name").toString());
account.setAcct(accountObject.get("name").toString() + "@" + accountObject.get("host"));
account.setDisplay_name(accountObject.get("name").toString());
account.setHost(accountObject.get("host").toString());
account.setId(accountObject.getString("id"));
account.setUuid(accountObject.getString("id"));
account.setUsername(accountObject.getString("name"));
account.setAcct(accountObject.getString("name") + "@" + accountObject.get("host"));
account.setDisplay_name(accountObject.get("displayName").toString());
account.setHost(accountObject.getString("host"));
account.setSocial("PEERTUBE");
account.setInstance(accountObject.getString("host"));
if (accountObject.has("ownerAccount")) {
account.setchannelOwner(parseAccountResponsePeertube(accountObject.getJSONObject("ownerAccount")));
}
if (accountObject.has("createdAt"))
account.setCreated_at(Helper.mstStringToDate(accountObject.get("createdAt").toString()));
account.setCreated_at(Helper.mstStringToDate(accountObject.getString("createdAt")));
else
account.setCreated_at(new Date());
if (accountObject.has("followersCount"))
@ -467,16 +466,16 @@ public class PeertubeAPI {
account.setFollowing_count(0);
account.setStatuses_count(0);
if (accountObject.has("description"))
account.setNote(accountObject.get("description").toString());
account.setNote(accountObject.getString("description"));
else
account.setNote("");
if (accountObject.has("url")) {
account.setUrl(accountObject.get("url").toString());
account.setUrl(accountObject.getString("url"));
}
if (accountObject.has("avatar") && !accountObject.isNull("avatar")) {
account.setAvatar(accountObject.getJSONObject("avatar").get("path").toString());
account.setAvatar_static(accountObject.getJSONObject("avatar").get("path").toString());
account.setAvatar(accountObject.getJSONObject("avatar").getString("path"));
account.setAvatar_static(accountObject.getJSONObject("avatar").getString("path"));
} else {
account.setAvatar("null");
account.setAvatar_static("null");

View File

@ -138,16 +138,15 @@ public class AccountsListAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
holder.account_action.hide();
}
if (account.getDisplay_name() != null && !account.getDisplay_name().trim().equals(""))
holder.account_dn.setText(account.getDisplay_name());
else
holder.account_dn.setText(account.getUsername().replace("@", ""));
holder.account_un.setText(String.format("@%s", account.getUsername()));
holder.account_dn.setText(account.getDisplay_name());
holder.account_ac.setText(account.getAcct());
if (account.getUsername().equals(account.getAcct()))
holder.account_ac.setVisibility(View.GONE);
else
holder.account_ac.setVisibility(View.VISIBLE);
if (account.getNote() == null) {
account.setNote("");
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
holder.account_ds.setText(Html.fromHtml(account.getNote(), Html.FROM_HTML_MODE_LEGACY));
else
@ -173,6 +172,9 @@ public class AccountsListAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
PopupMenu popup = new PopupMenu(context, holder.more_actions);
popup.getMenuInflater()
.inflate(R.menu.playlist_menu, popup.getMenu());
if (accounts.size() == 1) {
popup.getMenu().findItem(R.id.action_delete).setEnabled(false);
}
popup.setOnMenuItemClickListener(item -> {
switch (item.getItemId()) {
case R.id.action_delete:
@ -310,7 +312,6 @@ public class AccountsListAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
ImageView account_pp;
TextView account_ac;
TextView account_dn;
TextView account_un;
TextView account_ds;
TextView account_sc;
TextView account_fgc;
@ -325,7 +326,6 @@ public class AccountsListAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
account_pp = itemView.findViewById(R.id.account_pp);
account_dn = itemView.findViewById(R.id.account_dn);
account_ac = itemView.findViewById(R.id.account_ac);
account_un = itemView.findViewById(R.id.account_un);
account_ds = itemView.findViewById(R.id.account_ds);
account_sc = itemView.findViewById(R.id.account_sc);
account_fgc = itemView.findViewById(R.id.account_fgc);

View File

@ -24,6 +24,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
@ -257,64 +258,82 @@ public class DisplayAccountsFragment extends Fragment implements AccountsListAda
display_name.setText(oldChannelValues.getDisplayName());
name.setText(oldChannelValues.getName());
description.setText(oldChannelValues.getDescription());
name.setEnabled(false);
}
dialogBuilder.setPositiveButton(R.string.validate, (dialog, id) -> {
if (display_name.getText() != null && display_name.getText().toString().trim().length() > 0 && name.getText() != null && name.getText().toString().trim().length() > 0) {
ChannelCreation channelCreation = new ChannelCreation();
channelCreation.setDisplayName(display_name.getText().toString().trim());
channelCreation.setName(name.getText().toString().trim());
if (description.getText() != null && description.getText().toString().trim().length() > 0) {
channelCreation.setDescription(description.getText().toString().trim());
}
new Thread(() -> {
try {
if (oldChannelValues == null) {
new PeertubeAPI(context).createChannel(channelCreation);
} else {
new PeertubeAPI(context).updateChannel(name + "@" + Helper.getLiveInstance(context), channelCreation);
}
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = () -> {
if (getActivity() == null)
return;
Account channel = new Account();
channel.setAcct(channelCreation.getName() + "@" + Helper.getLiveInstance(context));
channel.setUsername(channelCreation.getName());
channel.setDisplay_name(channelCreation.getDisplayName());
channel.setNote(channelCreation.getDescription());
accounts.add(0, channel);
accountsListAdapter.notifyItemInserted(0);
action_button.setEnabled(true);
};
mainHandler.post(myRunnable);
} catch (HttpsConnection.HttpsConnectionException e) {
e.printStackTrace();
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = () -> {
action_button.setEnabled(true);
if (e.getMessage() != null) {
Toasty.error(context, e.getMessage(), Toast.LENGTH_LONG).show();
} else {
Toasty.error(context, context.getString(R.string.toast_error), Toast.LENGTH_LONG).show();
}
};
mainHandler.post(myRunnable);
}
}).start();
dialog.dismiss();
action_button.setEnabled(false);
} else {
Toasty.error(context, context.getString(R.string.error_display_name_channel), Toast.LENGTH_LONG).show();
}
});
dialogBuilder.setPositiveButton(R.string.validate, null);
dialogBuilder.setNegativeButton(R.string.cancel, (dialog, id) -> dialog.dismiss());
AlertDialog alertDialog = dialogBuilder.create();
alertDialog.setOnShowListener(dialogInterface -> {
Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
button.setOnClickListener(view -> {
if (display_name.getText() != null && display_name.getText().toString().trim().length() > 0 && name.getText() != null && name.getText().toString().trim().length() > 0) {
ChannelCreation channelCreation = new ChannelCreation();
channelCreation.setDisplayName(display_name.getText().toString().trim());
channelCreation.setName(name.getText().toString().trim());
if (description.getText() != null && description.getText().toString().trim().length() > 0) {
channelCreation.setDescription(description.getText().toString().trim());
}
new Thread(() -> {
try {
if (oldChannelValues == null) {
new PeertubeAPI(context).createChannel(channelCreation);
} else {
new PeertubeAPI(context).updateChannel(channelCreation.getName() + "@" + Helper.getLiveInstance(context), channelCreation);
}
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = () -> {
if (getActivity() == null)
return;
if (oldChannelValues == null) {
Account channel = new Account();
channel.setAcct(channelCreation.getName() + "@" + Helper.getLiveInstance(context));
channel.setUsername(channelCreation.getName());
channel.setDisplay_name(channelCreation.getDisplayName());
channel.setNote(channelCreation.getDescription());
accounts.add(0, channel);
accountsListAdapter.notifyItemInserted(0);
} else {
int position = 0;
for (Account account : accounts) {
if (account.getId().compareTo(oldChannelValues.getId()) == 0) {
account.setNote(channelCreation.getDescription());
account.setDisplay_name(channelCreation.getDisplayName());
break;
}
position++;
}
accountsListAdapter.notifyItemChanged(position);
}
action_button.setEnabled(true);
};
mainHandler.post(myRunnable);
} catch (HttpsConnection.HttpsConnectionException e) {
e.printStackTrace();
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = () -> {
action_button.setEnabled(true);
if (e.getMessage() != null) {
Toasty.error(context, e.getMessage(), Toast.LENGTH_LONG).show();
} else {
Toasty.error(context, context.getString(R.string.toast_error), Toast.LENGTH_LONG).show();
}
};
mainHandler.post(myRunnable);
}
}).start();
alertDialog.dismiss();
action_button.setEnabled(false);
} else {
Toasty.error(context, context.getString(R.string.error_display_name_channel), Toast.LENGTH_LONG).show();
}
});
});
if (oldChannelValues == null) {
alertDialog.setTitle(getString(R.string.action_channel_create));
} else {

View File

@ -38,26 +38,13 @@
android:layout_weight="1"
android:orientation="vertical">
<LinearLayout
<TextView
android:id="@+id/account_dn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/account_dn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textSize="18sp" />
<TextView
android:id="@+id/account_un"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:textSize="14sp" />
</LinearLayout>
android:singleLine="true"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textSize="18sp" />
<TextView
android:id="@+id/account_ac"