Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'tk'
- require 'tkextlib/bwidget'
- require 'ftools'
- class Camera
- attr_accessor :directory, :imageDirectory, :oldImages, :mounted, :device
- def delete_duplicates
- @directory.delete_if {|new| @oldImages.any? { |old| /#{File.basename(new)}/ =~ old } }
- end
- end
- class Gui
- attr_accessor :pBarMax, :pBarCount, :guiText, :totalSize
- end
- camera1 = Camera.new
- gui1 = Gui.new
- gui1.pBarCount = 0
- gui1.pBarMax = 1
- gui1.guiText = ""
- gui1.totalSize = 0
- camera1.mounted = false
- camera1.device = ""
- thread1Test = false
- thread2Test = false
- camera1.imageDirectory = "/home/Main/Image Expert Images/"
- camera1.oldImages = Dir["#{camera1.imageDirectory}**/*.{jpg,JPG,Jpg}"]
- def myproc(camera1, gui1, newDirectory, newName)
- gui1.guiText = "Working..."
- camera1.device = ARGV[0].gsub(/system:\/media\//, "")
- puts camera1.device
- if system("/usr/bin/pmount -r /dev/#{camera1.device}")
- camera1.mounted = true
- gui1.guiText = "Found Camera"
- else
- gui1.guiText = "Can't Find Camera"
- end
- camera1.directory = Dir["/media/#{camera1.device}/**/*.{jpg,JPG,Jpg}"]
- newDirectory.chomp!
- newDirectory.gsub!(/\/|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)/,"_")
- newName.chomp!
- newName.gsub!(/\/|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)/,"_")
- Dir.chdir(camera1.imageDirectory)
- unless newName.empty?
- newName += "_"
- end
- unless newDirectory.empty?
- newDirectory += "/"
- unless File.exist?(newDirectory) || camera1.mounted == false
- Dir.mkdir(newDirectory , 0744)
- end
- end
- camera1.delete_duplicates
- if camera1.directory.empty?
- gui1.pBarMax = 1
- gui1.guiText = "Nothing to Transfer"
- else
- gui1.pBarMax = camera1.directory.length
- end
- unless camera1.directory.empty?
- camera1.directory.each do |file|
- File.copy(file, "#{camera1.imageDirectory + newDirectory + newName + File.basename(file)}")
- puts "copied #{file} to #{camera1.imageDirectory + newDirectory + newName + File.basename(file)}"
- gui1.totalSize += File.size(file)
- gui1.guiText = "Copied #{File.basename(file)}"
- gui1.pBarCount += 1
- end
- gui1.guiText = "Transfered: #{gui1.totalSize / 1048576} MB"
- system("/usr/bin/konqueror #{camera1.imageDirectory + newDirectory}")
- end
- if camera1.mounted
- if system("/usr/bin/pumount -l /dev/#{camera1.device}")
- camera1.mounted = false
- else
- gui1.guiText = "Camera Error!"
- end
- end
- end
- def packing(padx, pady, side=:left, anchor=:n)
- {"padx" => padx, "pady" => pady, "side"=> side.to_s, "anchor" => anchor.to_s}
- end
- ############Build GUI#######################
- root = TkRoot.new() {title "Camera Downloader"}
- top = TkFrame.new(root)
- fr1 = TkFrame.new(top)
- fr2 = TkFrame.new(top)
- fr3 = TkFrame.new(top)
- fr4 = TkFrame.new(top)
- LabelPack = packing(5, 5, :top, :w)
- EntryPack = packing(5, 2, :top)
- ButtonPack = packing(15, 5, :left, :center)
- FramePack = packing(2, 2, :top)
- Frame1Pack = packing(2, 2, :left)
- Fonts = "{Arial} 10"
- newDirectory = TkVariable.new
- newName = TkVariable.new
- progressBarLength = TkVariable.new
- lab_directory = TkLabel.new(fr1) do
- font Fonts
- text "Directory Name"
- pack LabelPack
- end
- ent_directory = TkEntry.new(fr1) do
- font Fonts
- width 21
- textvariable newDirectory
- pack EntryPack
- end
- lab_pictures = TkLabel.new(fr2) do
- font Fonts
- text "Name to give pictures:"
- pack LabelPack
- end
- ent_pictures = TkEntry.new(fr2) do
- font Fonts
- width 21
- textvariable newName
- pack EntryPack
- end
- progressBar = Tk::BWidget::ProgressBar.new(fr3) do
- width 80
- variable progressBarLength
- progressBarLength.value = 0
- maximum gui1.pBarMax
- pack EntryPack
- end
- lab_text = TkLabel.new(fr3) do
- font Fonts
- text ""
- pack LabelPack
- end
- btn_ok = TkButton.new(fr4) do
- width 5
- text "Ok"
- command proc {
- thread1 = Thread.new do
- if thread1Test
- break
- end
- thread1Test = true
- myproc(camera1, gui1, newDirectory.value, newName.value)
- sleep 1
- gui1.pBarCount = 0
- gui1.totalSize = 0
- thread1Test = false
- end
- thread2 = Thread.new do
- puts gui1.pBarCount
- puts gui1.pBarMax
- if thread2Test
- break
- end
- thread2Test = true
- while thread1Test
- sleep 0.1
- lab_text.text = gui1.guiText
- progressBar.maximum = gui1.pBarMax
- progressBarLength.value = gui1.pBarCount
- puts "Inside thread_ #{gui1.pBarCount}"
- end
- thread2Test = false
- end
- }
- pack ButtonPack
- end
- btn_exit = TkButton.new(fr4) do
- width 5
- text "Exit"
- command proc {
- if camera1.mounted
- system("pumount -l /dev/#{camera1.device}")
- end
- exit
- }
- pack ButtonPack
- end
- top.pack FramePack
- fr1.pack FramePack
- fr2.pack FramePack
- fr3.pack FramePack
- fr4.pack FramePack
- ent_directory.focus
- Tk.mainloop
Add Comment
Please, Sign In to add comment