読者です 読者をやめる 読者になる 読者になる

Natural Software

KinectなどのDepthセンサーを中心に活動しています

RSS でチケット取得

C# Trac

今日、TaskTasyTrac 使ってる人から意見をもらったのでお試しアプリを作ってみた。
機能は RSS でチケット一覧を拾ってきて、選択されれたチケットを表示するだけなんだけど、自分なりにいろいろ気付きがあって面白かった。

ソースなど

てきとーに作ったので Sky Drive に ZIP にして置きました^^;
http://cid-a44057a0a91e490c.skydrive.live.com/self.aspx/Trac/TracRSS.zip

こんな画面



今日、気付いたこと

  • Trac のチケット一覧の RSS はすべてのチケットを拾える
  • アプリケーションだからって全部自分で作る必要はなく、アプリに組み込んだブラウザを使う方法もある

まとめ

やっぱり使ってる人の意見は参考になる。
情報は出すに限るね!

ソース

短かったのではっとく^^;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Xml;
using System.ServiceModel.Syndication;

namespace TracRSS
{
    public partial class Form1 : Form
    {
        SyndicationFeed feed = null;
        List<SyndicationItem> items = null;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click( object sender, EventArgs e )
        {
            try {
                Enabled = false;

                using ( XmlReader rdr = XmlReader.Create( textBox1.Text ) ) {
                    feed = SyndicationFeed.Load( rdr );
                    items = new List<SyndicationItem>();

                    Text = feed.Title.Text;

                    listView1.Items.Clear();
                    foreach ( SyndicationItem item in feed.Items ) {
                        listView1.Items.Add( new ListViewItem( item.Title.Text ) );
                        items.Add( item );
                    }
                }
            }
            catch ( Exception ex ) {
                MessageBox.Show( ex.Message );
            }
            finally {
                Enabled = true;
            }
        }

        private void listView1_MouseDoubleClick( object sender, MouseEventArgs e )
        {
            SyndicationItem item = items[listView1.SelectedIndices[0]];
            if (item.Links.Count > 0 ) {
                webBrowser1.Url = new Uri( item.Links[0].Uri.AbsoluteUri );
            }
        }
    }
}