From 2c75b3d8cee2f17f72496609343a033c7a442a3c Mon Sep 17 00:00:00 2001 From: Ben Soares Date: Tue, 26 Jan 2021 13:59:13 +0000 Subject: [PATCH] JAL-3521 Debian mime-type and desktop helper files, and script to create them --- utils/debian/debian/jalview-file.png | Bin 0 -> 13354 bytes utils/debian/debian/jalview-icon.png | Bin 0 -> 53903 bytes utils/debian/debian/jalview-mailcap | 22 ++ utils/debian/debian/jalview-mime.xml | 143 +++++++++++ utils/debian/debian/jalview.desktop | 13 + .../debian/file_associations_template-mailcap.txt | 1 + ...file_associations_template-shared-mime-info.xml | 6 + utils/debian/mime_types_for_debian.pl | 249 ++++++++++++++++++++ 8 files changed, 434 insertions(+) create mode 100644 utils/debian/debian/jalview-file.png create mode 100644 utils/debian/debian/jalview-icon.png create mode 100644 utils/debian/debian/jalview-mailcap create mode 100644 utils/debian/debian/jalview-mime.xml create mode 100644 utils/debian/debian/jalview.desktop create mode 100644 utils/debian/file_associations_template-mailcap.txt create mode 100644 utils/debian/file_associations_template-shared-mime-info.xml create mode 100755 utils/debian/mime_types_for_debian.pl diff --git a/utils/debian/debian/jalview-file.png b/utils/debian/debian/jalview-file.png new file mode 100644 index 0000000000000000000000000000000000000000..1d986999a548846417015c5bba64accf966b7d1a GIT binary patch literal 13354 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 literal 0 HcmV?d00001 diff --git a/utils/debian/debian/jalview-icon.png b/utils/debian/debian/jalview-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..340f8e5e542952e240eff443e41bf8af14d4128b GIT binary patch literal 53903 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 IyaiwU8v*zA9smFU literal 0 HcmV?d00001 diff --git a/utils/debian/debian/jalview-mailcap b/utils/debian/debian/jalview-mailcap new file mode 100644 index 0000000..5be7ab9 --- /dev/null +++ b/utils/debian/debian/jalview-mailcap @@ -0,0 +1,22 @@ +application/x-jalview+xml+zip; jalview -open '%s'; description="Jalview File"; nametemplate=%s.jvp; test=test -n "$DISPLAY"; priority=10 +chemical/x-cif; jalview -open '%s'; description="CIF File"; nametemplate=%s.cif; test=test -n "$DISPLAY"; priority=4 +chemical/x-mmcif; jalview -open '%s'; description="mmCIF File"; nametemplate=%s.mcif; test=test -n "$DISPLAY"; priority=4 +chemical/x-pdb; jalview -open '%s'; description="PDB File"; nametemplate=%s.pdb; test=test -n "$DISPLAY"; priority=4 +application/x-amsa+txt; jalview -open '%s'; description="AMSA File"; nametemplate=%s.amsa; test=test -n "$DISPLAY"; priority=9 +application/x-jalview-annotations+text; jalview -open '%s'; description="Jalview Annotations File"; nametemplate=%s.annotations; test=test -n "$DISPLAY"; priority=10 +application/x-jalview-biojson+json; jalview -open '%s'; description="BioJSON File"; nametemplate=%s.biojson; test=test -n "$DISPLAY"; priority=10 +application/x-blc+txt; jalview -open '%s'; description="BLC File"; nametemplate=%s.blc; test=test -n "$DISPLAY"; priority=9 +application/x-clustal+txt; jalview -open '%s'; description="Clustal File"; nametemplate=%s.aln; test=test -n "$DISPLAY"; priority=9 +application/x-fasta+txt; jalview -open '%s'; description="Fasta File"; nametemplate=%s.fa; test=test -n "$DISPLAY"; priority=9 +application/x-jalview-features+text; jalview -open '%s'; description="Jalview Features File"; nametemplate=%s.features; test=test -n "$DISPLAY"; priority=10 +application/x-gff2+txt; jalview -open '%s'; description="Generic Features Format v2 File"; nametemplate=%s.gff2; test=test -n "$DISPLAY"; priority=9 +application/x-gff3+txt; jalview -open '%s'; description="Generic Features Format v3 File"; nametemplate=%s.gff3; test=test -n "$DISPLAY"; priority=9 +application/x-jalview-jnet+text; jalview -open '%s'; description="JnetFile File"; nametemplate=%s.concise; test=test -n "$DISPLAY"; priority=10 +application/x-msf+txt; jalview -open '%s'; description="MSF File"; nametemplate=%s.msf; test=test -n "$DISPLAY"; priority=9 +application/x-pfam+txt; jalview -open '%s'; description="PFAM File"; nametemplate=%s.pfam; test=test -n "$DISPLAY"; priority=9 +application/x-phylip+txt; jalview -open '%s'; description="PHYLIP File"; nametemplate=%s.phy; test=test -n "$DISPLAY"; priority=9 +application/x-pileup+txt; jalview -open '%s'; description="PileUp File"; nametemplate=%s.pileup; test=test -n "$DISPLAY"; priority=9 +application/x-pir+txt; jalview -open '%s'; description="PIR File"; nametemplate=%s.pir; test=test -n "$DISPLAY"; priority=9 +application/rnaml+xml; jalview -open '%s'; description="RNAML File"; nametemplate=%s.rnaml; test=test -n "$DISPLAY"; priority=9 +application/x-jalview-scorematrix+text; jalview -open '%s'; description="Substitution Matrix File"; nametemplate=%s.mat; test=test -n "$DISPLAY"; priority=10 +application/x-stockholm+txt; jalview -open '%s'; description="Stockholm File"; nametemplate=%s.sto; test=test -n "$DISPLAY"; priority=9 diff --git a/utils/debian/debian/jalview-mime.xml b/utils/debian/debian/jalview-mime.xml new file mode 100644 index 0000000..181fbed --- /dev/null +++ b/utils/debian/debian/jalview-mime.xml @@ -0,0 +1,143 @@ + + + + + Jalview File + + + + + + CIF File + + + + + + mmCIF File + + + + + + + PDB File + + + + + + + AMSA File + + + + + + Jalview Annotations File + + + + + + + BioJSON File + + + + + + BLC File + + + + + + Clustal File + + + + + + Fasta File + + + + + + + Jalview Features File + + + + + + + Generic Features Format v2 File + + + + + + Generic Features Format v3 File + + + + + + JnetFile File + + + + + + + MSF File + + + + + + PFAM File + + + + + + PHYLIP File + + + + + + PileUp File + + + + + + PIR File + + + + + + RNAML File + + + + + + Substitution Matrix File + + + + + + Stockholm File + + + + + + diff --git a/utils/debian/debian/jalview.desktop b/utils/debian/debian/jalview.desktop new file mode 100644 index 0000000..ba7c157 --- /dev/null +++ b/utils/debian/debian/jalview.desktop @@ -0,0 +1,13 @@ +[Desktop Entry] +Version=1.1 +Type=Application +Name=Jalview +Comment=Multiple Sequence Alignment Editor +Icon=jalview-icon +Type=Application +TryExec=jalview +Exec=jalview -open %f +Terminal=false +Categories=Science;Biology; +Keywords=alignment;sequence; +MimeType=application/x-jalview+xml+zip;chemical/x-cif;chemical/x-mmcif;chemical/x-pdb;application/x-amsa+txt;application/x-jalview-annotations+text;application/x-jalview-biojson+json;application/x-blc+txt;application/x-clustal+txt;application/x-fasta+txt;application/x-jalview-features+text;application/x-gff2+txt;application/x-gff3+txt;application/x-jalview-jnet+text;application/x-msf+txt;application/x-pfam+txt;application/x-phylip+txt;application/x-pileup+txt;application/x-pir+txt;application/rnaml+xml;application/x-jalview-scorematrix+text;application/x-stockholm+txt diff --git a/utils/debian/file_associations_template-mailcap.txt b/utils/debian/file_associations_template-mailcap.txt new file mode 100644 index 0000000..9a96e97 --- /dev/null +++ b/utils/debian/file_associations_template-mailcap.txt @@ -0,0 +1 @@ +$$MIMETYPE$$; jalview -open '%s'; description="$$NAME$$ File"; nametemplate=%s.$$EXTENSION$$; test=test -n "$DISPLAY"; priority=$$PRIORITY$$ diff --git a/utils/debian/file_associations_template-shared-mime-info.xml b/utils/debian/file_associations_template-shared-mime-info.xml new file mode 100644 index 0000000..5136d0b --- /dev/null +++ b/utils/debian/file_associations_template-shared-mime-info.xml @@ -0,0 +1,6 @@ + + $$NAME$$ File + +$$ +$$ + diff --git a/utils/debian/mime_types_for_debian.pl b/utils/debian/mime_types_for_debian.pl new file mode 100755 index 0000000..3c1ed24 --- /dev/null +++ b/utils/debian/mime_types_for_debian.pl @@ -0,0 +1,249 @@ +#!/usr/bin/env perl + +use strict; + +my $fileformats = $ARGV[0]; +$fileformats = "../../src/jalview/io/FileFormat.java" unless $fileformats; + +# default mimetype will be text/x-$shortname +# TODO: find an actual extension for mat, see JAL-Xxxxx for outstanding issues too +# TODO: look up standard mime type used for BLASTfmt matrices, etc +my $mimetypes = { + rnaml => "application/rnaml+xml", + biojson => "application/x-jalview-biojson+json", + jnet => "application/x-jalview-jnet+text", + features => "application/x-jalview-features+text", + scorematrix => "application/x-jalview-scorematrix+text", + pdb => "chemical/x-pdb", + mmcif => "chemical/x-cif", + mmcif2 => "chemical/x-mmcif", + jalview => "application/x-jalview+xml+zip", + #jvl => "application/x-jalview-jvl+text", + annotations => "application/x-jalview-annotations+text", +}; + +my @dontaddshortname = qw(features json); +my @dontaddextension = qw(html xml json jar mfa fastq); +my $add_associations = { + biojson => {shortname=>"biojson",name=>"BioJSON",extensions=>["biojson"]}, + gff2 => {shortname=>"gff2",name=>"Generic Features Format v2",extensions=>["gff2"]}, + gff3 => {shortname=>"gff3",name=>"Generic Features Format v3",extensions=>["gff3"]}, + features => {shortname=>"features",name=>"Jalview Features",extensions=>["features","jvfeatures"]}, + annotations => {shortname=>"annotations",name=>"Jalview Annotations",extensions=>["annotations","jvannotations"]}, + mmcif => {shortname=>"mmcif",name=>"CIF",extensions=>["cif"]}, + mmcif2 => {shortname=>"mmcif2",name=>"mmCIF",extensions=>["mcif","mmcif"]}, + #jvl => {shortname=>"jvl",name=>"Jalview Launch",extensions=>["jvl"],iconfile=>"jalview-launch"}, + jnet => {shortname=>"jnet",name=>"JnetFile",extensions=>["concise","jnet"]}, + scorematrix => {shortname=>"scorematrix",name=>"Substitution Matrix",extensions=>["mat"]}, +}; +my $add_extensions = { + blc => ["blc"], +}; +my @put_first = qw(jalview jvl); + +my @non_primary = qw(mmcif mmcif2 pdb); + +my $mailcaptemplatefile = "file_associations_template-mailcap.txt"; +my $mailcaptemplate; +my $sharedmimeinfotemplatefile = "file_associations_template-shared-mime-info.xml"; +my $sharedmimeinfotemplate; + +open(SMT,"<$sharedmimeinfotemplatefile") or die("Could not open '$sharedmimeinfotemplatefile' for reading"); +while(){ + $sharedmimeinfotemplate .= $_; +} +close(SMT); +open(MCT,"<$mailcaptemplatefile") or die("Could not open '$mailcaptemplatefile' for reading"); +while(){ + $mailcaptemplate .= $_; +} +close(MCT); +my $sharedmimeinfoauto; +my $mailcapauto; + +# this file should go in /usr/share/mime/packages +my $sharedmimeinfoautofile = "debian/jalview-mime.xml"; + +# this file should go in /usr/lib/mime/packages +my $mailcapautofile = "debian/jalview-mailcap"; + +# this should be part of the jalview.desktop file that goes in /usr/shares/applications +my $desktopfile = "debian/jalview.desktop"; + +my $MimeType = ""; + +for my $key (sort keys %$add_associations) { + my $a = $add_associations->{$key}; + warn("Known file association for $a->{shortname} (".join(",",@{$a->{extensions}}).")\n"); +} + +open(SMI,">$sharedmimeinfoautofile") or die ("Could not open '$sharedmimeinfoautofile' for writing"); + +open(MCA,">$mailcapautofile") or die ("Could not open '$mailcapautofile' for writing"); + +open(IN, "<$fileformats") or die ("Could not open '$fileformats' for reading"); +my $id = 10000; +my $file_associations = {}; +while(my $line = ) { + $line =~ s/\s+/ /g; + $line =~ s/(^ | $)//g; + if ($line =~ m/^(\w+) ?\( ?"([^"]*)" ?, ?"([^"]*)" ?, ?(true|false) ?, ?(true|false) ?\)$/i) { + my $shortname = lc($1); + next if (grep($_ eq $shortname, @dontaddshortname)); + my $name = $2; + my $extensions = $3; + $extensions =~ s/\s+//g; + my @possextensions = map(lc($_),split(m/,/,$extensions)); + my @extensions; + my $addext = $add_extensions->{$shortname}; + if (ref($addext) eq "ARRAY") { + push(@possextensions, @$addext); + } + for my $possext (@possextensions) { + next if grep($_ eq $possext, @extensions); + next if grep($_ eq $possext, @dontaddextension); + push(@extensions,$possext); + } + next unless scalar(@extensions); + $file_associations->{$shortname} = { + shortname => $shortname, + name => $name, + extensions => \@extensions + }; + warn("Reading file association for $shortname (".join(",",@extensions).")\n"); + } +} +close(IN); + +my %all_associations = (%$file_associations, %$add_associations); + +my @ordered = (@put_first, @non_primary); +for my $key (sort keys %all_associations) { + next if grep($_ eq $key, @ordered); + push(@ordered, $key); +} +my $num = $#ordered + 1; + +warn("--\n"); +print SMI qq(\n\n\n); + +my $mailcapcount = 0; +for my $shortname (@ordered) { + my $a = $all_associations{$shortname}; + next if (ref($a) ne "HASH"); + + my $name = $a->{name}; + my $extensions = $a->{extensions}; + my $mimetype = $mimetypes->{$shortname}; + $mimetype = "application/x-$shortname+txt" unless $mimetype; + + $MimeType .= $MimeType?";":""; + $MimeType .= $mimetype; + + my $iconfile = $a->{iconfile}; + $iconfile = "jalview-file" unless $iconfile; + + my $primary = (! grep($_ eq $shortname, @non_primary)); + my $primarystring = $primary?"true":"false"; + my $role = $primary?"Editor":"Viewer"; + my $priority = $primary?9:4; + $priority = 10 if $mimetype =~ m/\bjalview\b/; + + my @extensions = @$extensions; + my $extension0 = $extensions[0]; + + my $xname = xml_escape($name); + my $xmimetype = xml_escape($mimetype); + my $xshortname = xml_escape($shortname); + my $xiconfile = xml_escape($iconfile); + my $xrole = xml_escape($role); + my $xROLE = xml_escape(uc($role)); + my $xprimarystring = xml_escape($primarystring); + + my $sharedmimeinfoentry = $sharedmimeinfotemplate; + $sharedmimeinfoentry =~ s/\$\$NAME\$\$/$xname/g; + $sharedmimeinfoentry =~ s/\$\$SHORTNAME\$\$/$xshortname/g; + $sharedmimeinfoentry =~ s/\$\$MIMETYPE\$\$/$xmimetype/g; + $sharedmimeinfoentry =~ s/\$\$ICONFILE\$\$/$xiconfile/g; + $sharedmimeinfoentry =~ s/\$\$ROLE\$\$/$xrole/g; + $sharedmimeinfoentry =~ s/\$\$PRIMARY\$\$/$xprimarystring/g; + $sharedmimeinfoentry =~ s/\$\$PRIORITY\$\$/$priority/g; + while ($sharedmimeinfoentry =~ m/\$\$([^\$]*)EXTENSIONS([^\$]*)\$\$/) { + my $pre = $1; + my $post = $2; + my $sharedmimeinfoextensions; + for my $ext (@extensions) { + my $xext = xml_escape($ext); + $sharedmimeinfoextensions .= $pre.$xext.$post; + } + my $prere = $pre; + $prere =~ s/([\*\.])/\\\1/g; + my $postre = $post; + $postre =~ s/([\*\.])/\\\1/g; + $sharedmimeinfoentry =~ s/\$\$${prere}EXTENSIONS${postre}\$\$/$sharedmimeinfoextensions/gs; + } + print SMI $sharedmimeinfoentry; + + my $mailcapentry = $mailcaptemplate; + $mailcapentry =~ s/\$\$NAME\$\$/$xname/g; + $mailcapentry =~ s/\$\$SHORTNAME\$\$/$xshortname/g; + $mailcapentry =~ s/\$\$MIMETYPE\$\$/$xmimetype/g; + $mailcapentry =~ s/\$\$ICONFILE\$\$/$xiconfile/g; + $mailcapentry =~ s/\$\$PRIMARY\$\$/$xprimarystring/g; + $mailcapentry =~ s/\$\$MACASSOCIATIONROLE\$\$/$xROLE/g; + $mailcapentry =~ s/\$\$EXTENSION\$\$/$extension0/g; + $mailcapentry =~ s/\$\$PRIORITY\$\$/$priority/g; + + my $ext = join(",",sort(@extensions)); + my $xdisplayext = xml_escape(join(", ", map(".$_",sort(@extensions)))); + my $progresspercent = int(($mailcapcount/$num)*100); + $progresspercent = 100 if $progresspercent > 100; + $mailcapcount++; + my $xext = xml_escape($ext); + my $addunixextension = "true"; + + $mailcapentry =~ s/\$\$ADDUNIXEXTENSION\$\$/$addunixextension/g; + $mailcapentry =~ s/\$\$EXTENSION\$\$/$xext/g; + $mailcapentry =~ s/\$\$DISPLAYEXTENSION\$\$/$xdisplayext/g; + $mailcapentry =~ s/\$\$PROGRESSPERCENT\$\$/$progresspercent/g; + $mailcapentry =~ s/\$\$ID\$\$/$id/g; + $id++; + $mailcapentry =~ s/\$\$ID1\$\$/$id/g; + $id++; + $mailcapentry =~ s/\$\$ID2\$\$/$id/g; + $id++; + + print MCA $mailcapentry; + + delete $all_associations{$shortname}; + warn("Writing entry for $name (".join(",",@$extensions).": $mimetype)\n"); +} + +print SMI "\n"; + +close(MCA); +close(SMI); + +open(D,">$desktopfile") or die ("Could not open '$desktopfile' for writing"); +print D qq([Desktop Entry] +Version=1.1 +Type=Application +Name=Jalview +Comment=Multiple Sequence Alignment Editor +Icon=jalview-icon +Type=Application +TryExec=jalview +Exec=jalview -open %f +Terminal=false +Categories=Science;Biology; +Keywords=alignment;sequence; +MimeType=${MimeType} +); +close(D); + +sub xml_escape { + my $x = shift; + # stolen from Pod::Simple::XMLOutStream in base distro + $x =~ s/([^-\n\t !\#\$\%\(\)\*\+,\.\~\/\:\;=\?\@\[\\\]\^_\`\{\|\}a-zA-Z0-9])/'&#'.(ord($1)).';'/eg; + return $x; +} -- 1.7.10.2