src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/utils.sh
branchJDK-8200758-branch
changeset 58301 e0efb29609bd
equal deleted inserted replaced
58172:bf06a1d3aef6 58301:e0efb29609bd
       
     1 #
       
     2 # Remove $1 desktop file from the list of default handlers for $2 mime type
       
     3 # in $3 file dumping output to stdout.
       
     4 #
       
     5 _filter_out_default_mime_handler ()
       
     6 {
       
     7   local defaults_list="$3"
       
     8 
       
     9   local desktop_file="$1"
       
    10   local mime_type="$2"
       
    11 
       
    12   awk -f- "$defaults_list" <<EOF
       
    13   BEGIN {
       
    14     mime_type="$mime_type"
       
    15     mime_type_regexp="~" mime_type "="
       
    16     desktop_file="$desktop_file"
       
    17   }
       
    18   \$0 ~ mime_type {
       
    19     \$0 = substr(\$0, length(mime_type) + 2);
       
    20     split(\$0, desktop_files, ";")
       
    21     remaining_desktop_files
       
    22     counter=0
       
    23     for (idx in desktop_files) {
       
    24       if (desktop_files[idx] != desktop_file) {
       
    25         ++counter;
       
    26       }
       
    27     }
       
    28     if (counter) {
       
    29       printf mime_type "="
       
    30       for (idx in desktop_files) {
       
    31         if (desktop_files[idx] != desktop_file) {
       
    32           printf desktop_files[idx]
       
    33           if (--counter) {
       
    34             printf ";"
       
    35           }
       
    36         }
       
    37       }
       
    38       printf "\n"
       
    39     }
       
    40     next
       
    41   }
       
    42 
       
    43   { print }
       
    44 EOF
       
    45 }
       
    46 
       
    47 
       
    48 #
       
    49 # Remove $2 desktop file from the list of default handlers for $@ mime types
       
    50 # in $1 file.
       
    51 # Result is saved in $1 file.
       
    52 #
       
    53 _uninstall_default_mime_handler ()
       
    54 {
       
    55   local defaults_list=$1
       
    56   shift
       
    57   [ -f "$defaults_list" ] || return 0
       
    58 
       
    59   local desktop_file="$1"
       
    60   shift
       
    61 
       
    62   tmpfile1=$(mktemp)
       
    63   tmpfile2=$(mktemp)
       
    64   cat "$defaults_list" > "$tmpfile1"
       
    65 
       
    66   local v
       
    67   local update=
       
    68   for mime in "$@"; do
       
    69     _filter_out_default_mime_handler "$desktop_file" "$mime" "$tmpfile1" > "$tmpfile2"
       
    70     v="$tmpfile2"
       
    71     tmpfile2="$tmpfile1"
       
    72     tmpfile1="$v"
       
    73 
       
    74     if ! diff -q "$tmpfile1" "$tmpfile2" > /dev/null; then
       
    75       update=yes
       
    76       trace Remove $desktop_file default handler for $mime mime type from $defaults_list file
       
    77     fi
       
    78   done
       
    79 
       
    80   if [ -n "$update" ]; then
       
    81     cat "$tmpfile1" > "$defaults_list"
       
    82     trace "$defaults_list" file updated
       
    83   fi
       
    84 
       
    85   rm -f "$tmpfile1" "$tmpfile2"
       
    86 }
       
    87 
       
    88 
       
    89 #
       
    90 # Remove $1 desktop file from the list of default handlers for $@ mime types
       
    91 # in all known system defaults lists.
       
    92 #
       
    93 uninstall_default_mime_handler ()
       
    94 {
       
    95   for f in /usr/share/applications/defaults.list /usr/local/share/applications/defaults.list; do
       
    96     _uninstall_default_mime_handler "$f" "$@"
       
    97   done
       
    98 }
       
    99 
       
   100 
       
   101 trace ()
       
   102 {
       
   103   echo "$@"
       
   104 }