Compare commits
2 Commits
220bedda48
...
07913c0224
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
07913c0224 | ||
|
|
dfbef36558 |
@@ -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"):
|
||||||
|
|||||||
Reference in New Issue
Block a user