diff --git a/sharepoint_browser.py b/sharepoint_browser.py index 4775d2b..8ae8cc0 100644 --- a/sharepoint_browser.py +++ b/sharepoint_browser.py @@ -244,12 +244,17 @@ class SharePointApp(ctk.CTk): try: # 1. Checkout - self.set_status(f"Låser '{file_name}'...") - requests.post(f"{base_url}/checkout", headers=self.headers) - + self.set_status(f"Tjekker '{file_name}' ud...") + checkout_res = requests.post(f"{base_url}/checkout", headers=self.headers) + if checkout_res.status_code not in [200, 204]: + print(f"Checkout info: {checkout_res.status_code} - {checkout_res.text}") + # 2. Download self.set_status(f"Downloader '{file_name}'...") res = requests.get(f"{base_url}/content", headers=self.headers) + if res.status_code != 200: + raise Exception(f"Download fejlede: {res.status_code}") + ext = os.path.splitext(file_name)[1] local_path = os.path.join(TEMP_DIR, f"{hashlib.md5(item_id.encode()).hexdigest()[:8]}{ext}") @@ -257,27 +262,56 @@ class SharePointApp(ctk.CTk): f.write(res.content) # 3. Åbn & Overvåg - self.set_status(f"Redigerer '{file_name}' - luk filen for at gemme...") + self.set_status(f"Åbner '{file_name}'... Vent på programmet starter.") os.startfile(local_path) - time.sleep(3) - while True: + + # Vent på at programmet rent faktisk låser filen + locked = False + self.set_status(f"Venter på at '{file_name}' åbnes i redigeringsprogram...") + for _ in range(10): # Vent op til 10 sekunder på at filen bliver låst + time.sleep(1) try: os.rename(local_path, local_path) - break except OSError: - time.sleep(2) - - # 4. Upload & Checkin - self.set_status(f"Uploader ændringer...") - with open(local_path, 'rb') as f: - requests.put(f"{base_url}/content", headers=self.headers, data=f) + locked = True + break - requests.post(f"{base_url}/checkin", headers=self.headers, json={"comment": "Opdateret via SP Explorer"}) + if locked: + self.set_status(f"Redigerer '{file_name}' - Luk programmet for at gemme.") + # Nu venter vi på at den bliver låst OP igen + while True: + time.sleep(2) + try: + os.rename(local_path, local_path) + break # Filen er ikke længere låst + except OSError: + pass + else: + self.set_status("Kunne ikke detektere fillås. Tryk OK når du er færdig.") + messagebox.showinfo("Info", f"Vi kunne ikke detektere om '{file_name}' blev låst af dit program.\n\nTryk OK når du har gemt og LUKKET filen i dit redigeringsprogram.") + + # 4. Upload + self.set_status(f"Uploader ændringer til SharePoint...") + with open(local_path, 'rb') as f: + upload_res = requests.put(f"{base_url}/content", headers=self.headers, data=f) + if upload_res.status_code not in [200, 201]: + raise Exception(f"Upload fejlede: {upload_res.status_code} - {upload_res.text}") + + # 5. Checkin + self.set_status(f"Tjekker '{file_name}' ind...") + checkin_res = requests.post(f"{base_url}/checkin", headers=self.headers, json={"comment": "Opdateret via SP Explorer"}) + if checkin_res.status_code not in [200, 204]: + print(f"Checkin info: {checkin_res.status_code} - {checkin_res.text}") + os.remove(local_path) - self.set_status(f"'{file_name}' er gemt og tjekket ind.") + self.set_status(f"Succes! '{file_name}' er opdateret på SharePoint.") + messagebox.showinfo("Færdig", f"Filen '{file_name}' er gemt og tjekket ind korrekt.") + except Exception as e: self.set_status(f"Fejl: {str(e)}") - messagebox.showerror("Fejl", f"Der skete en fejl under håndtering af filen:\n{e}") + print(f"DETALJERET FEJL: {e}") + messagebox.showerror("Fejl", f"Der skete en fejl:\n{e}") + if __name__ == "__main__": app = SharePointApp()