feat: add refresh functionality to UI and document future feature requests
This commit is contained in:
@@ -41,4 +41,10 @@ Den færdige fil findes i mappen `dist/`. Husk at placere `settings.json` i samm
|
|||||||
"tenant_id": "DIN_TENANT_ID",
|
"tenant_id": "DIN_TENANT_ID",
|
||||||
"temp_dir": "C:\\Temp_SP"
|
"temp_dir": "C:\\Temp_SP"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
## Feature Request
|
||||||
|
1. Tilføj funktion til at gemme og administrere, flere tenants.
|
||||||
|
2. Debug log til at se hvad der sker i baggrunden.
|
||||||
|
3. Exteded log for 14 dage, som logger alle handlinger brugeren forateager sig i appen.
|
||||||
|
4. Licens styring, så man kan licencere programmet til kunder. Der skal være mulighed for 1 år, 3 år og unlimited.
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ STRINGS = {
|
|||||||
"btn_save_changes": "💾 Gem ændringer i SharePoint",
|
"btn_save_changes": "💾 Gem ændringer i SharePoint",
|
||||||
"btn_login": "Log ind",
|
"btn_login": "Log ind",
|
||||||
"btn_logged_in": "Logget ind",
|
"btn_logged_in": "Logget ind",
|
||||||
|
"btn_refresh": "🔄 Opdater",
|
||||||
"btn_upload_file": "📤 Upload Fil",
|
"btn_upload_file": "📤 Upload Fil",
|
||||||
"btn_upload_folder": "📁 Upload Mappe",
|
"btn_upload_folder": "📁 Upload Mappe",
|
||||||
"btn_new_folder": "➕ Ny Mappe",
|
"btn_new_folder": "➕ Ny Mappe",
|
||||||
@@ -128,6 +129,7 @@ STRINGS = {
|
|||||||
"btn_save_changes": "💾 Save changes to SharePoint",
|
"btn_save_changes": "💾 Save changes to SharePoint",
|
||||||
"btn_login": "Login",
|
"btn_login": "Login",
|
||||||
"btn_logged_in": "Logged in",
|
"btn_logged_in": "Logged in",
|
||||||
|
"btn_refresh": "🔄 Refresh",
|
||||||
"btn_upload_file": "📤 Upload File",
|
"btn_upload_file": "📤 Upload File",
|
||||||
"btn_upload_folder": "📁 Upload Folder",
|
"btn_upload_folder": "📁 Upload Folder",
|
||||||
"btn_new_folder": "➕ New Folder",
|
"btn_new_folder": "➕ New Folder",
|
||||||
@@ -315,6 +317,11 @@ class SharePointApp(wx.Frame):
|
|||||||
self.home_btn.Bind(wx.EVT_BUTTON, self.load_sites)
|
self.home_btn.Bind(wx.EVT_BUTTON, self.load_sites)
|
||||||
nav_hbox.Add(self.home_btn, 0, wx.LEFT | wx.ALIGN_CENTER_VERTICAL, 5)
|
nav_hbox.Add(self.home_btn, 0, wx.LEFT | wx.ALIGN_CENTER_VERTICAL, 5)
|
||||||
|
|
||||||
|
self.refresh_btn = wx.Button(nav_panel, label=self.get_txt("btn_refresh"), size=(100, 30))
|
||||||
|
self.refresh_btn.Disable()
|
||||||
|
self.refresh_btn.Bind(wx.EVT_BUTTON, self.on_refresh)
|
||||||
|
nav_hbox.Add(self.refresh_btn, 0, wx.LEFT | wx.ALIGN_CENTER_VERTICAL, 5)
|
||||||
|
|
||||||
# NY KNAP: Gem ændringer (Vises kun ved redigering)
|
# NY KNAP: Gem ændringer (Vises kun ved redigering)
|
||||||
self.done_btn = wx.Button(nav_panel, label=self.get_txt("btn_save_changes"), size=(200, 30))
|
self.done_btn = wx.Button(nav_panel, label=self.get_txt("btn_save_changes"), size=(200, 30))
|
||||||
self.done_btn.SetBackgroundColour(wx.Colour(255, 69, 0)) # OrangeRed
|
self.done_btn.SetBackgroundColour(wx.Colour(255, 69, 0)) # OrangeRed
|
||||||
@@ -372,6 +379,7 @@ class SharePointApp(wx.Frame):
|
|||||||
self.tree_ctrl.AssignImageList(self.image_list)
|
self.tree_ctrl.AssignImageList(self.image_list)
|
||||||
self.tree_ctrl.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.on_tree_expanding)
|
self.tree_ctrl.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.on_tree_expanding)
|
||||||
self.tree_ctrl.Bind(wx.EVT_TREE_SEL_CHANGED, self.on_tree_selected)
|
self.tree_ctrl.Bind(wx.EVT_TREE_SEL_CHANGED, self.on_tree_selected)
|
||||||
|
self.tree_ctrl.Bind(wx.EVT_TREE_ITEM_MENU, self.on_tree_right_click)
|
||||||
|
|
||||||
# Right side: File Area - ListCtrl
|
# Right side: File Area - ListCtrl
|
||||||
self.list_ctrl = wx.ListCtrl(self.splitter, style=wx.LC_REPORT | wx.BORDER_SUNKEN)
|
self.list_ctrl = wx.ListCtrl(self.splitter, style=wx.LC_REPORT | wx.BORDER_SUNKEN)
|
||||||
@@ -450,8 +458,26 @@ class SharePointApp(wx.Frame):
|
|||||||
new_folder_item = menu.Append(wx.ID_ANY, self.get_txt("msg_new_folder_here"))
|
new_folder_item = menu.Append(wx.ID_ANY, self.get_txt("msg_new_folder_here"))
|
||||||
self.Bind(wx.EVT_MENU, self.on_new_folder_clicked, new_folder_item)
|
self.Bind(wx.EVT_MENU, self.on_new_folder_clicked, new_folder_item)
|
||||||
|
|
||||||
|
# Tilføj altid opdater punkt til sidst
|
||||||
if menu.GetMenuItemCount() > 0:
|
if menu.GetMenuItemCount() > 0:
|
||||||
self.PopupMenu(menu)
|
menu.AppendSeparator()
|
||||||
|
|
||||||
|
refresh_item = menu.Append(wx.ID_ANY, self.get_txt("btn_refresh"))
|
||||||
|
self.Bind(wx.EVT_MENU, self.on_refresh, refresh_item)
|
||||||
|
|
||||||
|
self.PopupMenu(menu)
|
||||||
|
menu.Destroy()
|
||||||
|
|
||||||
|
def on_tree_right_click(self, event):
|
||||||
|
if self.is_editing: return
|
||||||
|
item = event.GetItem()
|
||||||
|
if not item.IsOk() or item == self.tree_root: return
|
||||||
|
|
||||||
|
self.tree_ctrl.SelectItem(item)
|
||||||
|
menu = wx.Menu()
|
||||||
|
refresh_item = menu.Append(wx.ID_ANY, self.get_txt("btn_refresh"))
|
||||||
|
self.Bind(wx.EVT_MENU, self.on_refresh, refresh_item)
|
||||||
|
self.PopupMenu(menu)
|
||||||
menu.Destroy()
|
menu.Destroy()
|
||||||
|
|
||||||
# --- FILHÅNDTERING (Upload, Slet, Ny Mappe) ---
|
# --- FILHÅNDTERING (Upload, Slet, Ny Mappe) ---
|
||||||
@@ -686,6 +712,7 @@ class SharePointApp(wx.Frame):
|
|||||||
self.upload_btn.SetLabel(self.get_txt("btn_upload_file"))
|
self.upload_btn.SetLabel(self.get_txt("btn_upload_file"))
|
||||||
self.upload_folder_btn.SetLabel(self.get_txt("btn_upload_folder"))
|
self.upload_folder_btn.SetLabel(self.get_txt("btn_upload_folder"))
|
||||||
self.new_folder_btn.SetLabel(self.get_txt("btn_new_folder"))
|
self.new_folder_btn.SetLabel(self.get_txt("btn_new_folder"))
|
||||||
|
self.refresh_btn.SetLabel(self.get_txt("btn_refresh"))
|
||||||
|
|
||||||
if self.access_token:
|
if self.access_token:
|
||||||
self.login_btn.SetLabel(self.get_txt("btn_logged_in"))
|
self.login_btn.SetLabel(self.get_txt("btn_logged_in"))
|
||||||
@@ -721,9 +748,31 @@ class SharePointApp(wx.Frame):
|
|||||||
self.list_ctrl.Enable(not lock)
|
self.list_ctrl.Enable(not lock)
|
||||||
self.back_btn.Enable(not lock if len(self.history) > 1 else False)
|
self.back_btn.Enable(not lock if len(self.history) > 1 else False)
|
||||||
self.home_btn.Enable(not lock)
|
self.home_btn.Enable(not lock)
|
||||||
|
self.refresh_btn.Enable(not lock)
|
||||||
self.login_btn.Enable(not lock)
|
self.login_btn.Enable(not lock)
|
||||||
wx.CallAfter(_do)
|
wx.CallAfter(_do)
|
||||||
|
|
||||||
|
def on_refresh(self, event=None):
|
||||||
|
if self.is_editing: return
|
||||||
|
|
||||||
|
selected = self.tree_ctrl.GetSelection()
|
||||||
|
if not selected.IsOk() or selected == self.tree_root:
|
||||||
|
self.load_sites()
|
||||||
|
return
|
||||||
|
|
||||||
|
data = self.tree_item_data.get(selected)
|
||||||
|
if data:
|
||||||
|
self.set_status(f"Opdaterer '{data['name']}'...")
|
||||||
|
# Opdater Listekontrol (højre side)
|
||||||
|
threading.Thread(target=self._fetch_list_contents_bg, args=(data,), daemon=True).start()
|
||||||
|
|
||||||
|
# Opdater Træstruktur (venstre side) - Ryd og indlæs igen hvis det er en container
|
||||||
|
if data['type'] in ["SITE", "DRIVE", "FOLDER"]:
|
||||||
|
data["loaded"] = False # Tillad genindlæsning
|
||||||
|
if self.tree_ctrl.IsExpanded(selected):
|
||||||
|
# Genindlæs træets børn asynkront
|
||||||
|
threading.Thread(target=self._fetch_tree_children_bg, args=(selected, data), daemon=True).start()
|
||||||
|
|
||||||
def _refresh_current_view(self):
|
def _refresh_current_view(self):
|
||||||
sel = self.tree_ctrl.GetSelection()
|
sel = self.tree_ctrl.GetSelection()
|
||||||
if sel.IsOk():
|
if sel.IsOk():
|
||||||
@@ -819,6 +868,7 @@ class SharePointApp(wx.Frame):
|
|||||||
self.login_btn.SetLabel(self.get_txt("btn_logged_in"))
|
self.login_btn.SetLabel(self.get_txt("btn_logged_in"))
|
||||||
self.login_btn.SetBackgroundColour(wx.Colour(200, 200, 200)) # Grå
|
self.login_btn.SetBackgroundColour(wx.Colour(200, 200, 200)) # Grå
|
||||||
self.home_btn.Enable()
|
self.home_btn.Enable()
|
||||||
|
self.refresh_btn.Enable()
|
||||||
self.load_sites()
|
self.load_sites()
|
||||||
else:
|
else:
|
||||||
self.set_status(self.get_txt("status_login_failed"))
|
self.set_status(self.get_txt("status_login_failed"))
|
||||||
|
|||||||
Reference in New Issue
Block a user