diff --git a/CHANGELOG.md b/CHANGELOG.md index ad81ada..cfcfc65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,11 @@ changes, see Git history. Each release is tagged in Git and on the Docker repository [`scottlamb/moonfire-nvr`](https://hub.docker.com/r/scottlamb/moonfire-nvr). +## unreleased + +* fix [#182](https://github.com/scottlamb/moonfire-nvr/issues/182): error + on upgrade from schema 6 to schema 7 when a camera's `onvif_host` is empty. + ## `v0.7.1` (2021-10-27) * bugfix: editing a camera from `nvr config` would erroneously clear the diff --git a/server/db/upgrade/v6_to_v7.rs b/server/db/upgrade/v6_to_v7.rs index 9bf28ab..3e63c03 100644 --- a/server/db/upgrade/v6_to_v7.rs +++ b/server/db/upgrade/v6_to_v7.rs @@ -3,7 +3,7 @@ // SPDX-License-Identifier: GPL-v3.0-or-later WITH GPL-3.0-linking-exception /// Upgrades a version 6 schema to a version 7 schema. -use failure::{format_err, Error}; +use failure::{format_err, Error, ResultExt}; use fnv::FnvHashMap; use log::debug; use rusqlite::{named_params, params}; @@ -255,8 +255,13 @@ fn copy_cameras(tx: &rusqlite::Transaction) -> Result<(), Error> { let config = CameraConfig { description: description.take().unwrap_or_default(), onvif_base_url: onvif_host + // Older releases set the onvif host to the empty string instead + // of using a SQL NULL, so convert empty to None here. + // https://github.com/scottlamb/moonfire-nvr/issues/182 + .filter(|h| !h.is_empty()) .map(|h| Url::parse(&format!("http://{}/", h))) - .transpose()?, + .transpose() + .with_context(|_| "bad onvif_host")?, username: username.take().unwrap_or_default(), password: password.take().unwrap_or_default(), ..Default::default()