From 5f056308c22f7324d4bc6d2beca05d026066f7c3 Mon Sep 17 00:00:00 2001
From: Marcel <79279756+aofn@users.noreply.github.com>
Date: Sat, 25 Nov 2023 18:40:40 +0100
Subject: [PATCH 1/5] Update README.md
---
README.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index d95a3ac..10e2632 100644
--- a/README.md
+++ b/README.md
@@ -57,9 +57,9 @@ _Important: If you delete this file, all notes and tags of this project will be
So far the application has only been tested on macOS Sonoma!
-🍏 [Download for macOS](https://github.com/aofn/Ableton-Live-Manager/releases/download/app-v0.6.0/Ableton.Live.Manager_0.6.0_x64.dmg)
+🍏 [Download for macOS](https://github.com/aofn/Ableton-Live-Manager/releases/download/app-v0.6.2b/Ableton.Live.Manager_0.6.2b_x64.dmg)
-🪟 [Download for Windows](https://github.com/aofn/Ableton-Live-Manager/releases/download/app-v0.6.0/Ableton.Live.Manager_0.6.0_x64_en-US.msi)
+🪟 [Download for Windows](https://github.com/aofn/Ableton-Live-Manager/releases/download/app-v0.6.2b/Ableton.Live.Manager_0.6.2b_x64_en-US.msi)
You can find all releases here: https://github.com/aofn/Ableton-Live-Manager/releases/tag/app-v0.6.0
From 98efdd24bfb37a4bfe3f1783b7971241a72088f2 Mon Sep 17 00:00:00 2001
From: Marcel <79279756+aofn@users.noreply.github.com>
Date: Sun, 3 Dec 2023 15:05:10 +0100
Subject: [PATCH 2/5] feat: add sort by functionality to sort projects by tags
or by name.
---
src/app/page.js | 44 ++++++++++++++++++++++++++++++++++-
src/components/Notes.js | 8 +++----
src/components/ProjectItem.js | 23 +-----------------
3 files changed, 47 insertions(+), 28 deletions(-)
diff --git a/src/app/page.js b/src/app/page.js
index d3641cc..5f5035f 100644
--- a/src/app/page.js
+++ b/src/app/page.js
@@ -23,6 +23,7 @@ import {
import { cn } from "@/lib/utils";
import { badgeVariants } from "@/components/ui/badge";
import "remixicon/fonts/remixicon.css";
+import _ from "lodash";
/**
* Displays a progress bar while scanning the project directory.
@@ -63,6 +64,7 @@ export default function Home() {
const [config, setConfig] = useState({});
const [filterByTags, setFilterByTags] = useState([]);
const [collapseAll, setCollapseAll] = useState(true);
+ const [sortMethod, setSortMethod] = useState([]);
const { t } = useTranslation();
const colourStyles = {
option: (styles, { data, isDisabled, isFocused, isSelected }) => ({
@@ -119,7 +121,6 @@ export default function Home() {
entries.splice(i, 1);
continue;
}
-
if (entry.children) {
for (let [i, child] of entry.children.entries()) {
const isFile = await invoke("is_file", { path: child.path }).catch(
@@ -127,6 +128,13 @@ export default function Home() {
entry.children.splice(i, 1);
},
);
+ // look for existing alm.json file
+ if (child.path.endsWith("alm.json")) {
+ // add apm object to entry
+ const almFile = await readTextFile(child.path);
+ const almJson = JSON.parse(almFile);
+ entry.alm = almJson;
+ }
if (child.path.endsWith(".als")) {
setCurrentScanPath(child.name);
@@ -162,6 +170,26 @@ export default function Home() {
getConfig();
}, []);
+ // sort function to sort directoryEntries by tags within alm.tags key if alm key exists
+ const sortByTags = (a, b) => {
+ const aTags = a.alm?.tags ? Object.values(a.alm.tags) : [];
+ const bTags = b.alm?.tags ? Object.values(b.alm.tags) : [];
+
+ const sortedATags = _.sortBy(aTags, ["value", "label"]);
+ const sortedBTags = _.sortBy(bTags, ["value", "label"]);
+
+ const aTagsString = sortedATags.map((tag) => tag.value).join("");
+ const bTagsString = sortedBTags.map((tag) => tag.value).join("");
+
+ // * -1 reverses order so tags are on top of list
+ return aTagsString.localeCompare(bTagsString) * -1;
+ };
+
+ // sort projects by name
+ const sortByName = (a, b) => {
+ return _.sortBy([a, b], ["name"]);
+ };
+
if (displayProgress)
return (
+
@@ -227,6 +268,7 @@ export default function Home() {
.filter((entry) =>
entry.name.toLowerCase().includes(filterInput.toLowerCase()),
)
+ .sort(sortMethod.value === "name" ? sortByName : sortByTags)
.map((entry) => {
return (
{
}
setLoading(false);
};
- if (projectNotesPath && isMounted) getNotes();
+ if (almFile && isMounted) getNotes();
return () => {
isMounted = false;
};
- }, [projectNotesPath, almFile]);
+ }, [almFile]);
const onSave = async (editedNote) => {
// if no changes have been made we don't want to do anything
- console.log(editedNote);
if (editedNote === notes) return;
setNotes(editedNote);
const copyAlm = { ...almFile };
@@ -47,7 +45,7 @@ const Notes = ({ projectDirectory, projectNotesPath, almFile, setAlmFile }) => {
) : (
<>
-
+
>
)}
>
diff --git a/src/components/ProjectItem.js b/src/components/ProjectItem.js
index 2a5eeb1..fa08a78 100644
--- a/src/components/ProjectItem.js
+++ b/src/components/ProjectItem.js
@@ -8,7 +8,6 @@ import { useTranslation } from "react-i18next";
import { Separator } from "@/components/ui/separator";
import FolderView from "@/components/FolderView";
-import { readTextFile } from "@tauri-apps/api/fs";
import { Tags } from "@/components/Tags";
import { RightColumn } from "@/components/RightColumn";
import {
@@ -59,27 +58,7 @@ export default function ProjectItem({
useEffect(() => {
if (project) {
- // search for notes and alm.json within project folder
- if (project.children) {
- const notes = project.children.filter((child) =>
- child.name.endsWith(".md"),
- );
- if (notes.length > 0) setProjectNotesPath(notes[0].path);
- }
- const getAlmFile = async () => {
- console.log("reading alm file");
- const readFile = await readTextFile(project.path + "/alm.json").catch(
- (error) => {
- if (!error.includes("os error 2")) {
- console.log(error);
- }
- },
- );
-
- if (!readFile) return;
- setAlmFile(JSON.parse(readFile));
- };
- getAlmFile();
+ setAlmFile(project.alm);
}
}, [project]);
From 2e2b06e80f17d894b0737d2e3a3313602ea905c3 Mon Sep 17 00:00:00 2001
From: Marcel <79279756+aofn@users.noreply.github.com>
Date: Sun, 3 Dec 2023 15:12:40 +0100
Subject: [PATCH 3/5] fix: display current notes
---
src/components/Notes.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/Notes.js b/src/components/Notes.js
index d257b7e..c4fdfc7 100644
--- a/src/components/Notes.js
+++ b/src/components/Notes.js
@@ -7,7 +7,7 @@ import { writeTextFile } from "@tauri-apps/api/fs";
const Notes = ({ projectDirectory, projectNotesPath, almFile, setAlmFile }) => {
const { t } = useTranslation();
- const [notes, setNotes] = useState({});
+ const [notes, setNotes] = useState(almFile?.notes || "");
const [loading, setLoading] = useState(false);
useEffect(() => {
From 80fe8e22c46505d9f2eca4cfbf87599afcfef1ae Mon Sep 17 00:00:00 2001
From: Marcel <79279756+aofn@users.noreply.github.com>
Date: Sun, 3 Dec 2023 15:14:28 +0100
Subject: [PATCH 4/5] chore: remove unused variables
---
src/components/Editor/Editor.js | 10 +---------
src/components/Notes.js | 3 +--
src/components/ProjectItem.js | 8 --------
src/components/RightColumn.js | 2 --
4 files changed, 2 insertions(+), 21 deletions(-)
diff --git a/src/components/Editor/Editor.js b/src/components/Editor/Editor.js
index 6c1de63..fa68393 100644
--- a/src/components/Editor/Editor.js
+++ b/src/components/Editor/Editor.js
@@ -5,21 +5,13 @@ import "./styles.scss";
import { Color } from "@tiptap/extension-color";
import ListItem from "@tiptap/extension-list-item";
import TextStyle from "@tiptap/extension-text-style";
-import {
- BubbleMenu,
- EditorContent,
- EditorProvider,
- FloatingMenu,
- useCurrentEditor,
- useEditor,
-} from "@tiptap/react";
+import { EditorProvider, useCurrentEditor } from "@tiptap/react";
import StarterKit from "@tiptap/starter-kit";
import React from "react";
import { Button } from "@/components/ui/button";
import Placeholder from "@tiptap/extension-placeholder";
import { Image } from "@tiptap/extension-image";
-import { LoadingSpinner } from "@/components/ui/loading-spinner";
//@TODO Headlines not working for some reason.
const EditorButton = ({
diff --git a/src/components/Notes.js b/src/components/Notes.js
index c4fdfc7..868c37b 100644
--- a/src/components/Notes.js
+++ b/src/components/Notes.js
@@ -5,8 +5,7 @@ import Editor from "@/components/Editor/Editor";
import { LoadingSpinner } from "@/components/ui/loading-spinner";
import { writeTextFile } from "@tauri-apps/api/fs";
-const Notes = ({ projectDirectory, projectNotesPath, almFile, setAlmFile }) => {
- const { t } = useTranslation();
+const Notes = ({ projectDirectory, almFile, setAlmFile }) => {
const [notes, setNotes] = useState(almFile?.notes || "");
const [loading, setLoading] = useState(false);
diff --git a/src/components/ProjectItem.js b/src/components/ProjectItem.js
index fa08a78..abe0da8 100644
--- a/src/components/ProjectItem.js
+++ b/src/components/ProjectItem.js
@@ -42,13 +42,11 @@ export default function ProjectItem({
filterByTags,
config,
setConfig,
- setProjectDirectory,
setFilterByTags,
collapseAll,
}) {
const [openDetails, setOpenDetails] = useState(false);
const { t } = useTranslation();
- const [projectNotesPath, setProjectNotesPath] = useState("");
const [almFile, setAlmFile] = useState({});
const [isAccordionOpen, setIsAccordionOpen] = useState("open");
@@ -148,12 +146,7 @@ export default function ProjectItem({
diff --git a/src/components/RightColumn.js b/src/components/RightColumn.js
index 30d343a..5376187 100644
--- a/src/components/RightColumn.js
+++ b/src/components/RightColumn.js
@@ -18,7 +18,6 @@ import Notes from "@/components/Notes";
*/
export const RightColumn = ({
projectDirectory,
- projectNotesPath,
name,
openDetails,
setOpenDetails,
@@ -39,7 +38,6 @@ export const RightColumn = ({
) : (
From 72527f556979110dd7e2bd6ed794b3205c78f460 Mon Sep 17 00:00:00 2001
From: Marcel <79279756+aofn@users.noreply.github.com>
Date: Tue, 5 Dec 2023 11:54:07 +0100
Subject: [PATCH 5/5] update icons
---
src-tauri/icons/128x128.png | Bin 3150 -> 6628 bytes
src-tauri/icons/128x128@2x.png | Bin 7687 -> 17774 bytes
src-tauri/icons/32x32.png | Bin 817 -> 1358 bytes
src-tauri/icons/Square107x107Logo.png | Bin 2877 -> 5265 bytes
src-tauri/icons/Square142x142Logo.png | Bin 3782 -> 7699 bytes
src-tauri/icons/Square150x150Logo.png | Bin 3997 -> 8100 bytes
src-tauri/icons/Square284x284Logo.png | Bin 8534 -> 20692 bytes
src-tauri/icons/Square30x30Logo.png | Bin 884 -> 1230 bytes
src-tauri/icons/Square310x310Logo.png | Bin 9446 -> 24084 bytes
src-tauri/icons/Square44x44Logo.png | Bin 1165 -> 1905 bytes
src-tauri/icons/Square71x71Logo.png | Bin 1903 -> 3293 bytes
src-tauri/icons/Square89x89Logo.png | Bin 2455 -> 4285 bytes
src-tauri/icons/StoreLogo.png | Bin 1349 -> 2220 bytes
.../icons/ableton-peroject-manager-icon.png | Bin 30188 -> 32513 bytes
src-tauri/icons/icon.icns | Bin 88061 -> 281761 bytes
src-tauri/icons/icon.ico | Bin 14695 -> 28676 bytes
src-tauri/icons/icon.png | Bin 18468 -> 54493 bytes
17 files changed, 0 insertions(+), 0 deletions(-)
diff --git a/src-tauri/icons/128x128.png b/src-tauri/icons/128x128.png
index 4e114a9cd8363d5439c964bcb4c161b1d1d831e9..e091c11a80c0bb5525e24bcecda5db47012fb32e 100644
GIT binary patch
literal 6628
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⪙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
TquqYSKLIe(H`A-t!AJiGZ7Rh?
diff --git a/src-tauri/icons/128x128@2x.png b/src-tauri/icons/128x128@2x.png
index 5ab61dacd70ab3d2a134439617aa242b357eca09..70ada5d8d6010f11b06cb5b81c100616f1e4aa77 100644
GIT binary patch
literal 17774
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