1- from datetime import datetime as dt
1+ import datetime as dt
22from collections .abc import Iterator
33from dataclasses import dataclass , field
44from pathlib import Path
2626 ]
2727)
2828
29-
3029@dataclass
3130class RefreshDirTracker :
3231 library : Library
@@ -36,42 +35,24 @@ class RefreshDirTracker:
3635 def files_count (self ) -> int :
3736 return len (self .files_not_in_library )
3837
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
4339 def get_file_times (self , file_path : Path ):
4440 """Get the creation and modification times of a file."""
4541 stat = file_path .stat ()
4642 system = platform .system ()
47- < << << << HEAD :src / tagstudio / core / utils / refresh_dir .py
4843
4944 # 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
5146 date_created = dt .datetime .fromtimestamp (stat .st_birthtime )
5247 else : # Linux
5348 date_created = dt .datetime .fromtimestamp (stat .st_ctime ) # Linux lacks st_birthtime
5449
5550 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
6951 return date_created , date_modified
7052
7153 def save_new_files (self ):
7254 """Save the list of files that are not in the library."""
7355 if self .files_not_in_library :
74- < << << << HEAD :src / tagstudio / core / utils / refresh_dir .py
7556 entries = [
7657 Entry (
7758 path = entry_path ,
@@ -82,26 +63,9 @@ def save_new_files(self):
8263 date_modified = date_modified ,
8364 )
8465 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
8768 ]
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
10569 self .library .add_entries (entries )
10670
10771 self .files_not_in_library = []
@@ -152,19 +116,7 @@ def refresh_dir(self, lib_path: Path) -> Iterator[int]:
152116 relative_path = f .relative_to (lib_path )
153117 # TODO - load these in batch somehow
154118 if not self .library .has_path_entry (relative_path ):
155- < << << << HEAD :src / tagstudio / core / utils / refresh_dir .py
156119 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
168120
169121 end_time_total = time ()
170122 yield dir_file_count
0 commit comments