Beispiel #1
0
        /// <summary>
        ///		Borra una serie de entradas
        /// </summary>
        private void DeleteEntries(BlogEntriesCollectionViewModel entriesForDelete)
        {
            if (entriesForDelete.Count > 0)
            {
                BlogsModelCollection blogsUpdated = new BlogsModelCollection();
                bool deleted = false;

                // Borra las entradas
                foreach (BlogEntryViewModel entryViewModel in entriesForDelete)
                {
                    // Añade el blog de la entrada
                    if (!blogsUpdated.Exists(entryViewModel.Entry.Blog.GlobalId))
                    {
                        blogsUpdated.Add(entryViewModel.Entry.Blog);
                    }
                    // Marca como borrado y añade el ID para borrarlo en la base de datos
                    entryViewModel.Entry.Status = EntryModel.StatusEntry.Deleted;
                    // Quita la entrada de la colección
                    Entries.Remove(entryViewModel);
                    // Elimina los archivos asociados
                    if (!string.IsNullOrEmpty(entryViewModel.Entry.DownloadFileName) &&
                        System.IO.File.Exists(entryViewModel.Entry.DownloadFileName))
                    {
                        LibCommonHelper.Files.HelperFiles.KillFile(System.IO.Path.Combine(BlogReaderViewModel.Instance.PathBlogs, entryViewModel.Entry.DownloadFileName));
                    }
                    // Indica que algo se ha borrado
                    deleted = true;
                }
                // Si realmente hay algo que borrar
                if (deleted)
                {
                    TreatUpdateEntries(blogsUpdated);
                }
            }
        }
Beispiel #2
0
        /// <summary>
        ///		Exporta las entradas
        /// </summary>
        private void ExportEntries()
        {
            string fileName = MainViewModel.ViewsController.DialogsController
                              .OpenDialogSave(null, "Archivos XML (*.xml)|*.xml|Todos los archivos (*.*)|*.*", "ExportEntries.xml", ".xml");

            if (!string.IsNullOrWhiteSpace(fileName))
            {
                BlogEntriesCollectionViewModel entriesViewModel = EntriesForView;
                BlogModel blog = new BlogModel();

                // Crea los datos del blog
                blog.Name = "Export";
                // Añade las entradas
                foreach (BlogEntryViewModel entryViewModel in entriesViewModel)
                {
                    blog.Entries.Add(new EntryModel
                    {
                        Name    = entryViewModel.Title,
                        Content = entryViewModel.Content,
                        URL     = entryViewModel.URL
                    }
                                     );
                }
                // Graba los datos del blog
                MainViewModel.BlogManager.SaveBlog(blog, fileName);
            }
        }
Beispiel #3
0
        /// <summary>
        ///		Modifica el estado de las entradas seleccionadas
        /// </summary>
        private void SetStatusEntries(BlogEntriesCollectionViewModel entries, EntryModel.StatusEntry idNewStatus)
        {
            BlogsModelCollection blogsUpdated = new BlogsModelCollection();
            bool updated = false;

            // Marca los elementos seleccionados como leídos
            foreach (BlogEntryViewModel entry in entries)
            {
                if (CanChangeStatus(entry, idNewStatus))
                {
                    // Cambia el estado
                    entry.Status = idNewStatus;
                    // Añade el blog
                    if (!blogsUpdated.Exists(entry.Entry.Blog.GlobalId))
                    {
                        blogsUpdated.Add(entry.Entry.Blog);
                    }
                    // Indica que se ha modificado
                    updated = true;
                }
            }
            // Si realmente se ha marcado alguno ...
            if (updated)
            {
                TreatUpdateEntries(blogsUpdated);
            }
        }
Beispiel #4
0
        /// <summary>
        ///		Ejecuta las funciones llamadas desde el explorador
        /// </summary>
        public void ExecuteFromExplorer(string arguments)
        {
            if (!arguments.IsEmpty())
            {
                string[] parameters = arguments.Split('|');

                if (parameters.Length == 2)
                {
                    BlogEntryViewModel entry = Entries.Search(parameters[1]);

                    if (entry != null)
                    {
                        BlogEntriesCollectionViewModel entries = new BlogEntriesCollectionViewModel {
                            entry
                        };
                        EntryAction action = parameters[0].GetEnum(EntryAction.Unknown);

                        switch (action)
                        {
                        case EntryAction.MarkRead:
                            if (entry.Entry.Status == EntryModel.StatusEntry.Read)
                            {
                                SetStatusEntries(entries, EntryModel.StatusEntry.NotRead);
                            }
                            else
                            {
                                SetStatusEntries(entries, EntryModel.StatusEntry.Read);
                            }
                            break;

                        case EntryAction.MarkInteresting:
                            if (entry.Entry.Status == EntryModel.StatusEntry.Interesting)
                            {
                                SetStatusEntries(entries, EntryModel.StatusEntry.Read);
                            }
                            else
                            {
                                SetStatusEntries(entries, EntryModel.StatusEntry.Interesting);
                            }
                            break;

                        case EntryAction.Delete:
                            DeleteEntries(entries);
                            break;

                        case EntryAction.Play:
                            PlayEntry();
                            break;
                        }
                    }
                }
            }
        }
        /// <summary>
        ///		Obtiene las entradas leídas
        /// </summary>
        internal BlogEntriesCollectionViewModel GetRead()
        {
            BlogEntriesCollectionViewModel entries = new BlogEntriesCollectionViewModel();

            // Obtiene las entradas no leídas
            foreach (BlogEntryViewModel entry in this)
            {
                if (entry.Status == Model.EntryModel.StatusEntry.Read)
                {
                    entries.Add(entry);
                }
            }
            // Devuelve la colección de entradas
            return(entries);
        }
        /// <summary>
        ///		Obtiene las entradas seleccionadas
        /// </summary>
        internal BlogEntriesCollectionViewModel GetSelected()
        {
            BlogEntriesCollectionViewModel entries = new BlogEntriesCollectionViewModel();

            // Obtiene las seleccionadas
            foreach (BlogEntryViewModel entry in this)
            {
                if (entry.IsSelected)
                {
                    entries.Add(entry);
                }
            }
            // Devuelve las entradas seleccionadas
            return(entries);
        }
Beispiel #7
0
        /// <summary>
        ///		Borra las entradas seleccionadas
        /// </summary>
        private void DeleteSelectedEntries(object parameter)
        {
            BlogEntriesCollectionViewModel entriesForDelete = Entries.GetSelected();

            // Si no se ha seleccionado ninguna, obtiene las no leídas para borrarlas
            if (entriesForDelete.Count == 0)
            {
                entriesForDelete = Entries.GetRead();
            }
            // Si hay algo que se pueda borrar ...
            if (entriesForDelete.Count > 0 &&
                BlogReaderViewModel.Instance.ControllerWindow.ShowQuestion("¿Realmente desea eliminar las entradas seleccionadas?"))
            {
                DeleteEntries(entriesForDelete);
            }
        }
        /// <summary>
        ///		Obtiene las entradas no leídas
        /// </summary>
        internal BlogEntriesCollectionViewModel GetByParameters(bool blnSeeNotRead, bool blnSeeRead, bool blnSeeInteresting)
        {
            BlogEntriesCollectionViewModel entries = new BlogEntriesCollectionViewModel();

            // Obtiene las entradas no leídas
            foreach (BlogEntryViewModel entry in this)
            {
                if ((entry.Status == Model.EntryModel.StatusEntry.NotRead && blnSeeNotRead) ||
                    (entry.Status == Model.EntryModel.StatusEntry.Read && blnSeeRead) ||
                    (entry.Status == Model.EntryModel.StatusEntry.Interesting && blnSeeInteresting))
                {
                    entries.Add(entry);
                }
            }
            // Devuelve la colección de entradas
            return(entries);
        }
Beispiel #9
0
        /// <summary>
        ///		Obtiene las entradas de los blogs
        /// </summary>
        private BlogEntriesCollectionViewModel GetEntries()
        {
            BlogEntriesCollectionViewModel entriesViewModel = new BlogEntriesCollectionViewModel();

            // Ordena los blogs
            Blogs.SortByName();
            // Asigna las entradas
            foreach (BlogModel blog in Blogs)
            {
                // Ordena las entradas por fecha
                blog.Entries.SortByDate(false);
                // Añade las entradas a la vista (no hace un foreach porque puede que se cambie la colección en las descargas)
                for (int index = 0; index < blog.Entries.Count; index++)
                {
                    if (blog.Entries[index].Status != EntryModel.StatusEntry.Deleted)
                    {
                        entriesViewModel.Add(new BlogEntryViewModel(blog.Name, blog.Entries[index]));
                    }
                }
            }
            // Devuelve las entradas
            return(entriesViewModel);
        }
Beispiel #10
0
        /// <summary>
        ///		Reproduce el adjunto de una entrada
        /// </summary>
        private void PlayEntry()
        {
            BlogEntriesCollectionViewModel entries = GetEntriesSelected();
            var attachments = new Dictionary <string, List <KeyValuePair <string, string> > >();

            // Obtiene los nombres de los archivos adjuntos
            foreach (BlogEntryViewModel entry in entries)
            {
                KeyValuePair <string, string> attachment = GetAttachment(entry?.Entry);

                if (!string.IsNullOrEmpty(attachment.Value))
                {
                    if (attachments.TryGetValue(entry.BlogName, out var dictionaryEntry))
                    {
                        dictionaryEntry.Add(attachment);
                    }
                    else
                    {
                        attachments.Add(entry.BlogName, new List <KeyValuePair <string, string> > {
                            attachment
                        });
                    }
                }
            }
            // Ejecuta los archivos
            if (attachments.Count > 0)
            {
                foreach (KeyValuePair <string, List <KeyValuePair <string, string> > > attachment in attachments)
                {
                    BlogReaderViewModel.Instance.HostController.Messenger.SendFilesToMediaPlayer(BlogReaderViewModel.Instance.ModuleName, attachment.Key, attachment.Value);
                }
            }
            else
            {
                BlogReaderViewModel.Instance.ControllerWindow.ShowMessage("No se ha seleccionado ningún elemento con adjuntos");
            }
        }
Beispiel #11
0
        /// <summary>
        ///		Obtiene el HTML de las entradas seleccionadas para mostrarlas en el explorador
        /// </summary>
        private string GetHtmlNews()
        {
            BlogEntriesCollectionViewModel entries = EntriesForView;

            System.Text.StringBuilder sbHtml = new System.Text.StringBuilder();
            string lastBlog = null;
            int    startIndex, endIndex;

            // Actualiza el número de entradas y de páginas
            EntriesNumber = entries.Count;
            if (RecordsPerPage == 0)
            {
                RecordsPerPage = 25;
            }
            Pages = EntriesNumber / RecordsPerPage;
            if (EntriesNumber % RecordsPerPage != 0)
            {
                Pages++;
            }
            // Normaliza la página actual
            if (ActualPage > Pages)
            {
                ActualPage = Pages;
            }
            else if (ActualPage < 1)
            {
                ActualPage = 1;
            }
            // Asigna el índice de inicio y fin
            startIndex = (ActualPage - 1) * RecordsPerPage;
            endIndex   = startIndex + RecordsPerPage;
            // Cabecera HTML
            sbHtml.AppendLine("<html><head>");
            sbHtml.AppendLine("<meta content='text/html; charset=utf-8' http-equiv='Content-Type'>");
            sbHtml.AppendLine("<meta name = 'Content-Type' content = 'Content-Type: text/html; charset=utf-8'>");
            sbHtml.AppendLine("<meta name='lang' content='es'>");
            sbHtml.AppendLine("</head><body>");
            // Obtiene el HTML
            for (int index = startIndex; index < endIndex; index++)
            {
                if (index >= 0 && index < entries.Count)
                {
                    BlogEntryViewModel entry = entries[index];

                    // Título del blog
                    if (!lastBlog.EqualsIgnoreCase(entry.BlogName))
                    {
                        // Cabecera de blog
                        sbHtml.AppendLine($"<h1 style='clear:both;'>{entry.BlogName}</h1>");
                        // Guarda la última cabecera de blog
                        lastBlog = entry.BlogName;
                    }
                    // Cabecera de entrada
                    sbHtml.AppendLine($"<h2 style='clear:both;'><a href='{entry.URL}'>{entry.Title}</a></h2>");
                    // Comandos sobre la entrada
                    sbHtml.AppendLine("<p>");
                    if (entry.Entry.Status == EntryModel.StatusEntry.NotRead)
                    {
                        sbHtml.AppendLine(GetJavaScriptExternalFuction(entry, "Marcar leído", EntryAction.MarkRead));
                    }
                    if (entry.Entry.Status == EntryModel.StatusEntry.Read)
                    {
                        sbHtml.AppendLine(GetJavaScriptExternalFuction(entry, "Marcar no leído", EntryAction.MarkRead));
                    }
                    if (entry.Entry.Status == EntryModel.StatusEntry.Read || entry.Entry.Status == EntryModel.StatusEntry.NotRead)
                    {
                        sbHtml.AppendLine(GetJavaScriptExternalFuction(entry, "Marcar interesante", EntryAction.MarkInteresting));
                    }
                    sbHtml.AppendLine(GetJavaScriptExternalFuction(entry, "Borrar", EntryAction.Delete));
                    sbHtml.AppendLine("</p>");
                    // Cuerpo
                    sbHtml.AppendLine(RemoveIframe(entry.Content) + "<br>");
                    // Adjunto
                    if (!string.IsNullOrEmpty(entry.UrlEnclosure))
                    {
                        sbHtml.AppendLine($"<p><strong>Adjunto: </strong>{GetJavaScriptExternalFuction(entry, System.IO.Path.GetFileName(entry.UrlEnclosure), EntryAction.Play)}</p><br>");
                    }
                    // Autor - Fecha
                    sbHtml.AppendLine($@"<p style='text-align:right;'>
													<strong>Autor: </strong>{entry.Author} - 
													<strong>Fecha: </strong>{entry.DatePublish:dd-MM-yyyy HH:mm}
												</p>"                                                );
                    // Separador
                    sbHtml.AppendLine("<hr>");
                }
            }
            // Cierre HTML
            sbHtml.AppendLine("</body></html>");
            // Devuelve el HTML
            return(sbHtml.ToString());
        }