diff options
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/serverconnection/ImageProcessor.java')
-rw-r--r-- | src/main/java/org/openslx/imagemaster/serverconnection/ImageProcessor.java | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/src/main/java/org/openslx/imagemaster/serverconnection/ImageProcessor.java b/src/main/java/org/openslx/imagemaster/serverconnection/ImageProcessor.java index 272b924..05c094b 100644 --- a/src/main/java/org/openslx/imagemaster/serverconnection/ImageProcessor.java +++ b/src/main/java/org/openslx/imagemaster/serverconnection/ImageProcessor.java @@ -2,6 +2,7 @@ package org.openslx.imagemaster.serverconnection; import java.sql.Timestamp; import java.util.HashMap; +import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -32,6 +33,11 @@ public class ImageProcessor * Value: uploadingImageInfos */ private static HashMap<String, UploadingImageInfos> uploadingImages = new HashMap<>(); + + /** + * The UUIDs of the images that need to be checked by the crc checker. + */ + private static List<String> imagesToCheck = new LinkedList<>(); /** * The downloading clients. @@ -62,7 +68,7 @@ public class ImageProcessor uploadDone( uuid ); return new UploadInfos( null, missing ); } - uploadingImages.get( uuid ).setLastSentBlocks( missing ); + uploadingImages.get( uuid ).addNotCheckedBlocks( missing ); return new UploadInfos( uploadingImages.get( uuid ).getToken(), missing ); } @@ -79,15 +85,16 @@ public class ImageProcessor // TODO: proper synchronization, interface is multi threaded. // should synchronize operations on the map (use concurrent map) and then synchronize on the uploading image // when handing the missing blocks etc... - uploadingImages.put( uuid, new UploadingImageInfos( token, allBlocks, serverSessionId, new Timestamp( System.currentTimeMillis() ), uuid ) ); + uploadingImages.put( uuid, new UploadingImageInfos( token, allBlocks, serverSessionId, new Timestamp( System.currentTimeMillis() ), uuid, filepath, "CRCFILE" ) ); DbImage.insert( imageData, System.currentTimeMillis(), token, allBlocks, serverSessionId, filepath ); - + imagesToCheck.add( uuid ); + List<Integer> missing = getMissingBlocks( uuid, AMOUNT ); if ( missing.isEmpty() ) { // TODO: if this is empty, check if there are pending blocks and if so, request them again uploadDone( uuid ); } - uploadingImages.get( uuid ).setLastSentBlocks( missing ); + uploadingImages.get( uuid ).addNotCheckedBlocks( missing ); return new UploadInfos( token, missing ); } } @@ -169,7 +176,7 @@ public class ImageProcessor } synchronized ( image ) { - image.setLastSentBlocks( result ); + image.addNotCheckedBlocks( result ); } return result; @@ -183,6 +190,9 @@ public class ImageProcessor */ private static void uploadDone( String uuid ) { + synchronized (imagesToCheck) { + imagesToCheck.remove( uuid ); + } UploadingImageInfos image; synchronized ( uploadingImages ) { image = uploadingImages.remove( uuid ); @@ -192,6 +202,17 @@ public class ImageProcessor // remove the connection so that it can be used by a new client ConnectionHandler.removeConnection( image.getToken() ); } + + public static List<UploadingImageInfos> getImagesToCheck() + { + List<UploadingImageInfos> result = new LinkedList<>(); + Iterator<String> iter = imagesToCheck.iterator(); + while ( iter.hasNext() ) { + result.add( uploadingImages.get( iter.next() ) ); + } + + return result; + } /** * Checks pending uploads in database and adds them to process list again. @@ -202,7 +223,7 @@ public class ImageProcessor for ( DbImage image : list ) { String token = image.token; ConnectionHandler.addConnection( token, image.imagePath, ConnectionData.UPLOADING ); - UploadingImageInfos infos = new UploadingImageInfos( token, image.missingBlocks, image.serverSessionId, image.timestamp, image.uuid ); + UploadingImageInfos infos = new UploadingImageInfos( token, image.missingBlocks, image.serverSessionId, image.timestamp, image.uuid, image.imagePath, "CRCFILE" ); uploadingImages.put( image.uuid, infos ); } log.info( "Added " + list.size() + " pending upload(s) to process list again." ); |