浏览代码

feat: webui notification

Timothy J. Baek 1 年之前
父节点
当前提交
0fdb346a31
共有 3 个文件被更改,包括 37 次插入28 次删除
  1. 35 26
      src/lib/components/chat/SettingsModal.svelte
  2. 1 1
      src/routes/(app)/+page.svelte
  3. 1 1
      src/routes/(app)/c/[id]/+page.svelte

+ 35 - 26
src/lib/components/chat/SettingsModal.svelte

@@ -22,6 +22,7 @@
 	// General
 	// General
 	let API_BASE_URL = OLLAMA_API_BASE_URL;
 	let API_BASE_URL = OLLAMA_API_BASE_URL;
 	let theme = 'dark';
 	let theme = 'dark';
+	let notificationEnabled = false;
 	let system = '';
 	let system = '';
 
 
 	// Advanced
 	// Advanced
@@ -49,7 +50,6 @@
 	let pullProgress = null;
 	let pullProgress = null;
 
 
 	// Addons
 	// Addons
-	let responseNotification = false;
 	let titleAutoGenerate = true;
 	let titleAutoGenerate = true;
 	let speechAutoSend = false;
 	let speechAutoSend = false;
 
 
@@ -110,12 +110,12 @@
 		saveSettings({ titleAutoGenerate: titleAutoGenerate });
 		saveSettings({ titleAutoGenerate: titleAutoGenerate });
 	};
 	};
 
 
-	const toggleResponseNotification = async () => {
+	const toggleNotification = async () => {
 		const permission = await Notification.requestPermission();
 		const permission = await Notification.requestPermission();
 
 
 		if (permission === 'granted') {
 		if (permission === 'granted') {
-			responseNotification = !responseNotification;
-			saveSettings({ responseNotification: responseNotification });
+			notificationEnabled = !notificationEnabled;
+			saveSettings({ notificationEnabled: notificationEnabled });
 		} else {
 		} else {
 			toast.error(
 			toast.error(
 				'Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.'
 				'Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.'
@@ -168,6 +168,13 @@
 						if (data.status) {
 						if (data.status) {
 							if (!data.digest) {
 							if (!data.digest) {
 								toast.success(data.status);
 								toast.success(data.status);
+
+								if (data.status === 'success') {
+									const notification = new Notification(`Ollama`, {
+										body: `Model '${modelTag}' has been successfully downloaded.`,
+										icon: '/favicon.png'
+									});
+								}
 							} else {
 							} else {
 								digest = data.digest;
 								digest = data.digest;
 								if (data.completed) {
 								if (data.completed) {
@@ -524,8 +531,10 @@
 				{#if selectedTab === 'general'}
 				{#if selectedTab === 'general'}
 					<div class="flex flex-col space-y-3">
 					<div class="flex flex-col space-y-3">
 						<div>
 						<div>
-							<div class=" py-1 flex w-full justify-between">
-								<div class=" self-center text-sm font-medium">Theme</div>
+							<div class=" mb-1 text-sm font-medium">WebUI Settings</div>
+
+							<div class=" py-0.5 flex w-full justify-between">
+								<div class=" self-center text-xs font-medium">Theme</div>
 
 
 								<button
 								<button
 									class="p-1 px-3 text-xs flex rounded transition"
 									class="p-1 px-3 text-xs flex rounded transition"
@@ -563,6 +572,26 @@
 									{/if}
 									{/if}
 								</button>
 								</button>
 							</div>
 							</div>
+
+							<div>
+								<div class=" py-0.5 flex w-full justify-between">
+									<div class=" self-center text-xs font-medium">Notification</div>
+
+									<button
+										class="p-1 px-3 text-xs flex rounded transition"
+										on:click={() => {
+											toggleNotification();
+										}}
+										type="button"
+									>
+										{#if notificationEnabled === true}
+											<span class="ml-2 self-center">On</span>
+										{:else}
+											<span class="ml-2 self-center">Off</span>
+										{/if}
+									</button>
+								</div>
+							</div>
 						</div>
 						</div>
 
 
 						<hr class=" dark:border-gray-700" />
 						<hr class=" dark:border-gray-700" />
@@ -819,26 +848,6 @@
 							<div>
 							<div>
 								<div class=" mb-1 text-sm font-medium">WebUI Add-ons</div>
 								<div class=" mb-1 text-sm font-medium">WebUI Add-ons</div>
 
 
-								<div>
-									<div class=" py-0.5 flex w-full justify-between">
-										<div class=" self-center text-xs font-medium">Response Notification</div>
-
-										<button
-											class="p-1 px-3 text-xs flex rounded transition"
-											on:click={() => {
-												toggleResponseNotification();
-											}}
-											type="button"
-										>
-											{#if responseNotification === true}
-												<span class="ml-2 self-center">On</span>
-											{:else}
-												<span class="ml-2 self-center">Off</span>
-											{/if}
-										</button>
-									</div>
-								</div>
-
 								<div>
 								<div>
 									<div class=" py-0.5 flex w-full justify-between">
 									<div class=" py-0.5 flex w-full justify-between">
 										<div class=" self-center text-xs font-medium">Title Auto Generation</div>
 										<div class=" self-center text-xs font-medium">Title Auto Generation</div>

+ 1 - 1
src/routes/(app)/+page.svelte

@@ -222,7 +222,7 @@
 								};
 								};
 								messages = messages;
 								messages = messages;
 
 
-								if ($settings.responseNotification && !document.hasFocus()) {
+								if ($settings.notificationEnabled && !document.hasFocus()) {
 									const notification = new Notification(
 									const notification = new Notification(
 										selectedModelfile
 										selectedModelfile
 											? `${
 											? `${

+ 1 - 1
src/routes/(app)/c/[id]/+page.svelte

@@ -236,7 +236,7 @@
 								};
 								};
 								messages = messages;
 								messages = messages;
 
 
-								if ($settings.responseNotification && !document.hasFocus()) {
+								if ($settings.notificationEnabled && !document.hasFocus()) {
 									const notification = new Notification(
 									const notification = new Notification(
 										selectedModelfile
 										selectedModelfile
 											? `${
 											? `${