100 lines
2.7 KiB
Perl
Executable File
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;
|