summaryrefslogtreecommitdiff
path: root/raphodo/interprocess.py
diff options
context:
space:
mode:
Diffstat (limited to 'raphodo/interprocess.py')
-rw-r--r--raphodo/interprocess.py42
1 files changed, 29 insertions, 13 deletions
diff --git a/raphodo/interprocess.py b/raphodo/interprocess.py
index 577438d..2b877ef 100644
--- a/raphodo/interprocess.py
+++ b/raphodo/interprocess.py
@@ -28,8 +28,7 @@ import shlex
import time
from collections import deque, namedtuple
from typing import Optional, Set, List, Dict, Sequence, Any, Tuple
-import signal
-import ctypes
+
import psutil
@@ -552,12 +551,15 @@ class LoadBalancer:
sink_port = args.send
logging_port = args.logging
- self.logger_publisher = ProcessLoggerPublisher(context=context,
- name=worker_type,
- notification_port=args.logging)
+ self.logger_publisher = ProcessLoggerPublisher(
+ context=context, name=worker_type, notification_port=args.logging
+ )
- logging.debug("{} load balancer waiting to be notified how many workers to "
- "initialize...".format(worker_type))
+ logging.debug(
+ "{} load balancer waiting to be notified how many workers to initialize...".format(
+ worker_type
+ )
+ )
no_workers = int(reply.recv())
logging.debug("...{} load balancer will use {} workers".format(worker_type, no_workers))
reply.send(str(frontend_port).encode())
@@ -1229,7 +1231,8 @@ class ScanResults:
sample_photo: Optional[Photo]=None,
sample_video: Optional[Video]=None,
problems: Optional[ScanProblems]=None,
- fatal_error: Optional[bool]=None) -> None:
+ fatal_error: Optional[bool]=None,
+ entire_video_required: Optional[bool]=None) -> None:
self.rpd_files = rpd_files
self.file_type_counter = file_type_counter
self.file_size_sum = file_size_sum
@@ -1242,6 +1245,7 @@ class ScanResults:
self.sample_video = sample_video
self.problems = problems
self.fatal_error = fatal_error
+ self.entire_video_required = entire_video_required
class CopyFilesArguments:
@@ -1457,7 +1461,8 @@ class GenerateThumbnailsArguments:
frontend_port: int,
log_gphoto2: bool,
camera: Optional[str]=None,
- port: Optional[str]=None) -> None:
+ port: Optional[str]=None,
+ entire_video_required: Optional[bool]=None) -> None:
"""
List of files for which thumbnails are to be generated.
All files are assumed to have the same scan id.
@@ -1478,6 +1483,8 @@ class GenerateThumbnailsArguments:
camera, this is the name of the camera, else None
:param port: If the thumbnails are being downloaded from a
camera, this is the port of the camera, else None
+ :param entire_video_required: if the entire video is
+ required to extract the thumbnail
"""
self.rpd_files = rpd_files
@@ -1489,9 +1496,11 @@ class GenerateThumbnailsArguments:
self.frontend_port = frontend_port
if camera is not None:
assert port is not None
+ assert entire_video_required is not None
self.camera = camera
self.port = port
self.log_gphoto2 = log_gphoto2
+ self.entire_video_required = entire_video_required
class GenerateThumbnailsResults:
@@ -1617,7 +1626,9 @@ class ScanManager(PublishPullPipelineManager):
Handles the processes that scan devices (cameras, external devices,
this computer path)
"""
- scannedFiles = pyqtSignal('PyQt_PyObject', 'PyQt_PyObject', FileTypeCounter, 'PyQt_PyObject')
+ scannedFiles = pyqtSignal(
+ 'PyQt_PyObject', 'PyQt_PyObject', FileTypeCounter, 'PyQt_PyObject', bool
+ )
deviceError = pyqtSignal(int, CameraErrorCode)
deviceDetails = pyqtSignal(int, 'PyQt_PyObject', 'PyQt_PyObject', str)
scanProblems = pyqtSignal(int, 'PyQt_PyObject')
@@ -1633,8 +1644,14 @@ class ScanManager(PublishPullPipelineManager):
if data.rpd_files is not None:
assert data.file_type_counter
assert data.file_size_sum
- self.scannedFiles.emit(data.rpd_files, (data.sample_photo, data.sample_video),
- data.file_type_counter, data.file_size_sum)
+ assert data.entire_video_required is not None
+ self.scannedFiles.emit(
+ data.rpd_files,
+ (data.sample_photo, data.sample_video),
+ data.file_type_counter,
+ data.file_size_sum,
+ data.entire_video_required
+ )
else:
assert data.scan_id is not None
if data.error_code is not None:
@@ -1651,7 +1668,6 @@ class ScanManager(PublishPullPipelineManager):
self.fatalError.emit(data.scan_id)
-
class BackupManager(PublishPullPipelineManager):
"""
Each backup "device" (it could be an external drive, or a user-