77
88
99class TreeNode :
10- def __init__ (self , name : str , parent = None , is_dir = False , size = 0 , entry = None ):
10+ def __init__ (self , name : str , parent = None , is_dir = False , size = 0 , entry = None ):
1111 self .name = name
1212 self .parent = parent
1313 self .is_dir = is_dir
@@ -21,7 +21,7 @@ def __init__(self, name: str, parent = None, is_dir = False, size = 0, entry = N
2121 def child_count (self ) -> int :
2222 return len (self .children )
2323
24- def child (self , row : int ) -> ' TreeNode | None' :
24+ def child (self , row : int ) -> " TreeNode | None" :
2525 if 0 <= row < len (self .children ):
2626 return self .children [row ]
2727 return None
@@ -44,31 +44,41 @@ def sort_children(self, column: int, order: Qt.SortOrder):
4444 """
4545 dirs = [i for i in self .children if i .is_dir ]
4646 if column == ArchiveColumn .NAME :
47- dirs .sort (key = lambda node : node .name .lower (),
48- reverse = (order == Qt .SortOrder .DescendingOrder ))
47+ dirs .sort (
48+ key = lambda node : node .name .lower (),
49+ reverse = (order == Qt .SortOrder .DescendingOrder ),
50+ )
4951
5052 files = [i for i in self .children if not i .is_dir ]
5153 if column == ArchiveColumn .NAME :
52- files .sort (key = lambda node : node .name .lower (),
53- reverse = (order == Qt .SortOrder .DescendingOrder ))
54+ files .sort (
55+ key = lambda node : node .name .lower (),
56+ reverse = (order == Qt .SortOrder .DescendingOrder ),
57+ )
5458 elif column == ArchiveColumn .TYPE :
55- files .sort (key = lambda node : QFileInfo (node .name ).suffix ().lower (),
56- reverse = (order == Qt .SortOrder .DescendingOrder ))
59+ files .sort (
60+ key = lambda node : QFileInfo (node .name ).suffix ().lower (),
61+ reverse = (order == Qt .SortOrder .DescendingOrder ),
62+ )
5763 elif column == ArchiveColumn .SIZE :
58- files .sort (key = lambda node : node .size ,
59- reverse = (order == Qt .SortOrder .DescendingOrder ))
64+ files .sort (
65+ key = lambda node : node .size ,
66+ reverse = (order == Qt .SortOrder .DescendingOrder ),
67+ )
6068
6169 self .children = dirs + files
6270 for i in dirs :
6371 i .sort_children (column , order )
6472
73+
6574class ArchiveColumn (IntEnum ):
6675 NAME = 0
6776 TYPE = auto ()
6877 SIZE = auto ()
6978
79+
7080class ArchiveModel (QAbstractItemModel ):
71- def __init__ (self , parent = None ):
81+ def __init__ (self , parent = None ):
7282 super ().__init__ (parent )
7383 self ._reader = None
7484 self ._icon_provider = QFileIconProvider ()
@@ -86,10 +96,10 @@ def set_data(self, reader: ArchiveReader):
8696 def _build_tree (self ):
8797 """Build the tree structure from archive entries."""
8898 dir_nodes : dict [str , TreeNode ] = {"" : self ._root_node }
89- sorted_entries = sorted (self ._reader ._entries .items (), key = lambda x : x [0 ])
99+ sorted_entries = sorted (self ._reader ._entries .items (), key = lambda x : x [0 ])
90100
91101 for name , entry in sorted_entries :
92- path_parts = name .split ('/' )
102+ path_parts = name .split ("/" )
93103 current_path = ""
94104 current_node = self ._root_node
95105
@@ -124,7 +134,9 @@ def sort(self, column: int, order: Qt.SortOrder):
124134 else :
125135 old_nodes .append (None )
126136
127- self .layoutAboutToBeChanged .emit ([], QAbstractItemModel .LayoutChangeHint .VerticalSortHint )
137+ self .layoutAboutToBeChanged .emit (
138+ [], QAbstractItemModel .LayoutChangeHint .VerticalSortHint
139+ )
128140
129141 self ._sort_column = column
130142 self ._sort_order = order
@@ -141,7 +153,9 @@ def sort(self, column: int, order: Qt.SortOrder):
141153 for old_index , new_index in zip (persistent_indexes , new_indexes ):
142154 self .changePersistentIndex (old_index , new_index )
143155
144- self .layoutChanged .emit ([], QAbstractItemModel .LayoutChangeHint .VerticalSortHint )
156+ self .layoutChanged .emit (
157+ [], QAbstractItemModel .LayoutChangeHint .VerticalSortHint
158+ )
145159
146160 def _find_index_for_node (self , target_node : TreeNode ) -> QModelIndex :
147161 """Find the QModelIndex for a specific TreeNode after sorting"""
@@ -231,8 +245,16 @@ def data(self, index: QModelIndex, role: int = Qt.ItemDataRole.DisplayRole):
231245
232246 return None
233247
234- def headerData (self , section : int , orientation : Qt .Orientation , role : int = Qt .ItemDataRole .DisplayRole ) -> str | None :
235- if orientation != Qt .Orientation .Horizontal or role != Qt .ItemDataRole .DisplayRole :
248+ def headerData (
249+ self ,
250+ section : int ,
251+ orientation : Qt .Orientation ,
252+ role : int = Qt .ItemDataRole .DisplayRole ,
253+ ) -> str | None :
254+ if (
255+ orientation != Qt .Orientation .Horizontal
256+ or role != Qt .ItemDataRole .DisplayRole
257+ ):
236258 return None
237259
238260 match ArchiveColumn (section ):
@@ -258,7 +280,7 @@ def _format_file_size(size: int) -> str:
258280 return f"{ size } B"
259281
260282 size_f = float (size )
261- for unit in ['KB' , 'MB' , 'GB' ]:
283+ for unit in ["KB" , "MB" , "GB" ]:
262284 size_f /= 1024.0
263285 if size_f < 1024.0 :
264286 if size_f < 10 :
0 commit comments