GiorgosXou / TUIFIManager

A cross-platform terminal-based termux-oriented file manager (and component), meant to be used with a Uni-Curses project or as is.
GNU General Public License v3.0
697 stars 13 forks source link

Deleting multiple selected files from right to left, results in IndexError #97

Closed GiorgosXou closed 5 months ago

GiorgosXou commented 6 months ago

tuifi_issue_delete_right_to_left_Peek 2024-04-08 22-26

Issue: https://github.com/GiorgosXou/TUIFIManager/blob/0390f03720045aded4a6c07969784cc9e97c4e27/TUIFIManager/__init__.py#L667-L682

Fixed solution:

else: # if self.__count_selected > 1:  # Why do i even > 1 very sus
    temp_i=0
    for f in self.files:
        if f.is_selected: # first file is never selected because it is the .. one
            temp_i-=1
            self.__delete_file(f)
            if self.__count_selected == 0:
                break
        temp_i+=1
    self.reload(keep_search_results=True)
    self.__index_of_clicked_file = temp_i
    self.__clicked_file          = self.files[temp_i]
    self.__pre_clicked_file      = None # hmm.. sus
    self.select(self.__clicked_file)
GiorgosXou commented 5 months ago

Improved and fixed

    def delete(self):
        """
        Deletes the selected file(s). | Not fully implemented yet
        """
        if not self.has_write_access(self.directory): return
        if self.__count_selected == 1 and self.__clicked_file :
            # checking under __delete_file too but nvm cause i have no time right now
            if self.__clicked_file.name != '..':
                self.__delete_file(self.__clicked_file)
                self.files.pop(self.__index_of_clicked_file)
                temp_i = self.__index_of_clicked_file - 1
                self.resort() # replaced -> self.reload(keep_search_results=True)
                self.__index_of_clicked_file = temp_i
                self.__clicked_file          = self.files[temp_i]
                self.__pre_clicked_file      = None # hmm.. sus?
                self.__pre_hov               = None           
                self.select(self.__clicked_file)
        else: # if self.__count_selected > 1:  # Why do i even > 1 very sus
            temp_i=0
            while True:
                if self.files[temp_i].is_selected: # first file is never selected because it is the .. one
                    self.__delete_file(self.files[temp_i])
                    del self.files[temp_i]
                    temp_i-=1
                    if self.__count_selected == 0:
                        break
                temp_i+=1
            self.resort() # replaced -> self.reload(keep_search_results=True)
            self.__index_of_clicked_file = temp_i
            self.__clicked_file          = self.files[temp_i]
            self.__pre_clicked_file      = None # hmm.. sus
            self.__pre_hov               = None           
            self.select(self.__clicked_file)