mumble-voip_mumble/macx/scripts/gendmg.pl

100 lines
2.7 KiB
Perl
Executable File

#!/usr/bin/perl
#
# Copyright 2010-2023 The Mumble Developers. All rights reserved.
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file at the root of the
# Mumble source tree or at <https://www.mumble.info/LICENSE>.
#
# Generate a Mac OS X Finder .DS_Store file for use on the Mumble disk image.
#
#
# Notes:
#
# The use of binary plists inside the DS_Store seems to be new for the Finder in Mac OS X 10.6 (Snow Leopard),
# but we'll go with this for now. It falls back somewhat gracefully for older versions OS X, since the icons
# will still be placed in their correct positions.
#
use Data::Plist::BinaryWriter;
use Mac::Finder::DSStore::BuddyAllocator;
use Mac::Finder::DSStore;
use IO::File;
use strict;
my $plist = Data::Plist::BinaryWriter->new(serialize => 0);
my $bwsp = $plist->write([dict => {
"ShowPathbar" => [ false => 0 ],
"ShowSidebar" => [ false => 0 ],
"ShowStatusBar" => [ false => 0 ],
"ShowToolbar" => [ false => 0 ],
"SidebarWidth" => [ integer => 192 ],
"WindowBounds" => [ string => "{{388, 166}, {530, 525}}" ],
}]);
my $icvp = $plist->write([ dict => {
"arrangeBy" => [ string => "grid" ],
# these are floats [0, 1]
"backgroundColorBlue" => [ integer => 1 ],
"backgroundColorGreen" => [ integer => 1 ],
"backgroundColorRed" => [ integer => 1 ],
# a mac os alias record or the background image.
# fixme(mkrautz): add our pretty background. :)
"backgroundImageAlias" => [ data => "" ],
# background type. 1=color, 2=image
"backgroundType" => [ integer => 1 ],
"gridOffsetX" => [ integer => 0 ],
"gridOffsetY" => [ integer => 0 ],
"gridSpacing" => [ integer => 100 ],
"iconSize" => [ integer => 80 ],
"labelOnBottom" => [ true => 1 ],
"showIconPreview" => [ true => 1 ],
"showItemInfo" => [ false => 0 ],
"textSize" => [ integer => 12 ],
"viewOptionsVersion" => [ integer => 0 ],
}]);
my @entries = ();
# styling
my %styles = (
'bwsp' => $bwsp,
'icvp' => $icvp,
);
for my $key (keys %styles) {
my $e = Mac::Finder::DSStore::Entry->new(".", $key);
$e->value($styles{$key});
push(@entries, $e);
}
# file info
my %iconpos = (
"Mumble.app" => [ 54, 40 ],
"Applications" => [ 466, 40 ],
"ReadMe.txt" => [ 54, 416 ],
"Changes.txt" => [ 157, 416 ],
"Murmur Extras" => [ 363, 416 ],
"Licenses" => [ 466, 416 ],
);
for my $key (keys %iconpos) {
my $e = Mac::Finder::DSStore::Entry->new($key, 'Iloc');
$e->value(pack('NNnnnn', $iconpos{$key}[0], $iconpos{$key}[1], 65536, 65536, 65536, 65536, 0));
push(@entries, $e);
}
@entries = sort { $a->cmp($b) } @entries;
my $store = Mac::Finder::DSStore::BuddyAllocator->new(new IO::File "DS_Store", '>');
&Mac::Finder::DSStore::putDSDBEntries($store, \@entries);
$store->writeMetaData;
$store->close;