Guest User

Untitled

a guest
Jun 23rd, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.60 KB | None | 0 0
  1. require 'tk'
  2. require 'tkextlib/bwidget'
  3. require 'ftools'
  4.  
  5.  
  6. class Camera
  7.  
  8. attr_accessor :directory, :imageDirectory, :oldImages, :mounted, :device
  9.  
  10. def delete_duplicates
  11.  
  12. @directory.delete_if {|new| @oldImages.any? { |old| /#{File.basename(new)}/ =~ old } }
  13. end
  14. end
  15.  
  16. class Gui
  17. attr_accessor :pBarMax, :pBarCount, :guiText, :totalSize
  18.  
  19. end
  20.  
  21. camera1 = Camera.new
  22. gui1 = Gui.new
  23.  
  24. gui1.pBarCount = 0
  25. gui1.pBarMax = 1
  26. gui1.guiText = ""
  27. gui1.totalSize = 0
  28. camera1.mounted = false
  29. camera1.device = ""
  30.  
  31. thread1Test = false
  32. thread2Test = false
  33.  
  34. camera1.imageDirectory = "/home/Main/Image Expert Images/"
  35. camera1.oldImages = Dir["#{camera1.imageDirectory}**/*.{jpg,JPG,Jpg}"]
  36.  
  37.  
  38.  
  39.  
  40.  
  41. def myproc(camera1, gui1, newDirectory, newName)
  42. gui1.guiText = "Working..."
  43. camera1.device = ARGV[0].gsub(/system:\/media\//, "")
  44. puts camera1.device
  45.  
  46. if system("/usr/bin/pmount -r /dev/#{camera1.device}")
  47. camera1.mounted = true
  48. gui1.guiText = "Found Camera"
  49. else
  50. gui1.guiText = "Can't Find Camera"
  51. end
  52.  
  53. camera1.directory = Dir["/media/#{camera1.device}/**/*.{jpg,JPG,Jpg}"]
  54.  
  55. newDirectory.chomp!
  56. newDirectory.gsub!(/\/|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)/,"_")
  57. newName.chomp!
  58. newName.gsub!(/\/|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)/,"_")
  59.  
  60. Dir.chdir(camera1.imageDirectory)
  61.  
  62. unless newName.empty?
  63. newName += "_"
  64. end
  65.  
  66. unless newDirectory.empty?
  67. newDirectory += "/"
  68. unless File.exist?(newDirectory) || camera1.mounted == false
  69. Dir.mkdir(newDirectory , 0744)
  70. end
  71. end
  72.  
  73. camera1.delete_duplicates
  74.  
  75. if camera1.directory.empty?
  76. gui1.pBarMax = 1
  77. gui1.guiText = "Nothing to Transfer"
  78. else
  79. gui1.pBarMax = camera1.directory.length
  80. end
  81.  
  82. unless camera1.directory.empty?
  83. camera1.directory.each do |file|
  84. File.copy(file, "#{camera1.imageDirectory + newDirectory + newName + File.basename(file)}")
  85. puts "copied #{file} to #{camera1.imageDirectory + newDirectory + newName + File.basename(file)}"
  86. gui1.totalSize += File.size(file)
  87. gui1.guiText = "Copied #{File.basename(file)}"
  88. gui1.pBarCount += 1
  89. end
  90. gui1.guiText = "Transfered: #{gui1.totalSize / 1048576} MB"
  91. system("/usr/bin/konqueror #{camera1.imageDirectory + newDirectory}")
  92. end
  93.  
  94. if camera1.mounted
  95. if system("/usr/bin/pumount -l /dev/#{camera1.device}")
  96. camera1.mounted = false
  97. else
  98. gui1.guiText = "Camera Error!"
  99. end
  100. end
  101. end
  102.  
  103.  
  104. def packing(padx, pady, side=:left, anchor=:n)
  105. {"padx" => padx, "pady" => pady, "side"=> side.to_s, "anchor" => anchor.to_s}
  106. end
  107.  
  108. ############Build GUI#######################
  109.  
  110. root = TkRoot.new() {title "Camera Downloader"}
  111. top = TkFrame.new(root)
  112. fr1 = TkFrame.new(top)
  113. fr2 = TkFrame.new(top)
  114. fr3 = TkFrame.new(top)
  115. fr4 = TkFrame.new(top)
  116.  
  117. LabelPack = packing(5, 5, :top, :w)
  118. EntryPack = packing(5, 2, :top)
  119. ButtonPack = packing(15, 5, :left, :center)
  120. FramePack = packing(2, 2, :top)
  121. Frame1Pack = packing(2, 2, :left)
  122. Fonts = "{Arial} 10"
  123.  
  124. newDirectory = TkVariable.new
  125. newName = TkVariable.new
  126. progressBarLength = TkVariable.new
  127.  
  128. lab_directory = TkLabel.new(fr1) do
  129. font Fonts
  130. text "Directory Name"
  131. pack LabelPack
  132. end
  133.  
  134. ent_directory = TkEntry.new(fr1) do
  135. font Fonts
  136. width 21
  137. textvariable newDirectory
  138. pack EntryPack
  139. end
  140.  
  141. lab_pictures = TkLabel.new(fr2) do
  142. font Fonts
  143. text "Name to give pictures:"
  144. pack LabelPack
  145. end
  146.  
  147. ent_pictures = TkEntry.new(fr2) do
  148. font Fonts
  149. width 21
  150. textvariable newName
  151. pack EntryPack
  152. end
  153.  
  154. progressBar = Tk::BWidget::ProgressBar.new(fr3) do
  155. width 80
  156. variable progressBarLength
  157. progressBarLength.value = 0
  158. maximum gui1.pBarMax
  159. pack EntryPack
  160. end
  161.  
  162.  
  163. lab_text = TkLabel.new(fr3) do
  164. font Fonts
  165. text ""
  166. pack LabelPack
  167. end
  168.  
  169. btn_ok = TkButton.new(fr4) do
  170. width 5
  171. text "Ok"
  172. command proc {
  173.  
  174. thread1 = Thread.new do
  175. if thread1Test
  176. break
  177. end
  178. thread1Test = true
  179. myproc(camera1, gui1, newDirectory.value, newName.value)
  180. sleep 1
  181. gui1.pBarCount = 0
  182. gui1.totalSize = 0
  183. thread1Test = false
  184. end
  185.  
  186.  
  187. thread2 = Thread.new do
  188. puts gui1.pBarCount
  189. puts gui1.pBarMax
  190. if thread2Test
  191. break
  192. end
  193. thread2Test = true
  194. while thread1Test
  195. sleep 0.1
  196. lab_text.text = gui1.guiText
  197. progressBar.maximum = gui1.pBarMax
  198. progressBarLength.value = gui1.pBarCount
  199. puts "Inside thread_ #{gui1.pBarCount}"
  200. end
  201. thread2Test = false
  202. end
  203.  
  204. }
  205.  
  206. pack ButtonPack
  207. end
  208.  
  209. btn_exit = TkButton.new(fr4) do
  210. width 5
  211. text "Exit"
  212. command proc {
  213.  
  214. if camera1.mounted
  215. system("pumount -l /dev/#{camera1.device}")
  216. end
  217. exit
  218. }
  219. pack ButtonPack
  220. end
  221.  
  222. top.pack FramePack
  223. fr1.pack FramePack
  224. fr2.pack FramePack
  225. fr3.pack FramePack
  226. fr4.pack FramePack
  227.  
  228. ent_directory.focus
  229. Tk.mainloop
Add Comment
Please, Sign In to add comment