Skip to content

Commit f7af9d9

Browse files
committed
Moving things around to get builds to work
1 parent 014c652 commit f7af9d9

File tree

15 files changed

+216
-104
lines changed

15 files changed

+216
-104
lines changed

installer/src/main.py

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import zipfile
77
import requests
88
import tempfile
9+
import win32gui
10+
import win32con
911
import flet as ft
1012

1113
from titlebar import TitleBar
@@ -17,6 +19,30 @@ def is_admin():
1719
except:
1820
return False
1921

22+
23+
def set_app_icon(hwnd, icon_path):
24+
hicon = win32gui.LoadImage(None, icon_path, win32con.IMAGE_ICON, 0, 0, win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE)
25+
win32gui.SendMessage(hwnd, win32con.WM_SETICON, win32con.ICON_SMALL, hicon)
26+
win32gui.SendMessage(hwnd, win32con.WM_SETICON, win32con.ICON_BIG, hicon)
27+
28+
29+
def create_shortcut(target, shortcut_name):
30+
""" Create a startmenu shortcut for the Subconscious app """
31+
# Get the startmenu directory
32+
startmenu_dir = os.path.join(os.environ['APPDATA'], 'Microsoft', 'Windows', 'Start Menu', 'Programs')
33+
34+
# Create a shortcut file
35+
shortcut_path = os.path.join(startmenu_dir, f"{shortcut_name}.lnk")
36+
shell = ctypes.windll.Dispatch("WScript.Shell")
37+
shortcut = shell.CreateShortCut(shortcut_path)
38+
shortcut.Targetpath = target
39+
shortcut.WorkingDirectory = os.path.dirname(target)
40+
shortcut.Description = "Subconscious"
41+
shortcut.IconLocation = target
42+
shortcut.save()
43+
return shortcut_path
44+
45+
2046
def download_latest_release(download_dir, pb):
2147
""" Download the latest release of the Subconscious app """
2248
# GitHub API URL for the latest release
@@ -56,8 +82,17 @@ def extract_to_program_files(zip_path, program_files_dir):
5682

5783
def main(page: ft.Page):
5884
""" Main function to initiate the installer UI """
59-
# Window size
60-
page.visible = False
85+
# Configure the app icons
86+
myappid = u'chat.subconscious.installer'
87+
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
88+
89+
# Set custom icon for the window and taskbar
90+
icon_path = 'assets\\favicon.ico' # Replace with the path to your custom icon
91+
hwnd = win32gui.GetForegroundWindow()
92+
set_app_icon(hwnd, icon_path)
93+
94+
# Window Config
95+
page.window.center()
6196
page.window.width = page.window.min_width = page.window.max_width = 450
6297
page.window.height = page.window.min_height = page.window.max_height = 250
6398
page.window.center()
@@ -78,7 +113,7 @@ def main(page: ft.Page):
78113
ft.Column(
79114
[
80115
ft.Row([
81-
ft.Text("Subconscious", size=25, color=ft.Colors.PRIMARY),
116+
ft.Text("Installing Subconscious", size=25, color=ft.Colors.PRIMARY),
82117
], alignment="left", spacing=0),
83118
step,
84119
pb,
@@ -90,8 +125,8 @@ def main(page: ft.Page):
90125
),
91126
padding=ft.padding.only(20, 20, 20, 20))
92127
)
93-
page.visible = True
94128
page.update()
129+
set_app_icon(hwnd, icon_path)
95130

96131
try:
97132
# Create a temporary directory
@@ -109,13 +144,14 @@ def main(page: ft.Page):
109144
page.update()
110145

111146
# Ensure the Program Files directory exists
112-
os.makedirs(program_files_dir, exist_ok=True)
113-
114147
# Extract the downloaded zip file to the Program Files directory
148+
os.makedirs(program_files_dir, exist_ok=True)
115149
step.value = "Extracting files..."
116150
pb.value = 0.75
117151
page.update()
152+
118153
extract_to_program_files(zip_path, program_files_dir)
154+
create_shortcut(os.path.join(program_files_dir, "subconscious.exe"), "Subconscious")
119155
done.visible = True
120156
step.value = "Installation completed successfully!"
121157
pb.value = 1.0

installer/src/titlebar.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -59,53 +59,53 @@ def minimize(self, _):
5959
def theme_changed(self):
6060
""" Change the theme of the title bar buttons """
6161
if self.page.theme_mode == ft.ThemeMode.LIGHT:
62-
self.close.src = "./src/assets/close_dark.svg"
63-
self.mini.src = "./src/assets/minimize_dark.svg"
62+
self.close.src = "./assets/close_dark.svg"
63+
self.mini.src = "./assets/minimize_dark.svg"
6464
if self.page.window.maximized:
65-
self.res_max.src = "./src/assets/restore_dark.svg"
65+
self.res_max.src = "./assets/restore_dark.svg"
6666
else:
67-
self.res_max.src = "./src/assets/maximize_dark.svg"
67+
self.res_max.src = "./assets/maximize_dark.svg"
6868
else:
69-
self.close.src = "./src/assets/close_light.svg"
70-
self.mini.src = "./src/assets/minimize_light.svg"
69+
self.close.src = "./assets/close_light.svg"
70+
self.mini.src = "./assets/minimize_light.svg"
7171
if self.page.window.maximized:
72-
self.res_max.src = "./src/assets/restore_light.svg"
72+
self.res_max.src = "./assets/restore_light.svg"
7373
else:
74-
self.res_max.src = "./src/assets/maximize_light.svg"
74+
self.res_max.src = "./assets/maximize_light.svg"
7575
self.page.update()
7676

7777
def theme_init(self, page):
7878
""" Change the theme of the title bar buttons """
7979
if page.theme_mode == ft.ThemeMode.LIGHT:
80-
self.close = ft.Image(src="./src/assets/close_dark.svg", width=12, height=12)
81-
self.mini = ft.Image(src="./src/assets/minimize_dark.svg", width=12, height=12)
80+
self.close = ft.Image(src="./assets/close_dark.svg", width=12, height=12)
81+
self.mini = ft.Image(src="./assets/minimize_dark.svg", width=12, height=12)
8282
if page.window_maximized:
83-
self.res_max = ft.Image(src="./src/assets/restore_dark.svg", width=12, height=12)
83+
self.res_max = ft.Image(src="./assets/restore_dark.svg", width=12, height=12)
8484
else:
85-
self.res_max = ft.Image(src="./src/assets/maximize_dark.svg", width=12, height=12)
85+
self.res_max = ft.Image(src="./assets/maximize_dark.svg", width=12, height=12)
8686
else:
87-
self.close = ft.Image(src="./src/assets/close_light.svg", width=12, height=12)
88-
self.mini = ft.Image(src="./src/assets/minimize_light.svg", width=12, height=12)
87+
self.close = ft.Image(src="./assets/close_light.svg", width=12, height=12)
88+
self.mini = ft.Image(src="./assets/minimize_light.svg", width=12, height=12)
8989
if page.window_maximized:
90-
self.res_max = ft.Image(src="./src/assets/restore_light.svg", width=12, height=12)
90+
self.res_max = ft.Image(src="./assets/restore_light.svg", width=12, height=12)
9191
else:
92-
self.res_max = ft.Image(src="./src/assets/maximize_light.svg", width=12, height=12)
92+
self.res_max = ft.Image(src="./assets/maximize_light.svg", width=12, height=12)
9393

9494
def toggle(self, _):
9595
""" Toggle between maximized and window mode """
9696
if self.page.window.maximized:
9797
self.res_max_button.tooltip = "Maximize"
9898
self.page.window.maximized = False
9999
if self.page.theme_mode == ft.ThemeMode.LIGHT:
100-
self.res_max.src = "./src/assets/maximize_dark.svg"
100+
self.res_max.src = "./assets/maximize_dark.svg"
101101
else:
102-
self.res_max.src = "./src/assets/maximize_light.svg"
102+
self.res_max.src = "./assets/maximize_light.svg"
103103
else:
104104
self.res_max_button.tooltip = "Restore"
105105
self.page.window.maximized = True
106106
if self.page.theme_mode == ft.ThemeMode.LIGHT:
107-
self.res_max.src = "./src/assets/restore_dark.svg"
107+
self.res_max.src = "./assets/restore_dark.svg"
108108
else:
109-
self.res_max.src = "./src/assets/restore_light.svg"
109+
self.res_max.src = "./assets/restore_light.svg"
110110
self.page.update()
111111

src/__init__.py

Whitespace-only changes.

src/assets/favicon.ico

11.1 KB
Binary file not shown.

src/components/leftbar.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import json
22
import flet as ft
3-
from src.utilities.filechange import FileChange
3+
from utilities.filechange import FileChange
44

55

66
class PopupLanguageItem(ft.PopupMenuItem):
@@ -263,10 +263,10 @@ def toggler(self, _):
263263
def theme_changed(self, _):
264264
""" Toggle the theme mode between light and dark """
265265
if self.page.theme_mode == ft.ThemeMode.LIGHT:
266-
self.minimize = ft.Image(src="./src/assets/minimize_light.svg", width=12, height=12)
267-
self.maximize = ft.Image(src="./src/assets/maximize_light.svg", width=12, height=12)
268-
self.restore = ft.Image(src="./src/assets/restore_light.svg", width=12, height=12)
269-
self.close = ft.Image(src="./src/assets/close_light.svg", width=12, height=12)
266+
self.minimize = ft.Image(src="./assets/minimize_light.svg", width=12, height=12)
267+
self.maximize = ft.Image(src="./assets/maximize_light.svg", width=12, height=12)
268+
self.restore = ft.Image(src="./assets/restore_light.svg", width=12, height=12)
269+
self.close = ft.Image(src="./assets/close_light.svg", width=12, height=12)
270270
self.dark_light_icon.icon = ft.icons.BRIGHTNESS_HIGH
271271
self.page.theme_mode = ft.ThemeMode.DARK
272272
self.colour_theme_menu.items.pop(-1)
@@ -277,10 +277,10 @@ def theme_changed(self, _):
277277
self.page.theme = ft.Theme(color_scheme=PopupColorItem.white)
278278

279279
elif self.page.theme_mode == ft.ThemeMode.DARK:
280-
self.minimize = ft.Image(src="./src/assets/minimize_dark.svg", width=12, height=12)
281-
self.maximize = ft.Image(src="./src/assets/maximize_dark.svg", width=12, height=12)
282-
self.restore = ft.Image(src="./src/assets/restore_dark.svg", width=12, height=12)
283-
self.close = ft.Image(src="./src/assets/close_dark.svg", width=12, height=12)
280+
self.minimize = ft.Image(src="./assets/minimize_dark.svg", width=12, height=12)
281+
self.maximize = ft.Image(src="./assets/maximize_dark.svg", width=12, height=12)
282+
self.restore = ft.Image(src="./assets/restore_dark.svg", width=12, height=12)
283+
self.close = ft.Image(src="./assets/close_dark.svg", width=12, height=12)
284284
self.dark_light_icon.icon = ft.icons.BRIGHTNESS_2
285285
self.page.theme_mode = ft.ThemeMode.LIGHT
286286
self.colour_theme_menu.items.pop(-1)

src/components/main_window.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
from uuid import uuid4
44
from threading import Thread
55
from time import time, monotonic
6-
from src.utilities import VERSION
6+
from utilities import VERSION
77
from collections import defaultdict
8-
from src.components.data_objects import HumanMessage
8+
from components.data_objects import HumanMessage
99

10-
from src.utilities.filechange import FileChange
11-
from src.components.data_objects import Message, ExpansionPanelSlug
12-
from src.components.message_block import MessageBlock, MessageBubble
10+
from utilities.filechange import FileChange
11+
from components.data_objects import Message, ExpansionPanelSlug
12+
from components.message_block import MessageBlock, MessageBubble
1313

1414

1515
class MessageList(ft.ListView):
@@ -238,7 +238,7 @@ def render_settings(title, key, val):
238238

239239
# About content
240240
self.about = ft.Column([
241-
ft.Image(src="./src/assets/logo.png", width=100, height=100),
241+
ft.Image(src="./assets/logo.png", width=100, height=100),
242242
ft.Row([
243243
ft.Icon(ft.icons.INFO_OUTLINE, size=20, color=ft.colors.GREY),
244244
ft.Text("About", size=20, color=ft.colors.GREY),
@@ -599,8 +599,9 @@ def render_history(self, messages):
599599
"""
600600
message_list = MessageList()
601601
for message in messages:
602-
message_list.controls.append(MessageBubble(message))
603-
message_list.active = True
602+
if message:
603+
message_list.controls.append(MessageBubble(message))
604+
message_list.active = True
604605
return message_list
605606

606607
def show_thread(self):

src/components/message_block.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import flet.canvas as cv
44
from datetime import datetime
55

6-
from src.components.data_objects import HumanMessage
6+
from components.data_objects import HumanMessage
77

88

99
class MessageBubble(ft.Row):

src/components/rightbar.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import flet as ft
55
from types import SimpleNamespace
66

7-
from src.utilities import VERSION
8-
from src.utilities.filechange import FileChange
7+
from utilities import VERSION
8+
from utilities.filechange import FileChange
99

1010

1111
class NavIcon(ft.Container):
@@ -77,7 +77,7 @@ def __init__(self, page, show_window, settings, switch_llm, safe_exit, set_curre
7777
ft.Container(
7878
content=ft.Stack([
7979
ft.Image(
80-
src="./src/assets/ai_sparkle.svg",
80+
src="./assets/ai_sparkle.svg",
8181
width=30, height=30,
8282
top=5, left=5,
8383
color=ft.colors.PRIMARY

src/components/titlebar.py

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def __init__(self, page, title=None, buttons=None):
1919
ft.Container(content=
2020
ft.Row([
2121
ft.Image(
22-
src="./src/assets/icon.png",
22+
src="./assets/icon.png",
2323
width=20, height=20,
2424
color=ft.colors.PRIMARY,
2525
),
@@ -59,53 +59,53 @@ def minimize(self, _):
5959
def theme_changed(self):
6060
""" Change the theme of the title bar buttons """
6161
if self.page.theme_mode == ft.ThemeMode.LIGHT:
62-
self.close.src = "./src/assets/close_dark.svg"
63-
self.mini.src = "./src/assets/minimize_dark.svg"
62+
self.close.src = "./assets/close_dark.svg"
63+
self.mini.src = "./assets/minimize_dark.svg"
6464
if self.page.window.maximized:
65-
self.res_max.src = "./src/assets/restore_dark.svg"
65+
self.res_max.src = "./assets/restore_dark.svg"
6666
else:
67-
self.res_max.src = "./src/assets/maximize_dark.svg"
67+
self.res_max.src = "./assets/maximize_dark.svg"
6868
else:
69-
self.close.src = "./src/assets/close_light.svg"
70-
self.mini.src = "./src/assets/minimize_light.svg"
69+
self.close.src = "./assets/close_light.svg"
70+
self.mini.src = "./assets/minimize_light.svg"
7171
if self.page.window.maximized:
72-
self.res_max.src = "./src/assets/restore_light.svg"
72+
self.res_max.src = "./assets/restore_light.svg"
7373
else:
74-
self.res_max.src = "./src/assets/maximize_light.svg"
74+
self.res_max.src = "./assets/maximize_light.svg"
7575
self.page.update()
7676

7777
def theme_init(self, page):
7878
""" Change the theme of the title bar buttons """
7979
if page.theme_mode == ft.ThemeMode.LIGHT:
80-
self.close = ft.Image(src="./src/assets/close_dark.svg", width=12, height=12)
81-
self.mini = ft.Image(src="./src/assets/minimize_dark.svg", width=12, height=12)
80+
self.close = ft.Image(src="./assets/close_dark.svg", width=12, height=12)
81+
self.mini = ft.Image(src="./assets/minimize_dark.svg", width=12, height=12)
8282
if page.window_maximized:
83-
self.res_max = ft.Image(src="./src/assets/restore_dark.svg", width=12, height=12)
83+
self.res_max = ft.Image(src="./assets/restore_dark.svg", width=12, height=12)
8484
else:
85-
self.res_max = ft.Image(src="./src/assets/maximize_dark.svg", width=12, height=12)
85+
self.res_max = ft.Image(src="./assets/maximize_dark.svg", width=12, height=12)
8686
else:
87-
self.close = ft.Image(src="./src/assets/close_light.svg", width=12, height=12)
88-
self.mini = ft.Image(src="./src/assets/minimize_light.svg", width=12, height=12)
87+
self.close = ft.Image(src="./assets/close_light.svg", width=12, height=12)
88+
self.mini = ft.Image(src="./assets/minimize_light.svg", width=12, height=12)
8989
if page.window_maximized:
90-
self.res_max = ft.Image(src="./src/assets/restore_light.svg", width=12, height=12)
90+
self.res_max = ft.Image(src="./assets/restore_light.svg", width=12, height=12)
9191
else:
92-
self.res_max = ft.Image(src="./src/assets/maximize_light.svg", width=12, height=12)
92+
self.res_max = ft.Image(src="./assets/maximize_light.svg", width=12, height=12)
9393

9494
def toggle(self, _):
9595
""" Toggle between maximized and window mode """
9696
if self.page.window.maximized:
9797
self.res_max_button.tooltip = "Maximize"
9898
self.page.window.maximized = False
9999
if self.page.theme_mode == ft.ThemeMode.LIGHT:
100-
self.res_max.src = "./src/assets/maximize_dark.svg"
100+
self.res_max.src = "./assets/maximize_dark.svg"
101101
else:
102-
self.res_max.src = "./src/assets/maximize_light.svg"
102+
self.res_max.src = "./assets/maximize_light.svg"
103103
else:
104104
self.res_max_button.tooltip = "Restore"
105105
self.page.window.maximized = True
106106
if self.page.theme_mode == ft.ThemeMode.LIGHT:
107-
self.res_max.src = "./src/assets/restore_dark.svg"
107+
self.res_max.src = "./assets/restore_dark.svg"
108108
else:
109-
self.res_max.src = "./src/assets/restore_light.svg"
109+
self.res_max.src = "./assets/restore_light.svg"
110110
self.page.update()
111111

0 commit comments

Comments
 (0)