Guest User

Untitled

a guest
Feb 18th, 2023
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.06 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. function folder_dialog()
  4. {
  5. local result=$(osascript << EOT
  6. tell application "Finder"
  7. activate
  8. set fpath to POSIX path of (choose folder)
  9. return fpath
  10. end tell
  11. EOT)
  12.  
  13. echo "$result"
  14. }
  15.  
  16. # Ask for folder
  17. lib=$(folder_dialog)
  18.  
  19. if [ ! -d "$lib" ]; then
  20. echo "🥁 Invalid Kontakt library path"
  21. read -p "🎹 Press Enter to continue..."
  22. exit 1
  23. fi
  24.  
  25. # Path must begin with "/Volumes"
  26. if [[ "$lib" != /Volumes/* ]]; then
  27. vol=`ls -l /Volumes | grep ' -> /' | awk '{$1=""; $2=""; $3=""; $4=""; $5=""; $6=""; $7=""; $8=""; print $0}' | awk '{$1=$1};1'`
  28. vol=${vol/ -> \//}
  29. lib=/Volumes/$vol$lib
  30. fi
  31.  
  32. xml=/var/tmp/kontaktLibraryHints.xml
  33.  
  34. find "$lib" -iname "*.nicnt" -o -iname "*_info.nkx" -type f | while read file
  35. do
  36. # Extract library version (`.nicnt` only)
  37. cver=
  38.  
  39. if [[ "$file" = *.nicnt ]]; then
  40. cver=`dd skip=66 count=10 bs=1 if="$file" 2> /dev/null | sed 's/\x00//g'`
  41. echo $cver | grep '\d\.\d\.\d' > /dev/null
  42.  
  43. if [ $? -ne 0 ]; then
  44. cver=`dd skip=66 count=6 bs=1 if="$file" 2> /dev/null | sed 's/\x00//g'`
  45. echo $cver | grep '\d\.\d' > /dev/null
  46. fi
  47.  
  48. [ $? -ne 0 ] && cver=
  49. else
  50. # Skip `_info.nkx` if `.nicnt` is present
  51. ldir=`dirname "$file"`
  52. hasnicnt=`ls "$ldir" | grep -i '.nicnt' | wc -l`
  53. if [ $hasnicnt -ne 0 ]; then
  54. continue
  55. fi
  56. fi
  57.  
  58. # Extract library installation hints XML tree
  59. # and remove old `.plist` and `.xml` (if present) while getting its name
  60. awk '/<ProductHints[ >]/, $NF ~ /<\/ProductHints>/' "$file" | LC_ALL=C sed 's/<\/ProductHints>.*/<\/ProductHints>/' | xmllint --format --recover --encode "UTF-8" - > "$xml"
  61. name=$(xmllint --xpath "string(//Name)" "$xml")
  62. regkey=$(xmllint --xpath "string(//RegKey)" "$xml")
  63. plist="/Library/Preferences/com.native-instruments.$regkey.plist"
  64. xmldist="/Library/Application Support/Native Instruments/Service Center/$name.xml"
  65.  
  66. # Check for bad `.nicnt` (improperly hand-made, unofficial)
  67. grep -i '<HU>' "$xml" > /dev/null
  68. nohu=$?
  69. grep -i '<JDX>' "$xml" > /dev/null
  70. nojdx=$?
  71. grep -i '<ProductSpecific>' "$xml" > /dev/null
  72. nops=$?
  73.  
  74. # These encryption keys fool Kontakt into believing
  75. # that library is legit
  76. if [ $nohu -ne 0 ] && [ $nojdx -ne 0 ]; then
  77. cp "$xml" "$xml.tmp"
  78. if [ $nops -ne 0 ]; then
  79. cat "$xml.tmp" | sed 's/<\/SNPID>/<\/SNPID>| <ProductSpecific>| <HU>6C70AC13E02414D1A552685A1301D859<\/HU>| <JDX>023733942B73318EAEAD914E3981EC68BE72519A2F5738F828A6A028C4E1DBAC<\/JDX>| <Visibility type="Number">3<\/Visibility>| <\/ProductSpecific>/' | tr '|' '\n' > "$xml"
  80. else
  81. cat "$xml.tmp" | sed 's/ <Visibility type="Number">/ <HU>6C70AC13E02414D1A552685A1301D859<\/HU>| <JDX>023733942B73318EAEAD914E3981EC68BE72519A2F5738F828A6A028C4E1DBAC<\/JDX>| <Visibility type="Number">/' | tr '|' '\n' > "$xml"
  82. fi
  83. rm -f "$xml.tmp"
  84. fi
  85.  
  86. # Integrate into Service Center
  87. sudo mkdir -p "/Library/Application Support/Native Instruments/Service Center"
  88. sudo chmod 755 "/Library/Application Support/Native Instruments/Service Center"
  89. sudo cp "$xml" "$xmldist"
  90. sudo chmod 755 "$xmldist"
  91.  
  92. # Set `ContentDir`
  93. sudo rm -f "$plist"
  94. ContentDir=$(echo `dirname "$file"` | tr / :)
  95. ContentDir=${ContentDir//::/:}
  96. ContentDir=${ContentDir//::/:}
  97. sudo defaults write "$plist" ContentDir "${ContentDir#:*:}:"
  98.  
  99. # Obtain rest of parameters from extracted XML
  100. for key in RegKey SNPID Name HU JDX UPID AuthSystem ; do
  101. val=$(xmllint --xpath "string(//$key)" "$xml")
  102. if [[ "$val" ]]
  103. then
  104. sudo defaults write "$plist" $key "$val"
  105. fi
  106. done
  107.  
  108. # Write `ContentVersion`
  109. if [ "$cver" != "" ]; then
  110. sudo defaults write "$plist" ContentVersion $cver
  111. fi
  112.  
  113. # Get `Visibility`
  114. vis=$(xmllint --xpath "string(//ProductSpecific/Visibility)" "$xml")
  115. sudo defaults write "$plist" Visibility -int $vis
  116.  
  117. # Review
  118. cat "$xml"
  119. defaults read "$plist"
  120. rm -f "$xml"
  121. echo
  122. done
  123.  
  124. echo "🎸 Have fun! 🎻"
  125. read -p "🎹 Press Enter to continue..."
  126.  
Advertisement
Add Comment
Please, Sign In to add comment