Skip to content

Commit 00b5199

Browse files
committed
App: Type to go to folder
[skip ci]
1 parent 860e702 commit 00b5199

2 files changed

Lines changed: 44 additions & 8 deletions

File tree

scripts/gdrive.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -169,16 +169,19 @@ def add_tracked_folder(slug, public, private, gfolders=None):
169169
FOLDERS_DATA_FILE.write_text(json.dumps(gfolders, sort_keys=True, indent=2))
170170
return gfolders
171171

172-
def get_gfolders_for_course(course):
172+
def get_gfolders_for_course(course, invite_to_add=True):
173173
"""Returns a (public, private) tuple of GIDs given a human course string"""
174174
gfolders = FOLDERS_DATA()
175175
parts = course.split('/')
176176
course = parts[0]
177177
if course not in gfolders:
178-
print("Hmmm... I don't know that Google Drive folder! Let's add it:")
179-
publicurl = input("Public link: ") or None
180-
privateurl = input("Private link: ") or None
181-
gfolders = add_tracked_folder(course, publicurl, privateurl, gfolders=gfolders)
178+
if invite_to_add:
179+
print("Hmmm... I don't know that Google Drive folder! Let's add it:")
180+
publicurl = input("Public link: ") or None
181+
privateurl = input("Private link: ") or None
182+
gfolders = add_tracked_folder(course, publicurl, privateurl, gfolders=gfolders)
183+
else:
184+
raise FileNotFoundError("I don't know that one!")
182185

183186
private_folder = folderlink_to_id(gfolders[course]['private'])
184187
public_folder = folderlink_to_id(gfolders[course]['public'])
@@ -208,7 +211,10 @@ def get_gfolders_for_course(course):
208211
if found:
209212
del parts[0]
210213
continue
211-
print(f"No subfolder found matching \"{q}\"")
214+
err = f"No subfolder found matching \"{q}\""
215+
if not invite_to_add:
216+
raise FileNotFoundError(err)
217+
print(err)
212218
q = input_with_prefill("Create new subfolder: ", titlecase(parts[0]))
213219
if not q:
214220
if public_folder:

scripts/gdrive_app.py

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
from PySide6.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,
99
QHBoxLayout, QListWidget, QListWidgetItem,
10-
QPushButton, QLineEdit, QSplitter,
10+
QPushButton, QLineEdit, QSplitter, QMessageBox,
1111
QListView, QMenu, QProgressDialog)
1212
from PySide6.QtCore import Qt, QSize
1313
from PySide6.QtGui import QIcon, QPixmap, QShortcut, QKeySequence
@@ -301,7 +301,7 @@ def init_ui(self):
301301
self.fwd_btn.clicked.connect(self.go_forward)
302302

303303
self.address_bar = QLineEdit()
304-
self.address_bar.setReadOnly(True)
304+
self.address_bar.returnPressed.connect(self.on_address_bar_return)
305305

306306
top_bar.addWidget(self.back_btn)
307307
top_bar.addWidget(self.fwd_btn)
@@ -433,6 +433,36 @@ def on_nav_clicked(self, item: QListWidgetItem):
433433
root_type = item.data(Qt.UserRole)
434434
self.load_root(root_type)
435435

436+
def on_address_bar_return(self):
437+
if not self.gcache:
438+
QMessageBox.information(self, "Loading", "Please wait for the cache to finish loading.")
439+
return
440+
441+
query = self.address_bar.text()
442+
if not query:
443+
return
444+
445+
import gdrive
446+
try:
447+
# resulting_tuple is (public_folder, private_folder)
448+
resulting_tuple = gdrive.get_gfolders_for_course(query, invite_to_add=False)
449+
folder_id = resulting_tuple[1] or resulting_tuple[0]
450+
if not folder_id:
451+
return
452+
453+
# Use gcache to get the folder's name
454+
folder_item = self.gcache.get_item(folder_id)
455+
if folder_item:
456+
folder_name = folder_item.get('name', query)
457+
else:
458+
folder_name = query
459+
460+
self.load_folder(folder_id, folder_name)
461+
except FileNotFoundError as e:
462+
QMessageBox.warning(self, "Not Found", str(e))
463+
except Exception as e:
464+
QMessageBox.critical(self, "Error", f"An error occurred: {e}")
465+
436466
def populate_files(self, items: List[Dict[str, Any]]):
437467
if hasattr(self, 'current_cancel_flag'):
438468
self.current_cancel_flag[0] = True

0 commit comments

Comments
 (0)