Compare commits

...

2 Commits

View File

@@ -46,6 +46,18 @@ TEMP_DIR = settings.get("temp_dir", "C:\\Temp_SP")
if not os.path.exists(TEMP_DIR): if not os.path.exists(TEMP_DIR):
os.makedirs(TEMP_DIR) os.makedirs(TEMP_DIR)
def format_size(bytes_num):
if bytes_num is None:
return ""
if bytes_num < 1024:
return f"{bytes_num} B"
elif bytes_num < 1024**2:
return f"{bytes_num/1024:.1f} KB"
elif bytes_num < 1024**3:
return f"{bytes_num/(1024**2):.1f} MB"
else:
return f"{bytes_num/(1024**3):.1f} GB"
class SharePointApp(wx.Frame): class SharePointApp(wx.Frame):
def __init__(self): def __init__(self):
super().__init__(None, title="SharePoint Explorer", size=(1000, 750)) super().__init__(None, title="SharePoint Explorer", size=(1000, 750))
@@ -149,8 +161,9 @@ class SharePointApp(wx.Frame):
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)
self.list_ctrl.AssignImageList(self.image_list, wx.IMAGE_LIST_SMALL) self.list_ctrl.AssignImageList(self.image_list, wx.IMAGE_LIST_SMALL)
self.list_ctrl.InsertColumn(0, "Navn", width=450) self.list_ctrl.InsertColumn(0, "Navn", width=450)
self.list_ctrl.InsertColumn(1, "Type", width=150) self.list_ctrl.InsertColumn(1, "Type", width=120)
self.list_ctrl.InsertColumn(2, "Sidst ændret", width=200) self.list_ctrl.InsertColumn(2, "Størrelse", width=80)
self.list_ctrl.InsertColumn(3, "Sidst ændret", width=180)
self.list_ctrl.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.on_item_activated) self.list_ctrl.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.on_item_activated)
self.list_ctrl.Bind(wx.EVT_CONTEXT_MENU, self.on_right_click) self.list_ctrl.Bind(wx.EVT_CONTEXT_MENU, self.on_right_click)
@@ -226,30 +239,37 @@ class SharePointApp(wx.Frame):
self.update_path_display() self.update_path_display()
def update_path_display(self): def update_path_display(self):
self.path_sizer.Clear(True) if not self:
return
# Find alle noder fra rod til nuværende selektion try:
nodes = [] self.path_sizer.Clear(True)
curr = self.tree_ctrl.GetSelection()
while curr.IsOk() and curr != self.tree_root: # Find alle noder fra rod til nuværende selektion
nodes.insert(0, curr) nodes = []
curr = self.tree_ctrl.GetItemParent(curr) curr = self.tree_ctrl.GetSelection()
# Start ikon/label while curr.IsOk() and curr != self.tree_root:
self._add_path_segment("📍 SharePoint", "ROOT") nodes.insert(0, curr)
curr = self.tree_ctrl.GetItemParent(curr)
for node in nodes: # Start ikon/label
arrow = wx.StaticText(self.path_panel, label=" > ") self._add_path_segment("📍 SharePoint", "ROOT")
arrow.SetForegroundColour(wx.Colour(150, 150, 150))
self.path_sizer.Add(arrow, 0, wx.ALIGN_CENTER_VERTICAL)
name = self.tree_ctrl.GetItemText(node) for node in nodes:
self._add_path_segment(name, node) arrow = wx.StaticText(self.path_panel, label=" > ")
arrow.SetForegroundColour(wx.Colour(150, 150, 150))
self.path_sizer.Add(arrow, 0, wx.ALIGN_CENTER_VERTICAL)
self.path_panel.Layout() name = self.tree_ctrl.GetItemText(node)
self.path_panel.Refresh() self._add_path_segment(name, node)
self.Layout() # Tving rammen til at opdatere, så stien kommer frem
self.path_panel.Layout()
self.path_panel.Refresh()
self.Layout() # Tving rammen til at opdatere, så stien kommer frem
except RuntimeError:
# Sker oftest ved lukning hvor objekter er slettet
pass
def _add_path_segment(self, label, node): def _add_path_segment(self, label, node):
btn = wx.Button(self.path_panel, label=label, style=wx.BU_EXACTFIT | wx.BORDER_NONE) btn = wx.Button(self.path_panel, label=label, style=wx.BU_EXACTFIT | wx.BORDER_NONE)
@@ -328,7 +348,9 @@ class SharePointApp(wx.Frame):
name = site.get('displayName', site.get('name')) name = site.get('displayName', site.get('name'))
self.list_ctrl.InsertItem(i, name, self.idx_site) self.list_ctrl.InsertItem(i, name, self.idx_site)
self.list_ctrl.SetItem(i, 1, "Site") self.list_ctrl.SetItem(i, 1, "Site")
self.current_items.append({"type": "SITE", "id": site['id'], "name": name}) self.list_ctrl.SetItem(i, 2, "") # Størrelse
self.list_ctrl.SetItem(i, 3, "") # Sidst ændret
self.current_items.append({"type": "SITE", "id": site['id'], "name": name, "size": None, "modified": ""})
def on_tree_expanding(self, event): def on_tree_expanding(self, event):
item = event.GetItem() item = event.GetItem()
@@ -414,7 +436,8 @@ class SharePointApp(wx.Frame):
return return
self.current_path = data["path"] self.current_path = data["path"]
self.update_path_display() if self:
self.update_path_display()
if not self.is_navigating_back: if not self.is_navigating_back:
self.history.append(item) self.history.append(item)
@@ -437,7 +460,7 @@ class SharePointApp(wx.Frame):
for drive in drives: for drive in drives:
items_data.append({ items_data.append({
"type": "DRIVE", "id": drive['id'], "name": drive.get('name', ''), "type": "DRIVE", "id": drive['id'], "name": drive.get('name', ''),
"drive_id": drive['id'], "modified": "" "drive_id": drive['id'], "modified": "", "size": None
}) })
elif data['type'] in ["DRIVE", "FOLDER"]: elif data['type'] in ["DRIVE", "FOLDER"]:
drive_id = data['drive_id'] drive_id = data['drive_id']
@@ -456,7 +479,8 @@ class SharePointApp(wx.Frame):
items_data.append({ items_data.append({
"type": "FOLDER" if is_folder else "FILE", "type": "FOLDER" if is_folder else "FILE",
"id": item['id'], "name": item['name'], "id": item['id'], "name": item['name'],
"drive_id": drive_id, "modified": modified "drive_id": drive_id, "modified": modified,
"size": item.get('size') if not is_folder else None
}) })
wx.CallAfter(self._populate_list_ctrl, items_data, data) wx.CallAfter(self._populate_list_ctrl, items_data, data)
@@ -473,7 +497,9 @@ class SharePointApp(wx.Frame):
self.list_ctrl.InsertItem(i, item['name'], img_idx) self.list_ctrl.InsertItem(i, item['name'], img_idx)
type_str = "Mappe" if item['type'] == "FOLDER" else "Fil" if item['type'] == "FILE" else "Bibliotek" type_str = "Mappe" if item['type'] == "FOLDER" else "Fil" if item['type'] == "FILE" else "Bibliotek"
self.list_ctrl.SetItem(i, 1, type_str) self.list_ctrl.SetItem(i, 1, type_str)
self.list_ctrl.SetItem(i, 2, item['modified']) size_str = format_size(item['size']) if item['size'] is not None else ""
self.list_ctrl.SetItem(i, 2, size_str)
self.list_ctrl.SetItem(i, 3, item['modified'])
self.current_items.append(item) self.current_items.append(item)
self.set_status("Klar") self.set_status("Klar")
@@ -500,6 +526,9 @@ class SharePointApp(wx.Frame):
def _sync_tree_selection(self, target_id): def _sync_tree_selection(self, target_id):
selected = self.tree_ctrl.GetSelection() selected = self.tree_ctrl.GetSelection()
if not selected.IsOk():
selected = self.tree_root
if selected.IsOk(): if selected.IsOk():
data = self.tree_item_data.get(selected) data = self.tree_item_data.get(selected)
if data and not data.get("loaded"): if data and not data.get("loaded"):