def copyCore(self, source, dst_dir: str, copy_duplicate=False):
    logs = []
    no_metadata = 'none'
    date = File._get_file_metadata(self, 'Date/Time Original')
    if (date == ''):
        date = File._get_file_metadata(self, 'Create Date', no_metadata)
    mime_type = File._get_file_metadata(self, 'MIME Type', no_metadata)
    dst_dir += f"/{mime_type[:mime_type.find('/')]}/{date[:4]}/{date[5:7]}"
    filename = File._get_file_metadata(self, 'File Name')
    f_name = filename
    dst = ((dst_dir + '/') + filename)
    if os.path.isfile(dst):
        i = 0
        f_pth = File(dst)
        if_same_size: bool = (f_pth._get_file_metadata('File Size') == File._get_file_metadata(self, 'File Size'))
        if ((not if_same_size) or copy_duplicate):
            while os.path.isfile(dst):
                filename = f"{f_name[:f_name.find('.')]}_D{str(i)}.{File._get_file_metadata(self, 'File Type Extension')}"
                dst = f'{dst_dir}/{filename}'
                i = (i + 1)
            if if_same_size:
                logs.append(f'Warning: file already exists but I must copy all files [copy_duplicate={copy_duplicate}], so I try do it ...')
            else:
                logs.append(f'Warning: file already exists but have other size, so I try copy it ...')
        else:
            logs.append(f'''Warning: file already duplicate [copy_exists={copy_duplicate}].
Copy aboard: {source} -> {dst}''')
            return logs
    try:
        if (not os.path.isdir(dst_dir)):
            os.makedirs(dst_dir)
            logs.append(f'New directory created: {dst_dir}')
        shutil.copy(source, dst)
        logs.append(f'Copy done: {source} -> {dst}')
    except Exception as e:
        logs.append(f'Copy error [{e}]: {source} ->  {dst}')
    return logs
def copyCore(self, source, dst_dir: str, copy_duplicate=False):
    logs = []
    no_metadata = 'none'
    date = File._get_file_metadata(self, 'Date/Time Original')
    if (date == ):
        date = File._get_file_metadata(self, 'Create Date', no_metadata)
    mime_type = File._get_file_metadata(self, 'MIME Type', no_metadata)
    dst_dir += f"/{mime_type[:mime_type.find('/')]}/{date[:4]}/{date[5:7]}"
    filename = File._get_file_metadata(self, 'File Name')
    f_name = filename
    dst = ((dst_dir + '/') + filename)
    if os.path.isfile(dst):
        i = 0
        f_pth = File(dst)
        if_same_size: bool = (f_pth._get_file_metadata('File Size') == File._get_file_metadata(self, 'File Size'))
        if ((not if_same_size) or copy_duplicate):
            while os.path.isfile(dst):
                filename = f"{f_name[:f_name.find('.')]}_D{str(i)}.{File._get_file_metadata(self, 'File Type Extension')}"
                dst = f'{dst_dir}/{filename}'
                i = (i + 1)
            if if_same_size:
                logs.append(f'Warning: file already exists but I must copy all files [copy_duplicate={copy_duplicate}], so I try do it ...')
            else:
                logs.append(f'Warning: file already exists but have other size, so I try copy it ...')
        else:
            logs.append(f'Warning: file already duplicate [copy_exists={copy_duplicate}].
Copy aboard: {source} -> {dst}')
            return logs
    try:
        if (not os.path.isdir(dst_dir)):
            os.makedirs(dst_dir)
            logs.append(f'New directory created: {dst_dir}')
        shutil.copy(source, dst)
        logs.append(f'Copy done: {source} -> {dst}')
    except Exception as e:
        logs.append(f'Copy error [{e}]: {source} ->  {dst}')
    return logs