# Path: library/utils/file.py
# def get_filetype(this_path):
#     
#     '''
#     获取文件类型
#     '''
#     
#     result = check_fileaccessible(this_path)
#     if not result[0] :
#         return result
#     
#     this_path = result[1]
#     
#     kind = filetype.guess(this_path)
#     if kind is not None:
#         return (True, kind.extension, kind.mime)
#     
#     output = os.popen('file --mime-type ' + this_path + ' | gawk {"print $2"}')
#     mime_str = output.read()
#     mime_str = mime_str.replace('\n', '')
#     mime_type = re.split(': ', mime_str)[0]
#     # /opt/lykops/example/ansible/playbook/ntpdate.yaml: text/plain
#     if re.search('text/plain$', mime_type) :
#         suffix = 'txt'
#     else :
#         suffix = os.path.splitext(this_path)[-1]
#     return (True, suffix, mime_type)
# 
# Path: library/utils/path.py
# def make_dir(directory, chmods=755 , force=True , backup=True) :
#     '''
#     用于创建目录
#     :parm
#         directory:创建目录
#         chmods：权限，必须是数字，例如755
#         force：当目录存在，强制执行
#         backup：当目录存在，备份文件，后缀名为%Y%m%d%H%M%S-bk
#     :return
#         True：成功
#         Flase：失败
#     '''
#     if os.path.exists(directory) :
#         if not force :
#             return False
#         
#         dt = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
#         if backup :
#             try : 
#                 pre_result = os.renames(directory , directory + '-' + str(dt) + '-' + 'bk')
#             except Exception as e :
#                 pre_result = str(e)
#         else : 
#             pre_result = False
#             '''
#             #result = os.removedirs(dir)
#             try : 
#                 result = os.renames(directory , directory + '-' + str(dt) + '-' + 'bk')
#             except Exception as e :
#                 result = str(e)
#             '''
#     else :
#         pre_result = False
#     
#     if not pre_result :
#         try :
#             chmods = int(chmods)
#         except :
#             chmods = 755
#         
#         try :
#             result = os.makedirs(directory, chmods, exist_ok=True)
#         except Exception as e :
#             result = str(e)
#     else :
#         result = False
#         
#     if not result :
#         result = True
#     else :
#         result = False
#         
#     return result


import os
import tarfile , zipfile, rarfile, gzip
from library.utils.file import get_filetype
from library.utils.path import make_dir
'''
gz： 即gzip，通常只能压缩一个文件。与tar结合起来就可以实现先打包，再压缩。
tar： linux系统下的打包工具，只打包，不压缩
tgz：即tar.gz。先用tar打包，然后再用gz压缩得到的文件
zip： 不同于gzip，虽然使用相似的算法，可以打包压缩多个文件，不过分别压缩文件，压缩率低于tar。
rar：打包压缩文件，最初用于DOS，基于window操作系统。压缩率比zip高，但速度慢，随机访问的速度也慢。
'''




def uncompress(src_file, dest_dir):
    result = get_filetype(src_file)
    if not result[0] :
        return (False, result[1], '')
    filefmt = result[1]
            
    if filefmt not in ('zip') :
        return (False, '本系统暂时只支持解压zip格式的文件')
    

# Path: library/utils/file.py
# def get_filetype(this_path):
#     
#     '''
#     获取文件类型
#     '''
#     
#     result = check_fileaccessible(this_path)
#     if not result[0] :
#         return result
#     
#     this_path = result[1]
#     
#     kind = filetype.guess(this_path)
#     if kind is not None:
#         return (True, kind.extension, kind.mime)
#     
#     output = os.popen('file --mime-type ' + this_path + ' | gawk {"print $2"}')
#     mime_str = output.read()
#     mime_str = mime_str.replace('\n', '')
#     mime_type = re.split(': ', mime_str)[0]
#     # /opt/lykops/example/ansible/playbook/ntpdate.yaml: text/plain
#     if re.search('text/plain$', mime_type) :
#         suffix = 'txt'
#     else :
#         suffix = os.path.splitext(this_path)[-1]
#     return (True, suffix, mime_type)
# 
# Path: library/utils/path.py
# def make_dir(directory, chmods=755 , force=True , backup=True) :
#     '''
#     用于创建目录
#     :parm
#         directory:创建目录
#         chmods：权限，必须是数字，例如755
#         force：当目录存在，强制执行
#         backup：当目录存在，备份文件，后缀名为%Y%m%d%H%M%S-bk
#     :return
#         True：成功
#         Flase：失败
#     '''
#     if os.path.exists(directory) :
#         if not force :
#             return False
#         
#         dt = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
#         if backup :
#             try : 
#                 pre_result = os.renames(directory , directory + '-' + str(dt) + '-' + 'bk')
#             except Exception as e :
#                 pre_result = str(e)
#         else : 
#             pre_result = False
#             '''
#             #result = os.removedirs(dir)
#             try : 
#                 result = os.renames(directory , directory + '-' + str(dt) + '-' + 'bk')
#             except Exception as e :
#                 result = str(e)
#             '''
#     else :
#         pre_result = False
#     
#     if not pre_result :
#         try :
#             chmods = int(chmods)
#         except :
#             chmods = 755
#         
#         try :
#             result = os.makedirs(directory, chmods, exist_ok=True)
#         except Exception as e :
#             result = str(e)
#     else :
#         result = False
#         
#     if not result :
#         result = True
#     else :
#         result = False
#         
#     return result


# Path: library/utils/compress.py
import os
import tarfile , zipfile, rarfile, gzip
from library.utils.file import get_filetype
from library.utils.path import make_dir

'''
gz： 即gzip，通常只能压缩一个文件。与tar结合起来就可以实现先打包，再压缩。
tar： linux系统下的打包工具，只打包，不压缩
tgz：即tar.gz。先用tar打包，然后再用gz压缩得到的文件
zip： 不同于gzip，虽然使用相似的算法，可以打包压缩多个文件，不过分别压缩文件，压缩率低于tar。
rar：打包压缩文件，最初用于DOS，基于window操作系统。压缩率比zip高，但速度慢，随机访问的速度也慢。
'''




def uncompress(src_file, dest_dir):
    result = get_filetype(src_file)
    if not result[0] :
        return (False, result[1], '')
    filefmt = result[1]
            
    if filefmt not in ('zip') :
        return (False, '本系统暂时只支持解压zip格式的文件')
    

    result = make_dir(dest_dir)