3 Commits
Author SHA1 Message Date
valerio cd37c8aae9 FEAT: Version Selection 2026-03-30 16:31:04 +02:00
valerio dd14c84e1f CHORE: readme
publish / publish-tauri (, ubuntu-22.04) (push) Failing after 5m28s
2026-03-17 14:15:21 +01:00
valerio e6708907f4 FEAT: Gitea action CI workflow
publish / publish-tauri (, ubuntu-22.04) (push) Successful in 4m28s
2026-03-14 22:20:02 +01:00
6 changed files with 68 additions and 28 deletions
+6 -7
View File
@@ -3,7 +3,7 @@ name: 'publish'
on:
push:
branches:
- release
- master
# This workflow will trigger on each push to the `release` branch to create or update a GitHub release, build your app, and upload the artifacts to the release.
@@ -15,12 +15,8 @@ jobs:
fail-fast: false
matrix:
include:
- platform: 'macos-latest' # for Arm based macs (M1 and above).
args: '--target aarch64-apple-darwin'
- platform: 'ubuntu-22.04'
args: ''
- platform: 'windows-latest'
args: ''
runs-on: ${{ matrix.platform }}
steps:
@@ -38,12 +34,13 @@ jobs:
if: matrix.platform == 'ubuntu-22.04' # This must match the platform value defined above.
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf cmake xdg-utils
- name: install frontend dependencies
run: bun install # change this to npm, pnpm or bun depending on which one you use.
- uses: tauri-apps/tauri-action@v1
- name: build tauri packages and release
uses: ValerioMeschi/tauri-action@9f8b32da04b4d228756d93dc93b9f16869e4f105
env:
GITHUB_TOKEN: ${{ secrets.SMOOTHIE_TOKEN }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
@@ -55,3 +52,5 @@ jobs:
releaseDraft: true
prerelease: false
args: ${{ matrix.args }}
githubBaseUrl: https://git.floatingpoint.ch/api/v1
isGitea: true
+19 -4
View File
@@ -1,7 +1,22 @@
# Tauri + SvelteKit
```
▄▄▄▄▄
██▀▀▀▀█▄ █▄ █▄
▀██▄ ▄▀ ▄ ▄██▄██ ▀▀
▀██▄▄ ███▄███▄ ▄███▄ ▄███▄ ██ ████▄ ██ ▄█▀█▄
▄ ▀██▄ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▄█▀
▀██████▀▄██ ██ ▀█▄▀███▀▄▀███▀▄██▄██ ██▄██▄▀█▄▄▄
```
This template should help get you started developing with Tauri and SvelteKit in Vite.
# Smoothie - Blender Version Manager
## Recommended IDE Setup
Smoothie is a simple launcher that allows you to download, install and manage all your blender Versions.
[VS Code](https://code.visualstudio.com/) + [Svelte](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode) + [Tauri](https://marketplace.visualstudio.com/items?itemName=tauri-apps.tauri-vscode) + [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer).
## Features
* **Download:** Easily fetch official Blender builds for your operating system.
* **Manage:** Install, Remove, Fav and switch between, easily and without messing with your system files and configs
* **Unified Library:** All your blender Installs, Configs, Plugins and Libraries in ONE folder. Easily mantain, backup, share or transfer your whole blender setup.
* **Set as Default:** Quickly choose which version is used to open .blend files
* **Simple Interface:** A Straigforward GUI
* **Templates:** Manage as many instances of a same version of Blender as you want. Each with different its own Layout, Startup file and Plugins.
* **Custom Icons:** Smoothie Creates custom icons for all your blender installs so you can quickly fin
+9 -2
View File
@@ -2,6 +2,13 @@
import VersionCard from './VersionCard.svelte';
import { send, receive } from '$lib/transition.js';
import { flip } from 'svelte/animate';
import { selectedVersionStore } from '$lib/library.js';
let selectedVersion = $state(null);
selectedVersionStore.subscribe((version) => {
selectedVersion = version;
});
let { installedVersions } = $props();
import '@webtui/css/base.css';
@@ -22,7 +29,7 @@
in:receive={{ key: version.version }}
out:send={{ key: version.version }}
>
<VersionCard {version} />
<VersionCard {version} {selectedVersion} />
</div>
{/each}
{:else}
@@ -40,7 +47,7 @@
in:receive={{ key: version.version }}
out:send={{ key: version.version }}
>
<VersionCard {version} />
<VersionCard {version} {selectedVersion} />
</div>
{/each}
</div>
+18 -4
View File
@@ -4,15 +4,18 @@
deleteVersion,
launchBlenderVersion,
toggleFavourite,
registerVersion
registerVersion,
selectVersion
} from '$lib/library';
import Button from '$lib/components/Button.svelte';
import Menu from '$lib/components/Menu.svelte';
import { show } from '$lib/components/Dialog.svelte';
let { version } = $props();
let { version, selectedVersion } = $props();
let popup = $state();
let selected = $derived(version.version === selectedVersion?.version);
async function handleDelete() {
const prompt = await show({
title: 'Delete',
@@ -41,7 +44,16 @@
<Popup bind:this={popup} content="Version {version.version} is now the default on your system"
></Popup>
<div id="card">
<div
role="button"
tabindex="0"
onkeydown={() => {}}
onclick={async () => {
await selectVersion(version);
}}
id="card"
class:selected
>
<div class="row">
{version.version}
<Button style="iconbutton" onclick={() => toggleFavourite(version)}
@@ -93,11 +105,13 @@
width: 100%;
min-width: 170px;
max-width: 200px;
background-color: var(--white);
border-radius: 5px;
background-color: var(--light);
padding: 1rem;
}
#card.selected {
background-color: var(--light-accent);
}
.row {
display: flex;
align-items: center;
+14 -9
View File
@@ -19,9 +19,14 @@ import { updateDownloadProgress } from './download';
* @property {Date} [installDate] - Installation date (if available)
*/
export const currentInstalledVersions = writable([]);
export const installedVersionsStore = writable([]);
export const selectedVersionStore = writable(null);
const favouritesStore = new LazyStore('versions.json');
export async function selectVersion(version) {
selectedVersionStore.set(version);
}
export async function generateVersionBanner(version) {
const bannerPath = `${version.path}/banner.png`;
if (await exists(bannerPath)) {
@@ -200,7 +205,7 @@ export async function removeVersion(version) {
* @param {blenderVersion} version The version to toggle.
*/
export async function toggleFavourite(version) {
const versions = get(currentInstalledVersions);
const versions = get(installedVersionsStore);
console.log();
const versionObj = versions.find((v) => v.version === version.version);
if (versionObj) {
@@ -208,7 +213,7 @@ export async function toggleFavourite(version) {
} else {
console.error('version not found', version);
}
currentInstalledVersions.set(versions);
installedVersionsStore.set(versions);
await favouritesStore.set(version.version, versionObj.favourite);
await favouritesStore.save();
}
@@ -230,9 +235,9 @@ export async function deleteVersion(version) {
await favouritesStore.save();
// Update the current installed versions list
const versions = get(currentInstalledVersions);
const versions = get(installedVersionsStore);
const filteredVersions = versions.filter((v) => v.version !== version.version);
currentInstalledVersions.set(filteredVersions);
installedVersionsStore.set(filteredVersions);
console.log(`Successfully deleted version ${version.version}`);
} catch (error) {
@@ -253,13 +258,13 @@ export async function getInstalledVersions() {
const settings = get(currentSettings);
const libraryDir = settings.libraryDir;
if (!libraryDir) {
currentInstalledVersions.set([]);
installedVersionsStore.set([]);
return [];
}
const blenderLibraryPath = await join(libraryDir, BASE_LIBRARY_DIR, 'blender');
if (!exists(blenderLibraryPath)) {
currentInstalledVersions.set([]);
installedVersionsStore.set([]);
return [];
}
@@ -308,13 +313,13 @@ export async function getInstalledVersions() {
}
}
currentInstalledVersions.set(versions);
installedVersionsStore.set(versions);
cleanupOrphanedDesktopFiles(versions);
return versions;
} catch (error) {
console.error('Error getting installed versions:', error);
currentInstalledVersions.set([]);
installedVersionsStore.set([]);
return [];
}
}
+2 -2
View File
@@ -5,7 +5,7 @@
import { onMount } from 'svelte';
import { getSettings, currentSettings } from '$lib/settings.js';
import { getBlenderReleases, blenderReleases } from '$lib/blenderfetch';
import { getInstalledVersions, currentInstalledVersions } from '$lib/library.js';
import { getInstalledVersions, installedVersionsStore } from '$lib/library.js';
import { downloadTasksStore } from '$lib/download.js';
import Library from '$lib/components/Library.svelte';
import Download from '$lib/components/Download.svelte';
@@ -27,7 +27,7 @@
settings = value;
console.log('Loaded settings:', settings);
});
currentInstalledVersions.subscribe((value) => {
installedVersionsStore.subscribe((value) => {
installedVersions = value;
console.log('Loaded installed versions:', installedVersions);
});