Create TOC

2006년 10월 25일

Python/Opera 설정 백업 스크립트

여러 PC를 쓰다보면 Opera 설정을 동일하게 맞추기 위해서 설정 파일들을 수집해야 한다. 이 스크립트는 설치된 PC에서 Opera 설정파일을 수집하기 위해서 제작되었다.

사용법

fetchOperaSetting.py zip 파일명

변경 내역

  • 2006-10-25 0.0.2 Yun-yong Choi
  • 노트장, 쿠키, 주소록, 암호관리자 를 추가 수집
  • 사용자 css 파일 수집
  • 2006-10-24 0.0.1 Yun-yong Choi
  • first release

todo

  • OS/X 지원
  • Widget 등 나머지 설정 수집
  • 압축 파일을 원하는 계정으로 복원 해주는 기능
  • source

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    #   @brief  Opera 설정을 백업하는 script
    import os
    import sys
    import dircache
    import zipfile
    
    
    ##  @brief  사용방법을 출력한다.
    def printUsing():
        print sys.argv[0], ''
    
    if len(sys.argv) < 2:
        printUsing()
        sys.exit(1)
    
    zipname = sys.argv[1]
    
    # 현재 사용자의 profile folder를 구한다.
    homeenv = 'USERPROFILE' if sys.platform == 'win32' else 'HOME'
    
    # opera 설정 파일이 저장된 폴더
    operaprofile = '.opera' + os.path.sep if sys.platform == 'win32' else 'Application Data' + os.path.sep + 'Opera' + os.path.sep + 'Opera' + os.path.sep + 'Profile' + os.path.sep
    
    homepath = os.getenv(homeenv)
    
    # 실제 오페라 설정이 저장된 폴더
    myopera = homepath + os.path.sep + operaprofile
    
    # myopera 하부에서 수집할 폴더들
    subfolders = [
        'menu',  # 메뉴
        'mouse',  # 마우스 제스쳐
        'keyboard',  # 키보드
        'toolbar',  # 도구 모음
        'styles' + os.path.sep + 'user',  # 사용자 CSS
    ]
    subfolders = map(lambda x: myopera + x + os.path.sep, subfolders)
    
    # myopera 하부에서 수집할 파일들
    files = [
        'opera6.ini',       # opera 설정파일
        'urlfilter.ini',    # 컨텐트 차단 파일
        'ua.ini',
        'search.ini',       # 검색 환경
        'override_downloaded.ini',
        'opera6.adr',       # 북마크
        'notes.adr',        # 노트장
        'contacts.adr',     # 주소록
        'cookies4.dat',     # 쿠기
        'wand.dat',         # 암호관리자
        'opcacrt6.dat',     # 인증서
        'opcert6.dat',      # 인증서
        'opssl6.dat',       # 인증서
    ]
    files = map(lambda x: myopera + x, files)
    
    # User Script 설정이 있는지 확인하고 있으면 해당 폴더를 수집해야 한다.
    # 오페라의 ini는 정상적인 ini 형식이 아니기 때문에 ConfigParser를 사용할 수 없다.
    userjs = ''
    with file(files[0], 'rt') as f:
        for line in f:
            idx = line.find('User JavaScript File=')
            if idx == 0:
                userjs = line[len('User JavaScript File='):].rstrip('\r\n')
                break
        f.close()
    
    if userjs[-1] != os.path.sep:
        userjs = userjs + os.path.sep
    
    # 파일 수집
    subfiles = []
    for subfolder in subfolders:
        a = dircache.listdir(subfolder)
        if len(a) > 0:
            a = a[:]
            for file in a:
                subfiles.append(subfolder + file)
    
    # subfiles 와 subfolder를 수집하면 된다.
    # zip 파일 생성
    with zipfile.ZipFile(zipname, 'w', zipfile.ZIP_DEFLATED) as zipf:
        # opera 파일들
        for file in files:
            if os.path.isfile(file):
                compname = file.replace(myopera, '')
                zipf.write(file, compname)
        # sub folder에 있는 파일들
        for file in subfiles:
            if os.path.isfile(file):
                compname = file.replace(myopera, '')
                zipf.write(file, compname)
        userjsfiles = []
        # userjs 수집
        if len(userjs) > 0:
            a = dircache.listdir(userjs)
            a = a[:]
            if len(a) > 0:
                a = a[:]
                for file in a:
                    userjsfiles.append(userjs + file)
        for file in userjsfiles:
            # remove drive letter
            if os.path.isfile(file):
                compname = file
                if sys.platform == 'win32' and file[1] == ':':
                    compname = file[3:]
                zipf.write(file, compname)
    
    ##  @mainpage   fetch opera settings
    #   @version    0.0.2
    #   @section    intro_sec   소개
    # Opera의 설정파일을 수집한다.
    #   @section    requ_sec   요구사항
    #       - Windows 2000 이상의 OS
    #       - python 2.4 또는 이상 버전
    #   @section    install_sec 설치
    #       - 압축파일을 적당한 폴더에 푼다.
    #   @section    using_sec   사용방법
    #   @verbatim
    #fetchOperaSetting.py [저장할 파일이름]@endverbatim
    #   예)
    #   @verbatim
    #fetchOperaSetting.py MyOperaSetting.zip@endverbatim
    #
    #   @todo
    #       - OS/X 지원
    #       - Widget 등 나머지 설정 수집
    #       - 압축 파일을 원하는 계정으로 복원 해주는 기능
    #
    #   @since
    #       - 2006-10-25 0.0.2
    #           - 노트장, 쿠키, 주소록, 암호관리자 를 추가 수집
    #           - 사용자 css 파일 수집
    #       - 2006-10-24 0.0.1
    #           - first release
    
    ##  @brief  프로그램 버전
    VERSION = '0.0.2'