Beispiel #1
0
 def __DELT(self, event):
     """
         Create request for delete files
     """
     selectedItems = self.gui.FileManager.files_folder.getSelectedItems()
     if len(selectedItems) == 0:
         wx.MessageBox("For deleting necessary choose file or directory!", "Message")
     else:
         deleted_files = []
         defaultDir = self.gui.FileManager.files_folder.defaultDir
         currentDir = self.gui.FileManager.files_folder.currentDir
         for item in selectedItems:
             path = os.path.normpath(currentDir + item)
             if os.path.isfile(path):
                 file_hash, size = md5_for_file(path)
                 deleted_files.append((item, currentDir, file_hash, size))
             elif os.path.isdir(path):
                 if len(getFileList(path)) > 0:
                     for root, dirnames, filenames in os.walk(path):
                         for filename in filenames:
                             folder = os.path.normpath(root) + '/'
                             file_path = os.path.normpath(os.path.join(root, filename))
                             file_hash, size = md5_for_file(file_path)
                             deleted_files.append((filename, folder, file_hash, size))
                 else:
                     if os.path.exists(path):
                         shutil.rmtree(path)
                         evt = UpdateFileListCtrlEvent()
                         wx.PostEvent(self.gui, evt)
         data = dumps({'cmd': 'DELF', 'user': self.login, 'auth': True, 'error': [], 'deleted_files': deleted_files,
                       'default_dir': defaultDir})
         self.sendMessage(data, sync=True)
Beispiel #2
0
 def __WRTE(self, event):
     """
         Handler for massive write file from user directory to file servers
     """
     selectedItems = self.gui.FileManager.files_folder.getSelectedItems()
     if len(selectedItems) == 0:
         wx.MessageBox("For writing necessary choose file or directory!", "Message")
     else:
         write_files = []
         defaultDir = self.gui.FileManager.files_folder.defaultDir
         currentDir = self.gui.FileManager.files_folder.currentDir
         for item in selectedItems:
             path = os.path.normpath(currentDir + item)
             if os.path.isfile(path):
                 file_hash, size = md5_for_file(path)
                 write_files.append((item, currentDir, file_hash, size))
             elif os.path.isdir(path):
                 for root, dirnames, filenames in os.walk(path):
                     for filename in filenames:
                         folder = os.path.normpath(root) + '/'
                         file_path = os.path.normpath(os.path.join(root, filename))
                         file_hash, size = md5_for_file(file_path)
                         write_files.append((filename, folder, file_hash, size))
         data = dumps({'cmd': 'WRTF', 'user': self.login, 'auth': True, 'error': [], 'files_write': write_files,
                       'default_dir': defaultDir})
         self.sendMessage(data, sync=True)
Beispiel #3
0
 def __REPF(self, event):
     """
         Replace files/folder to another folder
     """
     currentDir = self.gui.FileManager.files_folder.currentDir
     defaultDir = self.gui.FileManager.files_folder.defaultDir
     selectedItems = self.gui.FileManager.files_folder.getSelectedItems()
     if len(selectedItems) == 0:
         wx.MessageBox("For renaming necessary choose file or directory!", "Message")
     else:
         dlg = wx.DirDialog(self.gui, "Choose directory:", style=wx.DD_DEFAULT_STYLE | wx.DD_DIR_MUST_EXIST)
         if dlg.ShowModal() == wx.ID_OK:
             # move files to another folder at user disk
             replaceToFolder = os.path.normpath(dlg.GetPath()) + '/'
             if defaultDir not in replaceToFolder:
                 for item in selectedItems:
                     path_to_file = currentDir + item
                     path_to_file_new = replaceToFolder + item
                     shutil.move(path_to_file, path_to_file_new)
                 self.__CREP(None)
             # move files inside user's folder
             else:
                 rnm_files = []
                 for item in selectedItems:
                     path_to_file = currentDir + item
                     path_to_file_new = replaceToFolder + item
                     if os.path.isfile(path_to_file):
                         path, file = os.path.split(path_to_file)
                         file_hash, size = md5_for_file(path_to_file)
                         file_name_part = os.path.splitext(file)
                         new_filename = ''.join(file_name_part)
                         path = currentDir.replace(defaultDir, '')
                         new_path = replaceToFolder.replace(defaultDir, '')
                         rnm_files.append((file, path, file_hash, new_filename, new_path))
                         shutil.move(path_to_file, path_to_file_new)
                     elif os.path.isdir(path_to_file):
                         file_path = path_to_file + '/'
                         file_path_lst = filter(lambda item: item != '', file_path.split('/'))
                         new_folder_lst = filter(lambda item: item != '', path_to_file_new.split('/'))
                         new_folder_path = '/' + '/'.join(new_folder_lst) + '/'
                         for root, subdir, files in os.walk(file_path):
                             for filename in files:
                                 file_in_folder_path = os.path.join(root, filename)
                                 file_hash, size = md5_for_file(file_in_folder_path)
                                 old_folder, name = os.path.split(file_in_folder_path)
                                 new_folder_lst = filter(lambda item: item != '', path_to_file_new.split('/'))
                                 full_new_folder = '/' + '/'.join(new_folder_lst) + '/'
                                 full_new_folder = full_new_folder.replace(defaultDir, '')
                                 full_old_folder = old_folder.replace(defaultDir, '') + '/'
                                 rnm_files.append((filename, full_old_folder, file_hash, filename, full_new_folder))
                                 os.rename(file_path, new_folder_path)
                 data = dumps({'cmd': 'RENF', 'user': self.login, 'auth': True, 'error': [], 'rename_files': rnm_files})
                 self.sendMessage(data, sync=True)
         dlg.Destroy()
Beispiel #4
0
    def __RENF(self, event):
        """
            Rename file or folder and contains in him files
        """
        selectedItems = self.gui.FileManager.files_folder.getSelectedItems()
        if len(selectedItems) != 1:
            wx.MessageBox("For renaming necessary choose file or directory!", "Message")
        else:
            try:
                rnm_files = []
                currentDir = self.gui.FileManager.files_folder.currentDir
                defaultDir = self.gui.FileManager.files_folder.defaultDir
                filename = os.path.splitext(selectedItems[0])[0]
                dlg = InputDialog(self.gui.FileManager, -1, "Enter new file name or directory",
                                  self.gui.FileManager.ico_folder, RenameValidator(), filename)
                if dlg.ShowModal() == wx.ID_OK:
                    file_path = currentDir + selectedItems[0]
                    if os.path.isfile(file_path):
                        path, file = os.path.split(file_path)
                        file_hash, size = md5_for_file(file_path)
                        file_name_part = os.path.splitext(file)
                        file_name_part = (dlg.result, file_name_part[1])
                        new_filename = ''.join(file_name_part)
                        path = new_path = currentDir.replace(defaultDir, '')
                        rnm_files.append((file, path, file_hash, new_filename, new_path))
                        os.rename(currentDir+file, currentDir+new_filename)
                    elif os.path.isdir(file_path):
                        file_path += '/'
                        file_path_lst = filter(lambda item: item != '', file_path.split('/'))
                        new_folder_lst = file_path_lst[:]
                        new_folder_lst[-1] = dlg.result
                        new_folder_path = '/' + '/'.join(new_folder_lst) + '/'
                        for root, subdir, files in os.walk(file_path):
                            for filename in files:
                                file_in_folder_path = os.path.join(root, filename)
                                file_hash, size = md5_for_file(file_in_folder_path)
                                old_folder, name = os.path.split(file_in_folder_path)
                                new_folder = filter(lambda item: item != '', old_folder.split('/'))
                                new_folder[len(file_path_lst)-1] = dlg.result

                                backup = new_folder_lst[:]
                                if len(new_folder) > len(new_folder_lst):
                                    for elem_path in xrange(len(new_folder_lst), len(new_folder)):
                                        backup.append(new_folder[elem_path])

                                full_new_folder = '/' + '/'.join(backup) + '/'
                                full_new_folder = full_new_folder.replace(defaultDir, '')
                                full_old_folder = old_folder.replace(defaultDir, '') + '/'
                                rnm_files.append((filename, full_old_folder, file_hash, filename, full_new_folder))
                        os.rename(file_path, new_folder_path)
                    data = dumps({'cmd': 'RENF', 'user': self.login, 'auth': True, 'error': [], 'rename_files': rnm_files})
                    self.sendMessage(data, sync=True)
            except OSError:
                wx.MessageBox("File or directory with this name already exists!", "Message")
Beispiel #5
0
 def __WRTE(self, data):
     """
         Processing for WRTE (write file) command
     """
     file_path = unicode('')
     while not os.path.isfile(file_path):
         self.clear_console()
         print 'Please, enter correct path to your FILE'
         file_path = unicode(raw_input('Path:'))
     file_hash, file_size = md5_for_file(file_path)
     data = constructDataClient('WRTE', data['user'], data['password'], True,
                                         file_path=file_path, file_size=file_size, file_hash=file_hash,
                                         gui=False)
     return data
Beispiel #6
0
    def __CRLN(self, data):
        """
            Create link on file
        """
        if self.__files is None:
            data = constructDataClient('AUTH', data['user'], data['password'], True,
                                       "WARNING: Please, use LIST to get last cashe of your files from server...")
        else:

            self.__filenumber = ''
            lst_file_numbers = [str(number+1) for number, file_fs in enumerate(self.__files)]
            # get file number
            while self.__filenumber not in lst_file_numbers:
                self.clear_console()
                self.print_storage_files()
                self.__filenumber = self.inputFileNumber()
            self.__filenumber = int(self.__filenumber) - 1
            # prepare data from JSON request

            file_id = str(self.__files[self.__filenumber].original_name)
            # get path to file
            file_path = ''
            file_format_db = file_id.split('.')[-1]
            # checking entered path by user
            while file_path == '':
                self.clear_console()
                print 'NOTE: file shall be have equals format!'
                print 'Enter full path to file, which stored information:'
                file_path = raw_input('Path:')
                file_format = file_path.split('/')[-1].split('.')[-1]
                if len(file_format) == 0:
                    file_path = ''
                if file_format != file_format_db:
                    file_path = ''
                if not os.path.exists(file_path):
                    file_path = ''
                self.clear_console()
            relative_path = str(self.__files[self.__filenumber].user_path)
            file_hash, size = md5_for_file(file_path)
            key = self.__input_password()
            file_info = (file_id, file_hash, relative_path, key)
            data = constructDataClient('CRLN', data['user'], '', True, error='',
                                       file_info=file_info, description='')
        return data
Beispiel #7
0
 def __SYNC(self, data):
     """
         Processing for SYNC command
     """
     if self.__files is None:
         data = constructDataClient('AUTH', data['user'], data['password'], True,
                                     "WARNING: Please, use LIST to get last cashe of your files from server...")
     else:
         self.__filenumber = ''
         lst_file_numbers = [str(number+1) for number, file_fs in enumerate(self.__files)]
         while self.__filenumber not in lst_file_numbers:
             self.clear_console()
             self.print_storage_files()
             self.__filenumber = self.inputFileNumber()
         self.__filenumber = int(self.__filenumber) - 1
         op_type = 'Unknown'
         while op_type not in ('WSYNC', 'RSYNC'):
             self.clear_console()
             self.print_sync_operations()
             op_type = raw_input('Command:').upper()
         op_type += '_FILE'
         # checking entered path by user
         file_original_name = self.__files[self.__filenumber].original_name
         file_format_db = file_original_name.split('.')[-1]
         file_path_src = ''
         while file_path_src == '':
             self.clear_console()
             print 'NOTE: file shall be have equals format!'
             print 'Enter path to file, which using to store information'
             file_path_src = raw_input('Path to %s:' % (file_original_name))
             file_format = file_path_src.split('/')[-1].split('.')[-1]
             if len(file_format[0]) == 0:
                 file_path_src = ''
             if file_format != file_format_db:
                 file_path_src = ''
             if not os.path.exists(file_path_src):
                 file_path_src = ''
         new_hash = md5_for_file(file_path_src)
         files = [(self.__files[self.__filenumber].original_name, self.__files[self.__filenumber].server_name,
                 self.__files[self.__filenumber].file_hash, new_hash)]
         data = constructDataClient('SYNC', data['user'], data['password'], True,
                                             files_u=files, sync_type=op_type, file_path_src=file_path_src)
     return data
Beispiel #8
0
 def __CRLN(self, event):
     """
         Create link on file
     """
     selectedItems = self.gui.FileManager.files_folder.getSelectedItems()
     if len(selectedItems) != 1:
         wx.MessageBox("For creating shared link necessary choose file!", "Error")
     else:
         key = self.gui.FileManager.options_frame.getCryptoKey()
         defaultDir = self.gui.FileManager.files_folder.defaultDir
         currentDir = self.gui.FileManager.files_folder.currentDir
         path = os.path.normpath(currentDir + selectedItems[0])
         if os.path.isfile(path):
             relative_path = currentDir.replace(defaultDir, "")
             file_hash, size = md5_for_file(path)
             file_info = (selectedItems[0], file_hash, relative_path, key)
             data = constructDataClient('CRLN', self.login, '', True, error='',
                                        file_info=file_info, description='')
             self.sendMessage(data)
         else:
             wx.MessageBox("For creating shared link necessary choose file!", "Error")