meeting-noter 1.3.0__py3-none-any.whl → 3.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. meeting_noter/__init__.py +1 -1
  2. meeting_noter/cli.py +103 -0
  3. meeting_noter/daemon.py +38 -0
  4. meeting_noter/gui/__init__.py +51 -0
  5. meeting_noter/gui/main_window.py +219 -0
  6. meeting_noter/gui/menubar.py +248 -0
  7. meeting_noter/gui/screens/__init__.py +17 -0
  8. meeting_noter/gui/screens/dashboard.py +262 -0
  9. meeting_noter/gui/screens/logs.py +184 -0
  10. meeting_noter/gui/screens/recordings.py +279 -0
  11. meeting_noter/gui/screens/search.py +229 -0
  12. meeting_noter/gui/screens/settings.py +232 -0
  13. meeting_noter/gui/screens/viewer.py +140 -0
  14. meeting_noter/gui/theme/__init__.py +5 -0
  15. meeting_noter/gui/theme/dark_theme.py +53 -0
  16. meeting_noter/gui/theme/styles.qss +504 -0
  17. meeting_noter/gui/utils/__init__.py +15 -0
  18. meeting_noter/gui/utils/signals.py +82 -0
  19. meeting_noter/gui/utils/workers.py +258 -0
  20. meeting_noter/gui/widgets/__init__.py +6 -0
  21. meeting_noter/gui/widgets/sidebar.py +210 -0
  22. meeting_noter/gui/widgets/status_indicator.py +108 -0
  23. meeting_noter/mic_monitor.py +29 -1
  24. meeting_noter/ui/__init__.py +5 -0
  25. meeting_noter/ui/app.py +68 -0
  26. meeting_noter/ui/screens/__init__.py +17 -0
  27. meeting_noter/ui/screens/logs.py +166 -0
  28. meeting_noter/ui/screens/main.py +346 -0
  29. meeting_noter/ui/screens/recordings.py +241 -0
  30. meeting_noter/ui/screens/search.py +191 -0
  31. meeting_noter/ui/screens/settings.py +184 -0
  32. meeting_noter/ui/screens/viewer.py +116 -0
  33. meeting_noter/ui/styles/app.tcss +257 -0
  34. meeting_noter/ui/widgets/__init__.py +1 -0
  35. {meeting_noter-1.3.0.dist-info → meeting_noter-3.0.0.dist-info}/METADATA +4 -1
  36. meeting_noter-3.0.0.dist-info/RECORD +65 -0
  37. meeting_noter-1.3.0.dist-info/RECORD +0 -35
  38. {meeting_noter-1.3.0.dist-info → meeting_noter-3.0.0.dist-info}/WHEEL +0 -0
  39. {meeting_noter-1.3.0.dist-info → meeting_noter-3.0.0.dist-info}/entry_points.txt +0 -0
  40. {meeting_noter-1.3.0.dist-info → meeting_noter-3.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,116 @@
1
+ """Transcript viewer screen for Meeting Noter."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from datetime import datetime
6
+ from pathlib import Path
7
+
8
+ from textual.app import ComposeResult
9
+ from textual.containers import Container, Horizontal
10
+ from textual.screen import Screen
11
+ from textual.widgets import Button, Label, Static, TextArea
12
+
13
+ from meeting_noter.config import get_config
14
+
15
+
16
+ class ViewerScreen(Screen):
17
+ """Transcript viewer screen."""
18
+
19
+ BINDINGS = [
20
+ ("f", "toggle_favorite", "Favorite"),
21
+ ("escape", "go_back", "Back"),
22
+ ]
23
+
24
+ def __init__(self, transcript_path: Path, *args, **kwargs):
25
+ super().__init__(*args, **kwargs)
26
+ self.transcript_path = transcript_path
27
+
28
+ def compose(self) -> ComposeResult:
29
+ """Compose the viewer screen layout."""
30
+ config = get_config()
31
+ is_favorite = config.is_favorite(self.transcript_path.name)
32
+ star = "★ " if is_favorite else ""
33
+
34
+ yield Container(
35
+ Static(
36
+ f"[bold]{star}{self.transcript_path.name}[/bold]",
37
+ classes="title",
38
+ ),
39
+ Label("", id="file-info"),
40
+ Static("", classes="spacer"),
41
+ TextArea(id="transcript-content", read_only=True),
42
+ Static("", classes="spacer"),
43
+ Horizontal(
44
+ Button(
45
+ "★ Favorite" if not is_favorite else "☆ Unfavorite",
46
+ id="favorite-btn",
47
+ variant="warning" if is_favorite else "default",
48
+ ),
49
+ Button("Back", id="back-btn"),
50
+ classes="button-row",
51
+ ),
52
+ id="viewer-container",
53
+ )
54
+
55
+ def on_mount(self) -> None:
56
+ """Load transcript content on mount."""
57
+ self._load_transcript()
58
+
59
+ def _load_transcript(self) -> None:
60
+ """Load the transcript content."""
61
+ info_label = self.query_one("#file-info", Label)
62
+ content_area = self.query_one("#transcript-content", TextArea)
63
+
64
+ if not self.transcript_path.exists():
65
+ info_label.update("[red]File not found[/red]")
66
+ content_area.text = "Transcript file does not exist."
67
+ return
68
+
69
+ # Get file info
70
+ stat = self.transcript_path.stat()
71
+ mod_time = datetime.fromtimestamp(stat.st_mtime)
72
+ date_str = mod_time.strftime("%Y-%m-%d %H:%M")
73
+ size_kb = stat.st_size / 1024
74
+
75
+ info_label.update(f"[dim]Modified: {date_str} | Size: {size_kb:.1f} KB[/dim]")
76
+
77
+ # Load content
78
+ try:
79
+ content = self.transcript_path.read_text(encoding="utf-8")
80
+ content_area.text = content
81
+ except Exception as e:
82
+ content_area.text = f"Error loading file: {e}"
83
+
84
+ def on_button_pressed(self, event: Button.Pressed) -> None:
85
+ """Handle button presses."""
86
+ if event.button.id == "favorite-btn":
87
+ self.action_toggle_favorite()
88
+ elif event.button.id == "back-btn":
89
+ self.action_go_back()
90
+
91
+ def action_toggle_favorite(self) -> None:
92
+ """Toggle favorite status."""
93
+ config = get_config()
94
+ filename = self.transcript_path.name
95
+
96
+ if config.is_favorite(filename):
97
+ config.remove_favorite(filename)
98
+ self.notify(f"Removed from favorites: {filename}")
99
+ else:
100
+ config.add_favorite(filename)
101
+ self.notify(f"Added to favorites: {filename}")
102
+
103
+ # Update the button
104
+ btn = self.query_one("#favorite-btn", Button)
105
+ is_favorite = config.is_favorite(filename)
106
+ btn.label = "★ Favorite" if not is_favorite else "☆ Unfavorite"
107
+ btn.variant = "warning" if is_favorite else "default"
108
+
109
+ # Update title
110
+ title = self.query_one(".title", Static)
111
+ star = "★ " if is_favorite else ""
112
+ title.update(f"[bold]{star}{filename}[/bold]")
113
+
114
+ def action_go_back(self) -> None:
115
+ """Go back to the previous screen."""
116
+ self.app.pop_screen()
@@ -0,0 +1,257 @@
1
+ /* Meeting Noter TUI Styles */
2
+
3
+ /* Base container styles */
4
+ #main-container,
5
+ #recordings-container,
6
+ #search-container,
7
+ #settings-container,
8
+ #viewer-container,
9
+ #logs-container {
10
+ padding: 1 2;
11
+ }
12
+
13
+ /* Title styling */
14
+ .title {
15
+ text-align: center;
16
+ text-style: bold;
17
+ padding: 1 0;
18
+ color: $accent;
19
+ }
20
+
21
+ /* Section headers */
22
+ .section-header {
23
+ margin-top: 1;
24
+ margin-bottom: 0;
25
+ color: $text-muted;
26
+ text-align: center;
27
+ }
28
+
29
+ /* Spacers */
30
+ .spacer {
31
+ height: 1;
32
+ }
33
+
34
+ .spacer-large {
35
+ height: 2;
36
+ }
37
+
38
+ /* Main content area */
39
+ .main-content {
40
+ align: center middle;
41
+ padding: 2;
42
+ }
43
+
44
+ /* Centered input section */
45
+ .input-section {
46
+ width: auto;
47
+ height: auto;
48
+ }
49
+
50
+ /* Centered input rows */
51
+ .centered-input-row {
52
+ height: 3;
53
+ width: auto;
54
+ align: center middle;
55
+ }
56
+
57
+ .centered-switch-row {
58
+ height: 3;
59
+ width: auto;
60
+ align: center middle;
61
+ margin-top: 1;
62
+ }
63
+
64
+ .input-label {
65
+ width: 18;
66
+ text-align: right;
67
+ padding-right: 1;
68
+ }
69
+
70
+ .meeting-input {
71
+ width: 30;
72
+ }
73
+
74
+ /* Centered button rows */
75
+ .centered-button-row {
76
+ height: 3;
77
+ width: auto;
78
+ align: center middle;
79
+ }
80
+
81
+ .centered-button-row Button {
82
+ margin: 0 1;
83
+ min-width: 16;
84
+ }
85
+
86
+ /* Old input rows (for backwards compat) */
87
+ .input-row {
88
+ height: 3;
89
+ margin: 1 0;
90
+ align: center middle;
91
+ }
92
+
93
+ .input-row Label {
94
+ width: 16;
95
+ }
96
+
97
+ .input-row Input {
98
+ width: 40;
99
+ }
100
+
101
+ /* Switch rows */
102
+ .switch-row {
103
+ height: 3;
104
+ margin: 1 0;
105
+ align: center middle;
106
+ }
107
+
108
+ .switch-row Label {
109
+ width: 18;
110
+ }
111
+
112
+ /* Button rows */
113
+ .button-row {
114
+ height: 3;
115
+ margin: 1 0;
116
+ align: center middle;
117
+ }
118
+
119
+ .button-row Button {
120
+ margin: 0 1;
121
+ }
122
+
123
+ /* Navigation row */
124
+ .nav-row {
125
+ height: 3;
126
+ margin: 1 0;
127
+ align: center middle;
128
+ }
129
+
130
+ .nav-row Button {
131
+ margin: 0 1;
132
+ }
133
+
134
+ /* Search row */
135
+ .search-row {
136
+ height: 3;
137
+ margin: 1 0;
138
+ }
139
+
140
+ .search-row Input {
141
+ width: 1fr;
142
+ margin-right: 1;
143
+ }
144
+
145
+ /* Options row */
146
+ .options-row {
147
+ height: 3;
148
+ }
149
+
150
+ /* Settings form */
151
+ .settings-form {
152
+ padding: 1 2;
153
+ }
154
+
155
+ .setting-row {
156
+ height: 3;
157
+ margin: 0 0 1 0;
158
+ }
159
+
160
+ .setting-label {
161
+ width: 22;
162
+ }
163
+
164
+ .setting-input {
165
+ width: 1fr;
166
+ }
167
+
168
+ /* DataTable */
169
+ DataTable {
170
+ height: 1fr;
171
+ scrollbar-gutter: stable;
172
+ }
173
+
174
+ DataTable > .datatable--cursor {
175
+ background: $accent 30%;
176
+ }
177
+
178
+ /* ListView */
179
+ ListView {
180
+ height: 1fr;
181
+ border: solid $primary;
182
+ }
183
+
184
+ ListView > ListItem {
185
+ padding: 0 1;
186
+ }
187
+
188
+ ListView > ListItem.--highlight {
189
+ background: $accent 30%;
190
+ }
191
+
192
+ /* RichLog */
193
+ RichLog {
194
+ height: 1fr;
195
+ border: solid $primary;
196
+ scrollbar-gutter: stable;
197
+ }
198
+
199
+ /* Live transcript display */
200
+ #live-transcript {
201
+ height: 10;
202
+ min-height: 6;
203
+ max-height: 15;
204
+ border: solid $primary;
205
+ margin: 0 2;
206
+ }
207
+
208
+ #live-header {
209
+ margin-top: 1;
210
+ }
211
+
212
+ /* TextArea */
213
+ TextArea {
214
+ height: 1fr;
215
+ border: solid $primary;
216
+ }
217
+
218
+ /* Status display */
219
+ #status {
220
+ border: solid $primary;
221
+ padding: 1 2;
222
+ margin: 1 4;
223
+ height: auto;
224
+ min-height: 5;
225
+ }
226
+
227
+ /* Status label */
228
+ #status-label {
229
+ text-align: center;
230
+ margin-top: 1;
231
+ }
232
+
233
+ /* File info label */
234
+ #file-info {
235
+ text-align: center;
236
+ }
237
+
238
+ /* Results header/footer */
239
+ #results-header,
240
+ #results-footer {
241
+ text-align: center;
242
+ margin: 1 0;
243
+ }
244
+
245
+ /* Select widget */
246
+ Select {
247
+ width: 30;
248
+ }
249
+
250
+ /* Button styling - prevent text selection appearance */
251
+ Button {
252
+ text-style: bold;
253
+ }
254
+
255
+ Button:focus {
256
+ text-style: bold;
257
+ }
@@ -0,0 +1 @@
1
+ """UI Widgets for Meeting Noter."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meeting-noter
3
- Version: 1.3.0
3
+ Version: 3.0.0
4
4
  Summary: Offline meeting transcription for macOS with automatic meeting detection
5
5
  Author: Victor
6
6
  License: MIT
@@ -27,6 +27,7 @@ Requires-Dist: sounddevice>=0.4.6
27
27
  Requires-Dist: numpy>=1.24
28
28
  Requires-Dist: faster-whisper>=1.0.0
29
29
  Requires-Dist: imageio-ffmpeg>=0.4.9
30
+ Requires-Dist: textual>=0.47.0
30
31
  Requires-Dist: pyobjc-framework-Cocoa>=9.0; sys_platform == "darwin"
31
32
  Requires-Dist: pyobjc-framework-Quartz>=9.0; sys_platform == "darwin"
32
33
  Requires-Dist: pyobjc-framework-ScreenCaptureKit>=9.0; sys_platform == "darwin"
@@ -35,6 +36,8 @@ Requires-Dist: pyobjc-framework-CoreMedia>=9.0; sys_platform == "darwin"
35
36
  Requires-Dist: pyobjc-framework-libdispatch>=9.0; sys_platform == "darwin"
36
37
  Provides-Extra: offline
37
38
  Requires-Dist: meeting-noter-models>=0.1.0; extra == "offline"
39
+ Provides-Extra: gui
40
+ Requires-Dist: PySide6>=6.5.0; extra == "gui"
38
41
  Provides-Extra: dev
39
42
  Requires-Dist: pytest>=7.0; extra == "dev"
40
43
  Requires-Dist: pytest-cov; extra == "dev"
@@ -0,0 +1,65 @@
1
+ meeting_noter/__init__.py,sha256=IUXWaiwZS1L2077809O-HLyrSjQQUYQ30Xjw7j_HDiI,103
2
+ meeting_noter/__main__.py,sha256=6sSOqH1o3jvgvkVzsVKmF6-xVGcUAbNVQkRl2CrygdE,120
3
+ meeting_noter/cli.py,sha256=_nAbOnqO1eZprWO74zvHKrCfKDqn7YoFs1SsdEOY-WQ,38200
4
+ meeting_noter/config.py,sha256=vdnTh6W6-DUPJCj0ekFu1Q1m87O7gx0QD3E5DrRGpXk,7537
5
+ meeting_noter/daemon.py,sha256=i81IXgEnsoAoMewknySO5_ECa1nCGOsVLfXtJXJf0rw,21611
6
+ meeting_noter/meeting_detector.py,sha256=St0qoMkvUERP4BaxnXO1M6fZDJpWqBf9In7z2SgWcWg,10564
7
+ meeting_noter/mic_monitor.py,sha256=SIsgb8X6uhYuA0CgsRhTjYi8aA-oSUm9vL0r_kQki3g,17239
8
+ meeting_noter/update_checker.py,sha256=sMmIiiZJL6K7wqLWE64Aj4hS8uspjUOirr6BG_IlL1I,1701
9
+ meeting_noter/audio/__init__.py,sha256=O7PU8CxHSHxMeHbc9Jdwt9kePLQzsPh81GQU7VHCtBY,44
10
+ meeting_noter/audio/capture.py,sha256=fDrT5oXfva8vdFlht9cv60NviKbksw2QeJ8eOtI19uE,6469
11
+ meeting_noter/audio/encoder.py,sha256=OBsgUmlZPz-YZQZ7Rp8MAlMRaQxTsccjuTgCtvRebmc,6573
12
+ meeting_noter/audio/system_audio.py,sha256=jbHGjNCerI19weXap0a90Ik17lVTCT1hCEgRKYke-p8,13016
13
+ meeting_noter/gui/__init__.py,sha256=XdjSYNGeiLyGb4wRfDk9mnJuYD_PC-a-tw096Zf0DNk,1401
14
+ meeting_noter/gui/main_window.py,sha256=NXl4JgPbF7MvuLrwmId6i6speYUoiwhMwubYX3C1MLA,6902
15
+ meeting_noter/gui/menubar.py,sha256=hyqm74Vp1I0eB57yzvYEvtzk4y-Y5GRCZau-erGYr_I,8261
16
+ meeting_noter/gui/screens/__init__.py,sha256=_ETRs61OD0xm_FkKTvhv286hpSEsmeZ8v15bKUSUs8Y,549
17
+ meeting_noter/gui/screens/dashboard.py,sha256=_5VzZuh4lUDKoW9iGdM9YZZAqliZtK8azYagI6zFimg,9492
18
+ meeting_noter/gui/screens/logs.py,sha256=acqNhx0H2emVDQ4uCrhkVxbExG58Z99mUrMySF321xI,5746
19
+ meeting_noter/gui/screens/recordings.py,sha256=rQ7_hLv2uq-qyFTlmnR1NuH9h0Yp5u7rh0o6Gv1Vfw8,9500
20
+ meeting_noter/gui/screens/search.py,sha256=emdfAGQR3rhtrbj5rfCYjgqPY8i6gzUO4z1wZ6naFsA,7345
21
+ meeting_noter/gui/screens/settings.py,sha256=u-L0l6I6h25Tp2PIBQW8KipKEBc2VYGsxrXwEENLJxU,8016
22
+ meeting_noter/gui/screens/viewer.py,sha256=TEVCO1tcYVO1li1pt846fKx5VxTxk-lWywnoBV2XuUc,4383
23
+ meeting_noter/gui/theme/__init__.py,sha256=UMcYNuIxJSuLH9iFerklxShJd9BGqyFdeEHYwzWYk8E,148
24
+ meeting_noter/gui/theme/dark_theme.py,sha256=UAgrJDjPgzkjBg7ucg1NC0jOUylh1-n0BcQL9mBZNMA,1795
25
+ meeting_noter/gui/theme/styles.qss,sha256=zY0bYZALFE5Mu93oKYix1s0IzhQCk9AQbu1ChWe-NSQ,9299
26
+ meeting_noter/gui/utils/__init__.py,sha256=IG3pknZCt9P3vEM-1NbARiwoeLN8vT0B5gLOL2Aecik,338
27
+ meeting_noter/gui/utils/signals.py,sha256=voOqXteRWGbrgnltrz_Q4_hjwtUK71r9n16ojAhQLAU,2362
28
+ meeting_noter/gui/utils/workers.py,sha256=xYdpdgUHJcYJkThWoluT0QKKyfTXKzscyi_u3a91GuE,8283
29
+ meeting_noter/gui/widgets/__init__.py,sha256=lbcVJ23SYzVro0VLucsXaBn_X9L1vviUtuwS-H_0YPA,214
30
+ meeting_noter/gui/widgets/sidebar.py,sha256=-VDnWMk5gSonjHmpSIv4MgcVDmsrmPAbnafLk5AHHK0,7232
31
+ meeting_noter/gui/widgets/status_indicator.py,sha256=4gHhOrX1gmP_00V3dXRCg5EkR_k8r_MP_BHNll25ido,4347
32
+ meeting_noter/install/__init__.py,sha256=SX5vLFMrV8aBDEGW18jhaqBqJqnRXaeo0Ct7QVGDgvE,38
33
+ meeting_noter/install/macos.py,sha256=dO-86zbNKRtt0l4D8naVn7kFWjzI8TufWLWE3FRLHQ8,3400
34
+ meeting_noter/output/__init__.py,sha256=F7xPlOrqweZcPbZtDrhved1stBI59vnWnLYfGwdu6oY,31
35
+ meeting_noter/output/favorites.py,sha256=kYtEshq5E5xxaqjG36JMY5a-r6C2w98iqmKsGsxpgag,5764
36
+ meeting_noter/output/searcher.py,sha256=ZGbEewodNuqq5mM4XvVtxELv_6UQByjs-LmEwodc-Ug,6448
37
+ meeting_noter/output/writer.py,sha256=zO8y6FAFUAp0EEtALY-M5e2Ja5P-hgV38JjcKW7c-bA,3017
38
+ meeting_noter/resources/__init__.py,sha256=yzHNxgypkuVDFZWv6xZjUygOVB_Equ9NNX_HGRvN7VM,43
39
+ meeting_noter/resources/icon.icns,sha256=zMWqXCq7pI5acS0tbekFgFDvLt66EKUBP5-5IgztwPM,35146
40
+ meeting_noter/resources/icon.png,sha256=nK0hM6CPMor_xXRFYURpm0muA2O7yzotyydUQx-ukyg,2390
41
+ meeting_noter/resources/icon_128.png,sha256=Wg27dIpFfMzv15HG6eQpSqg72jrbGBcqLkGjOfAptO4,1169
42
+ meeting_noter/resources/icon_16.png,sha256=GONIIZCP9FUMb_MWZWMz1_iWxsPCPOwW_XcrPF7W8KY,215
43
+ meeting_noter/resources/icon_256.png,sha256=nK0hM6CPMor_xXRFYURpm0muA2O7yzotyydUQx-ukyg,2390
44
+ meeting_noter/resources/icon_32.png,sha256=Bw6hJXqkd-d1OfDpFv2om7Stex7daedxnpXt32xR8Sg,344
45
+ meeting_noter/resources/icon_512.png,sha256=o7X3ngYcppcIAAk9AcfPx94MUmrsPRp0qBTpb9SzfX8,5369
46
+ meeting_noter/resources/icon_64.png,sha256=TqG7Awx3kK8YdiX1e_z1odZonosZyQI2trlkNZCzUoI,607
47
+ meeting_noter/transcription/__init__.py,sha256=7GY9diP06DzFyoli41wddbrPv5bVDzH35bmnWlIJev4,29
48
+ meeting_noter/transcription/engine.py,sha256=G9NcSS6Q-UhW7PlQ0E85hQXn6BWao64nIvyw4NR2yxI,7208
49
+ meeting_noter/transcription/live_transcription.py,sha256=YfojFWv4h3Lp-pK5tjIauvimCWAmDhj6pj5gUmyBxr4,9539
50
+ meeting_noter/ui/__init__.py,sha256=iK31upnYwlfQ4fB2laAlR2EqXLFTAgCxq0PU6AvfZ38,130
51
+ meeting_noter/ui/app.py,sha256=GSElpPMqYK8aJOgT5R4DX5N5yTzPD9iswnU2m8oOVcw,2272
52
+ meeting_noter/ui/screens/__init__.py,sha256=oiSNVk39W8zzvxleCIwApZWWV1CP1NKcaUhl801trVg,520
53
+ meeting_noter/ui/screens/logs.py,sha256=zO7TDcpzkU8DdKbHhhfvkI5WCc46dsiGcPe9n1Oix4g,5797
54
+ meeting_noter/ui/screens/main.py,sha256=wQO6mke2ox885ybekAun5fb1T5DbC9gET5cDiCqy54E,12501
55
+ meeting_noter/ui/screens/recordings.py,sha256=P-GDcklAEZPNaerrT5aNV73boJ2xwAUirnH-7phUTX0,7677
56
+ meeting_noter/ui/screens/search.py,sha256=seJUSFYzaFjJGiPRMz9FctdgovTjkOMl8KDGBRP-FX0,6590
57
+ meeting_noter/ui/screens/settings.py,sha256=Zb9-1rkPap1oUNcu4SJcOIemI8DmVC_5uqMd_MbLaCM,7247
58
+ meeting_noter/ui/screens/viewer.py,sha256=5LVhghDcpshlisCrygk9H3uwOh48vmonMd8d4NH77hU,3991
59
+ meeting_noter/ui/styles/app.tcss,sha256=-uE-1mE3oqKBZW1-pySmOZhK9oxjEQqcG7LDprwxBg4,3396
60
+ meeting_noter/ui/widgets/__init__.py,sha256=6aVXLDGFXL9PnX5bCnMAqRqOvsv4VuzK_T2UTySQlTg,36
61
+ meeting_noter-3.0.0.dist-info/METADATA,sha256=sROgsYboliy4ehnWYiZ54Jzs-tWePYweba1EoP8Z-90,7036
62
+ meeting_noter-3.0.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
63
+ meeting_noter-3.0.0.dist-info/entry_points.txt,sha256=osZoOmm-UBPCJ4b6DGH6JOAm7mofM2fK06eK6blplmg,83
64
+ meeting_noter-3.0.0.dist-info/top_level.txt,sha256=9Tuq04_0SXM0OXOHVbOHkHkB5tG3fqkrMrfzCMpbLpY,14
65
+ meeting_noter-3.0.0.dist-info/RECORD,,
@@ -1,35 +0,0 @@
1
- meeting_noter/__init__.py,sha256=6WLmaMLX2bfnCWqF2vzOnwjKo728hFUrDHXgUjykajQ,103
2
- meeting_noter/__main__.py,sha256=6sSOqH1o3jvgvkVzsVKmF6-xVGcUAbNVQkRl2CrygdE,120
3
- meeting_noter/cli.py,sha256=XMTDUpXpmfvy8E0KqXAtS3GD382xKJSzHBpZdvPfbwE,34771
4
- meeting_noter/config.py,sha256=vdnTh6W6-DUPJCj0ekFu1Q1m87O7gx0QD3E5DrRGpXk,7537
5
- meeting_noter/daemon.py,sha256=u9VrYe94o3lxabuIS9MDVPHSH7MqKqzTqGTuA7TNAIc,19767
6
- meeting_noter/meeting_detector.py,sha256=St0qoMkvUERP4BaxnXO1M6fZDJpWqBf9In7z2SgWcWg,10564
7
- meeting_noter/mic_monitor.py,sha256=P8vF4qaZcGrEzzJyVos78Vuf38NXHGNRREDsD-HyBHc,16211
8
- meeting_noter/update_checker.py,sha256=sMmIiiZJL6K7wqLWE64Aj4hS8uspjUOirr6BG_IlL1I,1701
9
- meeting_noter/audio/__init__.py,sha256=O7PU8CxHSHxMeHbc9Jdwt9kePLQzsPh81GQU7VHCtBY,44
10
- meeting_noter/audio/capture.py,sha256=fDrT5oXfva8vdFlht9cv60NviKbksw2QeJ8eOtI19uE,6469
11
- meeting_noter/audio/encoder.py,sha256=OBsgUmlZPz-YZQZ7Rp8MAlMRaQxTsccjuTgCtvRebmc,6573
12
- meeting_noter/audio/system_audio.py,sha256=jbHGjNCerI19weXap0a90Ik17lVTCT1hCEgRKYke-p8,13016
13
- meeting_noter/install/__init__.py,sha256=SX5vLFMrV8aBDEGW18jhaqBqJqnRXaeo0Ct7QVGDgvE,38
14
- meeting_noter/install/macos.py,sha256=dO-86zbNKRtt0l4D8naVn7kFWjzI8TufWLWE3FRLHQ8,3400
15
- meeting_noter/output/__init__.py,sha256=F7xPlOrqweZcPbZtDrhved1stBI59vnWnLYfGwdu6oY,31
16
- meeting_noter/output/favorites.py,sha256=kYtEshq5E5xxaqjG36JMY5a-r6C2w98iqmKsGsxpgag,5764
17
- meeting_noter/output/searcher.py,sha256=ZGbEewodNuqq5mM4XvVtxELv_6UQByjs-LmEwodc-Ug,6448
18
- meeting_noter/output/writer.py,sha256=zO8y6FAFUAp0EEtALY-M5e2Ja5P-hgV38JjcKW7c-bA,3017
19
- meeting_noter/resources/__init__.py,sha256=yzHNxgypkuVDFZWv6xZjUygOVB_Equ9NNX_HGRvN7VM,43
20
- meeting_noter/resources/icon.icns,sha256=zMWqXCq7pI5acS0tbekFgFDvLt66EKUBP5-5IgztwPM,35146
21
- meeting_noter/resources/icon.png,sha256=nK0hM6CPMor_xXRFYURpm0muA2O7yzotyydUQx-ukyg,2390
22
- meeting_noter/resources/icon_128.png,sha256=Wg27dIpFfMzv15HG6eQpSqg72jrbGBcqLkGjOfAptO4,1169
23
- meeting_noter/resources/icon_16.png,sha256=GONIIZCP9FUMb_MWZWMz1_iWxsPCPOwW_XcrPF7W8KY,215
24
- meeting_noter/resources/icon_256.png,sha256=nK0hM6CPMor_xXRFYURpm0muA2O7yzotyydUQx-ukyg,2390
25
- meeting_noter/resources/icon_32.png,sha256=Bw6hJXqkd-d1OfDpFv2om7Stex7daedxnpXt32xR8Sg,344
26
- meeting_noter/resources/icon_512.png,sha256=o7X3ngYcppcIAAk9AcfPx94MUmrsPRp0qBTpb9SzfX8,5369
27
- meeting_noter/resources/icon_64.png,sha256=TqG7Awx3kK8YdiX1e_z1odZonosZyQI2trlkNZCzUoI,607
28
- meeting_noter/transcription/__init__.py,sha256=7GY9diP06DzFyoli41wddbrPv5bVDzH35bmnWlIJev4,29
29
- meeting_noter/transcription/engine.py,sha256=G9NcSS6Q-UhW7PlQ0E85hQXn6BWao64nIvyw4NR2yxI,7208
30
- meeting_noter/transcription/live_transcription.py,sha256=YfojFWv4h3Lp-pK5tjIauvimCWAmDhj6pj5gUmyBxr4,9539
31
- meeting_noter-1.3.0.dist-info/METADATA,sha256=Y8UXDVyKjcA_F4Ck8czm9GlNpsAjUcbFnLJLAAAdEdw,6939
32
- meeting_noter-1.3.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
33
- meeting_noter-1.3.0.dist-info/entry_points.txt,sha256=osZoOmm-UBPCJ4b6DGH6JOAm7mofM2fK06eK6blplmg,83
34
- meeting_noter-1.3.0.dist-info/top_level.txt,sha256=9Tuq04_0SXM0OXOHVbOHkHkB5tG3fqkrMrfzCMpbLpY,14
35
- meeting_noter-1.3.0.dist-info/RECORD,,