1
- from datetime import datetime as dt
1
+ import datetime as dt
2
2
from collections .abc import Iterator
3
3
from dataclasses import dataclass , field
4
4
from pathlib import Path
26
26
]
27
27
)
28
28
29
-
30
29
@dataclass
31
30
class RefreshDirTracker :
32
31
library : Library
@@ -36,42 +35,24 @@ class RefreshDirTracker:
36
35
def files_count (self ) -> int :
37
36
return len (self .files_not_in_library )
38
37
39
- < << << << HEAD :src / tagstudio / core / utils / refresh_dir .py
40
- # moving get_file_times to library to avoid circular import
41
- == == == =
42
- >> >> >> > 8 f17c362203a368c5860599b75c2e89e6c8c1fc5 :tagstudio / src / core / utils / refresh_dir .py
38
+ # Created get_file_time() (basically same thing) in library
43
39
def get_file_times (self , file_path : Path ):
44
40
"""Get the creation and modification times of a file."""
45
41
stat = file_path .stat ()
46
42
system = platform .system ()
47
- < << << << HEAD :src / tagstudio / core / utils / refresh_dir .py
48
43
49
44
# st_birthtime on Windows and Mac, st_ctime on Linux.
50
- if system in [' Windows' , ' Darwin' ]: # Windows & macOS
45
+ if system in [" Windows" , " Darwin" ]: # Windows & macOS
51
46
date_created = dt .datetime .fromtimestamp (stat .st_birthtime )
52
47
else : # Linux
53
48
date_created = dt .datetime .fromtimestamp (stat .st_ctime ) # Linux lacks st_birthtime
54
49
55
50
date_modified = dt .datetime .fromtimestamp (stat .st_mtime )
56
- == == == =
57
- if system == 'Windows' : # Windows
58
- date_created = dt .fromtimestamp (stat .st_ctime , dt .timezone .utc )
59
- elif system == 'Darwin' : # macOS
60
- date_created = dt .fromtimestamp (stat .st_birthtime , dt .timezone .utc )
61
- else : # Linux and other systems
62
- try :
63
- date_created = dt .fromtimestamp (stat .st_birthtime , dt .timezone .utc )
64
- except AttributeError :
65
- # st_birthtime is not available on some Linux filesystems
66
- date_created = dt .fromtimestamp (stat .st_ctime , dt .timezone .utc )
67
- date_modified = dt .fromtimestamp (stat .st_mtime , dt .timezone .utc )
68
- >> >> >> > 8 f17c362203a368c5860599b75c2e89e6c8c1fc5 :tagstudio / src / core / utils / refresh_dir .py
69
51
return date_created , date_modified
70
52
71
53
def save_new_files (self ):
72
54
"""Save the list of files that are not in the library."""
73
55
if self .files_not_in_library :
74
- < << << << HEAD :src / tagstudio / core / utils / refresh_dir .py
75
56
entries = [
76
57
Entry (
77
58
path = entry_path ,
@@ -82,26 +63,9 @@ def save_new_files(self):
82
63
date_modified = date_modified ,
83
64
)
84
65
for entry_path in self .files_not_in_library
85
- if (date_created := self .get_file_times (entry_path )[0 ]) is not None
86
- and (date_modified := self .get_file_times (entry_path )[1 ]) is not None
66
+ if (date_created := self .get_file_times (entry_path )[0 ]) is not None
67
+ and (date_modified := self .get_file_times (entry_path )[1 ]) is not None
87
68
]
88
- == == == =
89
- entries = []
90
- for entry_path in self .files_not_in_library :
91
- date_created , date_modified = self .get_file_times (entry_path )
92
- if date_created is None or date_modified is None :
93
- continue # Skip files that could not be processed
94
- entries .append (
95
- Entry (
96
- path = entry_path ,
97
- folder = self .library .folder ,
98
- fields = [],
99
- date_added = dt .now (),
100
- date_created = dt .now (),
101
- date_modified = dt .now (),
102
- )
103
- )
104
- > >> >> >> 8 f17c362203a368c5860599b75c2e89e6c8c1fc5 :tagstudio / src / core / utils / refresh_dir .py
105
69
self .library .add_entries (entries )
106
70
107
71
self .files_not_in_library = []
@@ -152,19 +116,7 @@ def refresh_dir(self, lib_path: Path) -> Iterator[int]:
152
116
relative_path = f .relative_to (lib_path )
153
117
# TODO - load these in batch somehow
154
118
if not self .library .has_path_entry (relative_path ):
155
- < << << << HEAD :src / tagstudio / core / utils / refresh_dir .py
156
119
self .files_not_in_library .append (f )
157
- == == == =
158
- self .files_not_in_library .append (relative_path )
159
- else :
160
- # Update date_modified for existing entries if it has changed
161
- entry = self .library .get_entry_by_path (relative_path )
162
- if entry :
163
- date_modified = dt .fromtimestamp (f .stat ().st_mtime , dt .timezone .utc )
164
- if entry .date_modified != date_modified :
165
- entry .date_modified = date_modified
166
- self .library .update_entry (entry )
167
- >> >> >> > 8 f17c362203a368c5860599b75c2e89e6c8c1fc5 :tagstudio / src / core / utils / refresh_dir .py
168
120
169
121
end_time_total = time ()
170
122
yield dir_file_count
0 commit comments