#!/usr/bin/python
# Backup all the files on the iFP to a directory on disk
# NOTE: If the backup directory exists, it is deleted!
#
# $Id: backup-ifp,v 1.1 2005/02/21 03:11:19 milamber Exp $
#

import ifp
import ifp_core

import os
import os.path
import sys


def file_transfer_print(transfer_status):
    filename = transfer_status.file_name
    file_total = transfer_status.file_total
    file_bytes = transfer_status.file_bytes
    batch_bytes = transfer_status.batch_bytes
    batch_total = transfer_status.batch_total
    files_count = transfer_status.files_count
    files_total = transfer_status.files_total
    is_batch = transfer_status.is_batch

    print """%s %d of %d bytes.""" % (filename.split('\\')[-1] ,file_bytes,file_total),
    if is_batch:
        print """(%d of %d)""" % (files_count+1,files_total),
    print "\r",
    return 0
    
if __name__ == "__main__":
    backup_dir = "ifp-backup"
    if sys.argv[1] is not None:
        backup_dir = sys.argv[1]
    my_ifp = ifp.iFP()
    try:
        my_ifp.init_device();
    except IOError,e:
        print "Unable to find iFP device. Perhaps it's unpluged or turned off"
        sys.exit(0);
    try:
        capacity = my_ifp.get_capacity()
        free = my_ifp.get_free_space()
        model = my_ifp.get_model()
    except Exception,e:
        print "Error retreiving information from iFP device. Exiting"
        my_ifp.close()
        sys.exit(0)
    percent_used = int((1 - (float(free) / float(capacity))) * 100)
    
    print """Found %s with %d bytes free (%d%%)""" % (model,free,percent_used)
    print """Backing up iFP to directory "%s".""" % backup_dir
    if os.path.exists(backup_dir) and os.path.isdir(backup_dir):
        print """Found existing backup directory. Removing"""
        os.removedirs(backup_dir)
    try:
        print "About to backup"
        my_ifp.download("\\",backup_dir,callback=file_transfer_print)
    except Exception,e:
        print "Got error during backup of iFP:",e
    my_ifp.close()
    
