Compare commits
3 Commits
b800f0308d
...
0cbec6477f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0cbec6477f | ||
|
|
a55365259c | ||
|
|
d529568798 |
@@ -671,6 +671,7 @@ class SharePointApp(wx.Frame):
|
||||
self.current_items = [] # Gemmer graf-objekterne for rækkerne
|
||||
self.tree_item_data = {} # Mappenoder -> {type, id, name, drive_id, path}
|
||||
self.current_path_data = [] # Gemmer data-objekterne for den nuværende sti (brødkrummer)
|
||||
self._nav_gen = 0 # Incremented on each navigation to discard stale fetch results
|
||||
self.tree_root = None
|
||||
self.is_navigating_back = False
|
||||
self.active_edits = {} # item_id -> { "name": name, "event": Event, "waiting": bool }
|
||||
@@ -1722,7 +1723,6 @@ class SharePointApp(wx.Frame):
|
||||
all_sites.extend(data.get('value', []))
|
||||
url = data.get('@odata.nextLink')
|
||||
self.set_status(f"{self.get_txt('status_fetching_sites')} ({len(all_sites)}...)")
|
||||
self.pulse_gauge(True)
|
||||
else:
|
||||
break
|
||||
|
||||
@@ -1788,7 +1788,6 @@ class SharePointApp(wx.Frame):
|
||||
res_data = res.json()
|
||||
all_children.extend(res_data.get('value', []))
|
||||
url = res_data.get('@odata.nextLink')
|
||||
self.pulse_gauge(True)
|
||||
else:
|
||||
break
|
||||
|
||||
@@ -1856,8 +1855,8 @@ class SharePointApp(wx.Frame):
|
||||
|
||||
def _navigate_to_item_data(self, data, tree_item=None, is_breadcrumb=False):
|
||||
try:
|
||||
# Race-condition beskyttelse: Hvis vi allerede er der, så stop (undtagen ved brødkrumme-klik)
|
||||
if not is_breadcrumb and getattr(self, 'current_path', None) == data.get("path"):
|
||||
# Race-condition beskyttelse: Hvis vi allerede er der, så stop
|
||||
if getattr(self, 'current_path', None) == data.get("path"):
|
||||
return
|
||||
|
||||
self.current_path = data["path"]
|
||||
@@ -1886,12 +1885,14 @@ class SharePointApp(wx.Frame):
|
||||
self.list_ctrl.DeleteAllItems()
|
||||
self.current_items = []
|
||||
self.set_status(self.get_txt("status_loading_content"))
|
||||
|
||||
threading.Thread(target=self._fetch_list_contents_bg, args=(data,), daemon=True).start()
|
||||
|
||||
self._nav_gen += 1
|
||||
gen = self._nav_gen
|
||||
threading.Thread(target=self._fetch_list_contents_bg, args=(data, gen), daemon=True).start()
|
||||
except RuntimeError:
|
||||
pass
|
||||
|
||||
def _fetch_list_contents_bg(self, data):
|
||||
def _fetch_list_contents_bg(self, data, nav_gen=None):
|
||||
if not self.ensure_valid_token(): return
|
||||
self.pulse_gauge(True)
|
||||
items_data = []
|
||||
@@ -1938,8 +1939,7 @@ class SharePointApp(wx.Frame):
|
||||
|
||||
items_data.extend(chunk_data)
|
||||
self.set_status(self.get_txt("status_loading_items").format(count=len(items_data)))
|
||||
self.pulse_gauge(True)
|
||||
|
||||
|
||||
# Chunked UI Update
|
||||
if first_chunk:
|
||||
wx.CallAfter(self._populate_list_ctrl, chunk_data, data, finalize=False)
|
||||
@@ -1950,7 +1950,7 @@ class SharePointApp(wx.Frame):
|
||||
url = res_data.get('@odata.nextLink')
|
||||
|
||||
# Finalize
|
||||
wx.CallAfter(self._finalize_list_loading, items_data)
|
||||
wx.CallAfter(self._finalize_list_loading, items_data, nav_gen)
|
||||
self.pulse_gauge(False)
|
||||
|
||||
def _append_list_items(self, items):
|
||||
@@ -1973,8 +1973,10 @@ class SharePointApp(wx.Frame):
|
||||
self.list_ctrl.SetItem(idx, 2, size_str)
|
||||
self.list_ctrl.SetItem(idx, 3, item['modified'])
|
||||
|
||||
def _finalize_list_loading(self, items_data):
|
||||
def _finalize_list_loading(self, items_data, nav_gen=None):
|
||||
if not self: return
|
||||
if nav_gen is not None and nav_gen != self._nav_gen:
|
||||
return # User navigated away; discard stale results
|
||||
self.current_items = items_data
|
||||
self.apply_sorting()
|
||||
self.set_status(self.get_txt("status_ready"))
|
||||
|
||||
Reference in New Issue
Block a user