Skip to content

Commit a448108

Browse files
feat: Add uploadedtime propertyp to track media upload timestamps in Synology Importer. (#1468)
Co-authored-by: amychen <amychen@synology.com>
1 parent a1d7874 commit a448108

File tree

2 files changed

+23
-8
lines changed

2 files changed

+23
-8
lines changed

extensions/data-transfer/portability-data-transfer-synology/src/main/java/org/datatransferproject/datatransfer/synology/service/SynologyDTPService.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.io.IOException;
2525
import java.io.InputStream;
2626
import java.net.MalformedURLException;
27+
import java.util.Date;
2728
import java.net.URL;
2829
import java.util.Date;
2930
import java.util.Map;
@@ -157,6 +158,11 @@ public Map<String, Object> createPhoto(PhotoModel photo, UUID jobId) {
157158
if (!Strings.isNullOrEmpty(imageDescription)) {
158159
builder.addFormDataPart("description", imageDescription);
159160
}
161+
Date imageUploadedTime = photo.getUploadedTime();
162+
if (imageUploadedTime != null) {
163+
long timestampInSeconds = imageUploadedTime.getTime() / 1000;
164+
builder.addFormDataPart("uploaded_time", String.valueOf(timestampInSeconds));
165+
}
160166

161167
@SuppressWarnings("unchecked")
162168
Map<String, Object> responseData =
@@ -206,6 +212,11 @@ public Map<String, Object> createVideo(VideoModel video, UUID jobId) {
206212
if (!Strings.isNullOrEmpty(imageDescription)) {
207213
builder.addFormDataPart("description", imageDescription);
208214
}
215+
Date videoUploadedTime = video.getUploadedTime();
216+
if (videoUploadedTime != null) {
217+
long timestampInSeconds = videoUploadedTime.getTime() / 1000;
218+
builder.addFormDataPart("uploaded_time", String.valueOf(timestampInSeconds));
219+
}
209220

210221
@SuppressWarnings("unchecked")
211222
Map<String, Object> responseData =

extensions/data-transfer/portability-data-transfer-synology/src/test/java/org/datatransferproject/datatransfer/synology/service/SynologyDTPServiceTest.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.io.IOException;
3333
import java.io.InputStream;
3434
import java.net.MalformedURLException;
35+
import java.util.Date;
3536
import java.util.HashMap;
3637
import java.util.Map;
3738
import java.util.UUID;
@@ -201,14 +202,16 @@ public class CreateMedia {
201202
private final String fetchUrl = "https://example.com";
202203
private final String description = "desc";
203204
private final String itemId = "itemId";
205+
private final Long uploadedTimestampInSeconds = 1718697600L; // 2024-06-18 00:00:00 UTC
204206

205207
public Stream<Object> provideMediaObjectsInTempStore() {
208+
Date uploadedTime = new Date(uploadedTimestampInSeconds * 1000);
206209
return Stream.of(
207-
new PhotoModel(itemName, fetchUrl, description, "mediaType", itemId, null, true),
208-
new VideoModel(itemName, fetchUrl, description, "format", itemId, null, true, null));
210+
new PhotoModel(itemName, fetchUrl, description, "mediaType", itemId, null, true, uploadedTime),
211+
new VideoModel(itemName, fetchUrl, description, "format", itemId, null, true, uploadedTime));
209212
}
210213

211-
public Stream<Object> provideMediaObjectsWithoutDescriptionInTempStore() {
214+
public Stream<Object> provideMediaObjectsWithoutDescriptionAndUploadedTimeInTempStore() {
212215
return Stream.of(
213216
new PhotoModel(itemName, fetchUrl, null, "mediaType", itemId, null, true),
214217
new VideoModel(itemName, fetchUrl, null, "format", itemId, null, true, null));
@@ -321,9 +324,9 @@ public void shouldThrowExceptionIfFailedToGetStream(DownloadableFile item)
321324
}
322325

323326
@ParameterizedTest(
324-
name = "shouldSendPostRequestWithCorrectFormBodyWithDescription [{index}] {0}")
327+
name = "shouldSendPostRequestWithCorrectFormBodyWithDescriptionAndUploadedTime [{index}] {0}")
325328
@MethodSource("provideMediaObjectsInTempStore")
326-
public void shouldSendPostRequestWithCorrectFormBodyWithDescription(DownloadableFile item)
329+
public void shouldSendPostRequestWithCorrectFormBodyWithDescriptionAndUploadedTime(DownloadableFile item)
327330
throws IOException {
328331
byte[] mockImage = new byte[] {1, 2, 3};
329332
InputStream mockInputStream = new ByteArrayInputStream(mockImage);
@@ -357,7 +360,8 @@ public void shouldSendPostRequestWithCorrectFormBodyWithDescription(Downloadable
357360
"service", exportingService,
358361
"item_id", itemId,
359362
"title", itemName,
360-
"description", description);
363+
"description", description,
364+
"uploaded_time", String.valueOf(uploadedTimestampInSeconds));
361365

362366
for (MultipartBody.Part part : multipartBody.parts()) {
363367
String partName =
@@ -379,8 +383,8 @@ public void shouldSendPostRequestWithCorrectFormBodyWithDescription(Downloadable
379383
}
380384

381385
@ParameterizedTest(
382-
name = "shouldSendPostRequestWithCorrectFormBodyWithoutDescription [{index}] {0}")
383-
@MethodSource("provideMediaObjectsWithoutDescriptionInTempStore")
386+
name = "shouldSendPostRequestWithCorrectFormBodyWithoutDescriptionAndUploadedTime [{index}] {0}")
387+
@MethodSource("provideMediaObjectsWithoutDescriptionAndUploadedTimeInTempStore")
384388
public void shouldSendPostRequestWithCorrectFormBodyWithoutDescription(DownloadableFile item)
385389
throws IOException {
386390
byte[] mockImage = new byte[] {1, 2, 3};

0 commit comments

Comments
 (0)