// Variables used by Scriptable. // These must be at the very top of the file. Do not edit. // icon-glyph: trash-alt; icon-color: red; /** * Clean files * * @version 1.0.1 * @author Honye */ /** * @param {{[language: string]: string} | string[]} langs */ const i18n = (langs) => { const language = Device.language(); if (Array.isArray(langs)) { langs = { en: langs[0], zh: langs[1], others: langs[0] }; } else { langs.others = langs.others || langs.en; } return langs[language] || langs.others }; const localFM = FileManager.local(); const iCloudFM = FileManager.iCloud(); /** * @param {string} dir */ const presentList = (dir) => { const contents = localFM.listContents(dir); const table = new UITable(); for (const item of contents) { const path = localFM.joinPath(dir, item); const isDirectory = localFM.isDirectory(path); const row = new UITableRow(); row.cellSpacing = 6; const sfs = SFSymbol.named(isDirectory ? 'folder' : 'doc'); const icon = row.addImage(sfs.image); icon.widthWeight = 2; const title = row.addText(item, localFM.modificationDate(path).toLocaleString()); title.widthWeight = 18; title.titleFont = Font.headline(); title.subtitleFont = Font.footnote(); title.subtitleColor = Color.gray(); if (isDirectory) { title.titleColor = Color.dynamic(Color.blue(), new Color('#8aefef')); } row.dismissOnSelect = false; row.onSelect = async () => { if (localFM.isDirectory(path)) { presentList(path); } else { if (!localFM.isFileDownloaded(path)) { await localFM.downloadFileFromiCloud(path); } try { const image = localFM.readImage(path); QuickLook.present(image, false); return } catch (e) { console.warn(e); } try { const text = localFM.readString(path); QuickLook.present(text); } catch (e) { console.warn(e); } } }; const del = row.addButton(i18n(['Delete', '删除'])); del.widthWeight = 4; del.rightAligned(); del.onTap = async () => { const alert = new Alert(); alert.message = i18n([`Are you sure delete "${item}"?`, `确定删除"${item}"吗?`]); alert.addAction(i18n(['Delete', '删除'])); alert.addCancelAction(i18n(['Cancel', '取消'])); const value = await alert.presentAlert(); if (value === 0) { localFM.remove(path); table.removeRow(row); table.reload(); } }; table.addRow(row); } table.present(); }; const table = new UITable(); const addRow = (title, path) => { const row = new UITableRow(); const name = row.addText(title); name.titleFont = Font.headline(); name.subtitleFont = Font.footnote(); name.subtitleColor = Color.gray(); name.titleColor = Color.dynamic(Color.blue(), new Color('#8aefef')); row.dismissOnSelect = false; row.onSelect = () => presentList(path); table.addRow(row); }; addRow('Local cache directory', localFM.cacheDirectory()); addRow('Local document directory', localFM.documentsDirectory()); addRow('Local library directory', localFM.libraryDirectory()); addRow('Local temporary directory', localFM.temporaryDirectory()); addRow('iCloud document directory', iCloudFM.documentsDirectory()); addRow('iCloud library directory', iCloudFM.libraryDirectory()); table.present();