diff --git a/README.md b/README.md
index b99f286..0efe25b 100644
--- a/README.md
+++ b/README.md
@@ -40,8 +40,7 @@ python3 api.py
```
3. In the main project folder, you will run:
```
-npm run build
-npm start
-npx electron .
+npm run dev
```
-4. Enjoy!
\ No newline at end of file
+4. Open http://localhost:3000/ in your browser.
+5. Enjoy!
\ No newline at end of file
diff --git a/app/components/Login.tsx b/app/components/Login.tsx
index f1382a6..146e86c 100644
--- a/app/components/Login.tsx
+++ b/app/components/Login.tsx
@@ -5,7 +5,6 @@ import {
getSettings
} from '../backend/database';
import Settings from './settings/Settings'; // Import the Settings component
-import { importDatabase } from './settings/settingUtils';
const Login: React.FC = () => {
// State to handle popup visibility
@@ -24,14 +23,14 @@ const Login: React.FC = () => {
// On component mount, check if there are credentials in localStorage
useEffect(() => {
- let savedAccountName: string | null;
- let savedAccountEmail: string | null;
- let savedAccountPassword: string | null;
+ let savedAccountName:string|null;
+ let savedAccountEmail:string|null;
+ let savedAccountPassword:string|null;
if (typeof localStorage !== 'undefined') {
savedAccountName = localStorage.getItem('accountName');
savedAccountEmail = localStorage.getItem('accountEmail');
savedAccountPassword = localStorage.getItem('accountPassword');
-
+
// If credentials are found in localStorage, log the user in
if (savedAccountName && savedAccountEmail && savedAccountPassword) {
setAccountName(savedAccountName);
@@ -41,14 +40,6 @@ const Login: React.FC = () => {
if (savedAccountName !== null && savedAccountPassword !== null) {
const success = await checkCredentials(savedAccountName, savedAccountPassword);
setIsLoggedIn(success); // Automatically log in
- const useName = localStorage.getItem("accountName");
- const usePassword = localStorage.getItem("accountPassword");
-
- if (useName && usePassword) {
- await importDatabase(useName, usePassword);
- }
-
-
}
};
check();
@@ -73,19 +64,11 @@ const Login: React.FC = () => {
setIsLoggedIn(true); // Successful login
const data = await getSettings(accountName, password)
if (data) {
- if (typeof localStorage !== 'undefined') {
+ if (typeof localStorage !== 'undefined') {
localStorage.setItem("dataFromServer", data)
}
}
setShowLoginPopup(false); // Close the login popup
- const useName = localStorage.getItem("accountName");
- const usePassword = localStorage.getItem("accountPassword");
-
- if (useName && usePassword) {
- await importDatabase(useName, usePassword);
- }
-
- window.location.reload();
} else {
alert('Incorrect credentials');
}
diff --git a/app/components/settings/Settings.tsx b/app/components/settings/Settings.tsx
index 28aeb87..afe571d 100644
--- a/app/components/settings/Settings.tsx
+++ b/app/components/settings/Settings.tsx
@@ -1,7 +1,7 @@
//#region imports
import React, { useState, useEffect } from 'react';
import { applyTheme } from './theme';
-import { exportSettings, importSettings, sendToDatabase, importDatabase } from './settingUtils'; // Import utility functions
+import { exportSettings, importSettings } from './settingUtils'; // Import utility functions
import { getAllLocalStorageItems } from '../../backend/GetLocalStorage';
import ColorSetting from './ColorSettings';
import TextSettings from './TextSettings'
@@ -15,6 +15,8 @@ import {
changeSettings,
createAccount,
deleteAccount,
+ getSettings,
+ sendToDatabase
} from '../../backend/database';
import ThemeDropdown from './DropDownTheme';
@@ -300,7 +302,7 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = (
useEffect(() => {
const useName = localStorage.getItem("accountName");
const usePassword = localStorage.getItem("accountPassword");
-
+
if (useName && usePassword) {
importDatabase(useName, usePassword);
}
@@ -312,6 +314,27 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = (
}
}, []); // Runs only once when the component mounts
+ const importDatabase = async (useName: string, usePassword: string) => {
+ const databaseSettings = await getSettings(useName, usePassword);
+
+ // Ensure user settings exist before flattening and storing
+ if (typeof databaseSettings == 'object' && databaseSettings) {
+ JSON.stringify(importSettings(databaseSettings), null, 2); // Pass only the current user's settings
+ } else {
+ console.error('Database settings are not in the expected format.');
+ }
+ }
+
+ const sendToDatabase = async () => {
+ let useName = localStorage.getItem("accountName")
+ let usePassword = localStorage.getItem("accountPassword")
+ if (useName && usePassword) {
+ if (await changeSettings(useName, usePassword, JSON.parse(exportSettings()))) {
+ alert('Data has been transferred')
+ }
+ }
+ };
+
// Effect hooks to update localStorage whenever any state changes
useEffect(() => {
// Flatten nested objects
@@ -570,7 +593,7 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = (
)}
);
- //#region custom --> foss
+ //#region custom --> foss
case 'foss':
return (
@@ -583,7 +606,7 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = (
);
- //#region account
+ //#region account
case 'account':
return (
@@ -626,7 +649,7 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = (
/>
);
- //#region api
+ //#region api
case 'api':
return (
@@ -680,7 +703,7 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = (
);
- //#region import export
+ //#region import export
case 'im/export':
return (
@@ -736,51 +759,52 @@ const Settings: React.FC<{ closeSettings: () => void; accountName: string }> = (
//#region overall export
return (
-
-
- {/* Sidebar for desktop */}
-
-
- - setActiveSection('general')}>General
- - setActiveSection('privacy')}>Privacy
- - setActiveSection('theme')}>Theme
- - setActiveSection('foss')}>FOSS
- - setActiveSection('account')}>Account
- - setActiveSection('api')}>API Keys
- - setActiveSection('im/export')}>Import/Export
-
-
+
+
+ {/* Sidebar for desktop */}
+
+
+ - setActiveSection('general')}>General
+ - setActiveSection('privacy')}>Privacy
+ - setActiveSection('theme')}>Theme
+ - setActiveSection('foss')}>FOSS
+ - setActiveSection('account')}>Account
+ - setActiveSection('api')}>API Keys
+ - setActiveSection('im/export')}>Import/Export
+
+
-
- {/* Dropdown for selections in responsive mode */}
-
-
Select a Setting
-
+
+ {/* Dropdown for selections in responsive mode */}
+
+
Select a Setting
+
+
+
Settings for {accountName}
+ {renderSettingsContent()}
+
+
+
+
-
Settings for {accountName}
- {renderSettingsContent()}
-
-
-
-
-
- );
+);
};
diff --git a/app/components/settings/settingUtils.ts b/app/components/settings/settingUtils.ts
index a3b3e61..885ad98 100644
--- a/app/components/settings/settingUtils.ts
+++ b/app/components/settings/settingUtils.ts
@@ -1,12 +1,11 @@
// settingsManager.ts
-import { changeSettings, getSettings } from "@/app/backend/database";
// Method to export localStorage to a JSON object
export function exportSettings(): string {
const settings: { [key: string]: string } = {};
// Loop through all keys in localStorage and add them to the settings object
- if (typeof localStorage !== 'undefined') {
+ if (typeof localStorage !== 'undefined') {
for (let i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i);
if (key) {
@@ -27,7 +26,7 @@ export function importSettings(jsonData: string): void {
const parsedSettings = JSON.parse(jsonData);
// Loop through parsed settings and save them in localStorage
- if (typeof localStorage !== 'undefined') {
+ if (typeof localStorage !== 'undefined') {
Object.keys(parsedSettings).forEach((key) => {
localStorage.setItem(key, parsedSettings[key]);
});
@@ -38,27 +37,3 @@ export function importSettings(jsonData: string): void {
console.error("Invalid JSON data:", error);
}
}
-
-export const sendToDatabase = async () => {
- let useName = localStorage.getItem("accountName")
- let usePassword = localStorage.getItem("accountPassword")
- if (useName && usePassword) {
- let result = await changeSettings(useName, usePassword, JSON.parse(exportSettings()))
- if (result == true) {
- alert('Data has been transferred')
- window.location.reload();
- }
- }
- window.location.reload();
-};
-
-export const importDatabase = async (useName: string, usePassword: string) => {
- const databaseSettings = await getSettings(useName, usePassword);
-
- // Ensure user settings exist before flattening and storing
- if (typeof databaseSettings == 'object' && databaseSettings) {
- importSettings(JSON.stringify(databaseSettings, null, 2)); // Pass only the current user's settings
- } else {
- console.error('Database settings are not in the expected format.');
- }
-}
diff --git a/deployment_scripts/linux/prepare-free.sh b/deployment_scripts/linux/prepare-free.sh
deleted file mode 100755
index 3f0293c..0000000
--- a/deployment_scripts/linux/prepare-free.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-
-chmod +x root.sh
-pkexec ./root.sh
-npm install
-npm run build
-
-cd py
-python3 -m venv venv
-source venv/bin/activate
-python3 -m pip install -r requirements.txt
-
-ollama pull qwen2-math:1.5b
-ollama pull starcoder2
-ollama pull llama3.2
-
-ollama pull wizard-math
-ollama pull starcoder2:7b
-ollama pull llama3.1
-
-cd ..
-chmod +x run.sh
\ No newline at end of file
diff --git a/deployment_scripts/linux/prepare-nonfree.sh b/deployment_scripts/linux/prepare-nonfree.sh
deleted file mode 100755
index 66d12ff..0000000
--- a/deployment_scripts/linux/prepare-nonfree.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-
-chmod +x root.sh
-pkexec ./root.sh
-npm install
-npm run build
-
-cd py
-python3 -m venv venv
-source venv/bin/activate
-python3 -m pip install -r requirements.txt
-
-ollama pull qwen2-math:1.5b
-ollama pull qwen2.5-coder:1.5b
-ollama pull phi3.5
-
-ollama pull mathstral
-ollama pull qwen2.5-coder
-ollama pull qwen2.5
-
-cd ..
-chmod +x run.sh
\ No newline at end of file
diff --git a/deployment_scripts/linux/root.sh b/deployment_scripts/linux/root.sh
deleted file mode 100644
index 6278166..0000000
--- a/deployment_scripts/linux/root.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-
-apt install npm nodejs python3-full -y
-if ! ollama; then
- curl -fsSL https://ollama.com/install.sh | sh
-fi
-systemctl enable ollama --now
\ No newline at end of file
diff --git a/deployment_scripts/linux/run.sh b/deployment_scripts/linux/run.sh
deleted file mode 100644
index e1e490b..0000000
--- a/deployment_scripts/linux/run.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/bash
-
-cd py
-python api.py &
-pid_py=$!
-
-npm start &
-pid_node=$!
-
-npx electron .
-
-kill $pid_py
-kill $pid_node
\ No newline at end of file