Improved file processing logic: added better checkout/upload error handling and more robust file lock detection.
This commit is contained in:
@@ -244,12 +244,17 @@ class SharePointApp(ctk.CTk):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
# 1. Checkout
|
# 1. Checkout
|
||||||
self.set_status(f"Låser '{file_name}'...")
|
self.set_status(f"Tjekker '{file_name}' ud...")
|
||||||
requests.post(f"{base_url}/checkout", headers=self.headers)
|
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
|
# 2. Download
|
||||||
self.set_status(f"Downloader '{file_name}'...")
|
self.set_status(f"Downloader '{file_name}'...")
|
||||||
res = requests.get(f"{base_url}/content", headers=self.headers)
|
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]
|
ext = os.path.splitext(file_name)[1]
|
||||||
local_path = os.path.join(TEMP_DIR, f"{hashlib.md5(item_id.encode()).hexdigest()[:8]}{ext}")
|
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)
|
f.write(res.content)
|
||||||
|
|
||||||
# 3. Åbn & Overvåg
|
# 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)
|
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:
|
try:
|
||||||
os.rename(local_path, local_path)
|
os.rename(local_path, local_path)
|
||||||
break
|
|
||||||
except OSError:
|
except OSError:
|
||||||
|
locked = True
|
||||||
|
break
|
||||||
|
|
||||||
|
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)
|
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 & Checkin
|
# 4. Upload
|
||||||
self.set_status(f"Uploader ændringer...")
|
self.set_status(f"Uploader ændringer til SharePoint...")
|
||||||
with open(local_path, 'rb') as f:
|
with open(local_path, 'rb') as f:
|
||||||
requests.put(f"{base_url}/content", headers=self.headers, data=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}")
|
||||||
|
|
||||||
requests.post(f"{base_url}/checkin", headers=self.headers, json={"comment": "Opdateret via SP Explorer"})
|
|
||||||
os.remove(local_path)
|
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:
|
except Exception as e:
|
||||||
self.set_status(f"Fejl: {str(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__":
|
if __name__ == "__main__":
|
||||||
app = SharePointApp()
|
app = SharePointApp()
|
||||||
|
|||||||
Reference in New Issue
Block a user