public InspectorDetail(FileInspector inspector)
        {
            InitializeComponent();
            this.Inspector = inspector;

            App.ActualInspectorDetail = this;
            this.Owner = App.Inspectors;
        }
        public InspectorDetail()
        {
            InitializeComponent();
            Inspector = new FileInspector { Path = "Seleccione una carpeta para rastrear" };

            App.ActualInspectorDetail = this;
            this.Owner = App.Home;
        }
        private void ExecuteSonarFile(FileInspector inspector, String prefix, BackgroundWorker worker)
        {
            var dir = new DirectoryInfo(inspector.Path);

            if(!dir.Exists)
            {
                return;
            }

            var files = dir.GetFiles();

            foreach (var rule in inspector.Rules.Value)
            {
                if (rule.RuleType != null)
                    switch ((RuleFile.TypeFileRule)rule.RuleType)
                    {
                        case RuleFile.TypeFileRule.Date:
                            var qfilesD = from file in files
                                          where rule.DateFirst < file.LastWriteTime
                                                && rule.DateLast > file.LastWriteTime
                                          select file;
                            files = qfilesD.ToArray();

                            break;

                        case RuleFile.TypeFileRule.Extension:
                            var qfilesE = from file in files
                                          where file.Extension.Contains(rule.ExtensionPattern)
                                          select file;
                            files = qfilesE.ToArray();

                            break;

                        case RuleFile.TypeFileRule.FileName:
                            var qfiles = from file in files
                                         where file.Name.Contains(rule.NamePattern)
                                         select file;
                            files = qfiles.ToArray();

                            break;
                    }
            }

            var listMsg = new List<string>();

            string msgFile = string.Empty;

            foreach (var file in files)
            {
                if (inspector.Action == (int)FileInspector.TypeActions.MoveSubDir)
                {
                    String destName = inspector.SubDirAction + Path.DirectorySeparatorChar + file.Name;

                    destName = destName.Substring(0, destName.Length - file.Extension.Length);

                    String destNameAux = destName;

                    int j = 1;

                    while (File.Exists(destNameAux + file.Extension))
                    {
                        destNameAux = destName + "-" + j.ToString(CultureInfo.InvariantCulture);
                        j++;
                    }

                    RegistrarLog(prefix + "Moviendo fichero " + file.FullName + "...", worker);

                    file.MoveTo(destNameAux + file.Extension);

                    RegistrarLog(prefix + "Fichero movido correctamente a " + destNameAux, worker);
                }
                else
                {
                    RegistrarLog(prefix + "Eliminando fichero " + file.FullName + "...", worker);

                    FileSystem.DeleteDirectory(file.FullName, UIOption.OnlyErrorDialogs,
                        RecycleOption.SendToRecycleBin);

                    RegistrarLog(prefix + "Fichero eliminado correctamente", worker);
                }

                if (string.Concat(msgFile, file.Name).Length < 485)
                {
                    if (string.IsNullOrWhiteSpace(msgFile))
                    {
                        msgFile += file.Name;
                    }
                    else
                    {
                        msgFile += ", " + file.Name;
                    }
                }
                else
                {
                    listMsg.Add(msgFile);

                    msgFile = file.Name;
                }
            }

            if (!string.IsNullOrWhiteSpace(Opciones.PushoverUserKey)
                && inspector.EnablePushNotification.HasValue
                && inspector.EnablePushNotification.Value
                && !string.IsNullOrWhiteSpace(msgFile))
            {
                foreach (var msgQueue in listMsg)
                {
                    RegistrarLog(prefix + "Enviando notificación Push...", worker);

                    if (SendPushNotif(inspector.Name, "Ficheros Procesados: " + msgQueue))
                    {
                        RegistrarLog(prefix + "Notificación enviada correctamente", worker);
                    }
                    else
                    {
                        RegistrarLog(prefix + "Error al enviar la notificación", worker);
                    }
                }

                RegistrarLog(prefix + "Enviando notificación Push...", worker);

                if(SendPushNotif(inspector.Name, "Ficheros Procesados: " + msgFile))
                {
                    RegistrarLog(prefix + "Notificación enviada correctamente", worker);
                }
                else
                {
                    RegistrarLog(prefix + "Error al enviar la notificación", worker);
                }
            }
        }
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            SystemEvents.SessionSwitch += SystemEventsOnSessionSwitch;
            SystemEvents.SessionEnded += SystemEventsOnSessionEnded;

            swriter = new StringWriter();
            Console.SetOut(swriter);

            XmlConfigurator.Configure();

            RegistrarLog("<b>Inicializando la aplicación...</b>");

            RegistrarLog("<b>Cargando opciones de la aplicación...</b>");
            LoadOpciones();

            SonarActivo = true;

            Sonar = new Dictionary<int, BackgroundWorker>();

            try
            {
                IPersistence<FileInspector> servInspF = new Persistence<FileInspector>();
                var inspFilterF = new FileInspector();

                var rastreadoresF = servInspF.GetEntities(inspFilterF);

                foreach (var insp in rastreadoresF)
                {
                    AddWork(insp);
                }

                IPersistence<ServiceInspector> servInspV = new Persistence<ServiceInspector>();
                var inspFilterV = new ServiceInspector();

                var rastreadoresV = servInspV.GetEntities(inspFilterV);

                foreach (var insp in rastreadoresV)
                {
                    AddWork(insp);
                }

            }
            catch (Exception ex)
            {
                RegistrarLog("<b>Error al inicializar la aplicación: </b>" + ex.Message);
            }

            RegistrarLog("<b>Inicialización de la aplicación Finalizada</b>");
        }
        private void mnFileR_Click(object sender, RoutedEventArgs e)
        {
            var inspector = new FileInspector { Path = "Seleccione una carpeta para rastrear" };

            var inspDetail = new InspectorDetail(inspector);
            inspDetail.ShowDialog();

            inspector = inspDetail.Inspector;

            if (inspector.InspectorId.HasValue)
            {
                InspectorsRefresh(inspector, true);
            }
        }