Advertisement
Guest User

Untitled

a guest
May 11th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.28 KB | None | 0 0
  1. ;Every now and then people paste image urls for us, lazy people, to open.
  2. ;Being lazy, I want to know if the image I'm about to open is actually worth looking at.
  3. ;(Or there's always the chance it's one of those horrifying images - they're less horrifying at 128x128)
  4. ;Load and enjoy. :)
  5. ;"Hidden" function - double clicking the preview window closes it - right clicking it will close it and open it in a browser window.
  6. ;If you just copy-and paste the code - be sure to go to the menu, and choose "Reset".
  7. ;Note: Redirected URLs (i.e. - tinyurl, cjb.net, etc) will not work - analyzing them would take longer then actually opening the images.
  8. ;Thanks to linx05, Jigsy, and rfu for constant feedback.
  9.  
  10. on ^*:hotlink:*:*:{
  11. if ($regex($1,/^(http:\x2F\x2F)?(?(1)(?:www\.)?|www\.).+?\x2F(?:.+\x2F)?.+\.(?:jp(?:e)?g|gif|png|bmp)$/i) && %imgready == $true) {
  12. set %img.x $mouse.mx
  13. set %img.y $mouse.my
  14. if ((%imgclick == $true && $mouse.key & 1) || %imgclick == $false) {
  15. if (%imgpre && $exists(imgcache\ $+ $gettok($regsubex($1,/^(?:.+?\w)\x2F/,),-1,47))) {
  16. if ($window(@ImagePreview)) window -c @ImagePreview
  17. var %imgfile = imgcache\ $+ $gettok($regsubex($1,/^(?:.+?\w)\x2F/,),-1,47)
  18. var %w = $pic(%imgfile).width, %h = $pic(%imgfile).height
  19. if (%imgaspect && !%imgprct) {
  20. if (%w > %h) var %w = $round($calc(%w * (%imgsize / %h)),0), %h = %imgsize
  21. else var %h = $round($calc(%h * (%imgsize / %w)),0), %w = %imgsize
  22. }
  23. elseif (%imgaspect && %imgprct) {
  24. var %w = $round($calc(%w * %imgprct),0)
  25. var %h = $round($calc(%h * %imgprct),0)
  26. }
  27. window -pdBk0w0o +b @ImagePreview %img.x %img.y $iif(%imgaspect,%w %h,%imgsize %imgsize)
  28. if (%imgfade) .timertrans -m 64 1 setlayer $!calc(255 - $!timer(trans).reps * 4) @ImagePreview
  29. .drawpic -s @ImagePreview 0 0 $iif(%imgaspect,%w %h,%imgsize %imgsize) %imgfile
  30. .timerclosepreview 1 %imgfadeout fimgClose
  31. }
  32. else {
  33. set %imgloc $1
  34. set %imgready $false
  35. fetchimg $remove($regsubex(%imgloc,/(\w\x2F).++/,\1),http:,/)
  36. }
  37. }
  38. return
  39. }
  40. halt
  41. }
  42. alias -l fetchimg {
  43. if (!$sock(fimg)) {
  44. .sockopen fimg $1 80
  45. if ($window(@ImagePreview)) window -c @ImagePreview
  46. if (!$isid) {
  47. window -pdBk0w0o +b @ImagePreview %img.x %img.y %imgsize %imgsize
  48. var %t = Downloading...
  49. drawtext -or @ImagePreview 0 Tahoma 9 $calc(%imgsize / 2 - $width(%t,Tahoma,9,1) / 2) $calc(%imgsize / 2 - $height(%t,Tahoma,9)) %t
  50. if (%imgfade) .timertrans -m 64 1 setlayer $!calc(255 - $!timer(trans).reps * 4) @ImagePreview
  51. }
  52. }
  53. }
  54. on *:sockopen:fimg:{
  55. if (!$sockerr) {
  56. var %x = $regsubex(%imgloc,/^(?:.+?\w)\x2F/,), %a sockwrite -n $sockname
  57. set %img.file $gettok(%x,-1,47)
  58. write -c %img.file
  59. if (!%img.chunk) %a GET / $+ %x HTTP/1.1
  60. else %a GET / $+ %x HTTP/1.0
  61. %a Host: $remove($regsubex(%imgloc,/(\w\x2F).++/,\1),http:,/)
  62. %a Accept: */*
  63. %a Connection: Close-connection
  64. %a
  65. }
  66. else {
  67. echo $color(info) -ae ImagePreview: Error while fetching image.
  68. unset %img.*
  69. unset %imgloc
  70. set %imgready $true
  71. window -c @ImagePreview
  72. .timertrans off
  73. }
  74. }
  75. on *:sockread:fimg:{
  76. if (!%img.header) {
  77. var %length
  78. sockread %length
  79. while ($sockbr) {
  80. if (*404*Not Found iswm %length || error isin %length) {
  81. window -c @ImagePreview
  82. sockclose $sockname
  83. .remove %img.file
  84. .timertrans off
  85. echo $color(info) -ae ImagePreview: Could not find image %imgloc (server returned 404).
  86. .unset %img.*
  87. .unset %imgloc
  88. drawpic -c
  89. set %imgready $true
  90. break
  91. }
  92. elseif (*Transfer-Encoding: chunked* iswm %length && !%img.chunk) {
  93. sockclose $sockname
  94. .remove %img.file
  95. .timertrans off
  96. drawpic -c
  97. set %img.chunk $true
  98. fetchimg $remove($regsubex(%imgloc,/(\w\x2F).++/,\1),http:,/)
  99. break
  100. }
  101. elseif (!%length) {
  102. set %img.header $true
  103. break
  104. }
  105. sockread %length
  106. }
  107. }
  108. else {
  109. sockread 8192 &image
  110. while ($sockbr) {
  111. bwrite %img.file -1 -1 &image
  112. if (!%img.pre) {
  113. if ($istok(.jpg jpeg .bmp,$right(%img.file,4),32) == $true && $pic(%img.file).size != 0) .drawpic -s @ImagePreview 0 0 %imgsize %imgsize %img.file
  114. else {
  115. inc %img.dots
  116. clear @ImagePreview
  117. var %t = $+(Downloading,$str(.,$calc(%img.dots % 3 + 1)))
  118. drawtext -or @ImagePreview 0 Tahoma 9 $calc(%imgsize / 2 - $width(%t,Tahoma,9,1) / 2) $calc(%imgsize / 2 - $height(%t,Tahoma,9)) %t
  119. }
  120. }
  121. sockread 8192 &image
  122. }
  123. }
  124. }
  125. on *:sockclose:fimg:{
  126. if ($exists(%img.file)) {
  127. if ($pic(%img.file).width && $pic(%img.file).height && %imgaspect && !%img.pre) {
  128. var %w = $pic(%img.file).width, %h = $pic(%img.file).height
  129. if (!%imgprct) {
  130. if (%w > %h) fimgResize %img.file $round($calc(%w * (%imgsize / %h)),0) %imgsize
  131. else fimgResize %img.file %imgsize $round($calc(%h * (%imgsize / %w)),0)
  132. }
  133. else fimgResize %img.file $round($calc(%w * %imgprct),0) $round($calc(%h * %imgprct),0)
  134. }
  135. elseif (!%img.pre && $window(@ImagePreview)) { .drawpic -s @ImagePreview 0 0 %imgsize %imgsize %img.file }
  136. if (%imgpre) .copy -o %img.file imgcache\ $+ %img.file
  137. .remove %img.file
  138. .unset %img.*
  139. .timertrans off
  140. }
  141. else echo $color(info) -ae ImagePreview: Error while fetching image.
  142. .timerclosepreview 1 %imgfadeout fimgClose
  143. drawpic -c
  144. set %imgready $true
  145. }
  146. alias -l fimgResize {
  147. if ($timer(trans)) { .timerreResize -m 1 100 fimgResize $1 $2 $3 }
  148. else {
  149. var %i = 1, %j = 1
  150. if ($timer(closepreview)) .timerclosepreview off
  151. if (%imgprct) {
  152. while ($window(@ImagePreview).h != $3 || $window(@ImagePreview).w != $2) {
  153. window -pdBk0w0o +b @ImagePreview %img.x %img.y $calc(%imgsize + %i) $calc(%imgsize + %j)
  154. .drawpic -s @ImagePreview 0 0 $calc(%imgsize + %i) $calc(%imgsize + %j) $1
  155. if ($window(@ImagePreview).h < $3) inc %j
  156. elseif ($window(@imagePreview).h > $3) dec %j
  157. if ($window(@ImagePreview).w < $2) inc %i
  158. elseif ($window(@ImagePreview).w > $2) dec %i
  159. }
  160. }
  161. else {
  162. if ($2 == %imgsize) {
  163. while ($window(@ImagePreview).h <= $3) {
  164. window -pdBk0w0o +b @ImagePreview %img.x %img.y %imgsize $calc(%imgsize + %i)
  165. .drawpic -s @ImagePreview 0 0 %imgsize $calc(%imgsize + %i) $1
  166. inc %i
  167. }
  168. }
  169. else {
  170. while ($window(@ImagePreview).w <= $2) {
  171. window -pdBk0w0o +b @ImagePreview %img.x %img.y $calc(%imgsize + %i) %imgsize
  172. .drawpic -s @ImagePreview 0 0 $calc(%imgsize + %i) %imgsize $1
  173. inc %i
  174. }
  175. }
  176. }
  177. .timerclosepreview 1 %imgfadeout fimgClose
  178. }
  179. }
  180.  
  181. alias -l fimgClose {
  182. if (%imgfade) .timertransclose -m 64 1 setlayer $!calc($timer(transclose).reps * 4) @ImagePreview $(|) $!iif($timer(transclose).reps < 1,imgclosepre)
  183. else imgclosepre
  184. }
  185. on *:close:@ImagePreview:imgclosepre
  186. alias -l imgclosepre {
  187. if ($window(@ImagePreview)) window -c @ImagePreview
  188. if ($exists(%img.file) == $true) {
  189. if (%imgpre && %imgready == $true) .copy -o %img.file imgcache\ $+ %img.file
  190. .remove %img.file
  191. }
  192. .timertrans off
  193. .timerclosepreview off
  194. .unset %img.*
  195. .unset %imgloc
  196. drawpic -c
  197. sockclose fimg
  198. set %imgready $true
  199. }
  200. menu @ImagePreview {
  201. sclick:set %img.move $mouse.x $mouse.y | .timerclosepreview off
  202. leave:unset %img.move | .timerclosepreview 1 %imgfadeout fimgClose
  203. uclick:unset %img.move | .timerclosepreview 1 %imgfadeout fimgClose
  204. mouse:{
  205. if (%img.move && $mouse.key & 1) {
  206. set %img.x $calc($mouse.dx - $gettok(%img.move,1,32))
  207. set %img.y $calc($mouse.dy - $gettok(%img.move,2,32))
  208. .window @ImagePreview %img.x %img.y $window(@ImagePreview).w $window(@ImagePreview).h
  209. }
  210. }
  211. dclick:imgclosepre
  212. rclick:{
  213. run %imgloc
  214. imgclosepre
  215. ;Open in browser:run %imgloc
  216. ;Close:imgclosepre
  217. }
  218. }
  219. menu status,channel,query {
  220. Image Preview
  221. .Turn $iif(%imgready,Off,On):set %imgready $iif(%imgready,$false,$true)
  222. . $iif(!%imgready,$style(2),$iif(%imgfade,$style(1))) Fade in\out:set %imgfade $iif(%imgfade,$false,$true)
  223. . $iif(!%imgready,$style(2),$iif(%imgpre,$style(1))) Prefetch images:{
  224. set %imgpre $iif(%imgpre,$false,$true)
  225. if ($exists(imgcache\) == $false) .mkdir imgcache
  226. }
  227. . $iif(!%imgready || !%imgpre || !$findfile(imgcache\,*.*,0),$style(2)) Clear cache:{
  228. var %i 1
  229. while ($findfile(imgcache\,*.*,%i)) {
  230. .remove $ifmatch
  231. inc %i
  232. }
  233. echo $color(info) -ae * ImagePreview: Cache cleared.
  234. }
  235. . $iif(!%imgready,$style(2),$iif(%imgclick,$style(1))) Click to preview:set %imgclick $iif(%imgclick,$false,$true)
  236. . $iif(!%imgready,$style(2),$iif(%imgactive,$style(1))) Close on focus-loss:set %imgactive $iif(%imgactive,$false,$true)
  237. . $iif(!%imgready,$style(2)) Image size...:if ($$?="Enter picture size (in pixels)" isnum) set %imgsize $v1
  238. . $iif(!%imgready,$style(2)) $iif(%imgfade,Fadeout,Auto-close) time...:if ($$?=" $+ $+(Enter fadeout start time (in seconds),$chr(58),$crlf,$chr(40),-1 for infinity,$chr(41)) $+ " isnum) set %imgfadeout $iif($v1 == -1,31536000,$v1)
  239. . $iif(!%imgready,$style(2)) $iif(%imgaspect,$style(1)) Maintain aspect ratio:set %imgaspect $iif(%imgaspect,$false,$true)
  240. . $iif(!%imgready || !%imgaspect,$style(2)) Rescale by percentage $+ $iif(%imgprct,$chr(32) $+ $chr(40) $+ $calc(%imgprct * 100) $+ $chr(37) $+ $chr(41),...):if ($$?="Enter a precentage (0-100%): $+ $crlf $+ No need for the % symbol." isnum 0-100) set %imgprct $calc($v1 / 100)
  241. .Reset:{
  242. unset %img*
  243. set %imgready $true
  244. set %imgfade $true
  245. set %imgpre $false
  246. set %imgclick $true
  247. set %imgsize 128
  248. set %imgfadeout 3
  249. set %imgactive $false
  250. set %imgaspect $true
  251. }
  252. }
  253. on *:text:*:*:{
  254. if (%imgpre && $regex($1-,/^((http:\x2F\x2F)?(?(2)(?:www\.)?|www\.).+?\x2F(?:.+\x2F)?.+\.(?:jp(?:e)?g|gif|png|bmp))$/i)) {
  255. set %imgloc $regml(1)
  256. set %imgready $false
  257. set %img.x $mouse.mx
  258. set %img.y $mouse.my
  259. set %img.pre $true
  260. $fetchimg($remove($regsubex(%imgloc,/(\w\x2F).++/,\1),http:,/))
  261. }
  262. }
  263. on *:load:{
  264. .mkdir imgcache
  265. set %imgready $true
  266. set %imgfade $true
  267. set %imgpre $false
  268. set %imgclick $true
  269. set %imgsize 128
  270. set %imgfadeout 3
  271. set %imgactive $false
  272. echo $color(info) -ae * ImagePreview: Fully loaded. Enjoy. (By HydroIT, aka ^Vampire^, aka [FtUC]Hydro)
  273. }
  274. on *:unload:{
  275. echo $color(info2) -ae * ImagePreview: So long!
  276. .window -c @ImagePreview
  277. unset %img*
  278. var %i 1
  279. while ($findfile(imgcache\,*.*,%i)) {
  280. .remove $ifmatch
  281. inc %i
  282. }
  283. .rmdir imgcache
  284. }
  285. on *:active:*:{
  286. if ($lactive == @ImagePreview && !$timer(trans) && $active != $null && $appactive == $true && %imgactive == $true) {
  287. fimgClose
  288. sockclose fimg
  289. if ($exists(%img.file) == $true) {
  290. if (%imgpre && %imgready == $true) .copy -o %img.file imgcache\ $+ %img.file
  291. .remove %img.file
  292. }
  293. .timertrans off
  294. .timerclosepreview off
  295. .unset %img.*
  296. .unset %imgloc
  297. drawpic -c
  298. set %imgready $true
  299. }
  300. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement