Index: xdg-utils/scripts/xdg-email =================================================================== RCS file: /cvs/portland/portland/xdg-utils/scripts/xdg-email,v retrieving revision 1.37 retrieving revision 1.39 diff -u -p -r1.37 -r1.39 --- xdg-utils/scripts/xdg-email 24 Jan 2008 20:24:50 -0000 1.37 +++ xdg-utils/scripts/xdg-email 27 Jul 2009 15:44:14 -0000 1.39 @@ -367,7 +367,7 @@ detectDE() kfmclient_fix_exit_code() { - version=`kde-config --version 2>/dev/null | grep KDE` + version=`kde${KDE_SESSION_VERSION}-config --version 2>/dev/null | grep KDE` major=`echo $version | sed 's/KDE: \([0-9]\).*/\1/'` minor=`echo $version | sed 's/KDE: [0-9]*\.\([0-9]\).*/\1/'` release=`echo $version | sed 's/KDE: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'` @@ -393,8 +393,13 @@ open_kde() fi fi DEBUG 1 "Running kmailservice \"$1\"" + if [ x"$KDE_SESSION_VERSION" = x"4" ]; then + KMAILSERVICE=`kde4-config --locate kmailservice --path exe 2>/dev/null` + else + KMAILSERVICE=`which kmailservice 2>/dev/null` + fi # KDE uses locale's encoding when decoding the URI, so set it to UTF-8 - LC_ALL=C.UTF-8 kmailservice "$1" + LC_ALL=C.UTF-8 $KMAILSERVICE "$1" kfmclient_fix_exit_code $? if [ $? -eq 0 ]; then Index: xdg-utils/scripts/xdg-mime =================================================================== RCS file: /cvs/portland/portland/xdg-utils/scripts/xdg-mime,v retrieving revision 1.46 retrieving revision 1.56 diff -u -p -r1.46 -r1.56 --- xdg-utils/scripts/xdg-mime 4 Nov 2006 06:23:49 -0000 1.46 +++ xdg-utils/scripts/xdg-mime 31 Jul 2009 06:42:46 -0000 1.56 @@ -436,7 +436,7 @@ detectDE() kfmclient_fix_exit_code() { - version=`kde-config --version 2>/dev/null | grep KDE` + version=`kde${KDE_SESSION_VERSION}-config --version 2>/dev/null | grep KDE` major=`echo $version | sed 's/KDE: \([0-9]\).*/\1/'` minor=`echo $version | sed 's/KDE: [0-9]*\.\([0-9]\).*/\1/'` release=`echo $version | sed 's/KDE: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'` @@ -452,7 +452,11 @@ update_mime_database() 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,8 +470,15 @@ update_mime_database() info_kde() { - DEBUG 1 "Running kfile \"$1\"" - kfile "$1" 2> /dev/null | head -n 1 | cut -d "(" -f 2 | cut -d ")" -f 1 + if [ x"$KDE_SESSION_VERSION" = x"4" ]; then + DEBUG 1 "Running kmimetypefinder \"$1\"" + KMIMETYPEFINDER=`which kmimetypefinder 2>/dev/null` + $KMIMETYPEFINDER "$1" 2>/dev/null | head -n 1 + else + DEBUG 1 "Running kfile \"$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 } @@ -483,7 +494,7 @@ info_gnome() 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 @@ -492,25 +503,47 @@ info_generic() 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 | cut -d ':' -f 1` + default_file="$default_dir/mimeapps.list" + else + default_dir=`kde-config --path config | cut -d ':' -f 1` + default_file="$default_dir/profilerc" + 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 + # FIXME update the required section "[Added Associations]" + DEBUG 1 "NOT IMPLEMENTED YET" + else + awk -v application="$vendor" -v mimetype="$mimetype" ' BEGIN { header_start="[" mimetype " - " supress=0 } - { + { if (index($0, header_start) == 1 ) supress=1 else @@ -521,7 +554,7 @@ make_default_kde() } } END { - print "" + print "" print "[" mimetype " - 1]" print "Application=" application print "AllowAsDefault=true" @@ -530,18 +563,21 @@ make_default_kde() 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" default_file="$xdg_user_dir/applications/defaults.list" DEBUG 2 "make_default_generic $1 $2" DEBUG 1 "Updating $default_file" + mkdir -p "$xdg_user_dir/applications" + [ -f $default_file ] || touch $default_file grep -v "$2=" $default_file > ${default_file}.new 2> /dev/null if ! grep "[Default Applications]" ${default_file}.new > /dev/null; then echo "[Default Applications]" >> ${default_file}.new @@ -573,11 +609,17 @@ defapp_generic() 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 @@ -608,16 +650,16 @@ case $1 in 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 @@ -631,7 +673,7 @@ case $1 in default) action=defapp mimetype="$2" - if [ -z "$mimetype" ] ; then + if [ -z "$mimetype" ] ; then exit_failure_syntax "mimetype argument missing" fi case $mimetype in @@ -659,7 +701,7 @@ case $1 in action=makedefault shift - if [ -z "$1" ] ; then + if [ -z "$1" ] ; then exit_failure_syntax "application argument missing" fi case $1 in @@ -686,7 +728,7 @@ shift if [ "$action" = "makedefault" ]; then - if [ -z "$1" ] ; then + if [ -z "$1" ] ; then exit_failure_syntax "mimetype argument missing" fi @@ -698,7 +740,7 @@ if [ "$action" = "makedefault" ]; then esac mimetype="$1" shift - + make_default_kde "$filename" "$mimetype" make_default_generic "$filename" "$mimetype" done @@ -723,7 +765,7 @@ if [ "$action" = "info" ]; then info_gnome "$filename" ;; - generic) + *) info_generic "$filename" ;; esac @@ -763,7 +805,7 @@ while [ $# -gt 0 ] ; do system) mode="system" ;; - + *) exit_failure_syntax "unknown mode '$1'" ;; @@ -842,7 +884,7 @@ DEBUG 3 "xdg_global_dir: $xdg_global_dir # Find KDE3 mimelnk directory kde_user_dir= kde_global_dir= -kde_global_dirs=`kde-config --path mime 2> /dev/null` +kde_global_dirs=`kde${KDE_SESSION_VERSION}-config --path mime 2> /dev/null` DEBUG 3 "kde_global_dirs: $kde_global_dirs" first= for x in `echo $kde_global_dirs | sed 's/:/ /g'` ; do @@ -897,7 +939,7 @@ BEGIN { supress=0 } { - do + do if (supress) { if (match($0,/-->/)) { $0=substr($0,RSTART+RLENGTH) @@ -932,7 +974,7 @@ BEGIN { } } }'` -fi +fi DEBUG 1 "$action mimetype in $xdg_dir" @@ -948,7 +990,7 @@ case $action in 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" ' @@ -957,7 +999,7 @@ BEGIN { supress=0 } { - do + do if (supress) { if (match($0,/-->/)) { $0=substr($0,RSTART+RLENGTH) @@ -982,7 +1024,7 @@ BEGIN { } ' | 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] @@ -1002,7 +1044,7 @@ BEGIN { print "MimeType=" the_type the_icon=the_type sub("/", "-", the_icon) - print "Icon=" the_icon + print "Icon=" the_icon } } } @@ -1014,25 +1056,25 @@ BEGIN { } 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 { @@ -1061,7 +1103,7 @@ END { if [ "$?" = "1" ] ; then grep -A 10 "^Error:" $kde_dir/$x.desktop >&2 rm $kde_dir/$x.desktop - exit 1 + exit 1 fi done fi @@ -1075,8 +1117,8 @@ END { done # No quotes around $mimetypes - for x in $mimetypes ; do - if grep '^# Installed by xdg-mime' $kde_dir/$x.desktop &>/dev/null ; then + 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 fi