diff --git a/CHANGELOG.md b/CHANGELOG.md index ef1fb97f..03470110 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -98,11 +98,23 @@ ## 1.1.2 (Unreleased) +### Improvements + +* Added deletion of `*.pyc` files to `python setup.py clean` command, should help tremendously when switching branches (backported + from [9e014eb](https://github.com/foosel/OctoPrint/commit/9e014eba1feffde11ed0601d9c911b8cac9f3fb0)) + ### Bug Fixes * [#634](https://github.com/foosel/OctoPrint/pull/634) - Fixed missing `branch` fields in version dicts generated by versioneer * [IRC] Don't hiccup on slic3r filament_diameter comments generated for multi extruder setups +* Small fixes for timelapse creation: + - [#344](https://github.com/foosel/OctoPrint/issues/344) - Made timelapses capable of coping with missing captures in between by decrementing the image counter again if there + was an error fetching the latest image from the snapshot URL (backport of [1a7a468](https://github.com/foosel/OctoPrint/commit/1a7a468eb65fdf2a13b4c7a7723280e822c9c34b) + and [bf9d5ef](https://github.com/foosel/OctoPrint/commit/bf9d5efe43a1e57aacd8512125082ddca06b4efc)) + - [#693](https://github.com/foosel/OctoPrint/issues/693) - Try not to capture an image if image counter is still unset + - [unreported] Synchronize image counter decrementing as well as incrementing to prevent rare race conditions when generating the + image file names ## 1.1.1 (2014-10-27) diff --git a/setup.py b/setup.py index 26876883..22db85f6 100644 --- a/setup.py +++ b/setup.py @@ -96,6 +96,26 @@ class CleanCommand(Command): file_handler=delete_file ) + # pyc files + def delete_folder_if_empty(path, applied_handler): + if not applied_handler: + return + if len(os.listdir(path)) == 0: + shutil.rmtree(path) + print "Deleted %s since it was empty" % path + + def delete_file(path): + os.remove(path) + print "Deleted %s" % path + + import fnmatch + _recursively_handle_files( + os.path.abspath("src"), + lambda name: fnmatch.fnmatch(name.lower(), "*.pyc"), + folder_handler=delete_folder_if_empty, + file_handler=delete_file + ) + class NewTranslation(Command): description = "create a new translation" diff --git a/src/octoprint/timelapse.py b/src/octoprint/timelapse.py index d737ed84..24d1dfce 100644 --- a/src/octoprint/timelapse.py +++ b/src/octoprint/timelapse.py @@ -227,8 +227,12 @@ class Timelapse(object): self._logger.warn("Cannot capture image, capture directory is unset") return + if self._imageNumber is None: + self._logger.warn("Cannot capture image, image number is unset") + return + with self._captureMutex: - filename = os.path.join(self._captureDir, "tmp_%05d.jpg" % (self._imageNumber)) + filename = os.path.join(self._captureDir, "tmp_%05d.jpg" % self._imageNumber) self._imageNumber += 1 self._logger.debug("Capturing image to %s" % filename) captureThread = threading.Thread(target=self._captureWorker, kwargs={"filename": filename}) @@ -243,8 +247,9 @@ class Timelapse(object): self._logger.debug("Image %s captured from %s" % (filename, self._snapshotUrl)) except: self._logger.exception("Could not capture image %s from %s, decreasing image counter again" % (filename, self._snapshotUrl)) - if self._imageNumber is not None and self._imageNumber > 0: - self._imageNumber -= 1 + with self._captureMutex: + if self._imageNumber is not None and self._imageNumber > 0: + self._imageNumber -= 1 eventManager().fire(Events.CAPTURE_DONE, {"file": filename}) def _createMovie(self, success=True):