You can open a backup from the sidebar when it's loaded
49 |├── src-tauri ├── rustfmt.toml ├── src │ ├── build.rs │ ├── dir_map.rs │ ├── destinationinfo.rs │ ├── main.rs │ ├── compare.rs │ ├── listbackups.rs │ └── cmd.rs ├── .gitignore ├── icons │ ├── 32x32.png │ ├── icon.icns │ ├── icon.ico │ ├── icon.png │ ├── 128x128.png │ ├── 128x128@2x.png │ ├── StoreLogo.png │ ├── Square30x30Logo.png │ ├── Square44x44Logo.png │ ├── Square71x71Logo.png │ ├── Square89x89Logo.png │ ├── Square107x107Logo.png │ ├── Square142x142Logo.png │ ├── Square150x150Logo.png │ ├── Square284x284Logo.png │ └── Square310x310Logo.png ├── Cargo.toml ├── tauri.conf.json └── Cargo.lock ├── .gitattributes ├── .gitignore ├── assets ├── Logo.png ├── Logo.afdesign └── Screenshot.webp ├── public └── OpenSans-VariableFont_wdth,wght.ttf ├── src ├── main.ts ├── lib │ ├── commands.ts │ ├── Button.svelte │ └── ProgressBar.svelte ├── sidebar │ └── Sidebar.svelte ├── page │ ├── page.ts │ ├── Page.svelte │ └── PageItems.svelte └── App.svelte ├── index.html ├── vite.config.ts ├── tsconfig.json ├── eslint.config.js ├── .github └── workflows │ ├── release.yml │ └── test.yml ├── CHANGELOG.md ├── README.md ├── package.json └── bindings.ts /src-tauri/rustfmt.toml: -------------------------------------------------------------------------------- 1 | hard_tabs = true 2 | -------------------------------------------------------------------------------- /src-tauri/src/build.rs: -------------------------------------------------------------------------------- 1 | fn main() { 2 | tauri_build::build(); 3 | } 4 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | /src-tauri/target 5 | /src-tauri/WixTools 6 | -------------------------------------------------------------------------------- /assets/Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probablykasper/time-machine-inspector/HEAD/assets/Logo.png -------------------------------------------------------------------------------- /assets/Logo.afdesign: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probablykasper/time-machine-inspector/HEAD/assets/Logo.afdesign -------------------------------------------------------------------------------- /assets/Screenshot.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probablykasper/time-machine-inspector/HEAD/assets/Screenshot.webp -------------------------------------------------------------------------------- /src-tauri/.gitignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | /target/ 4 | WixTools 5 | -------------------------------------------------------------------------------- /src-tauri/icons/32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probablykasper/time-machine-inspector/HEAD/src-tauri/icons/32x32.png -------------------------------------------------------------------------------- /src-tauri/icons/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probablykasper/time-machine-inspector/HEAD/src-tauri/icons/icon.icns -------------------------------------------------------------------------------- /src-tauri/icons/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probablykasper/time-machine-inspector/HEAD/src-tauri/icons/icon.ico -------------------------------------------------------------------------------- /src-tauri/icons/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probablykasper/time-machine-inspector/HEAD/src-tauri/icons/icon.png -------------------------------------------------------------------------------- /src-tauri/icons/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probablykasper/time-machine-inspector/HEAD/src-tauri/icons/128x128.png -------------------------------------------------------------------------------- /src-tauri/icons/128x128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probablykasper/time-machine-inspector/HEAD/src-tauri/icons/128x128@2x.png -------------------------------------------------------------------------------- /src-tauri/icons/StoreLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probablykasper/time-machine-inspector/HEAD/src-tauri/icons/StoreLogo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square30x30Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probablykasper/time-machine-inspector/HEAD/src-tauri/icons/Square30x30Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square44x44Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probablykasper/time-machine-inspector/HEAD/src-tauri/icons/Square44x44Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square71x71Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probablykasper/time-machine-inspector/HEAD/src-tauri/icons/Square71x71Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square89x89Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probablykasper/time-machine-inspector/HEAD/src-tauri/icons/Square89x89Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square107x107Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probablykasper/time-machine-inspector/HEAD/src-tauri/icons/Square107x107Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square142x142Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probablykasper/time-machine-inspector/HEAD/src-tauri/icons/Square142x142Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square150x150Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probablykasper/time-machine-inspector/HEAD/src-tauri/icons/Square150x150Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square284x284Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probablykasper/time-machine-inspector/HEAD/src-tauri/icons/Square284x284Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square310x310Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probablykasper/time-machine-inspector/HEAD/src-tauri/icons/Square310x310Logo.png -------------------------------------------------------------------------------- /public/OpenSans-VariableFont_wdth,wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probablykasper/time-machine-inspector/HEAD/public/OpenSans-VariableFont_wdth,wght.ttf -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import App from './App.svelte' 2 | 3 | const app = new App({ 4 | target: document.body, 5 | intro: true, 6 | }) 7 | 8 | export default app 9 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/lib/commands.ts: -------------------------------------------------------------------------------- 1 | // utils.ts 2 | import * as c from '../../bindings' 3 | 4 | export default new Proxy({} as typeof c, { 5 | get: 6 | (_, property: string) => 7 | async (...args: unknown[]) => { 8 | try { 9 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 10 | return await (c as any)[property](...args) 11 | } catch (e) { 12 | c.errorPopup(String(e)) 13 | throw e 14 | } 15 | }, 16 | }) 17 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import { svelte, vitePreprocess } from '@sveltejs/vite-plugin-svelte' 3 | import autoprefixer from 'autoprefixer' 4 | 5 | export default defineConfig({ 6 | clearScreen: false, 7 | server: { 8 | port: 3000, 9 | strictPort: true, 10 | }, 11 | build: { 12 | sourcemap: true, 13 | target: ['chrome64', 'edge79', 'firefox62', 'safari11.1'], 14 | }, 15 | css: { 16 | postcss: { 17 | plugins: [autoprefixer], 18 | }, 19 | }, 20 | plugins: [ 21 | svelte({ 22 | preprocess: vitePreprocess(), 23 | }), 24 | ], 25 | }) 26 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tsconfig/svelte/tsconfig.json", 3 | "compilerOptions": { 4 | "target": "ESNext", 5 | "useDefineForClassFields": true, 6 | "module": "ESNext", 7 | "resolveJsonModule": true, 8 | /** 9 | * Typecheck JS in `.svelte` and `.js` files by default. 10 | * Disable checkJs if you'd like to use dynamic types in JS. 11 | * Note that setting allowJs false does not prevent the use 12 | * of JS in `.svelte` files. 13 | */ 14 | "allowJs": true, 15 | "checkJs": true, 16 | "isolatedModules": true 17 | }, 18 | "include": ["src/**/*.d.ts", "src/**/*.ts", "src/**/*.js", "src/**/*.svelte"] 19 | } 20 | -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | import js from '@eslint/js' 2 | import ts from 'typescript-eslint' 3 | import svelte from 'eslint-plugin-svelte' 4 | import prettier from 'eslint-config-prettier' 5 | import globals from 'globals' 6 | 7 | /** @type {import('eslint').Linter.Config[]} */ 8 | export default [ 9 | js.configs.recommended, 10 | ...ts.configs.recommended, 11 | ...svelte.configs['flat/recommended'], 12 | prettier, 13 | ...svelte.configs['flat/prettier'], 14 | { 15 | languageOptions: { 16 | globals: { 17 | ...globals.browser, 18 | ...globals.node, 19 | }, 20 | }, 21 | }, 22 | { 23 | files: ['**/*.svelte'], 24 | languageOptions: { 25 | parserOptions: { 26 | parser: ts.parser, 27 | }, 28 | }, 29 | }, 30 | { 31 | ignores: ['build/', '.svelte-kit/', 'dist/'], 32 | }, 33 | ] 34 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | on: 3 | push: 4 | tags: 5 | - 'v*' 6 | workflow_dispatch: 7 | 8 | jobs: 9 | release: 10 | runs-on: macos-13 # macos-14/latest are arm64 and do not produce x64 binaries 11 | steps: 12 | - name: Checkout repository 13 | uses: actions/checkout@v3 14 | 15 | - name: Node.js setup 16 | uses: actions/setup-node@v3 17 | with: 18 | node-version: 18 19 | 20 | - name: Rust setup 21 | uses: dtolnay/rust-toolchain@stable 22 | 23 | - run: npm install 24 | 25 | - name: Build and release 26 | uses: tauri-apps/tauri-action@v0 27 | env: 28 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 29 | with: 30 | tagName: v__VERSION__ 31 | releaseName: v__VERSION__ 32 | releaseDraft: true 33 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## 1.2.1 - 2024 Jul 30 4 | - Fix missing property errors 5 | - Ignore destinations without mount point (until a better solution is found) 6 | - Scroll to selected item when using arrow keys 7 | 8 | ## 1.2.0 - 2023 May 19 9 | - Support macOS 13 10 | - Support multiple backup destinations 11 | 12 | ## 1.1.5 - 2022 Jul 9 13 | - Fix `No parent of path` error (#4) 14 | 15 | ## 1.1.4 - 2022 May 17 16 | - Re-enable window border 17 | - Fix app not working due to Content Security Policy issue 18 | 19 | ## 1.1.3 - 2022 May 17 20 | - Slight design improvements 21 | - Richer error message 22 | 23 | ## 1.1.2 - 2021 Feb 1 24 | - Optimize app size (#2) 25 | 26 | ## 1.1.1 - 2021 Jan 29 27 | - Add "no backups found" error message (#1) 28 | 29 | ## 1.1.0 - 2021 Jan 28 30 | - Add app icon 31 | 32 | ## 1.0.0 - 2021 Jan 28 33 | - Initial release 34 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | on: 3 | push: 4 | branches: 5 | - '*' 6 | pull_request: 7 | workflow_dispatch: 8 | 9 | jobs: 10 | test: 11 | runs-on: macos-latest 12 | steps: 13 | - name: Checkout repository 14 | uses: actions/checkout@v3 15 | 16 | - name: Node.js setup 17 | uses: actions/setup-node@v3 18 | with: 19 | node-version: 18 20 | 21 | - name: Rust setup 22 | uses: dtolnay/rust-toolchain@stable 23 | 24 | - name: Rust Cache 25 | uses: Swatinem/rust-cache@v2 26 | with: 27 | workspaces: ./src-tauri 28 | 29 | - run: npm install 30 | 31 | - run: npm run build:web 32 | 33 | - run: npm run test 34 | 35 | - run: npm run lint 36 | 37 | - name: Build 38 | uses: tauri-apps/tauri-action@v0 39 | env: 40 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 41 | -------------------------------------------------------------------------------- /src/lib/Button.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | 9 | 33 | -------------------------------------------------------------------------------- /src-tauri/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "time-machine-inspector" 3 | version = "1.2.1" 4 | description = "A Tauri App" 5 | default-run = "time-machine-inspector" 6 | edition = "2018" 7 | build = "src/build.rs" 8 | 9 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 10 | 11 | [build-dependencies] 12 | tauri-build = { version = "1.5.3", features = [] } 13 | 14 | [dependencies] 15 | serde_json = "1.0.121" 16 | serde = { version = "1.0.204", features = ["derive"] } 17 | tauri = { version = "1.7.1", features = [ 18 | "devtools", 19 | "dialog-message", 20 | "macos-private-api", 21 | "shell-open", 22 | ] } 23 | plist = { version = "1.7", features = ["serde"] } 24 | open = "5.3.0" 25 | tauri-specta = { version = "1.0.2", features = ["javascript", "typescript"] } 26 | specta = "1.0.5" 27 | regex = "1.10.5" 28 | 29 | [features] 30 | default = ["custom-protocol"] 31 | custom-protocol = ["tauri/custom-protocol"] 32 | 33 | [profile.release] 34 | panic = "abort" 35 | codegen-units = 1 36 | lto = true 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |
3 |
6 | Find out what's hogging up your backups
7 |
8 | Download for Mac
9 |
You can open a backup from the sidebar when it's loaded
49 |You can open a backup from the sidebar
53 |