#!/usr/bin/perl -w

die '$RPM_BUILD_ROOT is not set!' unless $ENV{'RPM_BUILD_ROOT'};

`mkdir -p $ENV{'RPM_BUILD_ROOT'}/usr/share/applications`;
foreach $desktopfile (glob $ENV{'RPM_BUILD_ROOT'}.'/usr/share/gnome/apps/*.desktop') {
    system ('mv', $desktopfile, "$ENV{'RPM_BUILD_ROOT'}/usr/share/applications") and die $!;
    &log ($desktopfile,"moved to /usr/share/applications");
}

foreach $desktopfile (glob ($ENV{'RPM_BUILD_ROOT'}.'/usr/share/applications/*.desktop'), glob ($ENV{'RPM_BUILD_ROOT'}.'/usr/share/applications/*/*.desktop')) {
    open DF, $desktopfile or die $!;
    my @olddesktop=<DF>;
    close DF or die $!;
    my $desktop_entry=0;
    open DF, '>', $desktopfile or die $!;
    foreach (@olddesktop) {
	chomp;
	my $oldline=$_;
	if ($desktop_entry) {
	    # warning: key "Encoding" in group "Desktop Entry" is deprecated;
	    if (/^Encoding/) {
		&log ($desktopfile,"removed $_");
		next;
	    }
	    # warning: boolean key "Terminal" in group "Desktop Entry" has value "0", 
	    # which is deprecated: boolean values should be "false" or "true"; 
	    s/^Terminal\s*=\s*0/Terminal=false/;
	    s/^Terminal\s*=\s*1/Terminal=true/;
	    if (m/^Categories=/ and not m/^Categories=Application;\s*$/) {
		# error: value "..." for string list key "Categories" in group "Desktop Entry" does not have a semicolon (';') as trailing character; 
		s/^(\S+)/$1;/ unless m/;\s*$/;
		# warning: key "Categories" in group "Desktop Entry" contains a deprecated value "Application"; 
		s/Application;//;
		#value "QT;..." for key "Categories" in group "Desktop Entry" contains an unregistered value "QT";
		s/QT;/Qt;/;
	    }
	    # warning: key "DocPath" in group "Desktop Entry" is a reserved key for KDE;
	    s/^DocPath=/X-DocPath=/;
	    # error: value "__.png" for key "Icon" in group "Desktop Entry" is an icon name with an extension, but there should be no extension as described in the Icon Theme Specification if the value is not an absolute path;
	    if (m!^Icon\s*=\s*[^\s/]!) {
		s/.png(\s*)$/$1/;
		s/.xpm(\s*)$/$1/;
		s/.jpg(\s*)$/$1/;
		s/.jpeg(\s*)$/$1/;
	    }
	    if (m/^MimeType=/) {
		# error: value "..." for string list key "MimeType" in group "Desktop Entry" does not have a semicolon (';') as trailing character; 
		s/^(\S+)/$1;/ unless m/;\s*$/;
		# for key "MimeType" in group "Desktop Entry" contains "..." more than once;
		my %known;
		my $oldline=$_;
		my $newline='MimeType=';
		$oldline=~s/^MimeType=//;
		foreach my $mimetype (split(/[\s;]+/,$oldline)) {
		    if ($mimetype and not $known{$mimetype}) {
			$newline.=$mimetype.';';
			$known{$mimetype}=1;
		    }
		}
		$_=$newline;
	    }
	}
	$desktop_entry =1 if /^\[Desktop Entry\]/;
	print DF $_,"\n";
	&log ($desktopfile,"changed $oldline to $_") if ($_ ne $oldline);
    }
    close DF or die $!;
}

sub log {
    my ($file,@msg)=@_;
    print STDERR "rpmbuild-helper-desktop: ",&basename($file),": @msg\n";
}

sub basename {
    my @path=split ('/',$_[0]);
    return pop @path;
}
