Optimize restore and backup

release
FongMi 1 year ago
parent dc497411c1
commit 69de6baa7a
  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. 15
      app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java
  4. 24
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/RestoreAdapter.java
  5. 4
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/RestoreDialog.java

@ -6,8 +6,6 @@ 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;
@ -21,14 +19,6 @@ 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;
@ -37,21 +27,17 @@ public class RestoreAdapter extends RecyclerView.Adapter<RestoreAdapter.ViewHold
public interface OnClickListener {
void onItemLoaded();
void onItemClick(File item);
void onDeleteClick(File item);
}
public void addAll() {
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);
});
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();
}
public int remove(File item) {

@ -2,7 +2,6 @@ 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;
@ -20,8 +19,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) {
@ -31,6 +30,7 @@ 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,13 +40,14 @@ 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);
@ -54,12 +55,6 @@ 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);

@ -27,7 +27,10 @@ import com.github.catvod.utils.Path;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Locale;
@Database(entities = {Keep.class, Site.class, Live.class, Track.class, Config.class, Device.class, History.class}, version = AppDatabase.VERSION)
@ -50,7 +53,7 @@ public abstract class AppDatabase extends RoomDatabase {
public static void backup(com.fongmi.android.tv.impl.Callback callback) {
App.execute(() -> {
File file = new File(Path.tv(), "tv-" + new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date()) + ".bk");
File file = new File(Path.tv(), "tv-" + new SimpleDateFormat("yyyy-MM-ddHHmmssSSS", Locale.getDefault()).format(new Date()) + ".bk");
Backup backup = Backup.create();
if (backup.getConfig().isEmpty()) {
App.post(callback::error);
@ -58,6 +61,7 @@ public abstract class AppDatabase extends RoomDatabase {
Path.write(file, backup.toString().getBytes());
FileUtil.gzipCompress(file);
App.post(callback::success);
cleanOld();
}
});
}
@ -77,6 +81,15 @@ public abstract class AppDatabase extends RoomDatabase {
});
}
private static void cleanOld() {
List<File> items = new ArrayList<>();
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")) items.add(file);
if (!items.isEmpty()) Collections.sort(items, (f1, f2) -> Long.compare(f2.lastModified(), f1.lastModified()));
if (items.size() > 7) for (int i = 7; i < items.size(); i++) Path.clear(items.get(i));
}
private static AppDatabase create(Context context) {
return Room.databaseBuilder(context, AppDatabase.class, NAME)
.addMigrations(Migrations.MIGRATION_30_31)

@ -6,9 +6,7 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.databinding.AdapterRestoreBinding;
import com.fongmi.android.tv.impl.Callback;
import com.github.catvod.utils.Path;
import java.io.File;
@ -24,14 +22,6 @@ public class RestoreAdapter extends RecyclerView.Adapter<RestoreAdapter.ViewHold
private final SimpleDateFormat format;
private final List<File> mItems;
private final Callback callback = new Callback() {
@Override
public void success() {
notifyDataSetChanged();
mListener.onItemLoaded();
}
};
public RestoreAdapter(OnClickListener listener) {
this.format = new SimpleDateFormat("HH:mm:ss", Locale.getDefault());
this.mItems = new ArrayList<>();
@ -41,21 +31,17 @@ public class RestoreAdapter extends RecyclerView.Adapter<RestoreAdapter.ViewHold
public interface OnClickListener {
void onItemLoaded();
void onItemClick(File item);
void onDeleteClick(File item);
}
private void addAll() {
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);
});
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();
}
public int remove(File item) {

@ -46,10 +46,6 @@ public class RestoreDialog extends BaseDialog implements RestoreAdapter.OnClickL
binding.recycler.setHasFixedSize(false);
binding.recycler.setAdapter(adapter = new RestoreAdapter(this));
binding.recycler.addItemDecoration(new SpaceItemDecoration(1, 16));
}
@Override
public void onItemLoaded() {
binding.recycler.setVisibility(adapter.getItemCount() == 0 ? View.GONE : View.VISIBLE);
}

Loading…
Cancel
Save