iSpyApplication.MainForm.DeleteOldFiles C# (CSharp) Method

DeleteOldFiles() private method

private DeleteOldFiles ( ) : void
return void
        private void DeleteOldFiles()
        {
            bool fileschanged = false;
            //walk through camera specific management first

            foreach (var camobj in Cameras)
            {
                if (camobj.settings.storagemanagement.enabled)
                {
                    try
                    {
                        var cw = GetCameraWindow(camobj.id);
                        if (cw != null)
                        {
                            bool archive = camobj.settings.storagemanagement.archive;
                            var d = Helper.GetMediaDirectory(2, camobj.id) + "video\\" + camobj.directory;
                            if (!Directory.Exists(d))
                            {
                                Logger.LogErrorToFile("Directory not found: "+d);
                                continue;
                            }
                            var dirinfo = new DirectoryInfo(d);

                            var lFi = new List<FileInfo>();
                            lFi.AddRange(dirinfo.GetFiles("*.*", SearchOption.AllDirectories));

                            lFi = lFi.FindAll(f => f.Extension != ".xml");
                            lFi = lFi.OrderBy(f => f.CreationTime).ToList();

                            var size = lFi.Sum(p => p.Length);
                            var targetSize = (camobj.settings.storagemanagement.maxsize) * 1048576d;
                            while (size > targetSize)
                            {
                                for (int i = 0; i < lFi.Count; i++)
                                {
                                    var fi = lFi[i];
                                    if (FileOperations.DeleteOrArchive(fi.FullName, archive))
                                    {
                                        try
                                        {
                                            cw.RemoveFile(fi.Name);
                                        }
                                        catch
                                        {
                                            // ignored
                                        }
                                        size -= fi.Length;

                                        fileschanged = true;
                                        lFi.Remove(fi);
                                        i--;
                                        if (size < targetSize)
                                            break;
                                    }
                                }
                            }
                            var targetdate = DateTime.Now.AddHours(0 - camobj.settings.storagemanagement.maxage);
                            lFi = lFi.FindAll(p => p.CreationTime < targetdate).ToList();
                            for (int i = 0; i < lFi.Count; i++)
                            {
                                var fi = lFi[i];
                                if (FileOperations.DeleteOrArchive(fi.FullName, archive))
                                {
                                    try
                                    {
                                        cw.RemoveFile(fi.Name);
                                    }
                                    catch
                                    {
                                        // ignored
                                    }
                                    fileschanged = true;
                                    lFi.Remove(fi);
                                    i--;
                                }
                            }
                        }

                    }
                    catch (Exception ex)
                    {
                        Logger.LogExceptionToFile(ex, "DeleteOldFiles: "+ camobj.name);
                    }
                }
            }

            foreach (var micobj in Microphones)
            {
                if (micobj.settings.storagemanagement.enabled)
                {
                    try
                    {
                        var vl = GetVolumeLevel(micobj.id);
                        if (vl != null)
                        {
                            bool archive = micobj.settings.storagemanagement.archive;

                            var d = Helper.GetMediaDirectory(1, micobj.id) + "audio\\" + micobj.directory;
                            if (!Directory.Exists(d))
                            {
                                Logger.LogErrorToFile("Directory not found: " + d);
                                continue;
                            }
                            var dirinfo = new DirectoryInfo(d);

                            var lFi = new List<FileInfo>();
                            lFi.AddRange(dirinfo.GetFiles("*.*", SearchOption.AllDirectories));

                            lFi = lFi.FindAll(f => f.Extension != ".xml");
                            lFi = lFi.OrderBy(f => f.CreationTime).ToList();

                            var size = lFi.Sum(p => p.Length);
                            var targetSize = (micobj.settings.storagemanagement.maxsize) * 1048576d;
                            while (size > targetSize)
                            {
                                for (int i = 0; i < lFi.Count; i++)
                                {
                                    var fi = lFi[i];
                                    if (FileOperations.DeleteOrArchive(fi.FullName, archive))
                                    {
                                        try
                                        {
                                            vl.RemoveFile(fi.Name);
                                        }
                                        catch
                                        {
                                            // ignored
                                        }
                                        size -= fi.Length;
                                        fileschanged = true;
                                        lFi.Remove(fi);
                                        i--;
                                    }
                                }
                            }
                            var targetdate = DateTime.Now.AddHours(0 - micobj.settings.storagemanagement.maxage);
                            lFi = lFi.FindAll(p => p.CreationTime < targetdate).ToList();
                            for (int i = 0; i < lFi.Count; i++)
                            {
                                var fi = lFi[i];
                                if (FileOperations.DeleteOrArchive(fi.FullName, archive))
                                {
                                    try
                                    {
                                        vl.RemoveFile(fi.Name);
                                    }
                                    catch
                                    {
                                        // ignored
                                    }
                                    fileschanged = true;
                                    lFi.Remove(fi);
                                    i--;
                                }
                            }
                        }

                    }
                    catch (Exception ex)
                    {
                        Logger.LogExceptionToFile(ex, "DeleteOldFiles: " + micobj.name);
                    }
                }
            }

            if (fileschanged)
            {
                UISync.Execute(RefreshControls);
            }

            //run storage management on each directory
            foreach (var d in Conf.MediaDirectories)
            {
                if (d.Enable_Storage_Management)
                {
                    if (d.DeleteFilesOlderThanDays <= 0)
                        continue;

                    DateTime dtref = DateTime.Now.AddDays(0 - d.DeleteFilesOlderThanDays);

                    //don't bother if oldest file isn't past cut-off
                    if (_oldestFile > dtref)
                        continue;

                    var lFi = new List<FileInfo>();
                    try
                    {
                        var dirinfo = new DirectoryInfo(d.Entry + "video\\");
                        lFi.AddRange(dirinfo.GetFiles("*.*", SearchOption.AllDirectories));

                        dirinfo = new DirectoryInfo(d.Entry + "audio\\");
                        lFi.AddRange(dirinfo.GetFiles("*.*", SearchOption.AllDirectories));

                    }
                    catch (Exception ex)
                    {
                        Logger.LogExceptionToFile(ex, "DeleteOldFiles: "+d.Entry);
                        continue;
                    }

                    lFi = lFi.FindAll(f => f.Extension != ".xml");
                    lFi = lFi.OrderBy(f => f.CreationTime).ToList();

                    var size = lFi.Sum(p => p.Length);
                    var targetSize = (d.MaxMediaFolderSizeMB * 0.7) * 1048576d;

                    if (size < targetSize)
                    {
                        continue;
                    }

                    var lCan = lFi.Where(p => p.CreationTime < dtref).OrderBy(p => p.CreationTime).ToList();
                    bool archive = d.archive;

                    for (int i = 0; i < lCan.Count; i++)
                    {
                        var fi = lCan[i];
                        if (size > targetSize)
                        {
                            if (FileOperations.DeleteOrArchive(fi.FullName, archive))
                            {
                                size -= fi.Length;
                                fileschanged = true;
                                lCan.Remove(fi);
                                i--;
                                lock (ThreadLock)
                                {
                                    Masterfilelist.RemoveAll(p => p.Filename.EndsWith(fi.Name));
                                }
                                if (size < targetSize)
                                {
                                    break;
                                }
                            }
                        }
                    }
                    if (lCan.Count > 0)
                        _oldestFile = lCan.First().CreationTime;
                    else
                    {
                        var o = lFi.FirstOrDefault(p => p.CreationTime > dtref);
                        if (o != null)
                            _oldestFile = o.CreationTime;

                    }

                    if (fileschanged)
                    {
                        UISync.Execute(RefreshControls);
                        Logger.LogMessageToFile(LocRm.GetString("MediaStorageLimit").Replace("[AMOUNT]",
                                                                                      d.MaxMediaFolderSizeMB.ToString
                                                                                          (
                                                                                              CultureInfo.
                                                                                                  InvariantCulture)));
                    }

                    if ((size / 1048576) > d.MaxMediaFolderSizeMB && !d.StopSavingFlag && d.StopSavingOnStorageLimit)
                    {
                        d.StopSavingFlag = true;
                    }
                    else
                        d.StopSavingFlag = false;
                }
            }
        }
MainForm