-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathupdate-gps-assist-data.pl
executable file
·95 lines (84 loc) · 3.39 KB
/
update-gps-assist-data.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/usr/bin/perl -w
#
# Script for downloading the most recent GPS Assist Data to a Sony DSC
# Camera with built-in GPS, such as the Sony DSC-HX5V. The script must
# be called with the mount point of a memory card for the camera as
# argument.
#
# See https://github.com/henrikbrixandersen/sony-gps-assist for more
# information.
#
# Copyright (c) 2010-2012 Henrik Brix Andersen <[email protected]>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
use strict;
use Digest::MD5 qw/md5_hex/;
use File::Path 2.06_05 qw/make_path/;
use LWP::UserAgent;
# Settings
my $url_base = 'http://control.d-imaging.sony.co.jp/GPS';
my $gps_file = 'assistme.dat';
my $md5_file = 'assistme.md5';
my $subdir = 'PRIVATE/SONY/GPS/';
# Parse and validate mountpoint argument
my $mountpoint = $ARGV[0];
unless ($mountpoint) {
print STDERR "Usage: $0 MOUNTPOINT\n";
exit 1;
}
die "Non-existing mount point '$mountpoint' specfied\n" unless (-d $mountpoint);
# Initialize browser
my $browser = LWP::UserAgent->new;
my ($url, $response);
# Download main file
$url = "$url_base/$gps_file";
print "Downloading '$url'\n";
$response = $browser->get($url);
die "Could not download '$url': ", $response->status_line unless ($response->is_success);
my $content = $response->content;
# Download MD5 file
$url = "$url_base/$md5_file";
print "Downloading '$url'\n";
$response = $browser->get($url);
die "Could not download '$url': ", $response->status_line unless ($response->is_success);
my $md5sum = $response->content;
chomp $md5sum;
$md5sum =~ s/^(\w{32}).*/$1/;
# Validate MD5
print "Verifying MD5 checksum '$md5sum'\n";
die "MD5 check failed, checksum was '" . md5_hex($content) . "'" if (md5_hex($content) ne $md5sum);
# Create destination directory if needed
my $destdir = "$mountpoint/$subdir";
unless (-d "$destdir") {
print "Creating directory '$destdir'\n";
make_path("$destdir") || die "Could not create directory '$destdir', " . $!;
}
# Write file
my $destfile = "$destdir/$gps_file";
print "Writing data to '$destfile'\n";
open(FILE, ">$destfile") || die "Could not open '$destfile' for writing, " . $!;
binmode(FILE) || die "Could not set binary mode on '$destfile', " . $!;
print FILE $content;
close(FILE);
print "Done\n";