fix: delete items

This commit is contained in:
Fredrik Burmester
2025-10-03 07:54:39 +02:00
parent 1363c3137e
commit c36cd66e36
6 changed files with 78 additions and 22 deletions

View File

@@ -146,23 +146,25 @@ export default function page() {
}); });
const deleteOtherMedia = () => const deleteOtherMedia = () =>
Promise.all( Promise.all(
otherMedia.map((item) => otherMedia.map(
deleteFileByType(item.item.Type) (item) =>
.then(() => item.item.Type &&
toast.success( deleteFileByType(item.item.Type)
t("home.downloads.toasts.deleted_media_successfully", { .then(() =>
type: item.item.Type, toast.success(
}), t("home.downloads.toasts.deleted_media_successfully", {
), type: item.item.Type,
) }),
.catch((reason) => { ),
writeToLog("ERROR", reason); )
toast.error( .catch((reason) => {
t("home.downloads.toasts.failed_to_delete_media", { writeToLog("ERROR", reason);
type: item.item.Type, toast.error(
}), t("home.downloads.toasts.failed_to_delete_media", {
); type: item.item.Type,
}), }),
);
}),
), ),
); );

View File

@@ -19,7 +19,13 @@ export const SeriesCard: React.FC<{ items: BaseItemDto[] }> = ({ items }) => {
return storage.getString(items[0].SeriesId!); return storage.getString(items[0].SeriesId!);
}, []); }, []);
const deleteSeries = useCallback(async () => deleteItems(items), [items]); const deleteSeries = useCallback(
async () =>
deleteItems(
items.map((item) => item.Id).filter((id) => id !== undefined),
),
[items],
);
const showActionSheet = useCallback(() => { const showActionSheet = useCallback(() => {
const options = ["Delete", "Cancel"]; const options = ["Delete", "Cancel"];

View File

@@ -91,6 +91,7 @@ function useDownloadProvider() {
deleteFile, deleteFile,
deleteItems, deleteItems,
deleteAllFiles, deleteAllFiles,
deleteFileByType,
appSizeUsage, appSizeUsage,
} = useDownloadOperations({ } = useDownloadOperations({
taskMapRef, taskMapRef,
@@ -109,6 +110,7 @@ function useDownloadProvider() {
deleteAllFiles, deleteAllFiles,
deleteFile, deleteFile,
deleteItems, deleteItems,
deleteFileByType,
removeProcess, removeProcess,
cancelDownload, cancelDownload,
getDownloadedItemSize, getDownloadedItemSize,
@@ -119,7 +121,6 @@ function useDownloadProvider() {
startDownload: async () => {}, startDownload: async () => {},
pauseDownload: async () => {}, pauseDownload: async () => {},
resumeDownload: async () => {}, resumeDownload: async () => {},
deleteFileByType: async () => {},
cleanCacheDirectory: async () => {}, cleanCacheDirectory: async () => {},
updateDownloadedItem: () => {}, updateDownloadedItem: () => {},
dumpDownloadDiagnostics: async () => "", dumpDownloadDiagnostics: async () => "",
@@ -138,12 +139,12 @@ export function useDownload() {
deleteAllFiles: async () => {}, deleteAllFiles: async () => {},
deleteFile: async () => {}, deleteFile: async () => {},
deleteItems: async () => {}, deleteItems: async () => {},
deleteFileByType: async () => {},
removeProcess: () => {}, removeProcess: () => {},
cancelDownload: async () => {}, cancelDownload: async () => {},
startDownload: async () => {}, startDownload: async () => {},
pauseDownload: async () => {}, pauseDownload: async () => {},
resumeDownload: async () => {}, resumeDownload: async () => {},
deleteFileByType: async () => {},
getDownloadedItemSize: () => 0, getDownloadedItemSize: () => 0,
getDownloadedItemById: () => undefined, getDownloadedItemById: () => undefined,
APP_CACHE_DOWNLOAD_DIRECTORY: "", APP_CACHE_DOWNLOAD_DIRECTORY: "",

View File

@@ -214,6 +214,52 @@ export function useDownloadOperations({
toast.success(t("home.downloads.toasts.all_files_deleted")); toast.success(t("home.downloads.toasts.all_files_deleted"));
}, [t]); }, [t]);
const deleteFileByType = useCallback(
async (itemType: string) => {
const allItems = getAllDownloadedItems();
const itemsToDelete = allItems.filter(
(item) => item.item.Type === itemType,
);
if (itemsToDelete.length === 0) {
console.log(`[DELETE] No items found with type: ${itemType}`);
return;
}
console.log(
`[DELETE] Deleting ${itemsToDelete.length} items of type: ${itemType}`,
);
for (const item of itemsToDelete) {
try {
deleteAllAssociatedFiles(item);
removeDownloadedItem(item.item.Id || "");
} catch (error) {
console.error(
`Failed to delete ${itemType} file ${item.item.Name}:`,
error,
);
}
}
const itemLabel =
itemType === "Movie"
? t("common.movies")
: itemType === "Episode"
? t("common.episodes")
: itemType;
toast.success(
t("home.downloads.toasts.files_deleted_by_type", {
count: itemsToDelete.length,
type: itemLabel,
defaultValue: `${itemsToDelete.length} ${itemLabel} deleted`,
}),
);
},
[t],
);
const appSizeUsage = useCallback(async () => { const appSizeUsage = useCallback(async () => {
const totalSize = calculateTotalDownloadedSize(); const totalSize = calculateTotalDownloadedSize();
@@ -230,6 +276,7 @@ export function useDownloadOperations({
deleteFile, deleteFile,
deleteItems, deleteItems,
deleteAllFiles, deleteAllFiles,
deleteFileByType,
appSizeUsage, appSizeUsage,
}; };
} }

View File

@@ -42,7 +42,6 @@ export type {
JobStatus, JobStatus,
MediaTimeSegment, MediaTimeSegment,
TrickPlayData, TrickPlayData,
UserData,
} from "./types"; } from "./types";
// Utility functions // Utility functions
export { generateFilename, uriToFilePath } from "./utils"; export { generateFilename, uriToFilePath } from "./utils";

View File

@@ -308,7 +308,8 @@
"all_files_folders_and_jobs_deleted_successfully": "All files, folders, and jobs deleted successfully", "all_files_folders_and_jobs_deleted_successfully": "All files, folders, and jobs deleted successfully",
"failed_to_clean_cache_directory": "Failed to clean cache directory", "failed_to_clean_cache_directory": "Failed to clean cache directory",
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}", "could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
"go_to_downloads": "Go to Downloads" "go_to_downloads": "Go to Downloads",
"file_deleted": "{{item}} deleted"
} }
} }
}, },