| Index: third_party/xdg-utils/scripts/xdg-mime
|
| ===================================================================
|
| --- third_party/xdg-utils/scripts/xdg-mime (revision 57942)
|
| +++ third_party/xdg-utils/scripts/xdg-mime (working copy)
|
| @@ -322,7 +322,7 @@
|
| }
|
|
|
| #------------------------------------------------------------
|
| -# Exit script on insufficient permission to read a specified file
|
| +# Exit script on insufficient permission to write a specified file
|
|
|
| exit_failure_file_permission_write()
|
| {
|
| @@ -399,7 +399,7 @@
|
| ;;
|
|
|
| --version)
|
| - echo "xdg-mime 1.0.1"
|
| + echo "xdg-mime 1.0.2"
|
| exit_success
|
| ;;
|
| esac
|
| @@ -425,7 +425,8 @@
|
| {
|
| if [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde;
|
| elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome;
|
| - elif xprop -root _DT_SAVE_MODE | grep ' = \"xfce4\"$' >/dev/null 2>&1; then DE=xfce;
|
| + elif `dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.GetNameOwner string:org.gnome.SessionManager > /dev/null 2>&1` ; then DE=gnome;
|
| + elif xprop -root _DT_SAVE_MODE 2> /dev/null | grep ' = \"xfce4\"$' >/dev/null 2>&1; then DE=xfce;
|
| fi
|
| }
|
|
|
| @@ -452,7 +453,11 @@
|
| detectDE
|
| if [ x"$DE" = x"kde" ] ; then
|
| DEBUG 1 "Running kbuildsycoca"
|
| - eval 'kbuildsycoca'$xdg_redirect_output
|
| + if [ x"$KDE_SESSION_VERSION" = x"4" ]; then
|
| + eval 'kbuildsycoca4'$xdg_redirect_output
|
| + else
|
| + eval 'kbuildsycoca'$xdg_redirect_output
|
| + fi
|
| fi
|
| fi
|
| for x in `echo "$PATH:/opt/gnome/bin" | sed 's/:/ /g'`; do
|
| @@ -466,67 +471,170 @@
|
|
|
| info_kde()
|
| {
|
| - if which "kmimetypefinder" > /dev/null 2>/dev/null; then
|
| + if [ x"$KDE_SESSION_VERSION" = x"4" ]; then
|
| DEBUG 1 "Running kmimetypefinder \"$1\""
|
| - kmimetypefinder "$1" 2>/dev/null | head -n 1
|
| + KMIMETYPEFINDER=`which kmimetypefinder 2>/dev/null`
|
| + $KMIMETYPEFINDER "$1" 2>/dev/null | head -n 1
|
| else
|
| DEBUG 1 "Running kfile \"$1\""
|
| - kfile "$1" 2> /dev/null | head -n 1 | cut -d "(" -f 2 | cut -d ")" -f 1
|
| + KFILE=`which kfile 2>/dev/null`
|
| + $KFILE "$1" 2> /dev/null | head -n 1 | cut -d "(" -f 2 | cut -d ")" -f 1
|
| fi
|
|
|
| - exit_success
|
| + if [ $? -eq 0 ]; then
|
| + exit_success
|
| + else
|
| + exit_failure_operation_failed
|
| + fi
|
| }
|
|
|
| info_gnome()
|
| {
|
| file=`readlink -f "$1"` # Normalize path
|
| - DEBUG 1 "Running gnomevfs-info \"$file\""
|
| - gnomevfs-info "$file" 2> /dev/null | grep MIME | cut -d ":" -f 2 | sed s/"^ "//
|
|
|
| - exit_success
|
| + if gvfs-info --help 2>/dev/null 1>&2; then
|
| + DEBUG 1 "Running gvfs-info \"$file\""
|
| + gvfs-info "$file" 2> /dev/null | grep standard::content-type | cut -d' ' -f4
|
| + else
|
| + DEBUG 1 "Running gnomevfs-info \"$file\""
|
| + gnomevfs-info --slow-mime "$file" 2> /dev/null | grep "^MIME" | cut -d ":" -f 2 | sed s/"^ "//
|
| + fi
|
| +
|
| + if [ $? -eq 0 ]; then
|
| + exit_success
|
| + else
|
| + exit_failure_operation_failed
|
| + fi
|
| }
|
|
|
| info_generic()
|
| {
|
| - DEBUG 1 "Running /usr/bin/file -i \"$1\""
|
| + DEBUG 1 "Running file -i \"$1\""
|
| /usr/bin/file -i "$1" 2> /dev/null | cut -d ":" -f 2 | sed s/"^ "//
|
|
|
| - exit_success
|
| + if [ $? -eq 0 ]; then
|
| + exit_success
|
| + else
|
| + exit_failure_operation_failed
|
| + fi
|
| }
|
|
|
| make_default_kde()
|
| {
|
| # $1 is vendor-name.desktop
|
| - # $2 is mime/type
|
| - # Add to $KDE_HOME/share/config/profilerc:
|
| + # $2 is mime/type
|
| + #
|
| + # On KDE 3, add to $KDE_CONFIG_PATH/profilerc:
|
| # [$2 - 1]
|
| # Application=$1
|
| #
|
| # Remove all [$2 - *] sections, or even better,
|
| # renumber [$2 - *] sections and remove duplicate
|
| -
|
| - default_file="$HOME/.kde/share/config/profilerc"
|
| - DEBUG 2 "make_default_kde $1 $2"
|
| + #
|
| + # On KDE 4, add $2=$1 to $XDG_DATA_APPS/mimeapps.list
|
| + #
|
| + # Example file:
|
| + #
|
| + # [Added Associations]
|
| + # text/plain=kde4-kate.desktop;kde4-kwrite.desktop;
|
| + #
|
| + # [Removed Associations]
|
| + # text/plain=gnome-gedit.desktop;gnu-emacs.desktop;
|
| + vendor="$1"
|
| + mimetype="$2"
|
| + if [ x"$KDE_SESSION_VERSION" = x"4" ]; then
|
| + default_dir=`kde4-config --path xdgdata-apps 2> /dev/null | cut -d ':' -f 1`
|
| + default_file="$default_dir/mimeapps.list"
|
| + else
|
| + default_dir=`kde-config --path config 2> /dev/null | cut -d ':' -f 1`
|
| + default_file="$default_dir/profilerc"
|
| + fi
|
| + if [ -z "$default_dir" ]; then
|
| + DEBUG 2 "make_default_kde: No kde runtime detected"
|
| + return
|
| + fi
|
| + DEBUG 2 "make_default_kde $vendor $mimetype"
|
| DEBUG 1 "Updating $default_file"
|
| - mkdir -p "$HOME/.kde/share/config"
|
| + mkdir -p "$default_dir"
|
| [ -f $default_file ] || touch $default_file
|
| - awk -v application="$1" -v mimetype="$2" '
|
| + if [ x"$KDE_SESSION_VERSION" = x"4" ]; then
|
| + [ -f $default_file ] || touch $default_file
|
| + awk -v application="$vendor" -v mimetype="$mimetype" '
|
| BEGIN {
|
| + prefix=mimetype "="
|
| + associations=0
|
| + found=0
|
| + blanks=0
|
| + }
|
| + {
|
| + suppress=0
|
| + if (index($0, "[Added Associations]") == 1) {
|
| + associations=1
|
| + } else if (index($0, "[") == 1) {
|
| + if (associations && !found) {
|
| + print prefix application
|
| + found=1
|
| + }
|
| + associations=0
|
| + } else if ($0 == "") {
|
| + blanks++
|
| + suppress=1
|
| + } else if (associations && index($0, prefix) == 1) {
|
| + value=substr($0, length(prefix) + 1, length)
|
| + split(value, apps, ";")
|
| + value=application ";"
|
| + count=0
|
| + for (i in apps) {
|
| + count++
|
| + }
|
| + for (i=0; i < count; i++) {
|
| + if (apps[i] != application && apps[i] != "") {
|
| + value=value apps[i] ";"
|
| + }
|
| + }
|
| + $0=prefix value
|
| + found=1
|
| + }
|
| + if (!suppress) {
|
| + while (blanks > 0) {
|
| + print ""
|
| + blanks--
|
| + }
|
| + print $0
|
| + }
|
| + }
|
| + END {
|
| + if (!found) {
|
| + if (!associations) {
|
| + print "[Added Associations]"
|
| + }
|
| + print prefix application
|
| + }
|
| + while (blanks > 0) {
|
| + print ""
|
| + blanks--
|
| + }
|
| + }
|
| +' $default_file > ${default_file}.new && mv ${default_file}.new $default_file
|
| + eval 'kbuildsycoca4'$xdg_redirect_output
|
| + else
|
| + awk -v application="$vendor" -v mimetype="$mimetype" '
|
| + BEGIN {
|
| header_start="[" mimetype " - "
|
| - supress=0
|
| + suppress=0
|
| }
|
| - {
|
| + {
|
| if (index($0, header_start) == 1 )
|
| - supress=1
|
| + suppress=1
|
| else
|
| - if (/^\[/) { supress=0 }
|
| + if (/^\[/) { suppress=0 }
|
|
|
| - if (!supress) {
|
| + if (!suppress) {
|
| print $0
|
| }
|
| }
|
| END {
|
| - print ""
|
| + print ""
|
| print "[" mimetype " - 1]"
|
| print "Application=" application
|
| print "AllowAsDefault=true"
|
| @@ -535,12 +643,13 @@
|
| print "ServiceType=" mimetype
|
| }
|
| ' $default_file > ${default_file}.new && mv ${default_file}.new $default_file
|
| + fi
|
| }
|
|
|
| make_default_generic()
|
| {
|
| # $1 is vendor-name.desktop
|
| - # $2 is mime/type
|
| + # $2 is mime/type
|
| # Add $2=$1 to XDG_DATA_HOME/applications/defaults.list
|
| xdg_user_dir="$XDG_DATA_HOME"
|
| [ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share"
|
| @@ -578,11 +687,17 @@
|
| defapp_kde()
|
| {
|
| MIME="$1"
|
| - ktradertest=`which ktradertest 2> /dev/null`
|
| - if [ -n "$ktradertest" ] ; then
|
| - DEBUG 1 "Running ktradertest \"$MIME\" Application"
|
| - trader_result=`ktradertest "$MIME" Application 2>/dev/null | grep DesktopEntryPath \
|
| - | head -n 1 | cut -d ':' -f 2 | cut -d \' -f 2`
|
| + if [ x"$KDE_SESSION_VERSION" = x"4" ]; then
|
| + KTRADER=`which ktraderclient 2> /dev/null`
|
| + MIMETYPE="--mimetype"
|
| + SERVICETYPE="--servicetype"
|
| + else
|
| + KTRADER=`which ktradertest 2> /dev/null`
|
| + fi
|
| + if [ -n "$KTRADER" ] ; then
|
| + DEBUG 1 "Running KDE trader query \"$MIME\" mimetype and \"Application\" servicetype"
|
| + trader_result=`$KTRADER $MIMETYPE "$MIME" $SERVICETYPE Application 2>/dev/null \
|
| + | grep DesktopEntryPath | head -n 1 | cut -d ':' -f 2 | cut -d \' -f 2`
|
| if [ -n "$trader_result" ] ; then
|
| basename "$trader_result"
|
| exit_success
|
| @@ -613,16 +728,16 @@
|
| query)
|
| shift
|
|
|
| - if [ -z "$1" ] ; then
|
| + if [ -z "$1" ] ; then
|
| exit_failure_syntax "query type argument missing"
|
| fi
|
| -
|
| +
|
| case $1 in
|
| filetype)
|
| action=info
|
|
|
| filename="$2"
|
| - if [ -z "$filename" ] ; then
|
| + if [ -z "$filename" ] ; then
|
| exit_failure_syntax "FILE argument missing"
|
| fi
|
| case $filename in
|
| @@ -636,7 +751,7 @@
|
| default)
|
| action=defapp
|
| mimetype="$2"
|
| - if [ -z "$mimetype" ] ; then
|
| + if [ -z "$mimetype" ] ; then
|
| exit_failure_syntax "mimetype argument missing"
|
| fi
|
| case $mimetype in
|
| @@ -664,7 +779,7 @@
|
| action=makedefault
|
| shift
|
|
|
| - if [ -z "$1" ] ; then
|
| + if [ -z "$1" ] ; then
|
| exit_failure_syntax "application argument missing"
|
| fi
|
| case $1 in
|
| @@ -691,7 +806,7 @@
|
|
|
|
|
| if [ "$action" = "makedefault" ]; then
|
| - if [ -z "$1" ] ; then
|
| + if [ -z "$1" ] ; then
|
| exit_failure_syntax "mimetype argument missing"
|
| fi
|
|
|
| @@ -703,7 +818,7 @@
|
| esac
|
| mimetype="$1"
|
| shift
|
| -
|
| +
|
| make_default_kde "$filename" "$mimetype"
|
| make_default_generic "$filename" "$mimetype"
|
| done
|
| @@ -768,7 +883,7 @@
|
| system)
|
| mode="system"
|
| ;;
|
| -
|
| +
|
| *)
|
| exit_failure_syntax "unknown mode '$1'"
|
| ;;
|
| @@ -899,14 +1014,14 @@
|
| mimetypes=`awk < "$filename" '
|
| # Strip XML comments
|
| BEGIN {
|
| - supress=0
|
| + suppress=0
|
| }
|
| {
|
| - do
|
| - if (supress) {
|
| + do
|
| + if (suppress) {
|
| if (match($0,/-->/)) {
|
| $0=substr($0,RSTART+RLENGTH)
|
| - supress=0
|
| + suppress=0
|
| }
|
| else {
|
| break
|
| @@ -916,7 +1031,7 @@
|
| if (match($0,/<!--/)) {
|
| if (RSTART>1) print substr($0,0,RSTART)
|
| $0=substr($0,RSTART+RLENGTH)
|
| - supress=1
|
| + suppress=1
|
| }
|
| else {
|
| if ($0) print $0
|
| @@ -937,7 +1052,7 @@
|
| }
|
| }
|
| }'`
|
| -fi
|
| +fi
|
|
|
| DEBUG 1 "$action mimetype in $xdg_dir"
|
|
|
| @@ -953,20 +1068,20 @@
|
|
|
| if [ -n "$mimetypes" ] ; then
|
| # No quotes around $mimetypes
|
| - for x in $mimetypes ; do
|
| + for x in $mimetypes ; do
|
| DEBUG 1 "Installing $kde_dir/$x.desktop (KDE 3.x support)"
|
| mkdir -p `dirname $kde_dir/$x.desktop`
|
| awk < "$filename" '
|
| # Strip XML comments
|
| BEGIN {
|
| - supress=0
|
| + suppress=0
|
| }
|
| {
|
| - do
|
| - if (supress) {
|
| + do
|
| + if (suppress) {
|
| if (match($0,/-->/)) {
|
| $0=substr($0,RSTART+RLENGTH)
|
| - supress=0
|
| + suppress=0
|
| }
|
| else {
|
| break
|
| @@ -976,7 +1091,7 @@
|
| if (match($0,/<!--/)) {
|
| if (RSTART>1) print substr($0,0,RSTART)
|
| $0=substr($0,RSTART+RLENGTH)
|
| - supress=1
|
| + suppress=1
|
| }
|
| else {
|
| if ($0) print $0
|
| @@ -987,7 +1102,7 @@
|
| }
|
| ' | awk > $kde_dir/$x.desktop '
|
| # Extract mimetype $x from the XML file $filename
|
| -# Note that bash requires us to escape a single quote as '"'"'
|
| +# Note that bash requires us to escape a single quote as '"'"'
|
| BEGIN {
|
| the_type=ARGV[1]
|
| the_source=ARGV[2]
|
| @@ -1007,7 +1122,7 @@
|
| print "MimeType=" the_type
|
| the_icon=the_type
|
| sub("/", "-", the_icon)
|
| - print "Icon=" the_icon
|
| + print "Icon=" the_icon
|
| }
|
| }
|
| }
|
| @@ -1019,25 +1134,25 @@
|
| }
|
|
|
| if (match($0,/^sub-class-of/)) {
|
| - if (match($0,/type="[^"]*/) || match($0,/type='"'"'[^'"'"']*/)) {
|
| + if (match($0,/type="[^"]*/) || match($0,/type='"'"'[^'"'"']*/)) {
|
| print "X-KDE-IsAlso=" substr($0,RSTART+6,RLENGTH-6)
|
| }
|
| else {
|
| print "Error: '"'"'type'"'"' argument missing in " RS $0
|
| - exit 1
|
| + exit 1
|
| }
|
| }
|
| if (match($0,/^glob/)) {
|
| - if (match($0,/pattern="[^"]*/) || match($0,/pattern='"'"'[^'"'"']*/)) {
|
| + if (match($0,/pattern="[^"]*/) || match($0,/pattern='"'"'[^'"'"']*/)) {
|
| glob_patterns = glob_patterns substr($0,RSTART+9,RLENGTH-9) ";"
|
| }
|
| else {
|
| print "Error: '"'"'pattern'"'"' argument missing in " RS $0
|
| - exit 1
|
| + exit 1
|
| }
|
| }
|
| if (match($0,/^comment/)) {
|
| - if (match($0,/xml:lang="[^"]*/) || match($0,/xml:lang='"'"'[^'"'"']*/)) {
|
| + if (match($0,/xml:lang="[^"]*/) || match($0,/xml:lang='"'"'[^'"'"']*/)) {
|
| lang=substr($0,RSTART+10,RLENGTH-10)
|
| }
|
| else {
|
| @@ -1066,7 +1181,7 @@
|
| if [ "$?" = "1" ] ; then
|
| grep -A 10 "^Error:" $kde_dir/$x.desktop >&2
|
| rm $kde_dir/$x.desktop
|
| - exit 1
|
| + exit 1
|
| fi
|
| done
|
| fi
|
| @@ -1080,7 +1195,7 @@
|
| done
|
|
|
| # No quotes around $mimetypes
|
| - for x in $mimetypes ; do
|
| + for x in $mimetypes ; do
|
| if grep '^# Installed by xdg-mime' $kde_dir/$x.desktop >/dev/null 2>&1; then
|
| DEBUG 1 "Removing $kde_dir/$x.desktop (KDE 3.x support)"
|
| rm -f $kde_dir/$x.desktop
|
|
|