Guest User

Untitled

a guest
May 24th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. # -*- coding: UTF-8 -*-
  2.  
  3. require 'dl/import'
  4.  
  5. module CoreFoundation
  6.  
  7. extend DL::Importer
  8.  
  9. dlload '/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation'
  10. extern 'void* CFStringCreateWithCString(void*, char*, int)'
  11. extern 'void* CFArrayCreateMutable(void*, int, void*)'
  12. extern 'void CFArrayAppendValue(void*, void*)'
  13. end
  14.  
  15. class String
  16. def to_cf
  17. CoreFoundation.CFStringCreateWithCString(nil, self.frozen? ? dup : self, 0)
  18. end
  19. end
  20.  
  21. class Array
  22. def to_cf
  23. CoreFoundation.CFArrayCreateMutable(nil, size, nil).tap do |array|
  24. each do |e|
  25. CoreFoundation.CFArrayAppendValue(array, e.to_cf)
  26. end
  27. end
  28. end
  29. end
  30.  
  31. module MetaData
  32.  
  33. extend DL::Importer
  34.  
  35. dlload '/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata'
  36. extern 'void* MDItemCreate(void*, void*)'
  37. extern 'void MDItemSetAttribute(void*, void*, void*)'
  38.  
  39. class Item
  40. def where_froms=(args)
  41. set_attribute('kMDItemWhereFroms', args)
  42. end
  43.  
  44. private
  45.  
  46. def initialize(path)
  47. @item = MetaData.MDItemCreate(nil, path.to_cf)
  48. end
  49.  
  50. def set_attribute(name, value)
  51. MetaData.MDItemSetAttribute(@item, name.to_cf, value.to_cf)
  52. end
  53. end
  54. end
  55.  
  56. item = MetaData::Item.new(ARGV.shift)
  57. item.where_froms = ARGV
Add Comment
Please, Sign In to add comment