public ScheduleItem(objectsScheduleEntry se, int index = 0) { Name = FormatTime(se.time) + "\t" + FormatDays(se.daysofweek.Split(',')) + " \t" + Helper.ScheduleDescription(se.typeid); Value = se; Index = index; }
private void ddlCopyFrom_SelectedIndexChanged(object sender, EventArgs e) { if (ddlCopyFrom.SelectedIndex > 0) { if (MessageBox.Show(LocRm.GetString("Confirm"), "", MessageBoxButtons.YesNo) == DialogResult.Yes) { var mic = MainForm.Microphones.SingleOrDefault( p => p.id == Convert.ToInt32(((ListItem)ddlCopyFrom.SelectedItem).Value)); if (mic != null) { MainForm.Schedule.RemoveAll(p => p.objectid == VolumeLevel.ObjectID && p.objecttypeid == 1); List <objectsScheduleEntry> scheds = MainForm.Schedule.Where(p => p.objecttypeid == 1 && p.objectid == mic.id).ToList(); foreach (var s in scheds) { var t = new objectsScheduleEntry { active = s.active, daysofweek = s.daysofweek, objectid = VolumeLevel.ObjectID, objecttypeid = 2, parameter = s.parameter, time = s.time, typeid = s.typeid }; MainForm.Schedule.Add(t); } scheduleEditor1.RenderSchedule(); } } ddlCopyFrom.SelectedIndex = 0; } }
public ScheduleRow(objectsScheduleEntry ose) { Ose = ose; InitializeComponent(); chkSummary.Text = GetSummary(ose); chkSummary.Checked = Ose.active; BackColor = DefaultBackColor; }
private void button1_Click(object sender, EventArgs e) { var ose = new objectsScheduleEntry { objectid = Io.ObjectID, objecttypeid = Io.ObjectTypeID, daysofweek = "", parameter = "", time = (int)DateTime.Now.TimeOfDay.TotalMinutes, active = true }; using (var see = new ScheduleEntryEditor()) { see.ose = ose; if (see.ShowDialog(this) == DialogResult.OK) { MainForm.Schedule.Add(see.ose); RenderSchedule(); } } }
private void button1_Click(object sender, EventArgs e) { var ose = new objectsScheduleEntry { objectid = Io.ObjectID, objecttypeid = Io.ObjectTypeID, daysofweek = "", parameter = "", time = (int) DateTime.Now.TimeOfDay.TotalMinutes, active = true }; using (var see = new ScheduleEntryEditor()) { see.ose = ose; if (see.ShowDialog(this) == DialogResult.OK) { MainForm.Schedule.Add(see.ose); RenderSchedule(); } } }
private void ActionSchedule(objectsScheduleEntry en, out bool enable, out bool disable) { enable = false; disable = false; switch (en.typeid) { case 0: enable = true; break; case 1: disable = true; break; case 2: ForcedRecording = true; break; case 3: ForcedRecording = false; break; case 4: Camobject.detector.recordondetect = true; Camobject.detector.recordonalert = false; break; case 5: Camobject.detector.recordondetect = false; Camobject.detector.recordonalert = true; break; case 6: Camobject.detector.recordondetect = false; Camobject.detector.recordonalert = false; break; case 7: Camobject.alerts.active = true; break; case 8: Camobject.alerts.active = false; break; case 9: { var a = MainForm.Actions.FirstOrDefault(p => p.ident == en.parameter); if (a != null) a.active = true; } break; case 10: { var a = MainForm.Actions.FirstOrDefault(p => p.ident == en.parameter); if (a != null) a.active = false; } break; case 11: Camobject.recorder.timelapseenabled = true; break; case 12: Camobject.recorder.timelapseenabled = false; CloseTimeLapseWriter(); break; case 13: Camobject.ftp.enabled = true; break; case 14: Camobject.ftp.enabled = false; break; case 15: Camobject.recorder.ftpenabled = true; break; case 16: Camobject.recorder.ftpenabled = false; break; case 17: Camobject.savelocal.enabled = true; break; case 18: Camobject.savelocal.enabled = false; break; case 19: Camobject.ptzschedule.active = true; break; case 20: Camobject.ptzschedule.active = false; break; case 21: Camobject.settings.messaging = true; break; case 22: Camobject.settings.messaging = false; break; case 23: Camobject.settings.ptzautotrack = true; break; case 24: Camobject.settings.ptzautotrack = false; break; } }
private void SaveJson(String sPhysicalFilePath, string sHttpVersion, string sBuffer, ref HttpRequest req) { string resp = ""; int ot, oid; int.TryParse(GetVar(sPhysicalFilePath, "oid"), out oid); int.TryParse(GetVar(sPhysicalFilePath, "ot"), out ot); bool saveObjects = true; try { var d = getJSONObject(sBuffer); if (d == null) return; String n = d.name; resp = "{\"actionResult\":\"ok\"}"; bool apply = false; string nl = n.ToLowerInvariant(); switch (nl) { default: { resp = "{\"error\":\"" + nl + " not recognized\"}"; saveObjects = false; } break; case "liveupdate": { switch (ot) { case 1: { var c = MainForm.Microphones.FirstOrDefault(p => p.id == oid); if (c != null) { PopulateObject(d, c); } } break; case 2: { var c = MainForm.Cameras.FirstOrDefault(p => p.id == oid); if (c != null) { PopulateObject(d, c); } } break; } apply = true; saveObjects = false; } break; case "editpelco": { var c = MainForm.Cameras.FirstOrDefault(p => p.id == oid); if (c != null) { PopulateObject(d, c); } } break; case "settings": { PopulateObject(d, MainForm.Conf); if (!string.IsNullOrEmpty(MainForm.Conf.Archive)) { MainForm.Conf.Archive = MainForm.Conf.Archive.Replace("/", @"\"); if (!MainForm.Conf.Archive.EndsWith(@"\")) MainForm.Conf.Archive += @"\"; } ReloadAllowedIPs(); ReloadAllowedReferrers(); MainForm.SaveConfig(); saveObjects = false; } break; case "editftpserver": { resp = "{\"actionResult\":\"reloadFTPServers\"}"; if (d.ident == "new") { d.ident = Guid.NewGuid().ToString(); var cfgs = new configurationServer {ident = d.ident}; var l = MainForm.Conf.FTPServers.ToList(); l.Add(cfgs); MainForm.Conf.FTPServers = l.ToArray(); } PopulateObject(d, MainForm.Conf.FTPServers.First(p => p.ident == d.ident.ToString())); MainForm.SaveConfig(); saveObjects = false; } break; case "editstorage": { resp = "{\"actionResult\":\"reloadStorage\"}"; if (d.ident.ToString() == "new") { d.ident = MainForm.Conf.MediaDirectories.Max(p => p.ID) + 1; } int idnew = Convert.ToInt32(d.ident); d.ident = idnew; var md = MainForm.Conf.MediaDirectories.FirstOrDefault(p => p.ID == idnew); bool ndir = false; if (md == null) { md = new configurationDirectory {ID = d.ident, Entry = ""}; ndir = true; } var exdir = md.Entry; PopulateObject(d, md); md.Entry = md.Entry.Replace("/", @"\"); if (!md.Entry.EndsWith(@"\")) md.Entry += @"\"; try { if (!Directory.Exists(md.Entry)) { throw new Exception("Invalid Directory"); } } catch (Exception ex) { if (exdir != "") md.Entry = exdir; resp = "{\"actionResult\":\"reloadStorage\",\"error\":\"" + ex.Message.JsonSafe() + "\"}"; break; } if (ndir) { var l = MainForm.Conf.MediaDirectories.ToList(); l.Add(md); MainForm.Conf.MediaDirectories = l.ToArray(); } else { var di = new DirectoryInfo(exdir); var di2 = new DirectoryInfo(md.Entry); if (di.ToString() != di2.ToString()) { var t = new Thread(() => Helper.CopyFolder(exdir, md.Entry)) {IsBackground = true}; t.Start(); resp = "{\"actionResult\":\"reloadStorage\",\"message\":\"Media is being copied to the new location.\"}"; } } MainForm.SaveConfig(); saveObjects = false; } break; case "editcamera": { var c = MainForm.Cameras.FirstOrDefault(p => p.id == oid); if (c != null) { var olddir = c.directory; PopulateObject(d, c); apply = true; var newdir = c.directory; if (olddir.ToLowerInvariant() != newdir.ToLowerInvariant()) { if (!Helper.IsAlphaNumeric(newdir)) { c.directory = olddir; resp = "{\"error\":\"Directory invalid. Should be alphanumeric eg: ABCD.\"}"; } else { var fullolddir = Helper.GetMediaDirectory(2, c.id) + "video\\" + olddir + "\\"; var fullnewdir = Helper.GetMediaDirectory(2, c.id) + "video\\" + newdir + "\\"; try { Directory.Move(fullolddir, fullnewdir); } catch (Exception ex) { c.directory = olddir; resp = "{\"error\":\""+ex.Message.JsonSafe()+"\"}"; } } } MainForm.InstanceReference.SaveObjectList(false); } } break; case "motionzones": { var c = MainForm.Cameras.FirstOrDefault(p => p.id == oid); if (c != null) { var lz = new List<objectsCameraDetectorZone>(); if (d.zones != null) { foreach (var z in d.zones) { var x = Convert.ToInt32(z["x"].Value); var y = Convert.ToInt32(z["y"].Value); var w = Convert.ToInt32(z["w"].Value); var h = Convert.ToInt32(z["h"].Value); lz.Add(new objectsCameraDetectorZone { height = h, left = x, top = y, width = w }); } } c.detector.motionzones = lz.ToArray(); var cw = MainForm.InstanceReference.GetCameraWindow(oid); cw?.Camera?.SetMotionZones(lz.ToArray()); } saveObjects = false; } break; case "screenarea": { var c = MainForm.Cameras.FirstOrDefault(p => p.id == oid); if (c != null) { if (d.zones != null) { var z = d.zones[0]; int si; int.TryParse(c.settings.videosourcestring, out si); if (Screen.AllScreens.Length <= si) si = 0; var s = Screen.AllScreens[si]; var x = Convert.ToInt32((Convert.ToDecimal(z["x"].Value) / 100) * s.WorkingArea.Width); var y = Convert.ToInt32((Convert.ToDecimal(z["y"].Value) / 100) * s.WorkingArea.Height); var w = Convert.ToInt32((Convert.ToDecimal(z["w"].Value) / 100) * s.WorkingArea.Width); var h = Convert.ToInt32((Convert.ToDecimal(z["h"].Value) / 100) * s.WorkingArea.Height); //even height and width if (w % 2 != 0) w -= 1; if (h % 2 != 0) h -= 1; c.settings.desktoparea = x + "," + y + "," + w + "," + h; } else c.settings.desktoparea = ""; } saveObjects = false; } break; case "pip": { var c = MainForm.Cameras.FirstOrDefault(p => p.id == oid); if (c != null) { string cfg = ""; if (d.zones != null) { foreach (var z in d.zones) { var id = Convert.ToInt32(z["id"].Value); var x = Convert.ToInt32(z["x"].Value); var y = Convert.ToInt32(z["y"].Value); var w = Convert.ToInt32(z["w"].Value); var h = Convert.ToInt32(z["h"].Value); cfg += id + "," + x + "," + y + "," + w + "," + h + "|"; } } c.settings.pip.config = cfg.Trim('|'); var cw = MainForm.InstanceReference.GetCameraWindow(oid); if (cw?.Camera != null) { cw.Camera.PiPConfig = c.settings.pip.config; } } saveObjects = false; } break; case "editmicrophone": { var c = MainForm.Microphones.FirstOrDefault(p => p.id == oid); if (c != null) { var olddir = c.directory; PopulateObject(d, c); apply = true; var newdir = c.directory; if (olddir.ToLowerInvariant() != newdir.ToLowerInvariant()) { if (!Helper.IsAlphaNumeric(newdir)) { c.directory = olddir; resp = "{\"error\":\"Directory invalid. Should be alphanumeric eg: ABCD.\"}"; } else { var fullolddir = Helper.GetMediaDirectory(2, c.id) + "video\\" + olddir + "\\"; var fullnewdir = Helper.GetMediaDirectory(2, c.id) + "video\\" + newdir + "\\"; try { Directory.Move(fullolddir, fullnewdir); } catch (Exception ex) { c.directory = olddir; resp = "{\"error\":\"" + ex.Message.JsonSafe() + "\"}"; } } } MainForm.InstanceReference.SaveObjectList(false); } } break; case "editschedule": { resp = "{\"actionResult\":\"reloadSchedule\"}"; objectsScheduleEntry s = null; if (d.ident.ToString() == "new") { s = new objectsScheduleEntry { active = true, time = 0, daysofweek = "", objectid = oid, objecttypeid = ot, parameter = "", typeid = 0 }; MainForm.Schedule.Add(s); } else { var l = MainForm.Schedule.Where(p => p.objectid == oid && p.objecttypeid == ot).ToList(); int i = Convert.ToInt32(d.ident); if (i < l.Count) { s = l[i]; } } if (s != null) { PopulateObject(d, s); } } break; case "editptzschedule": { resp = "{\"actionResult\":\"reloadPTZSchedule\"}"; var oc = MainForm.Cameras.First(p => p.id == oid); objectsCameraPtzscheduleEntry pe; if (d.ident.ToString() == "new") { pe = new objectsCameraPtzscheduleEntry { command = "", time = new DateTime() }; PopulateObject(d, pe); var l = oc.ptzschedule.entries.ToList(); l.Add(pe); oc.ptzschedule.entries = l.ToArray(); } else { int i = Convert.ToInt32(d.ident); var l = oc.ptzschedule.entries.ToList(); if (i < l.Count) { pe = l[i]; PopulateObject(d, pe); } } } break; case "editaction": resp = "{\"actionResult\":\"reloadActions\"}"; objectsActionsEntry a; if (d.ident.ToString() == "new") { a = new objectsActionsEntry { type = "", mode = "", active = true, objectid = oid, objecttypeid = ot, ident = Guid.NewGuid().ToString() }; MainForm.Actions.Add(a); resp = resp.Replace("PARAMS", ""); } else { a = MainForm.Actions.FirstOrDefault(p => p.ident == d.ident.ToString()); } if (a != null) { var p1 = a.param1; PopulateObject(d, a); if (Helper.WebRestrictedAlertTypes.Contains(a.type)) { a.param1 = a.param1.Replace("/", "\\"); if (a.param1.IndexOf("\\", StringComparison.Ordinal)!=-1) { resp = "{\"error\":\"Only filenames (not paths) are allowed in actions via the website\"}"; a.param1 = p1; } } MainForm.InstanceReference.SaveObjectList(false); } break; case "editaudiosource": { var c = MainForm.Microphones.FirstOrDefault(p => p.id == oid); if (c != null) { PopulateObject(d, c); var vl = MainForm.InstanceReference.GetVolumeLevel(c.id); if (vl != null) { vl.Disable(); vl.Enable(); } } resp = "{\"actionResult\":\"waiteditobject\"}"; } break; case "editvideosource": { var c = MainForm.Cameras.FirstOrDefault(p => p.id == oid); if (c != null) { PopulateObject(d, c); if (c.settings.sourceindex == 9) { string url = c.settings.onvifident; Uri u; if (!Uri.TryCreate(url, UriKind.Absolute, out u)) { resp = "{\"error\":\"URI invalid\"}"; break; } string addr = u.DnsSafeHost; var dev = MainForm.ONVIFDevices.FirstOrDefault(p => p.Address == addr); if (dev == null) { if (NV(c.settings.namevaluesettings, "profileid") == "") c.settings.namevaluesettings = NVSet(c.settings.namevaluesettings, "profileid", "0"); } else { TransportProtocol tp; if (!Enum.TryParse(NV(c.settings.namevaluesettings, "transport"), true, out tp)) tp = TransportProtocol.rtsp; dev.Account = new NetworkCredential { UserName = c.settings.login, Password = c.settings.password }; var sessionFactory = new NvtSessionFactory(dev.Account); var profilename = NV(c.settings.namevaluesettings, "profilename"); foreach (var uri in dev.Uris) { var f = sessionFactory.CreateSession(uri); dev.URL = uri.ToString(); Profile[] profiles; try { profiles = f.GetProfiles().RunSynchronously(); } catch (Exception ex) { Logger.LogExceptionToFile(ex, "ONVIF"); continue; } dev.Profiles = profiles; var strSetup = new StreamSetup { transport = new Transport() }; strSetup.transport.protocol = tp; int i = 0; foreach (var p in profiles) { try { if (p.token == profilename) { var strUri = f.GetStreamUri(strSetup, p.token).RunSynchronously(); string urlAuth = strUri.uri.Replace("://", "://[USERNAME]:[PASSWORD]@"); string streamSize = p.videoEncoderConfiguration.resolution.width + "x" + p.videoEncoderConfiguration.resolution.height; c.settings.videosourcestring = urlAuth; c.settings.namevaluesettings = NVSet(c.settings.namevaluesettings, "profileid", i.ToString(CultureInfo.InvariantCulture)); c.settings.namevaluesettings = NVSet(c.settings.namevaluesettings, "streamsize", streamSize); string[] sz = streamSize.Split('x'); c.settings.desktopresizewidth = Convert.ToInt32(sz[0]); c.settings.desktopresizeheight = Convert.ToInt32(sz[1]); break; } i++; } catch (Exception ex) { Logger.LogExceptionToFile(ex, "ONVIF"); } } } } c.ptz = -5; } var cw = MainForm.InstanceReference.GetCameraWindow(c.id); if (cw != null) { cw.Disable(); cw.Enable(); } resp = "{\"actionResult\":\"waiteditobject\"}"; } } break; } if (apply) { var io = MainForm.InstanceReference.GetISpyControl(ot, oid); io?.Apply(); } } catch (Exception ex) { Logger.LogExceptionToFile(ex, "JSON Parser"); } if (saveObjects) { try { MainForm.InstanceReference.SaveObjectList(false); } catch (Exception ex) { Logger.LogExceptionToFile(ex, "JSON Parser"); } } SendHeader(sHttpVersion, "application/json", resp.Length, " 200 OK", 0, ref req); SendToBrowser(resp, req); }
private void ddlCopyFrom_SelectedIndexChanged(object sender, EventArgs e) { if (ddlCopyFrom.SelectedIndex>0) { if (MessageBox.Show(LocRm.GetString("Confirm"), "", MessageBoxButtons.YesNo) == DialogResult.Yes) { var cam = MainForm.Cameras.SingleOrDefault( p => p.id == Convert.ToInt32(((ListItem) ddlCopyFrom.SelectedItem).Value)); if (cam != null) { MainForm.Schedule.RemoveAll(p => p.objectid == CameraControl.ObjectID && p.objecttypeid == 2); List<objectsScheduleEntry> scheds = MainForm.Schedule.Where(p => p.objecttypeid == 2 && p.objectid == cam.id).ToList(); foreach (var s in scheds) { var t = new objectsScheduleEntry { active = s.active, daysofweek = s.daysofweek, objectid = CameraControl.ObjectID, objecttypeid = 2, parameter = s.parameter, time = s.time, typeid = s.typeid }; MainForm.Schedule.Add(t); } scheduleEditor1.RenderSchedule(); } } ddlCopyFrom.SelectedIndex = 0; } }
public static objects GetObjects(string path) { var c = new objects(); try { lock (ThreadLock) { using (var fs = new FileStream(path, FileMode.Open)) { var s = new XmlSerializer(typeof (objects)); using (TextReader reader = new StreamReader(fs)) { fs.Position = 0; c = (objects) s.Deserialize(reader); } } } } catch (Exception ex) { Logger.LogExceptionToFile(ex); switch (MessageBox.Show($"Error loading file ({ex.Message}) Try again?", "Error", MessageBoxButtons.YesNo)) { case DialogResult.Yes: return GetObjects(path); } } if (c.cameras==null) c.cameras = new objectsCamera[] {}; bool addActions = c.actions == null; if (addActions) c.actions = new objectsActions { entries = new objectsActionsEntry[] { } }; bool addSchedule = c.schedule == null; if (addSchedule) c.schedule = new objectsSchedule {entries = new objectsScheduleEntry[] {}}; if (c.cameras.Select(oc => oc.settings.desktopresizewidth).Any(rw => rw == 0)) { throw new Exception("err_old_config"); } if (c.microphones==null) c.microphones = new objectsMicrophone[] {}; if (c.floorplans == null) c.floorplans = new objectsFloorplan[] {}; if (c.remotecommands == null) c.remotecommands = new objectsCommand[] {}; if (c.remotecommands.Length == 0) { c.remotecommands = GenerateRemoteCommands(); } bool bVlc = VlcHelper.VlcInstalled; MaxOrderIndex = 0; bool bAlertVlc = false; int camid = 0; string path2; //load non clones first c.cameras = c.cameras.ToList().OrderByDescending(p => p.settings.sourceindex != 10).ToArray(); c.microphones = c.microphones.ToList().OrderByDescending(p => p.settings.typeindex != 5).ToArray(); foreach (objectsCamera cam in c.cameras) { if (cam.id >= camid) camid = cam.id + 1; if (cam.settings.order == -1) { cam.settings.order = MaxOrderIndex; MaxOrderIndex++; } path2 = Helper.GetMediaDirectory(cam.settings.directoryIndex) + "video\\" + cam.directory + "\\"; if (cam.settings.sourceindex == 5 && !bVlc) { bAlertVlc = true; } if (cam.settings.youtube == null) { cam.settings.youtube = new objectsCameraSettingsYoutube { category = Conf.YouTubeDefaultCategory, tags = "iSpy, Motion Detection, Surveillance", @public = true }; } if (cam.ptzschedule == null) { cam.ptzschedule = new objectsCameraPtzschedule { active = false, entries = new objectsCameraPtzscheduleEntry[] {} }; } if (cam.settings.storagemanagement == null) { cam.settings.storagemanagement = new objectsCameraSettingsStoragemanagement { enabled = false, maxage = 72, maxsize = 1024 }; } bool migrate = false; if (cam.alertevents == null) { cam.alertevents = new objectsCameraAlertevents(); migrate = true; } if (cam.settings.cloudprovider==null) cam.settings.cloudprovider = new objectsCameraSettingsCloudprovider(); if (cam.alertevents.entries == null) cam.alertevents.entries = new objectsCameraAlerteventsEntry[] {}; if (migrate) { var l = new List<objectsCameraAlerteventsEntry>(); if (!string.IsNullOrEmpty(cam.alerts.executefile)) { l.Add(new objectsCameraAlerteventsEntry { type = "Exe", param1 = cam.alerts.executefile, param2 = cam.alerts.arguments }); } if (cam.notifications.sendemail) { l.Add(new objectsCameraAlerteventsEntry { type = "E", param1 = cam.settings.emailaddress, param2 = "True" }); } if (cam.notifications.sendsms) { l.Add(new objectsCameraAlerteventsEntry {type = "SMS", param1 = cam.settings.smsnumber}); } if (cam.alerts.maximise) { l.Add(new objectsCameraAlerteventsEntry {type = "M"}); } if (!string.IsNullOrEmpty(cam.alerts.playsound)) { l.Add(new objectsCameraAlerteventsEntry {type = "S", param1 = cam.alerts.playsound}); } string[] alertOptions = cam.alerts.alertoptions.Split(','); //beep,restore if (Convert.ToBoolean(alertOptions[0])) l.Add(new objectsCameraAlerteventsEntry {type = "B"}); if (Convert.ToBoolean(alertOptions[1])) l.Add(new objectsCameraAlerteventsEntry {type = "SW"}); if (cam.notifications.sendtwitter) { l.Add(new objectsCameraAlerteventsEntry {type = "TM"}); } if (!string.IsNullOrEmpty(cam.alerts.trigger)) { l.Add(new objectsCameraAlerteventsEntry {type = "TA", param1 = cam.alerts.trigger}); } cam.alertevents.entries = l.ToArray(); } if (addActions) { var l = c.actions.entries.ToList(); l.AddRange(cam.alertevents.entries.Select(a => new objectsActionsEntry { mode = "alert", objectid = cam.id, objecttypeid = 2, type = a.type, param1 = a.param1, param2 = a.param2, param3 = a.param3, param4 = a.param4, ident = Guid.NewGuid().ToString() })); if (!string.IsNullOrEmpty(cam.settings.emailondisconnect)) { l.Add(new objectsActionsEntry { mode = "disconnect", objectid = cam.id, objecttypeid = 2, type = "E", param1 = cam.settings.emailondisconnect, param2 = "False", ident = Guid.NewGuid().ToString() }); } c.actions.entries = l.ToArray(); } cam.newrecordingcount = 0; if (cam.settings.maxframerate == 0) cam.settings.maxframerate = 10; if (cam.settings.maxframeraterecord == 0) cam.settings.maxframeraterecord = 10; if (cam.settings.timestampfontsize == 0) cam.settings.timestampfontsize = 10; if (cam.recorder.timelapsesave == 0) cam.recorder.timelapsesave = 60; if (cam.x < 0) cam.x = 0; if (cam.y < 0) cam.y = 0; if (cam.detector.minwidth == 0) { cam.detector.minwidth = 20; cam.detector.minheight = 20; cam.detector.highlight = true; cam.settings.reconnectinterval = 0; } if (cam.settings.accessgroups == null) cam.settings.accessgroups = ""; if (cam.settings.ptztimetohome == 0) cam.settings.ptztimetohome = 100; if (cam.settings.ptzautohomedelay == 0) cam.settings.ptzautohomedelay = 30; if (cam.settings.ptzurlbase == null) cam.settings.ptzurlbase = ""; if (cam.settings.audioport <= 0) cam.settings.audioport = 80; if (cam.ftp.intervalnew < 0) cam.ftp.intervalnew = cam.ftp.interval; if (cam.ftp.server.Length>10) { var ftp = Conf.FTPServers.FirstOrDefault(p => p.name == cam.ftp.server && p.username==cam.ftp.username); if (ftp == null) { ftp = new configurationServer { ident = Guid.NewGuid().ToString(), name=cam.ftp.server, password = cam.ftp.password, port = cam.ftp.port, rename = cam.ftp.rename, server = cam.ftp.server, usepassive = cam.ftp.usepassive, username = cam.ftp.username }; var l = Conf.FTPServers.ToList(); l.Add(ftp); Conf.FTPServers = l.ToArray(); cam.ftp.ident = ftp.ident; cam.ftp.server = ""; } } if (Conf.MediaDirectories.FirstOrDefault(p => p.ID == cam.settings.directoryIndex) == null) cam.settings.directoryIndex = Conf.MediaDirectories.First().ID; if (string.IsNullOrEmpty(cam.settings.emailondisconnect)) { if (cam.settings.notifyondisconnect) { cam.settings.emailondisconnect = cam.settings.emailaddress; } } cam.detector.type = cam.detector.type.Replace("Modelling", "Modeling");//fix typo if (cam.recorder.quality == 0) cam.recorder.quality = 8; if (cam.recorder.timelapseframerate == 0) cam.recorder.timelapseframerate = 5; if (cam.detector.movementintervalnew < 0) cam.detector.movementintervalnew = cam.detector.movementinterval; if (cam.detector.nomovementintervalnew < 0) cam.detector.nomovementintervalnew = cam.detector.nomovementinterval; if (cam.directory == null) throw new Exception("err_old_config"); if (string.IsNullOrEmpty(cam.settings.ptzpelcoconfig)) cam.settings.ptzpelcoconfig = "COM1|9600|8|One|Odd|1"; if (cam.savelocal == null) { cam.savelocal = new objectsCameraSavelocal { counter = cam.ftp.counter, countermax = cam.ftp.countermax, mode = cam.ftp.mode, enabled = cam.ftp.savelocal, filename = cam.ftp.localfilename, intervalnew = cam.ftp.intervalnew, minimumdelay = cam.ftp.minimumdelay, quality = cam.ftp.quality, text = cam.ftp.text }; } if (cam.alerts.processmode == null) cam.alerts.processmode = "continuous"; if (cam.alerts.pluginconfig == null) cam.alerts.pluginconfig = ""; if (cam.ftp.quality == 0) cam.ftp.quality = 75; if (cam.ftp.countermax == 0) cam.ftp.countermax = 20; if (cam.settings.audiousername == null) { cam.settings.audiousername = ""; cam.settings.audiopassword = ""; } if (string.IsNullOrEmpty(cam.settings.timestampforecolor) || cam.settings.timestampforecolor == "0") { cam.settings.timestampforecolor = "255,255,255"; } if (string.IsNullOrEmpty(cam.settings.timestampbackcolor) || cam.settings.timestampbackcolor == "0") { cam.settings.timestampbackcolor = "70,70,70"; } if (Math.Abs(cam.detector.minsensitivity - 0) < double.Epsilon) { cam.detector.maxsensitivity = 100; //fix for old setting conversion cam.detector.minsensitivity = 100 - cam.detector.sensitivity; if (Math.Abs(cam.detector.minsensitivity - 100) < double.Epsilon) { cam.detector.minsensitivity = 20; } } if (cam.detector.minsensitivity > cam.detector.maxsensitivity) { //reset cam.detector.maxsensitivity = 100; cam.detector.minsensitivity = 20; } if (!Directory.Exists(path2)) { try { Directory.CreateDirectory(path2); } catch (IOException e) { Logger.LogExceptionToFile(e); } } if (string.IsNullOrEmpty(cam.ftp.localfilename)) { cam.ftp.localfilename = "{0:yyyy-MM-dd_HH-mm-ss_fff}.jpg"; } if (string.IsNullOrEmpty(cam.settings.audiomodel)) cam.settings.audiomodel = "None"; if (string.IsNullOrEmpty(cam.settings.timestampfont)) { cam.settings.timestampfont = FontXmlConverter.ConvertToString(Drawfont); cam.settings.timestampshowback = true; } path2 = Helper.GetMediaDirectory(cam.settings.directoryIndex) + "video\\" + cam.directory + "\\thumbs\\"; if (!Directory.Exists(path2)) { try { Directory.CreateDirectory(path2); } catch { // ignored } } path2 = Helper.GetMediaDirectory(cam.settings.directoryIndex) + "video\\" + cam.directory + "\\grabs\\"; if (!Directory.Exists(path2)) { try { Directory.CreateDirectory(path2); } catch { // ignored } } if (cam.alerts.trigger == null) cam.alerts.trigger = ""; if (string.IsNullOrEmpty(cam.rotateMode)) { cam.rotateMode = "RotateNoneFlipNone"; if (cam.rotate90) { cam.rotateMode = RotateFlipType.Rotate90FlipNone.ToString(); } if (cam.flipx) { cam.rotateMode = RotateFlipType.RotateNoneFlipX.ToString(); } if (cam.flipy) { cam.rotateMode = RotateFlipType.RotateNoneFlipY.ToString(); } if (cam.flipx && cam.flipy) { cam.rotateMode = RotateFlipType.RotateNoneFlipXY.ToString(); } } if (cam.settings.pip == null) { cam.settings.pip = new objectsCameraSettingsPip {enabled = false, config = ""}; } } int micid = 0; foreach (objectsMicrophone mic in c.microphones) { if (mic.id >= micid) micid = mic.id + 1; if (mic.settings.order == -1) { mic.settings.order = MaxOrderIndex; MaxOrderIndex++; } if (mic.directory == null) throw new Exception("err_old_config"); mic.newrecordingcount = 0; path2 = Helper.GetMediaDirectory(mic.settings.directoryIndex) + "audio\\" + mic.directory + "\\"; if (!Directory.Exists(path2)) Directory.CreateDirectory(path2); if (mic.settings.accessgroups == null) mic.settings.accessgroups = ""; if (mic.settings.storagemanagement == null) { mic.settings.storagemanagement = new objectsMicrophoneSettingsStoragemanagement { enabled = false, maxage = 72, maxsize = 1024 }; } if (Math.Abs(mic.detector.minsensitivity - (-1)) < double.Epsilon) { mic.detector.minsensitivity = mic.detector.sensitivity; mic.detector.maxsensitivity = 100; } if (mic.detector.minsensitivity > mic.detector.maxsensitivity) { //reset mic.detector.maxsensitivity = 100; mic.detector.minsensitivity = 20; } if (Conf.MediaDirectories.FirstOrDefault(p => p.ID == mic.settings.directoryIndex) == null) mic.settings.directoryIndex = Conf.MediaDirectories.First().ID; bool migrate = false; if (mic.alertevents == null) { mic.alertevents = new objectsMicrophoneAlertevents(); migrate = true; } if (mic.alertevents.entries == null) { mic.alertevents.entries = new objectsMicrophoneAlerteventsEntry[] { }; } if (migrate) { var l = new List<objectsMicrophoneAlerteventsEntry>(); if (!string.IsNullOrEmpty(mic.alerts.executefile)) { l.Add(new objectsMicrophoneAlerteventsEntry { type = "Exe", param1 = mic.alerts.executefile, param2 = mic.alerts.arguments }); } if (mic.notifications.sendemail) { l.Add(new objectsMicrophoneAlerteventsEntry { type = "E", param1 = mic.settings.emailaddress, param2 = "True" }); } if (mic.notifications.sendsms) { l.Add(new objectsMicrophoneAlerteventsEntry { type = "SMS", param1 = mic.settings.smsnumber }); } string[] alertOptions = mic.alerts.alertoptions.Split(','); //beep,restore if (Convert.ToBoolean(alertOptions[0])) l.Add(new objectsMicrophoneAlerteventsEntry { type = "B" }); if (Convert.ToBoolean(alertOptions[1])) l.Add(new objectsMicrophoneAlerteventsEntry { type = "SW" }); if (mic.notifications.sendtwitter) { l.Add(new objectsMicrophoneAlerteventsEntry { type = "TM" }); } if (!string.IsNullOrEmpty(mic.alerts.trigger)) { l.Add(new objectsMicrophoneAlerteventsEntry { type = "TA", param1 = mic.alerts.trigger }); } mic.alertevents = new objectsMicrophoneAlertevents() {entries = l.ToArray()}; } if (string.IsNullOrEmpty(mic.settings.emailondisconnect)) { if (mic.settings.notifyondisconnect) { mic.settings.emailondisconnect = mic.settings.emailaddress; } } if (addActions) { var l = c.actions.entries.ToList(); l.AddRange(mic.alertevents.entries.Select(a => new objectsActionsEntry { mode = "alert", objectid = mic.id, objecttypeid = 1, type = a.type, param1 = a.param1, param2 = a.param2, param3 = a.param3, param4 = a.param4, ident = Guid.NewGuid().ToString() })); if (!string.IsNullOrEmpty(mic.settings.emailondisconnect)) { l.Add(new objectsActionsEntry { mode = "disconnect", objectid = mic.id, objecttypeid = 1, type = "E", param1 = mic.settings.emailondisconnect, param2 = "False", ident = Guid.NewGuid().ToString() }); } c.actions.entries = l.ToArray(); } if (mic.x < 0) mic.x = 0; if (mic.y < 0) mic.y = 0; if (mic.settings.gain <= 0) mic.settings.gain = 1; if (mic.alerts.trigger == null) mic.alerts.trigger = ""; } foreach (var aa in c.actions.entries) { if (string.IsNullOrEmpty(aa.ident)) aa.ident = Guid.NewGuid().ToString(); } int fpid = 0; foreach (objectsFloorplan ofp in c.floorplans) { if (ofp.id >= fpid) fpid = ofp.id + 1; if (ofp.x < 0) ofp.x = 0; if (ofp.y < 0) ofp.y = 0; if (ofp.accessgroups == null) ofp.accessgroups = ""; if (ofp.order == -1) { ofp.order = MaxOrderIndex; MaxOrderIndex++; } } int rcid = 0; foreach (objectsCommand ocmd in c.remotecommands) { if (ocmd.id >= rcid) rcid = ocmd.id + 1; } if (addSchedule) { var l = new List<objectsScheduleEntry>(); foreach (var o in c.cameras) { foreach (var se in o.schedule.entries) { for (int i = 0; i < 10; i++) { bool startSpecified = se.start.Split(':')[0] != "-"; bool stopSpecified = se.stop.Split(':')[0] != "-"; if (!startSpecified && !stopSpecified) continue; var ose = new objectsScheduleEntry { objectid = o.id, objecttypeid = 2, daysofweek = se.daysofweek, active = se.active, parameter = "", typeid = -1, time = ParseTime(startSpecified ? se.start : se.stop) }; switch (i) { case 0: //power on if (startSpecified) ose.typeid = 0; break; case 1: //power off if (stopSpecified) { ose.time = ParseTime(se.stop); ose.typeid = 1; } break; case 2: ose.typeid = se.alerts ? 7 : 8; break; case 3: ose.typeid = se.ftpenabled ? 13 : 14; break; case 4: ose.typeid = se.messaging ? 21 : 22; break; case 5: ose.typeid = se.ptz ? 19 : 20; break; case 6: if (se.recordonalert) ose.typeid = 5; else { ose.typeid = se.recordondetect ? 4 : 6; } break; case 7: if (se.recordonstart) ose.typeid = 2; break; case 8: ose.typeid = se.savelocalenabled ? 17 : 18; break; case 9: ose.typeid = se.timelapseenabled ? 11 : 12; break; } if (ose.typeid > -1) l.Add(ose); } } } foreach (var o in c.microphones) { foreach (var se in o.schedule.entries) { for (int i = 0; i < 10; i++) { var ose = new objectsScheduleEntry { objectid = o.id, objecttypeid = 1, daysofweek = se.daysofweek, active = se.active, parameter = "", typeid = -1 }; bool startSpecified = se.start.Split(':')[0] != "-"; bool stopSpecified = se.stop.Split(':')[0] != "-"; ose.time = ParseTime(startSpecified ? se.start : se.stop); switch (i) { case 0: //power on if (startSpecified) ose.typeid = 0; break; case 1: //power off if (stopSpecified) { ose.time = ParseTime(se.stop); ose.typeid = 1; } break; case 2: ose.typeid = se.alerts ? 7 : 8; break; case 4: ose.typeid = se.messaging ? 21 : 22; break; case 6: if (se.recordonalert) ose.typeid = 5; else { ose.typeid = se.recordondetect ? 4 : 6; } break; case 7: if (se.recordonstart) ose.typeid = 2; break; } if (ose.typeid > -1) l.Add(ose); } } } c.schedule = new objectsSchedule() {entries = l.ToArray()}; } if (bAlertVlc) { MessageBox.Show(Program.Platform == "x64" ? LocRm.GetString("InstallVLCx64") .Replace("[DIR]", Environment.NewLine + Program.AppPath + "VLC64" + Environment.NewLine) : LocRm.GetString("InstallVLCx86")); OpenUrl(Program.Platform == "x64" ? VLCx64 : VLCx86); } SaveConfig(); NeedsSync = true; Logger.LogMessageToFile("Loaded " + c.cameras.Length + " cameras, " + c.microphones.Length + " mics and " + c.floorplans.Length + " floorplans"); return c; }
private string GetSummary(objectsScheduleEntry se) { return(FormatTime(se.time) + " \t" + FormatDays(se.daysofweek.Split(',')) + " \t" + Helper.ScheduleDescription(se.typeid)); }
private void ActionSchedule(objectsScheduleEntry en, out bool enable, out bool disable) { enable = false; disable = false; switch (en.typeid) { case 0: enable = true; break; case 1: disable = true; break; case 2: enable = true; ForcedRecording = true; break; case 3: ForcedRecording = false; break; case 4: Micobject.detector.recordondetect = true; Micobject.detector.recordonalert = false; break; case 5: Micobject.detector.recordondetect = false; Micobject.detector.recordonalert = true; break; case 6: Micobject.detector.recordondetect = false; Micobject.detector.recordonalert = false; break; case 7: Micobject.alerts.active = true; break; case 8: Micobject.alerts.active = false; break; case 9: { var a = MainForm.Actions.FirstOrDefault(p => p.ident == en.parameter); if (a != null) a.active = true; } break; case 10: { var a = MainForm.Actions.FirstOrDefault(p => p.ident == en.parameter); if (a != null) a.active = false; } break; case 21: Micobject.settings.messaging = true; break; case 22: Micobject.settings.messaging = false; break; } }
private string GetSummary(objectsScheduleEntry se) { return FormatTime(se.time) + " \t" + FormatDays(se.daysofweek.Split(',')) + " \t" + Helper.ScheduleDescription(se.typeid); }