| OLD | NEW |
| 1 #!/bin/sh | 1 #!/bin/sh |
| 2 #--------------------------------------------- | 2 #--------------------------------------------- |
| 3 # xdg-mime | 3 # xdg-mime |
| 4 # | 4 # |
| 5 # Utility script to manipulate MIME related information | 5 # Utility script to manipulate MIME related information |
| 6 # on XDG compliant systems. | 6 # on XDG compliant systems. |
| 7 # | 7 # |
| 8 # Refer to the usage() function below for usage. | 8 # Refer to the usage() function below for usage. |
| 9 # | 9 # |
| 10 # Copyright 2006, Kevin Krammer <kevin.krammer@gmx.at> | 10 # Copyright 2006, Kevin Krammer <kevin.krammer@gmx.at> |
| (...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 315 exit_failure_file_permission_read() | 315 exit_failure_file_permission_read() |
| 316 { | 316 { |
| 317 if [ $# -gt 0 ]; then | 317 if [ $# -gt 0 ]; then |
| 318 echo "xdg-mime: $@" >&2 | 318 echo "xdg-mime: $@" >&2 |
| 319 fi | 319 fi |
| 320 | 320 |
| 321 exit 5 | 321 exit 5 |
| 322 } | 322 } |
| 323 | 323 |
| 324 #------------------------------------------------------------ | 324 #------------------------------------------------------------ |
| 325 # Exit script on insufficient permission to read a specified file | 325 # Exit script on insufficient permission to write a specified file |
| 326 | 326 |
| 327 exit_failure_file_permission_write() | 327 exit_failure_file_permission_write() |
| 328 { | 328 { |
| 329 if [ $# -gt 0 ]; then | 329 if [ $# -gt 0 ]; then |
| 330 echo "xdg-mime: $@" >&2 | 330 echo "xdg-mime: $@" >&2 |
| 331 fi | 331 fi |
| 332 | 332 |
| 333 exit 6 | 333 exit 6 |
| 334 } | 334 } |
| 335 | 335 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 392 echo "Use 'man xdg-mime' or 'xdg-mime --manual' for additional info.
" | 392 echo "Use 'man xdg-mime' or 'xdg-mime --manual' for additional info.
" |
| 393 exit_success | 393 exit_success |
| 394 ;; | 394 ;; |
| 395 | 395 |
| 396 --manual) | 396 --manual) |
| 397 manualpage | 397 manualpage |
| 398 exit_success | 398 exit_success |
| 399 ;; | 399 ;; |
| 400 | 400 |
| 401 --version) | 401 --version) |
| 402 echo "xdg-mime 1.0.1" | 402 echo "xdg-mime 1.0.2" |
| 403 exit_success | 403 exit_success |
| 404 ;; | 404 ;; |
| 405 esac | 405 esac |
| 406 done | 406 done |
| 407 } | 407 } |
| 408 | 408 |
| 409 check_common_commands "$@" | 409 check_common_commands "$@" |
| 410 | 410 |
| 411 [ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && unset XDG_UTILS_DEBUG_LEVEL; | 411 [ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && unset XDG_UTILS_DEBUG_LEVEL; |
| 412 if [ ${XDG_UTILS_DEBUG_LEVEL-0} -lt 1 ]; then | 412 if [ ${XDG_UTILS_DEBUG_LEVEL-0} -lt 1 ]; then |
| 413 # Be silent | 413 # Be silent |
| 414 xdg_redirect_output=" > /dev/null 2> /dev/null" | 414 xdg_redirect_output=" > /dev/null 2> /dev/null" |
| 415 else | 415 else |
| 416 # All output to stderr | 416 # All output to stderr |
| 417 xdg_redirect_output=" >&2" | 417 xdg_redirect_output=" >&2" |
| 418 fi | 418 fi |
| 419 | 419 |
| 420 #-------------------------------------- | 420 #-------------------------------------- |
| 421 # Checks for known desktop environments | 421 # Checks for known desktop environments |
| 422 # set variable DE to the desktop environments name, lowercase | 422 # set variable DE to the desktop environments name, lowercase |
| 423 | 423 |
| 424 detectDE() | 424 detectDE() |
| 425 { | 425 { |
| 426 if [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde; | 426 if [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde; |
| 427 elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome; | 427 elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome; |
| 428 elif xprop -root _DT_SAVE_MODE | grep ' = \"xfce4\"$' >/dev/null 2>&1; then
DE=xfce; | 428 elif `dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/D
Bus org.freedesktop.DBus.GetNameOwner string:org.gnome.SessionManager > /dev/nul
l 2>&1` ; then DE=gnome; |
| 429 elif xprop -root _DT_SAVE_MODE 2> /dev/null | grep ' = \"xfce4\"$' >/dev/nul
l 2>&1; then DE=xfce; |
| 429 fi | 430 fi |
| 430 } | 431 } |
| 431 | 432 |
| 432 #---------------------------------------------------------------------------- | 433 #---------------------------------------------------------------------------- |
| 433 # kfmclient exec/openURL can give bogus exit value in KDE <= 3.5.4 | 434 # kfmclient exec/openURL can give bogus exit value in KDE <= 3.5.4 |
| 434 # It also always returns 1 in KDE 3.4 and earlier | 435 # It also always returns 1 in KDE 3.4 and earlier |
| 435 # Simply return 0 in such case | 436 # Simply return 0 in such case |
| 436 | 437 |
| 437 kfmclient_fix_exit_code() | 438 kfmclient_fix_exit_code() |
| 438 { | 439 { |
| 439 version=`kde${KDE_SESSION_VERSION}-config --version 2>/dev/null | grep KDE` | 440 version=`kde${KDE_SESSION_VERSION}-config --version 2>/dev/null | grep KDE` |
| 440 major=`echo $version | sed 's/KDE: \([0-9]\).*/\1/'` | 441 major=`echo $version | sed 's/KDE: \([0-9]\).*/\1/'` |
| 441 minor=`echo $version | sed 's/KDE: [0-9]*\.\([0-9]\).*/\1/'` | 442 minor=`echo $version | sed 's/KDE: [0-9]*\.\([0-9]\).*/\1/'` |
| 442 release=`echo $version | sed 's/KDE: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'` | 443 release=`echo $version | sed 's/KDE: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'` |
| 443 test "$major" -gt 3 && return $1 | 444 test "$major" -gt 3 && return $1 |
| 444 test "$minor" -gt 5 && return $1 | 445 test "$minor" -gt 5 && return $1 |
| 445 test "$release" -gt 4 && return $1 | 446 test "$release" -gt 4 && return $1 |
| 446 return 0 | 447 return 0 |
| 447 } | 448 } |
| 448 | 449 |
| 449 update_mime_database() | 450 update_mime_database() |
| 450 { | 451 { |
| 451 if [ x"$mode" = x"user" -a -n "$DISPLAY" ] ; then | 452 if [ x"$mode" = x"user" -a -n "$DISPLAY" ] ; then |
| 452 detectDE | 453 detectDE |
| 453 if [ x"$DE" = x"kde" ] ; then | 454 if [ x"$DE" = x"kde" ] ; then |
| 454 DEBUG 1 "Running kbuildsycoca" | 455 DEBUG 1 "Running kbuildsycoca" |
| 455 eval 'kbuildsycoca'$xdg_redirect_output | 456 if [ x"$KDE_SESSION_VERSION" = x"4" ]; then |
| 457 eval 'kbuildsycoca4'$xdg_redirect_output |
| 458 else |
| 459 eval 'kbuildsycoca'$xdg_redirect_output |
| 460 fi |
| 456 fi | 461 fi |
| 457 fi | 462 fi |
| 458 for x in `echo "$PATH:/opt/gnome/bin" | sed 's/:/ /g'`; do | 463 for x in `echo "$PATH:/opt/gnome/bin" | sed 's/:/ /g'`; do |
| 459 if [ -x $x/update-mime-database ] ; then | 464 if [ -x $x/update-mime-database ] ; then |
| 460 DEBUG 1 "Running $x/update-mime-database $1" | 465 DEBUG 1 "Running $x/update-mime-database $1" |
| 461 eval '$x/update-mime-database $1'$xdg_redirect_output | 466 eval '$x/update-mime-database $1'$xdg_redirect_output |
| 462 return | 467 return |
| 463 fi | 468 fi |
| 464 done | 469 done |
| 465 } | 470 } |
| 466 | 471 |
| 467 info_kde() | 472 info_kde() |
| 468 { | 473 { |
| 469 if which "kmimetypefinder" > /dev/null 2>/dev/null; then | 474 if [ x"$KDE_SESSION_VERSION" = x"4" ]; then |
| 470 DEBUG 1 "Running kmimetypefinder \"$1\"" | 475 DEBUG 1 "Running kmimetypefinder \"$1\"" |
| 471 kmimetypefinder "$1" 2>/dev/null | head -n 1 | 476 KMIMETYPEFINDER=`which kmimetypefinder 2>/dev/null` |
| 477 $KMIMETYPEFINDER "$1" 2>/dev/null | head -n 1 |
| 472 else | 478 else |
| 473 DEBUG 1 "Running kfile \"$1\"" | 479 DEBUG 1 "Running kfile \"$1\"" |
| 474 kfile "$1" 2> /dev/null | head -n 1 | cut -d "(" -f 2 | cut -d ")" -f 1 | 480 KFILE=`which kfile 2>/dev/null` |
| 481 $KFILE "$1" 2> /dev/null | head -n 1 | cut -d "(" -f 2 | cut -d ")" -f 1 |
| 475 fi | 482 fi |
| 476 | 483 |
| 477 exit_success | 484 if [ $? -eq 0 ]; then |
| 485 exit_success |
| 486 else |
| 487 exit_failure_operation_failed |
| 488 fi |
| 478 } | 489 } |
| 479 | 490 |
| 480 info_gnome() | 491 info_gnome() |
| 481 { | 492 { |
| 482 file=`readlink -f "$1"` # Normalize path | 493 file=`readlink -f "$1"` # Normalize path |
| 483 DEBUG 1 "Running gnomevfs-info \"$file\"" | |
| 484 gnomevfs-info "$file" 2> /dev/null | grep MIME | cut -d ":" -f 2 | sed s/"^
"// | |
| 485 | 494 |
| 486 exit_success | 495 if gvfs-info --help 2>/dev/null 1>&2; then |
| 496 DEBUG 1 "Running gvfs-info \"$file\"" |
| 497 gvfs-info "$file" 2> /dev/null | grep standard::content-type | cut -d' '
-f4 |
| 498 else |
| 499 DEBUG 1 "Running gnomevfs-info \"$file\"" |
| 500 gnomevfs-info --slow-mime "$file" 2> /dev/null | grep "^MIME" | cut -d ":
" -f 2 | sed s/"^ "// |
| 501 fi |
| 502 |
| 503 if [ $? -eq 0 ]; then |
| 504 exit_success |
| 505 else |
| 506 exit_failure_operation_failed |
| 507 fi |
| 487 } | 508 } |
| 488 | 509 |
| 489 info_generic() | 510 info_generic() |
| 490 { | 511 { |
| 491 DEBUG 1 "Running /usr/bin/file -i \"$1\"" | 512 DEBUG 1 "Running file -i \"$1\"" |
| 492 /usr/bin/file -i "$1" 2> /dev/null | cut -d ":" -f 2 | sed s/"^ "// | 513 /usr/bin/file -i "$1" 2> /dev/null | cut -d ":" -f 2 | sed s/"^ "// |
| 493 | 514 |
| 494 exit_success | 515 if [ $? -eq 0 ]; then |
| 516 exit_success |
| 517 else |
| 518 exit_failure_operation_failed |
| 519 fi |
| 495 } | 520 } |
| 496 | 521 |
| 497 make_default_kde() | 522 make_default_kde() |
| 498 { | 523 { |
| 499 # $1 is vendor-name.desktop | 524 # $1 is vendor-name.desktop |
| 500 # $2 is mime/type | 525 # $2 is mime/type |
| 501 # Add to $KDE_HOME/share/config/profilerc: | 526 # |
| 527 # On KDE 3, add to $KDE_CONFIG_PATH/profilerc: |
| 502 # [$2 - 1] | 528 # [$2 - 1] |
| 503 # Application=$1 | 529 # Application=$1 |
| 504 # | 530 # |
| 505 # Remove all [$2 - *] sections, or even better, | 531 # Remove all [$2 - *] sections, or even better, |
| 506 # renumber [$2 - *] sections and remove duplicate | 532 # renumber [$2 - *] sections and remove duplicate |
| 507 | 533 # |
| 508 default_file="$HOME/.kde/share/config/profilerc" | 534 # On KDE 4, add $2=$1 to $XDG_DATA_APPS/mimeapps.list |
| 509 DEBUG 2 "make_default_kde $1 $2" | 535 # |
| 536 # Example file: |
| 537 # |
| 538 # [Added Associations] |
| 539 # text/plain=kde4-kate.desktop;kde4-kwrite.desktop; |
| 540 # |
| 541 # [Removed Associations] |
| 542 # text/plain=gnome-gedit.desktop;gnu-emacs.desktop; |
| 543 vendor="$1" |
| 544 mimetype="$2" |
| 545 if [ x"$KDE_SESSION_VERSION" = x"4" ]; then |
| 546 default_dir=`kde4-config --path xdgdata-apps 2> /dev/null | cut -d ':' -
f 1` |
| 547 default_file="$default_dir/mimeapps.list" |
| 548 else |
| 549 default_dir=`kde-config --path config 2> /dev/null | cut -d ':' -f 1` |
| 550 default_file="$default_dir/profilerc" |
| 551 fi |
| 552 if [ -z "$default_dir" ]; then |
| 553 DEBUG 2 "make_default_kde: No kde runtime detected" |
| 554 return |
| 555 fi |
| 556 DEBUG 2 "make_default_kde $vendor $mimetype" |
| 510 DEBUG 1 "Updating $default_file" | 557 DEBUG 1 "Updating $default_file" |
| 511 mkdir -p "$HOME/.kde/share/config" | 558 mkdir -p "$default_dir" |
| 512 [ -f $default_file ] || touch $default_file | 559 [ -f $default_file ] || touch $default_file |
| 513 awk -v application="$1" -v mimetype="$2" ' | 560 if [ x"$KDE_SESSION_VERSION" = x"4" ]; then |
| 561 [ -f $default_file ] || touch $default_file |
| 562 awk -v application="$vendor" -v mimetype="$mimetype" ' |
| 514 BEGIN { | 563 BEGIN { |
| 515 header_start="[" mimetype " - " | 564 prefix=mimetype "=" |
| 516 supress=0 | 565 associations=0 |
| 566 found=0 |
| 567 blanks=0 |
| 517 } | 568 } |
| 518 { | 569 { |
| 519 if (index($0, header_start) == 1 ) | 570 suppress=0 |
| 520 supress=1 | 571 if (index($0, "[Added Associations]") == 1) { |
| 521 else | 572 associations=1 |
| 522 if (/^\[/) { supress=0 } | 573 } else if (index($0, "[") == 1) { |
| 523 | 574 if (associations && !found) { |
| 524 if (!supress) { | 575 print prefix application |
| 576 found=1 |
| 577 } |
| 578 associations=0 |
| 579 } else if ($0 == "") { |
| 580 blanks++ |
| 581 suppress=1 |
| 582 } else if (associations && index($0, prefix) == 1) { |
| 583 value=substr($0, length(prefix) + 1, length) |
| 584 split(value, apps, ";") |
| 585 value=application ";" |
| 586 count=0 |
| 587 for (i in apps) { |
| 588 count++ |
| 589 } |
| 590 for (i=0; i < count; i++) { |
| 591 if (apps[i] != application && apps[i] != "") { |
| 592 value=value apps[i] ";" |
| 593 } |
| 594 } |
| 595 $0=prefix value |
| 596 found=1 |
| 597 } |
| 598 if (!suppress) { |
| 599 while (blanks > 0) { |
| 600 print "" |
| 601 blanks-- |
| 602 } |
| 525 print $0 | 603 print $0 |
| 526 } | 604 } |
| 527 } | 605 } |
| 528 END { | 606 END { |
| 529 print "" | 607 if (!found) { |
| 608 if (!associations) { |
| 609 print "[Added Associations]" |
| 610 } |
| 611 print prefix application |
| 612 } |
| 613 while (blanks > 0) { |
| 614 print "" |
| 615 blanks-- |
| 616 } |
| 617 } |
| 618 ' $default_file > ${default_file}.new && mv ${default_file}.new $default_file |
| 619 eval 'kbuildsycoca4'$xdg_redirect_output |
| 620 else |
| 621 awk -v application="$vendor" -v mimetype="$mimetype" ' |
| 622 BEGIN { |
| 623 header_start="[" mimetype " - " |
| 624 suppress=0 |
| 625 } |
| 626 { |
| 627 if (index($0, header_start) == 1 ) |
| 628 suppress=1 |
| 629 else |
| 630 if (/^\[/) { suppress=0 } |
| 631 |
| 632 if (!suppress) { |
| 633 print $0 |
| 634 } |
| 635 } |
| 636 END { |
| 637 print "" |
| 530 print "[" mimetype " - 1]" | 638 print "[" mimetype " - 1]" |
| 531 print "Application=" application | 639 print "Application=" application |
| 532 print "AllowAsDefault=true" | 640 print "AllowAsDefault=true" |
| 533 print "GenericServiceType=Application" | 641 print "GenericServiceType=Application" |
| 534 print "Preference=1" | 642 print "Preference=1" |
| 535 print "ServiceType=" mimetype | 643 print "ServiceType=" mimetype |
| 536 } | 644 } |
| 537 ' $default_file > ${default_file}.new && mv ${default_file}.new $default_file | 645 ' $default_file > ${default_file}.new && mv ${default_file}.new $default_file |
| 646 fi |
| 538 } | 647 } |
| 539 | 648 |
| 540 make_default_generic() | 649 make_default_generic() |
| 541 { | 650 { |
| 542 # $1 is vendor-name.desktop | 651 # $1 is vendor-name.desktop |
| 543 # $2 is mime/type | 652 # $2 is mime/type |
| 544 # Add $2=$1 to XDG_DATA_HOME/applications/defaults.list | 653 # Add $2=$1 to XDG_DATA_HOME/applications/defaults.list |
| 545 xdg_user_dir="$XDG_DATA_HOME" | 654 xdg_user_dir="$XDG_DATA_HOME" |
| 546 [ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share" | 655 [ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share" |
| 547 default_file="$xdg_user_dir/applications/defaults.list" | 656 default_file="$xdg_user_dir/applications/defaults.list" |
| 548 DEBUG 2 "make_default_generic $1 $2" | 657 DEBUG 2 "make_default_generic $1 $2" |
| 549 DEBUG 1 "Updating $default_file" | 658 DEBUG 1 "Updating $default_file" |
| 550 grep -v "$2=" $default_file > ${default_file}.new 2> /dev/null | 659 grep -v "$2=" $default_file > ${default_file}.new 2> /dev/null |
| 551 if ! grep "[Default Applications]" ${default_file}.new > /dev/null; then | 660 if ! grep "[Default Applications]" ${default_file}.new > /dev/null; then |
| 552 echo "[Default Applications]" >> ${default_file}.new | 661 echo "[Default Applications]" >> ${default_file}.new |
| 553 fi | 662 fi |
| (...skipping 17 matching lines...) Expand all Loading... |
| 571 echo $trader_result | 680 echo $trader_result |
| 572 exit_success | 681 exit_success |
| 573 fi | 682 fi |
| 574 done | 683 done |
| 575 exit_success | 684 exit_success |
| 576 } | 685 } |
| 577 | 686 |
| 578 defapp_kde() | 687 defapp_kde() |
| 579 { | 688 { |
| 580 MIME="$1" | 689 MIME="$1" |
| 581 ktradertest=`which ktradertest 2> /dev/null` | 690 if [ x"$KDE_SESSION_VERSION" = x"4" ]; then |
| 582 if [ -n "$ktradertest" ] ; then | 691 KTRADER=`which ktraderclient 2> /dev/null` |
| 583 DEBUG 1 "Running ktradertest \"$MIME\" Application" | 692 MIMETYPE="--mimetype" |
| 584 trader_result=`ktradertest "$MIME" Application 2>/dev/null | grep Deskto
pEntryPath \ | 693 SERVICETYPE="--servicetype" |
| 585 | head -n 1 | cut -d ':' -f 2 | cut -d \' -f 2` | 694 else |
| 695 KTRADER=`which ktradertest 2> /dev/null` |
| 696 fi |
| 697 if [ -n "$KTRADER" ] ; then |
| 698 DEBUG 1 "Running KDE trader query \"$MIME\" mimetype and \"Application\"
servicetype" |
| 699 trader_result=`$KTRADER $MIMETYPE "$MIME" $SERVICETYPE Application 2>/de
v/null \ |
| 700 | grep DesktopEntryPath | head -n 1 | cut -d ':' -f 2 | cut -d \' -f
2` |
| 586 if [ -n "$trader_result" ] ; then | 701 if [ -n "$trader_result" ] ; then |
| 587 basename "$trader_result" | 702 basename "$trader_result" |
| 588 exit_success | 703 exit_success |
| 589 else | 704 else |
| 590 exit_failure_operation_failed | 705 exit_failure_operation_failed |
| 591 fi | 706 fi |
| 592 else | 707 else |
| 593 defapp_generic "$1" | 708 defapp_generic "$1" |
| 594 fi | 709 fi |
| 595 } | 710 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 606 action=install | 721 action=install |
| 607 ;; | 722 ;; |
| 608 | 723 |
| 609 uninstall) | 724 uninstall) |
| 610 action=uninstall | 725 action=uninstall |
| 611 ;; | 726 ;; |
| 612 | 727 |
| 613 query) | 728 query) |
| 614 shift | 729 shift |
| 615 | 730 |
| 616 if [ -z "$1" ] ; then | 731 if [ -z "$1" ] ; then |
| 617 exit_failure_syntax "query type argument missing" | 732 exit_failure_syntax "query type argument missing" |
| 618 fi | 733 fi |
| 619 | 734 |
| 620 case $1 in | 735 case $1 in |
| 621 filetype) | 736 filetype) |
| 622 action=info | 737 action=info |
| 623 | 738 |
| 624 filename="$2" | 739 filename="$2" |
| 625 if [ -z "$filename" ] ; then | 740 if [ -z "$filename" ] ; then |
| 626 exit_failure_syntax "FILE argument missing" | 741 exit_failure_syntax "FILE argument missing" |
| 627 fi | 742 fi |
| 628 case $filename in | 743 case $filename in |
| 629 -*) | 744 -*) |
| 630 exit_failure_syntax "unexpected option '$filename'" | 745 exit_failure_syntax "unexpected option '$filename'" |
| 631 ;; | 746 ;; |
| 632 esac | 747 esac |
| 633 check_input_file "$filename" | 748 check_input_file "$filename" |
| 634 ;; | 749 ;; |
| 635 | 750 |
| 636 default) | 751 default) |
| 637 action=defapp | 752 action=defapp |
| 638 mimetype="$2" | 753 mimetype="$2" |
| 639 if [ -z "$mimetype" ] ; then | 754 if [ -z "$mimetype" ] ; then |
| 640 exit_failure_syntax "mimetype argument missing" | 755 exit_failure_syntax "mimetype argument missing" |
| 641 fi | 756 fi |
| 642 case $mimetype in | 757 case $mimetype in |
| 643 -*) | 758 -*) |
| 644 exit_failure_syntax "unexpected option '$mimetype'" | 759 exit_failure_syntax "unexpected option '$mimetype'" |
| 645 ;; | 760 ;; |
| 646 | 761 |
| 647 */*) | 762 */*) |
| 648 # Ok | 763 # Ok |
| 649 ;; | 764 ;; |
| 650 | 765 |
| 651 *) | 766 *) |
| 652 exit_failure_syntax "mimetype '$mimetype' is not in the form 'minor/
major'" | 767 exit_failure_syntax "mimetype '$mimetype' is not in the form 'minor/
major'" |
| 653 ;; | 768 ;; |
| 654 esac | 769 esac |
| 655 ;; | 770 ;; |
| 656 | 771 |
| 657 *) | 772 *) |
| 658 exit_failure_syntax "unknown query type '$1'" | 773 exit_failure_syntax "unknown query type '$1'" |
| 659 ;; | 774 ;; |
| 660 esac | 775 esac |
| 661 ;; | 776 ;; |
| 662 | 777 |
| 663 default) | 778 default) |
| 664 action=makedefault | 779 action=makedefault |
| 665 shift | 780 shift |
| 666 | 781 |
| 667 if [ -z "$1" ] ; then | 782 if [ -z "$1" ] ; then |
| 668 exit_failure_syntax "application argument missing" | 783 exit_failure_syntax "application argument missing" |
| 669 fi | 784 fi |
| 670 case $1 in | 785 case $1 in |
| 671 -*) | 786 -*) |
| 672 exit_failure_syntax "unexpected option '$1'" | 787 exit_failure_syntax "unexpected option '$1'" |
| 673 ;; | 788 ;; |
| 674 | 789 |
| 675 *.desktop) | 790 *.desktop) |
| 676 filename="$1" | 791 filename="$1" |
| 677 ;; | 792 ;; |
| 678 | 793 |
| 679 *) | 794 *) |
| 680 exit_failure_syntax "malformed argument '$1', expected *.desktop" | 795 exit_failure_syntax "malformed argument '$1', expected *.desktop" |
| 681 ;; | 796 ;; |
| 682 esac | 797 esac |
| 683 ;; | 798 ;; |
| 684 | 799 |
| 685 *) | 800 *) |
| 686 exit_failure_syntax "unknown command '$1'" | 801 exit_failure_syntax "unknown command '$1'" |
| 687 ;; | 802 ;; |
| 688 esac | 803 esac |
| 689 | 804 |
| 690 shift | 805 shift |
| 691 | 806 |
| 692 | 807 |
| 693 if [ "$action" = "makedefault" ]; then | 808 if [ "$action" = "makedefault" ]; then |
| 694 if [ -z "$1" ] ; then | 809 if [ -z "$1" ] ; then |
| 695 exit_failure_syntax "mimetype argument missing" | 810 exit_failure_syntax "mimetype argument missing" |
| 696 fi | 811 fi |
| 697 | 812 |
| 698 while [ $# -gt 0 ] ; do | 813 while [ $# -gt 0 ] ; do |
| 699 case $1 in | 814 case $1 in |
| 700 -*) | 815 -*) |
| 701 exit_failure_syntax "unexpected option '$1'" | 816 exit_failure_syntax "unexpected option '$1'" |
| 702 ;; | 817 ;; |
| 703 esac | 818 esac |
| 704 mimetype="$1" | 819 mimetype="$1" |
| 705 shift | 820 shift |
| 706 | 821 |
| 707 make_default_kde "$filename" "$mimetype" | 822 make_default_kde "$filename" "$mimetype" |
| 708 make_default_generic "$filename" "$mimetype" | 823 make_default_generic "$filename" "$mimetype" |
| 709 done | 824 done |
| 710 exit_success | 825 exit_success |
| 711 fi | 826 fi |
| 712 | 827 |
| 713 if [ "$action" = "info" ]; then | 828 if [ "$action" = "info" ]; then |
| 714 detectDE | 829 detectDE |
| 715 | 830 |
| 716 if [ x"$DE" = x"" ]; then | 831 if [ x"$DE" = x"" ]; then |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 761 exit_failure_syntax "mode argument missing for --mode" | 876 exit_failure_syntax "mode argument missing for --mode" |
| 762 fi | 877 fi |
| 763 case "$1" in | 878 case "$1" in |
| 764 user) | 879 user) |
| 765 mode="user" | 880 mode="user" |
| 766 ;; | 881 ;; |
| 767 | 882 |
| 768 system) | 883 system) |
| 769 mode="system" | 884 mode="system" |
| 770 ;; | 885 ;; |
| 771 | 886 |
| 772 *) | 887 *) |
| 773 exit_failure_syntax "unknown mode '$1'" | 888 exit_failure_syntax "unknown mode '$1'" |
| 774 ;; | 889 ;; |
| 775 esac | 890 esac |
| 776 shift | 891 shift |
| 777 ;; | 892 ;; |
| 778 | 893 |
| 779 --novendor) | 894 --novendor) |
| 780 vendor=false | 895 vendor=false |
| 781 ;; | 896 ;; |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 892 basefile=`basename "$filename"` | 1007 basefile=`basename "$filename"` |
| 893 #[ -z $vendor ] || basefile="$vendor-$basefile" | 1008 #[ -z $vendor ] || basefile="$vendor-$basefile" |
| 894 | 1009 |
| 895 mimetypes= | 1010 mimetypes= |
| 896 if [ -n "$kde_dir" ] ; then | 1011 if [ -n "$kde_dir" ] ; then |
| 897 DEBUG 2 "KDE3 mimelnk directory found, extracting mimetypes from XML file" | 1012 DEBUG 2 "KDE3 mimelnk directory found, extracting mimetypes from XML file" |
| 898 | 1013 |
| 899 mimetypes=`awk < "$filename" ' | 1014 mimetypes=`awk < "$filename" ' |
| 900 # Strip XML comments | 1015 # Strip XML comments |
| 901 BEGIN { | 1016 BEGIN { |
| 902 supress=0 | 1017 suppress=0 |
| 903 } | 1018 } |
| 904 { | 1019 { |
| 905 do | 1020 do |
| 906 if (supress) { | 1021 if (suppress) { |
| 907 if (match($0,/-->/)) { | 1022 if (match($0,/-->/)) { |
| 908 $0=substr($0,RSTART+RLENGTH) | 1023 $0=substr($0,RSTART+RLENGTH) |
| 909 supress=0 | 1024 suppress=0 |
| 910 } | 1025 } |
| 911 else { | 1026 else { |
| 912 break | 1027 break |
| 913 } | 1028 } |
| 914 } | 1029 } |
| 915 else { | 1030 else { |
| 916 if (match($0,/<!--/)) { | 1031 if (match($0,/<!--/)) { |
| 917 if (RSTART>1) print substr($0,0,RSTART) | 1032 if (RSTART>1) print substr($0,0,RSTART) |
| 918 $0=substr($0,RSTART+RLENGTH) | 1033 $0=substr($0,RSTART+RLENGTH) |
| 919 supress=1 | 1034 suppress=1 |
| 920 } | 1035 } |
| 921 else { | 1036 else { |
| 922 if ($0) print $0 | 1037 if ($0) print $0 |
| 923 break | 1038 break |
| 924 } | 1039 } |
| 925 } | 1040 } |
| 926 while(1) | 1041 while(1) |
| 927 } | 1042 } |
| 928 ' | awk ' | 1043 ' | awk ' |
| 929 # List MIME types listed in <mime-type> tags | 1044 # List MIME types listed in <mime-type> tags |
| 930 BEGIN { | 1045 BEGIN { |
| 931 RS="<" | 1046 RS="<" |
| 932 } | 1047 } |
| 933 /^mime-info/, /^\/mime-info/ { | 1048 /^mime-info/, /^\/mime-info/ { |
| 934 if (match($0,/^mime-type/)) { | 1049 if (match($0,/^mime-type/)) { |
| 935 if (match($0,/type="[^"]*/) || match($0,/type='"'"'[^'"'"']*/)) { | 1050 if (match($0,/type="[^"]*/) || match($0,/type='"'"'[^'"'"']*/)) { |
| 936 print substr($0,RSTART+6,RLENGTH-6) | 1051 print substr($0,RSTART+6,RLENGTH-6) |
| 937 } | 1052 } |
| 938 } | 1053 } |
| 939 }'` | 1054 }'` |
| 940 fi | 1055 fi |
| 941 | 1056 |
| 942 DEBUG 1 "$action mimetype in $xdg_dir" | 1057 DEBUG 1 "$action mimetype in $xdg_dir" |
| 943 | 1058 |
| 944 case $action in | 1059 case $action in |
| 945 install) | 1060 install) |
| 946 save_umask=`umask` | 1061 save_umask=`umask` |
| 947 umask $my_umask | 1062 umask $my_umask |
| 948 | 1063 |
| 949 for x in $xdg_dir ; do | 1064 for x in $xdg_dir ; do |
| 950 mkdir -p $x | 1065 mkdir -p $x |
| 951 eval 'cp $filename $x/$basefile'$xdg_redirect_output | 1066 eval 'cp $filename $x/$basefile'$xdg_redirect_output |
| 952 done | 1067 done |
| 953 | 1068 |
| 954 if [ -n "$mimetypes" ] ; then | 1069 if [ -n "$mimetypes" ] ; then |
| 955 # No quotes around $mimetypes | 1070 # No quotes around $mimetypes |
| 956 for x in $mimetypes ; do | 1071 for x in $mimetypes ; do |
| 957 DEBUG 1 "Installing $kde_dir/$x.desktop (KDE 3.x support)" | 1072 DEBUG 1 "Installing $kde_dir/$x.desktop (KDE 3.x support)" |
| 958 mkdir -p `dirname $kde_dir/$x.desktop` | 1073 mkdir -p `dirname $kde_dir/$x.desktop` |
| 959 awk < "$filename" ' | 1074 awk < "$filename" ' |
| 960 # Strip XML comments | 1075 # Strip XML comments |
| 961 BEGIN { | 1076 BEGIN { |
| 962 supress=0 | 1077 suppress=0 |
| 963 } | 1078 } |
| 964 { | 1079 { |
| 965 do | 1080 do |
| 966 if (supress) { | 1081 if (suppress) { |
| 967 if (match($0,/-->/)) { | 1082 if (match($0,/-->/)) { |
| 968 $0=substr($0,RSTART+RLENGTH) | 1083 $0=substr($0,RSTART+RLENGTH) |
| 969 supress=0 | 1084 suppress=0 |
| 970 } | 1085 } |
| 971 else { | 1086 else { |
| 972 break | 1087 break |
| 973 } | 1088 } |
| 974 } | 1089 } |
| 975 else { | 1090 else { |
| 976 if (match($0,/<!--/)) { | 1091 if (match($0,/<!--/)) { |
| 977 if (RSTART>1) print substr($0,0,RSTART) | 1092 if (RSTART>1) print substr($0,0,RSTART) |
| 978 $0=substr($0,RSTART+RLENGTH) | 1093 $0=substr($0,RSTART+RLENGTH) |
| 979 supress=1 | 1094 suppress=1 |
| 980 } | 1095 } |
| 981 else { | 1096 else { |
| 982 if ($0) print $0 | 1097 if ($0) print $0 |
| 983 break | 1098 break |
| 984 } | 1099 } |
| 985 } | 1100 } |
| 986 while(1) | 1101 while(1) |
| 987 } | 1102 } |
| 988 ' | awk > $kde_dir/$x.desktop ' | 1103 ' | awk > $kde_dir/$x.desktop ' |
| 989 # Extract mimetype $x from the XML file $filename | 1104 # Extract mimetype $x from the XML file $filename |
| 990 # Note that bash requires us to escape a single quote as '"'"' | 1105 # Note that bash requires us to escape a single quote as '"'"' |
| 991 BEGIN { | 1106 BEGIN { |
| 992 the_type=ARGV[1] | 1107 the_type=ARGV[1] |
| 993 the_source=ARGV[2] | 1108 the_source=ARGV[2] |
| 994 ARGC=1 | 1109 ARGC=1 |
| 995 RS="<" | 1110 RS="<" |
| 996 found=0 | 1111 found=0 |
| 997 glob_patterns="" | 1112 glob_patterns="" |
| 998 } | 1113 } |
| 999 /^mime-info/, /^\/mime-info/ { | 1114 /^mime-info/, /^\/mime-info/ { |
| 1000 if (match($0,/^mime-type/)) { | 1115 if (match($0,/^mime-type/)) { |
| 1001 if (match($0,/type="[^"]*/) || match($0,/type='"'"'[^'"'"']*/)) { | 1116 if (match($0,/type="[^"]*/) || match($0,/type='"'"'[^'"'"']*/)) { |
| 1002 if (substr($0,RSTART+6,RLENGTH-6) == the_type) { | 1117 if (substr($0,RSTART+6,RLENGTH-6) == the_type) { |
| 1003 found=1 | 1118 found=1 |
| 1004 print "[Desktop Entry]" | 1119 print "[Desktop Entry]" |
| 1005 print "# Installed by xdg-mime from " the_source | 1120 print "# Installed by xdg-mime from " the_source |
| 1006 print "Type=MimeType" | 1121 print "Type=MimeType" |
| 1007 print "MimeType=" the_type | 1122 print "MimeType=" the_type |
| 1008 the_icon=the_type | 1123 the_icon=the_type |
| 1009 sub("/", "-", the_icon) | 1124 sub("/", "-", the_icon) |
| 1010 print "Icon=" the_icon | 1125 print "Icon=" the_icon |
| 1011 } | 1126 } |
| 1012 } | 1127 } |
| 1013 } | 1128 } |
| 1014 else if (found) { | 1129 else if (found) { |
| 1015 if (match($0,/^\/mime-type/)) { | 1130 if (match($0,/^\/mime-type/)) { |
| 1016 if (glob_patterns) | 1131 if (glob_patterns) |
| 1017 print "Patterns=" glob_patterns | 1132 print "Patterns=" glob_patterns |
| 1018 exit 0 | 1133 exit 0 |
| 1019 } | 1134 } |
| 1020 | 1135 |
| 1021 if (match($0,/^sub-class-of/)) { | 1136 if (match($0,/^sub-class-of/)) { |
| 1022 if (match($0,/type="[^"]*/) || match($0,/type='"'"'[^'"'"']*/)) { | 1137 if (match($0,/type="[^"]*/) || match($0,/type='"'"'[^'"'"']*/)) { |
| 1023 print "X-KDE-IsAlso=" substr($0,RSTART+6,RLENGTH-6) | 1138 print "X-KDE-IsAlso=" substr($0,RSTART+6,RLENGTH-6) |
| 1024 } | 1139 } |
| 1025 else { | 1140 else { |
| 1026 print "Error: '"'"'type'"'"' argument missing in " RS $0 | 1141 print "Error: '"'"'type'"'"' argument missing in " RS $0 |
| 1027 exit 1 | 1142 exit 1 |
| 1028 } | 1143 } |
| 1029 } | 1144 } |
| 1030 if (match($0,/^glob/)) { | 1145 if (match($0,/^glob/)) { |
| 1031 if (match($0,/pattern="[^"]*/) || match($0,/pattern='"'"'[^'"'"']*/)) {
| 1146 if (match($0,/pattern="[^"]*/) || match($0,/pattern='"'"'[^'"'"']*/)) { |
| 1032 glob_patterns = glob_patterns substr($0,RSTART+9,RLENGTH-9) ";" | 1147 glob_patterns = glob_patterns substr($0,RSTART+9,RLENGTH-9) ";" |
| 1033 } | 1148 } |
| 1034 else { | 1149 else { |
| 1035 print "Error: '"'"'pattern'"'"' argument missing in " RS $0 | 1150 print "Error: '"'"'pattern'"'"' argument missing in " RS $0 |
| 1036 exit 1 | 1151 exit 1 |
| 1037 } | 1152 } |
| 1038 } | 1153 } |
| 1039 if (match($0,/^comment/)) { | 1154 if (match($0,/^comment/)) { |
| 1040 if (match($0,/xml:lang="[^"]*/) || match($0,/xml:lang='"'"'[^'"'"']*/)) {
| 1155 if (match($0,/xml:lang="[^"]*/) || match($0,/xml:lang='"'"'[^'"'"']*/)) { |
| 1041 lang=substr($0,RSTART+10,RLENGTH-10) | 1156 lang=substr($0,RSTART+10,RLENGTH-10) |
| 1042 } | 1157 } |
| 1043 else { | 1158 else { |
| 1044 lang="" | 1159 lang="" |
| 1045 } | 1160 } |
| 1046 if (match($0,/>/)) { | 1161 if (match($0,/>/)) { |
| 1047 comment=substr($0,RSTART+1) | 1162 comment=substr($0,RSTART+1) |
| 1048 sub("<", "<", comment) | 1163 sub("<", "<", comment) |
| 1049 sub(">", ">", comment) | 1164 sub(">", ">", comment) |
| 1050 sub("&", "\\&", comment) | 1165 sub("&", "\\&", comment) |
| 1051 if (lang) | 1166 if (lang) |
| 1052 print "Comment[" lang "]=" comment | 1167 print "Comment[" lang "]=" comment |
| 1053 else | 1168 else |
| 1054 print "Comment=" comment | 1169 print "Comment=" comment |
| 1055 } | 1170 } |
| 1056 } | 1171 } |
| 1057 } | 1172 } |
| 1058 } | 1173 } |
| 1059 END { | 1174 END { |
| 1060 if (!found) { | 1175 if (!found) { |
| 1061 print "Error: Mimetype '"'"'" the_type "'"'"' not found" | 1176 print "Error: Mimetype '"'"'" the_type "'"'"' not found" |
| 1062 exit 1 | 1177 exit 1 |
| 1063 } | 1178 } |
| 1064 } | 1179 } |
| 1065 ' $x $basefile | 1180 ' $x $basefile |
| 1066 if [ "$?" = "1" ] ; then | 1181 if [ "$?" = "1" ] ; then |
| 1067 grep -A 10 "^Error:" $kde_dir/$x.desktop >&2 | 1182 grep -A 10 "^Error:" $kde_dir/$x.desktop >&2 |
| 1068 rm $kde_dir/$x.desktop | 1183 rm $kde_dir/$x.desktop |
| 1069 exit 1 | 1184 exit 1 |
| 1070 fi | 1185 fi |
| 1071 done | 1186 done |
| 1072 fi | 1187 fi |
| 1073 | 1188 |
| 1074 umask $save_umask | 1189 umask $save_umask |
| 1075 ;; | 1190 ;; |
| 1076 | 1191 |
| 1077 uninstall) | 1192 uninstall) |
| 1078 for x in $xdg_dir ; do | 1193 for x in $xdg_dir ; do |
| 1079 rm -f $x/$basefile | 1194 rm -f $x/$basefile |
| 1080 done | 1195 done |
| 1081 | 1196 |
| 1082 # No quotes around $mimetypes | 1197 # No quotes around $mimetypes |
| 1083 for x in $mimetypes ; do | 1198 for x in $mimetypes ; do |
| 1084 if grep '^# Installed by xdg-mime' $kde_dir/$x.desktop >/dev/null 2>
&1; then | 1199 if grep '^# Installed by xdg-mime' $kde_dir/$x.desktop >/dev/null 2>
&1; then |
| 1085 DEBUG 1 "Removing $kde_dir/$x.desktop (KDE 3.x support)" | 1200 DEBUG 1 "Removing $kde_dir/$x.desktop (KDE 3.x support)" |
| 1086 rm -f $kde_dir/$x.desktop | 1201 rm -f $kde_dir/$x.desktop |
| 1087 fi | 1202 fi |
| 1088 done | 1203 done |
| 1089 ;; | 1204 ;; |
| 1090 esac | 1205 esac |
| 1091 | 1206 |
| 1092 update_mime_database $xdg_base_dir | 1207 update_mime_database $xdg_base_dir |
| 1093 | 1208 |
| 1094 exit_success | 1209 exit_success |
| 1095 | 1210 |
| OLD | NEW |