NAME
Net::Google::Drive::Simple::Mirror - Locally mirror a Google Drive folder structure
SYNOPSIS
# requires a ~/.google-drive.yml file containing an access token,
# see documentation of Net::Google::Drive::Simple
my
$google_docs
= Net::Google::Drive::Simple::Mirror->new(
remote_root
=>
'/folder/on/google/docs'
,
local_root
=>
'local/folder'
,
export_format
=> [
'opendocument'
,
'html'
],
);
$google_docs
->mirror();
DESCRIPTION
Net::Google::Drive::Simple::Mirror allows you to locally mirror a folder structure from Google Drive.
GETTING STARTED
For setting up your access token see the documentation of Net::Google::Drive::Simple.
METHODS
new()
-
Creates a helper object to mirror a remote folder to a local folder.
Parameters:
remote_root: folder on your Google Docs account. See "CAVEATS" below.
local_root: local folder to put the mirrored files in.
export_format: anonymous array containing your preferred export formats. Google Doc files may be exported to several formats. To get an idea of available formats, check 'exportLinks()' on a Google Drive Document or Spreadsheet, e.g.
my
$gd
= Net::Google::Drive::Simple->new();
# 'Simple' not 'Mirror'
my
$children
=
$gd
->children(
'/path/to/folder/on/google/drive'
);
for
my
$child
(
@$children
) {
if
(
$child
->can(
'exportLinks'
)){
foreach
my
$type
(
keys
%{
$child
->exportLinks()}){
print
"$type"
;
}
}
}
Now, specify strings that your preferred types match against. The default is ['opendocument', 'html']
download_condition: reference to a sub that takes the remote file name and the local file name as parameters. Returns true or false. The standard implementation is:
sub
_should_download{
my
(
$self
,
$remote_file
,
$local_file
) =
@_
;
return
1
if
$self
->{force};
my
$date_time_parser
= DateTime::Format::RFC3339->new();
my
$local_epoch
= (
stat
(
$local_file
))[9];
my
$remote_epoch
=
$date_time_parser
->parse_datetime
(
$remote_file
->modifiedDate())
->epoch();
if
(-f
$local_file
and
$remote_epoch
<
$local_epoch
){
return
0;
}
else
{
return
1;
}
}
download_condition can be used to change the behaviour of mirror(). I.e. do not download but list al remote files and what they became locally:
my
$google_docs
= Net::Google::Drive::Simple::Mirror->new(
remote_root
=>
'Mirror/Test/Folder'
,
local_root
=>
'test_data_mirror'
,
export_format
=> [
'opendocument'
,
'html'
],
# verbosely download nothing:
download_condition
=>
sub
{
my
(
$self
,
$remote_file
,
$local_file
) =
@_
;
say
"Remote: "
,
$remote_file
->title();
say
"`--> Local: $local_file"
;
return
0;
}
);
$google_docs
->mirror();
force: download all files and replace local copies.
mirror()
-
Recursively mirrors Google Drive folder to local folder.
CAVEATS
At the moment, remote_root must not contain slashes in the file names of its folders.
remote_root
=>
'Folder/Containing/Letters A/B'
is not existing because folder "Letters A/B" contains a slash:
Folder
`--Containing
`--Letters A/B
This will be resolved to:
Folder
`--Containing
`--Letters A
`--B
The remote_root 'Example/root' may contain folders and files with slashes. These get replaced with underscores in the local file system.
remote_root
=>
'Example/root'
;
Example
`--root
`--Letters A/B
With local_root 'Google-Docs-Mirror' this locally becomes:
local_root
=>
'Gooogle-Docs-Mirror'
;
Google-Docs-Mirror
`--Letters A_B
(Net::Google::Drive::Simple::Mirror uses folder ID's as soon as it has found the remote_root and does not depend on folder file names.)
AUTHOR
Matthias Bloch, <lt>matthias at puffin ch<gt>
COPYRIGHT AND LICENSE
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 269:
Unknown directive: =Copyright