pull/589/head
FongMi 9 months ago
parent 1069cd358a
commit 644daf3f06
  1. 24
      app/src/leanback/java/com/fongmi/android/tv/ui/adapter/RestoreAdapter.java
  2. 13
      app/src/leanback/java/com/fongmi/android/tv/ui/dialog/RestoreDialog.java
  3. 7
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/RestoreAdapter.java
  4. 3
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/RestoreDialog.java
  5. 5
      quickjs/src/main/java/com/fongmi/quickjs/utils/Module.java

@ -6,6 +6,8 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.impl.Callback;
import com.fongmi.android.tv.databinding.AdapterRestoreBinding;
import com.github.catvod.utils.Path;
@ -19,6 +21,14 @@ public class RestoreAdapter extends RecyclerView.Adapter<RestoreAdapter.ViewHold
private final OnClickListener mListener;
private final List<File> mItems;
private final Callback callback = new Callback() {
@Override
public void success() {
notifyDataSetChanged();
mListener.onItemLoaded();
}
};
public RestoreAdapter(OnClickListener listener) {
this.mItems = new ArrayList<>();
this.mListener = listener;
@ -27,17 +37,21 @@ public class RestoreAdapter extends RecyclerView.Adapter<RestoreAdapter.ViewHold
public interface OnClickListener {
void onItemLoaded();
void onItemClick(File item);
void onDeleteClick(File item);
}
public void addAll() {
File[] files = Path.tv().listFiles();
if (files == null) files = new File[0];
for (File file : files) if (file.getName().startsWith("tv") && file.getName().endsWith(".bk.gz")) mItems.add(file);
if (!mItems.isEmpty()) Collections.sort(mItems, (f1, f2) -> Long.compare(f2.lastModified(), f1.lastModified()));
notifyDataSetChanged();
App.execute(() -> {
File[] files = Path.tv().listFiles();
if (files == null) files = new File[0];
for (File file : files) if (file.getName().startsWith("tv") && file.getName().endsWith(".bk.gz")) mItems.add(file);
if (!mItems.isEmpty()) Collections.sort(mItems, (f1, f2) -> Long.compare(f2.lastModified(), f1.lastModified()));
App.post(callback::success);
});
}
public int remove(File item) {

@ -2,6 +2,7 @@ package com.fongmi.android.tv.ui.dialog;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import androidx.appcompat.app.AlertDialog;
@ -19,8 +20,8 @@ import java.io.File;
public class RestoreDialog implements RestoreAdapter.OnClickListener {
private final DialogRestoreBinding binding;
private final RestoreAdapter adapter;
private final AlertDialog dialog;
private RestoreAdapter adapter;
private Callback callback;
public static RestoreDialog create(Activity activity) {
@ -30,7 +31,6 @@ public class RestoreDialog implements RestoreAdapter.OnClickListener {
public RestoreDialog(Activity activity) {
this.binding = DialogRestoreBinding.inflate(LayoutInflater.from(activity));
this.dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).create();
this.adapter = new RestoreAdapter(this);
}
public void show(Callback callback) {
@ -40,14 +40,13 @@ public class RestoreDialog implements RestoreAdapter.OnClickListener {
}
private void setRecyclerView() {
binding.recycler.setAdapter(adapter);
binding.recycler.setItemAnimator(null);
binding.recycler.setHasFixedSize(false);
binding.recycler.setAdapter(adapter = new RestoreAdapter(this));
binding.recycler.addItemDecoration(new SpaceItemDecoration(1, 16));
}
private void setDialog() {
if (adapter.getItemCount() == 0) return;
WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
params.width = (int) (ResUtil.getScreenWidth() * 0.4f);
dialog.getWindow().setAttributes(params);
@ -55,6 +54,12 @@ public class RestoreDialog implements RestoreAdapter.OnClickListener {
dialog.show();
}
@Override
public void onItemLoaded() {
binding.recycler.setVisibility(adapter.getItemCount() == 0 ? View.GONE : View.VISIBLE);
if (adapter.getItemCount() == 0) dialog.dismiss();
}
@Override
public void onItemClick(File item) {
AppDatabase.restore(item, callback);

@ -54,16 +54,17 @@ public class RestoreAdapter extends RecyclerView.Adapter<RestoreAdapter.ViewHold
if (files == null) files = new File[0];
for (File file : files) if (file.getName().startsWith("tv") && file.getName().endsWith(".bk.gz")) mItems.add(file);
if (!mItems.isEmpty()) Collections.sort(mItems, (f1, f2) -> Long.compare(f2.lastModified(), f1.lastModified()));
callback.success();
App.post(callback::success);
});
}
public void remove(File item) {
public int remove(File item) {
int position = mItems.indexOf(item);
if (position == -1) return;
if (position == -1) return -1;
Path.clear(item);
mItems.remove(position);
notifyItemRemoved(position);
return getItemCount();
}
@Override

@ -61,7 +61,6 @@ public class RestoreDialog extends BaseDialog implements RestoreAdapter.OnClickL
@Override
public void onDeleteClick(File item) {
if (adapter.getItemCount() == 1) dismiss();
adapter.remove(item);
if (adapter.remove(item) == 0) dismiss();
}
}

@ -5,14 +5,11 @@ import android.net.Uri;
import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Asset;
import com.github.catvod.utils.Path;
import com.google.common.net.HttpHeaders;
import java.io.File;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.ConcurrentHashMap;
import okhttp3.Headers;
public class Module {
private final ConcurrentHashMap<String, String> cache;
@ -42,7 +39,7 @@ public class Module {
Uri uri = Uri.parse(url);
File file = Path.js(uri.getLastPathSegment());
boolean cache = !"127.0.0.1".equals(uri.getHost());
byte[] data = OkHttp.newCall(url, Headers.of(HttpHeaders.USER_AGENT, "Mozilla/5.0")).execute().body().bytes();
byte[] data = OkHttp.newCall(url).execute().body().bytes();
if (cache) new Thread(() -> Path.write(file, data)).start();
return new String(data, StandardCharsets.UTF_8);
} catch (Exception e) {

Loading…
Cancel
Save