Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Unified Diff: third_party/xdg-utils/scripts/xdg-mime.in

Issue 3273010: Update our copy of xdg-utils to 2010-08-30, and include a patched xdg-mime. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/
Patch Set: Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/xdg-utils/scripts/xdg-mime ('k') | third_party/xdg-utils/scripts/xdg-open » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/xdg-utils/scripts/xdg-mime.in
===================================================================
--- third_party/xdg-utils/scripts/xdg-mime.in (revision 57942)
+++ third_party/xdg-utils/scripts/xdg-mime.in (working copy)
@@ -34,7 +34,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
@@ -48,67 +52,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"
@@ -117,12 +224,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"
@@ -160,11 +268,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
@@ -195,16 +309,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
@@ -218,7 +332,7 @@
default)
action=defapp
mimetype="$2"
- if [ -z "$mimetype" ] ; then
+ if [ -z "$mimetype" ] ; then
exit_failure_syntax "mimetype argument missing"
fi
case $mimetype in
@@ -246,7 +360,7 @@
action=makedefault
shift
- if [ -z "$1" ] ; then
+ if [ -z "$1" ] ; then
exit_failure_syntax "application argument missing"
fi
case $1 in
@@ -273,7 +387,7 @@
if [ "$action" = "makedefault" ]; then
- if [ -z "$1" ] ; then
+ if [ -z "$1" ] ; then
exit_failure_syntax "mimetype argument missing"
fi
@@ -285,7 +399,7 @@
esac
mimetype="$1"
shift
-
+
make_default_kde "$filename" "$mimetype"
make_default_generic "$filename" "$mimetype"
done
@@ -350,7 +464,7 @@
system)
mode="system"
;;
-
+
*)
exit_failure_syntax "unknown mode '$1'"
;;
@@ -481,14 +595,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
@@ -498,7 +612,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
@@ -519,7 +633,7 @@
}
}
}'`
-fi
+fi
DEBUG 1 "$action mimetype in $xdg_dir"
@@ -535,20 +649,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
@@ -558,7 +672,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
@@ -569,7 +683,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]
@@ -589,7 +703,7 @@
print "MimeType=" the_type
the_icon=the_type
sub("/", "-", the_icon)
- print "Icon=" the_icon
+ print "Icon=" the_icon
}
}
}
@@ -601,25 +715,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 {
@@ -648,7 +762,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
@@ -662,7 +776,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
« no previous file with comments | « third_party/xdg-utils/scripts/xdg-mime ('k') | third_party/xdg-utils/scripts/xdg-open » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698