From fb06055b11beaac1eca238681a176baa59c1ddde Mon Sep 17 00:00:00 2001
From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr>
Date: Wed, 5 Jul 2023 11:25:33 +0200
Subject: [PATCH] Window: Fix save for windows version.

---
 src/Model/Study.py | 18 ++++++++++++------
 src/tools.py       |  9 +++++++++
 2 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/src/Model/Study.py b/src/Model/Study.py
index a732cb86..ff806264 100644
--- a/src/Model/Study.py
+++ b/src/Model/Study.py
@@ -4,6 +4,8 @@ import os
 import shutil
 from datetime import datetime
 
+from tools import timer, timestamp
+
 from Model.DB import SQLModel
 from Model.Saved import SavedStatus
 from Model.Serializable import Serializable
@@ -69,11 +71,15 @@ class Study(SQLModel):
         fdir, fname = os.path.split(self.filename)
 
         if self._old_save_id == 0:
+            old_dir = os.path.join(fdir, "__old__")
+            if os.name == "nt":
+                old_dir = old_dir.replace("/", "\\")
+
             try:
-                os.makedirs(os.path.join(fdir, "__old__"))
+                os.makedirs(old_dir)
             except FileExistsError as e:
-                shutil.rmtree(os.path.join(fdir, "__old__"))
-                os.makedirs(os.path.join(fdir, "__old__"))
+                shutil.rmtree(old_dir)
+                os.makedirs(old_dir)
             except Exception as e:
                 print(e)
 
@@ -227,9 +233,9 @@ class Study(SQLModel):
         self.execute(f"UPDATE info SET value='{self._sql_format(self.name)}' WHERE key='name'")
         self.execute(f"UPDATE info SET value='{self._sql_format(self.description)}' WHERE key='description'")
         self.execute(f"UPDATE info SET value='{self._time_system}' WHERE key='time_system'")
-        self.execute(f"UPDATE info SET value='{self._date.timestamp()}' WHERE key='date'")
-        self.execute(f"UPDATE info SET value='{self.creation_date.timestamp()}' WHERE key='creation_date'")
-        self.execute(f"UPDATE info SET value='{self.last_save_date.timestamp()}' WHERE key='last_save_date'")
+        self.execute(f"UPDATE info SET value='{timestamp(self._date)}' WHERE key='date'")
+        self.execute(f"UPDATE info SET value='{timestamp(self.creation_date)}' WHERE key='creation_date'")
+        self.execute(f"UPDATE info SET value='{timestamp(self.last_save_date)}' WHERE key='last_save_date'")
 
         self._save_submodel([self._river])
         self.commit()
diff --git a/src/tools.py b/src/tools.py
index 34c4b9b2..410cb799 100644
--- a/src/tools.py
+++ b/src/tools.py
@@ -1,9 +1,11 @@
 # -*- coding: utf-8 -*-
 
+import os
 import time
 import sqlite3
 import traceback
 
+from datetime import datetime
 from pathlib import Path
 
 from colorama import Fore
@@ -135,6 +137,13 @@ def flatten(lst):
 
     return reduce(list.__add__, lst)
 
+def timestamp(dt:datetime):
+    # Fix timestamp for some windows version.
+    # - Issue : (https://bugs.python.org/issue29097)
+    if os.name == 'nt':
+        return (dt - datetime(1970, 1, 1)).total_seconds()
+    return dt.timestamp()
+
 def old_pamhyr_date_to_timestamp(date:str):
     v = date.split(":")
     if len(v) != 4:
-- 
GitLab