in

dotNet Umbria

Il primo User Group in Umbria sul mondo .Net

Paolo Possanzini

WPF: Costruiamo un RSS Reader passo 1 (utilizzare Microsoft.Feeds.dll)

Questo vuole essere il primo di una serie di articoli dedicati alla scrittura di applicazioni complete, dalla A alla Z sviluppate con il Framework 3.5, ponendo particolare attenzione al layer di presentazione attraverso WPF. Come primo esercizio creiamo un RSS reader.

Microsoft ci mette a disposizione una libreria COM per la lettura dei Feed. La utilizzeremo in questo progetto.

Iniziamo.

Creiamo la nostra applicazione con VS2008 e scegliamo WPF Application come tipo di progetto.
Per prima cosa aggiungiamo la reference alla Microsoft.Feeds.dll che possiamo trovare tra i componenti COM.

Creiamo una classe che ci permetta di gestire in modo agevole i feeds. Chiameremo questa classe FeedHelper

[code language="C#"]

public static class FeedHelper
  {

    /// <summary>
    /// Get The subtree for RootFolder folder
    /// </summary>
    /// <param name="feedfolder"></param>
    /// <returns></returns>
    [Description("Get The subtree for each folder")]
    public static TreeViewItem[] GetFeedSubTree()
    {
      return GetFeedSubTree((IFeedFolder)(new FeedsManagerClass().RootFolder));
    }

    /// <summary>
    /// Get The subtree for each folder
    /// </summary>
    /// <param name="feedfolder"></param>
    /// <returns></returns>
    [Description("Get The subtree for each folder")]
    public static TreeViewItem[] GetFeedSubTree(IFeedFolder feedfolder)
    {
      try
      {

        // Creiamo una lista di nodi per questo folder
        List<TreeViewItem> result = new List<TreeViewItem>();
        foreach (IFeedFolder folder in ((IFeedsEnum)feedfolder.Subfolders))
        {
          TreeViewItem tvi = new TreeViewItem()
          {
            Header = folder.Name,
            Tag = folder,
            ItemsSource = GetFeedSubTree(folder)
          };
          result.Add(tvi);
        }

        // Creiamo i nodi anche per i feed gia scaricati.
        if (feedfolder.Feeds != null)
        {
          foreach (IFeed feed in ((IFeedsEnum)feedfolder.Feeds))
          {
            TreeViewItem tvi = new TreeViewItem()
            {
              Header = feed.Name,
              Tag = feed
            };

            // Esegue il download asincrono degli items presenti nel feed
            ThreadPool.QueueUserWorkItem(delegate
            {
              try
              {
                feed.Download();
              }
              catch (Exception ex)
              {
                Debug.WriteLine(ex.Message);
              }
            }, null);
            result.Add(tvi);
          }
        }

        return result.ToArray();
      }
      catch (Exception ex)
      {
        Debug.WriteLine(ex.Message);
      }
      return null;
    }

    /// <summary>
    /// Create a Feed in a foder
    /// </summary>
    /// <param name="folder"></param>
    /// <param name="uri"></param>
    /// <param name="name"></param>
    public static void SubscribeFeed(IFeedFolder folder, string uri, string name)
    {
      folder.CreateFeed(name, uri);
    }
  }

[/code]

Estenderemo questa classe se necessario in seguito. Per adesso ci basta porre attenzione sui due overloads GetFeedSubTree In questi due metodi viene creato in modo ricorsivo l'albero che descrive i feed sottoscritti eseguendo anche il download dei feed da ogni sottoscrizione. Da notare che non abbiamo bisogno di creare una struttura di storage dei feeds sottoscritti e scaricati. La libreria Microsoft.Feeds si occuperà di tutto per conto nostro.

Only published comments... Apr 19 2008, 10:44 PM by Paolo Possanzini
Filed under: ,

About Paolo Possanzini

Programmatore di vecchia data, mi sono appassionato a dotnet fin dalla prima versione. Mi interesso di programmazione, accesso ai dati, Sql Server.
Con Andrea abbiamo fondato TeamDev snc.

Scarica il mio Biglietto da visita
dotNet Umbria 2007-2008
Powered by Community Server (Commercial Edition), by Telligent Systems