summaryrefslogtreecommitdiff
path: root/plugins/shotwell-publishing/PhotosPublisher.vala
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/shotwell-publishing/PhotosPublisher.vala')
-rw-r--r--plugins/shotwell-publishing/PhotosPublisher.vala52
1 files changed, 33 insertions, 19 deletions
diff --git a/plugins/shotwell-publishing/PhotosPublisher.vala b/plugins/shotwell-publishing/PhotosPublisher.vala
index 5f46470..e1127ac 100644
--- a/plugins/shotwell-publishing/PhotosPublisher.vala
+++ b/plugins/shotwell-publishing/PhotosPublisher.vala
@@ -7,6 +7,7 @@
namespace Publishing.GooglePhotos {
internal const string DEFAULT_ALBUM_NAME = N_("Shotwell Connect");
+internal const int MAX_BATCH_SIZE = 50;
internal class Album {
public string name;
@@ -127,28 +128,41 @@ private class MediaCreationTransaction : Publishing.RESTSupport.GooglePublisher.
}
public override void execute () throws Spit.Publishing.PublishingError {
- var builder = new Json.Builder();
- builder.begin_object();
- builder.set_member_name("albumId");
- builder.add_string_value(this.album_id);
- builder.set_member_name("newMediaItems");
- builder.begin_array();
- for (var i = 0; i < this.upload_tokens.length; i++) {
- builder.begin_object();
- builder.set_member_name("description");
- builder.add_string_value(this.titles[i]);
- builder.set_member_name("simpleMediaItem");
+ for (var h = 0; h * MAX_BATCH_SIZE < this.upload_tokens.length; h++) {
+ var offset = h * MAX_BATCH_SIZE;
+ var difference = this.upload_tokens.length - offset;
+ int end;
+
+ if (difference > MAX_BATCH_SIZE) {
+ end = offset + MAX_BATCH_SIZE;
+ }
+ else {
+ end = offset + difference;
+ }
+
+ var builder = new Json.Builder();
builder.begin_object();
- builder.set_member_name("uploadToken");
- builder.add_string_value(this.upload_tokens[i]);
- builder.end_object();
+ builder.set_member_name("albumId");
+ builder.add_string_value(this.album_id);
+ builder.set_member_name("newMediaItems");
+ builder.begin_array();
+ for (var i = offset; i < end; i++) {
+ builder.begin_object();
+ builder.set_member_name("description");
+ builder.add_string_value(this.titles[i]);
+ builder.set_member_name("simpleMediaItem");
+ builder.begin_object();
+ builder.set_member_name("uploadToken");
+ builder.add_string_value(this.upload_tokens[i]);
+ builder.end_object();
+ builder.end_object();
+ }
+ builder.end_array();
builder.end_object();
- }
- builder.end_array();
- builder.end_object();
- set_custom_payload(Json.to_string (builder.get_root (), false), "application/json");
+ set_custom_payload(Json.to_string (builder.get_root (), false), "application/json");
- base.execute();
+ base.execute();
+ }
}
}