#!/usr/bin/env python
from Tkinter import *
import os,sys
import tkMessageBox
import thread

def hlp():
  h = '''tkgetpics.py by k.g.moffat
  \nUse to View, Copy or Move \
  pictures from a Fuji3800 to a chosen directory \
  or to delete images from the camera. \
  \n(Depends on mount point /mnt/camera existing, \
  and being included in /etc/fstab as mountable by user, \
  and gqview being installed.)'''

  tkMessageBox.showinfo("tkgetpics.py", h )

def cameraview():
  dirstr="/mnt/camera/dcim/100_fuji/"
  B1.config(state = DISABLED)
  B2.config(state = DISABLED)
  B3.config(state = DISABLED)
  B4.config(state = DISABLED)
  B5.config(state = DISABLED)
  root.config(cursor='watch')

  T1.insert(END, "\nMounting camera.")
  result = os.system("mount /mnt/camera")
  if(result != 0):
    T1.insert(END, "\nMount unsuccessful!\nDoes mountpoint /mnt/camera exist?")

  result = os.system("ls /mnt/camera/dcim/100_fuji/")
  if(result != 0):
    T1.insert(END, "\nCannot mount camera!\nFuji 3800 not connected!")
    
    B1.config(state = NORMAL)
    B2.config(state = NORMAL)
    B3.config(state = NORMAL)
    B4.config(state = NORMAL)
    B5.config(state = NORMAL)
    root.config(cursor='left_ptr')
    T1.see(END)
    return 1
   
  T1.insert(END, "\nAttempting to view")
  viewstr = "gqview " + dirstr
  result = os.system(viewstr)
  T1.insert(END, "\nUnmounting camera")
  result = os.system("umount /mnt/camera")
  if(result != 0):
    T1.insert(END, "\nCamera unmount failed!")
  T1.insert(END, "\n\n")
   
  B1.config(state = NORMAL)
  B2.config(state = NORMAL)
  B3.config(state = NORMAL)
  B4.config(state = NORMAL)
  B5.config(state = NORMAL)
  root.config(cursor='left_ptr')
  T1.see(END)
  return 0
  
def viewit(dirstr):
  if(tkMessageBox.askokcancel("Confirm:", "View %s \nin gqview?" % dirstr)):
    viewstr = "gqview " + dirstr
    result = os.system(viewstr)
  return 0

def copyit():
  dirstr=e.get()
  global cmd
  cmd = 'COPY'
  if(tkMessageBox.askokcancel("Confirm:", "OK to create %s \nand copy pictures?" % dirstr)):
    thread.start_new_thread(copypics, ()) # Thread?! ******* seems to work!
    return 0

def moveit():
  dirstr=e.get()
  global cmd
  cmd = 'MOVE'
  if(tkMessageBox.askokcancel("Confirm:", "OK to create %s \nand move pictures? \nThis will DELETE pictures from camera." % dirstr)):
    thread.start_new_thread(copypics, ())
    return 0

def delete_all():
  dirstr=e.get()
  global cmd
  cmd = "DELETE_ALL"
  if(tkMessageBox.askokcancel("Warning!!!", "OK to DELETE ALL?\nThis will clear the camera of pictures!!!")):
    if(tkMessageBox.askokcancel("Confirm", "Are you sure???")):
      thread.start_new_thread(copypics, ())
      return 0
  
def getdate(e):
  f = os.popen('date +%Y%m%d')
  d = f.read()
  f.close()
  cwd = os.getcwd()
  e.set(cwd + "/images/" + d[:-1]) # remove \n

def copypics():

  B1.config(state = DISABLED)
  B2.config(state = DISABLED)
  B3.config(state = DISABLED)
  B4.config(state = DISABLED)
  B5.config(state = DISABLED)
  root.config(cursor='watch')
  
  global cmd
  
  dirstr=e.get() # get dir name
  T1.insert(END, "\nMounting camera.")
  result = os.system("mount /mnt/camera")
  if(result != 0):
    T1.insert(END, "\nMount unsuccessful!\nDoes mountpoint /mnt/camera exist?")

  result = os.system("ls /mnt/camera/dcim/100_fuji/")
  if(result != 0):
    T1.insert(END, "\nCannot mount camera!\nFuji 3800 not connected!")
    
    B1.config(state = NORMAL)
    B2.config(state = NORMAL)
    B3.config(state = NORMAL)
    B4.config(state = NORMAL)
    B5.config(state = NORMAL)
    root.config(cursor='left_ptr')
    T1.see(END)
    return 1
    
  #Delete_all here
  
  if(cmd == "DELETE_ALL"):
    T1.insert(END, "\nDeleting all pics from camera.\nHope this is ok.\nToo late now!")
    cpstr = "rm /mnt/camera/dcim/100_fuji/*.*"
    result = os.system(cpstr)
    if(result != 0):
      T1.insert(END, "\nDelete unsuccessful, Unmounting camera");
    else:
      T1.insert(END, "\nAll images deleted, Unmounting camera")
    result = os.system("umount /mnt/camera")
    if(result != 0):
      T1.insert(END, "\nCamera unmount failed.");
    T1.insert(END, "\n\n");
    B1.config(state = NORMAL)
    B2.config(state = NORMAL)
    B3.config(state = NORMAL)
    B4.config(state = NORMAL)
    B5.config(state = NORMAL)
    root.config(cursor='left_ptr')
    T1.see(END)
    return 0

  #other choices, move, copy here
  
  T1.insert(END, "\nMaking the Directory: %s " % dirstr)
  mk = "mkdir -p " + dirstr
  result = os.system(mk)
  if (result != 0):
    T1.insert(END, "\nMkdir failed; may already exist.")
  if(cmd == 'COPY'):
    T1.insert(END, "\nCopying images to %s" % dirstr)
    cpstr = "cp /mnt/camera/dcim/100_fuji/*.* " + dirstr
  elif(cmd == 'MOVE'):
    T1.insert(END, "\nMoving images to %s" % dirstr)
    cpstr = "mv /mnt/camera/dcim/100_fuji/*.* " + dirstr
  else:
    T1.insert(END, "\nSome error in move/copy. Exiting")
    T1.see(END)
    return 1
  result = os.system(cpstr)
  if(result != 0):
    T1.insert(END, "\nImage copy unsuccessful")

  T1.insert(END, "\nUnmounting camera")
  result = os.system("umount /mnt/camera")
  if(result != 0):
    T1.insert(END, "\nCamera unmount failed!")
  T1.insert(END, "\n\n")
  T1.see(END)
  viewit(dirstr)
  
  B1.config(state = NORMAL)
  B2.config(state = NORMAL)
  B3.config(state = NORMAL)
  B4.config(state = NORMAL)
  B5.config(state = NORMAL)
  root.config(cursor='left_ptr')
  T1.see(END)
  return 0

#-----------------------  
  
root=Tk()
e = StringVar()
root.title('tkgetpics.py - Fuji3800')

cmd = 'COPY' # default to copy, not move

# Menu =========

M1 = Frame(root, relief=RAISED, borderwidth=2)
M1.pack(fill=X)
CmdBtn = Menubutton(M1, text="Commands", underline=0)
CmdBtn.pack(side=LEFT, padx="2m")
CmdBtn.menu = Menu(CmdBtn)
CmdBtn.menu.add_command(label='View pics on camera', underline=0, command=cameraview)
CmdBtn.menu.add_command(label='Copy pics', underline=0, command=copyit)
CmdBtn.menu.add_command(label='Move pics', underline=0, command=moveit)
CmdBtn.menu.add_command(label='Quit', underline=0, command=root.quit)
CmdBtn.menu.add_command(label='Delete all', underline=0, command=delete_all)
CmdBtn['menu'] = CmdBtn.menu

HlpBtn = Menubutton(M1, text="Help", underline=0)
HlpBtn.pack(side=RIGHT, padx="2m")
HlpBtn.menu = Menu(HlpBtn)
HlpBtn.menu.add_command(label='Help', underline=0, command=hlp)
HlpBtn['menu'] = HlpBtn.menu

M1.tk_menuBar(CmdBtn,HlpBtn)

# =================

L1 = Label(root, text="Please plug in camera and turn on,\nthen enter a destination\ndirectory for the pictures.")
L1.pack(padx=4, pady=4)
L2 = Label(root, text="The default is today's date.")
L2.pack(padx=4, pady=4)

E1 = Entry(root, width=40, textvariable=e)
E1.pack(padx=4, pady=4)
getdate(e)
dirstr=e.get()

B5 = Button(root, text="View Pics on Camera", activebackground='GREEN', command=cameraview)
B5.pack(fill=BOTH, expand=YES, padx=4, pady=4)
B1 = Button(root, text="Copy pictures", activebackground='GREEN', command=copyit)
B1.pack(fill=BOTH, expand=YES, padx=4, pady=4)
B2 = Button(root, text="Move pictures", activebackground='YELLOW', command=moveit)
B2.pack(fill=BOTH, expand=YES, padx=4, pady=4)
B3 = Button(root, text="Quit", activebackground='RED', command=root.quit)
B3.pack(fill=BOTH, expand=YES, padx=4, pady=4)
B4 = Button(root, text="Delete All!", activebackground='RED', command=delete_all)
B4.pack(fill=BOTH, expand=YES, padx=4, pady=4)
T1 = Text(root, height=12, width=40)
S1 = Scrollbar(root, command=T1.yview)
T1.configure(yscrollcommand=S1.set)
T1.insert(END, 'Messages:')
T1.pack(side=LEFT, anchor=W, fill=BOTH, expand=YES, padx=4, pady=4)
S1.pack(side=RIGHT, fill=Y, padx=4, pady=4)

root.mainloop()
