using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using Google.GData.Client; using Google.GData.Blogger; using System.Net; namespace Blogger { /// /// Summary description for Calendar. /// public class Blogger : System.Windows.Forms.Form { private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label3; private System.Windows.Forms.TextBox UserName; private System.Windows.Forms.TextBox Password; private System.Windows.Forms.Button Go; /// /// Required designer variable. /// private System.ComponentModel.Container components = null; private System.Windows.Forms.TextBox BloggerURI; private System.Windows.Forms.TreeView FeedView; private System.Windows.Forms.Button AddEntry; public System.Windows.Forms.ComboBox FeedChooser; private ArrayList entryList; private string feedUri; public Blogger() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // this.entryList = new ArrayList(); this.feedUri = null; } /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.Run(new Blogger()); } /// /// Clean up any resources being used. /// protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.BloggerURI = new System.Windows.Forms.TextBox(); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); this.UserName = new System.Windows.Forms.TextBox(); this.Password = new System.Windows.Forms.TextBox(); this.Go = new System.Windows.Forms.Button(); this.FeedView = new System.Windows.Forms.TreeView(); this.AddEntry = new System.Windows.Forms.Button(); this.FeedChooser = new System.Windows.Forms.ComboBox(); this.SuspendLayout(); // // BloggerURI // this.BloggerURI.Location = new System.Drawing.Point(88, 16); this.BloggerURI.Name = "BloggerURI"; this.BloggerURI.Size = new System.Drawing.Size(296, 20); this.BloggerURI.TabIndex = 1; this.BloggerURI.Text = "http://www.blogger.com/feeds/default/blogs"; // // label1 // this.label1.Location = new System.Drawing.Point(8, 16); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(64, 16); this.label1.TabIndex = 2; this.label1.Text = "URL:"; // // label2 // this.label2.Location = new System.Drawing.Point(8, 48); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(64, 24); this.label2.TabIndex = 3; this.label2.Text = "User:"; // // label3 // this.label3.Location = new System.Drawing.Point(8, 96); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(64, 16); this.label3.TabIndex = 4; this.label3.Text = "Password"; // // UserName // this.UserName.Location = new System.Drawing.Point(88, 48); this.UserName.Name = "UserName"; this.UserName.Size = new System.Drawing.Size(296, 20); this.UserName.TabIndex = 5; this.UserName.Text = ""; // // Password // this.Password.Location = new System.Drawing.Point(88, 88); this.Password.Name = "Password"; this.Password.PasswordChar = '*'; this.Password.Size = new System.Drawing.Size(296, 20); this.Password.TabIndex = 6; this.Password.Text = ""; // // Go // this.Go.Location = new System.Drawing.Point(440, 16); this.Go.Name = "Go"; this.Go.Size = new System.Drawing.Size(104, 24); this.Go.TabIndex = 7; this.Go.Text = "&Go"; this.Go.Click += new System.EventHandler(this.Go_Click); // // FeedView // this.FeedView.ImageIndex = -1; this.FeedView.Location = new System.Drawing.Point(16, 160); this.FeedView.Name = "FeedView"; this.FeedView.SelectedImageIndex = -1; this.FeedView.Size = new System.Drawing.Size(544, 280); this.FeedView.TabIndex = 8; // // AddEntry // this.AddEntry.Enabled = false; this.AddEntry.Location = new System.Drawing.Point(440, 56); this.AddEntry.Name = "AddEntry"; this.AddEntry.Size = new System.Drawing.Size(104, 24); this.AddEntry.TabIndex = 9; this.AddEntry.Text = "&Add..."; this.AddEntry.Click += new System.EventHandler(this.AddEntry_Click); // // FeedChooser // this.FeedChooser.Location = new System.Drawing.Point(16, 120); this.FeedChooser.Name = "FeedChooser"; this.FeedChooser.Size = new System.Drawing.Size(368, 21); this.FeedChooser.TabIndex = 10; this.FeedChooser.Text = "choose the feed.... "; this.FeedChooser.SelectedIndexChanged += new System.EventHandler(this.FeedChooser_SelectedIndexChanged); // // Blogger // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(592, 470); this.Controls.Add(this.FeedChooser); this.Controls.Add(this.AddEntry); this.Controls.Add(this.FeedView); this.Controls.Add(this.Go); this.Controls.Add(this.Password); this.Controls.Add(this.UserName); this.Controls.Add(this.label3); this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.Controls.Add(this.BloggerURI); this.Cursor = System.Windows.Forms.Cursors.Arrow; this.Name = "Blogger"; this.Text = "Blogger Demo Application"; this.ResumeLayout(false); } #endregion private void Go_Click(object sender, System.EventArgs e) { RefreshFeedList(); } private void RefreshFeedList() { string bloggerURI = this.BloggerURI.Text; string userName = this.UserName.Text; string passWord = this.Password.Text; BloggerQuery query = new BloggerQuery(); BloggerService service = new BloggerService("BloggerSampleApp.NET"); if (userName != null && userName.Length > 0) { service.Credentials = new GDataCredentials(userName, passWord); } // only get event's for today - 1 month until today + 1 year query.Uri = new Uri(bloggerURI); Cursor.Current = Cursors.WaitCursor; // start repainting this.FeedChooser.BeginUpdate(); BloggerFeed bloggerFeed = service.Query(query); // Display a wait cursor while the TreeNodes are being created. this.FeedChooser.DisplayMember = "Title"; while (bloggerFeed != null && bloggerFeed.Entries.Count > 0) { foreach (BloggerEntry entry in bloggerFeed.Entries) { int iIndex = this.FeedChooser.Items.Add(new ListEntry(entry)); } // do the chunking... if (bloggerFeed.NextChunk != null) { query.Uri = new Uri(bloggerFeed.NextChunk); bloggerFeed = service.Query(query); } else { bloggerFeed = null; } } if (this.FeedChooser.Items.Count > 0) { this.FeedChooser.Items.Insert(0, "Choose the feed..."); } else { this.FeedChooser.Items.Insert(0, "No feeds for this user..."); } // Reset the cursor to the default for all controls. Cursor.Current = Cursors.Default; // End repainting the combobox this.FeedChooser.EndUpdate(); } private void RefreshFeed(string bloggerURI) { string userName = this.UserName.Text; string passWord = this.Password.Text; // Suppress repainting the TreeView until all the objects have been created. this.FeedView.BeginUpdate(); // Clear the TreeView each time the method is called. this.FeedView.Nodes.Clear(); if (this.feedUri != null) { BloggerQuery query = new BloggerQuery(); BloggerService service = new BloggerService("BloggerSampleApp.NET"); if (userName != null && userName.Length > 0) { service.Credentials = new GDataCredentials(userName, passWord); } // only get event's for today - 1 month until today + 1 year query.Uri = new Uri(bloggerURI); // set wait cursor before... Cursor.Current = Cursors.WaitCursor; BloggerFeed bloggerFeed = service.Query(query); // Reset the cursor to the default for all controls. Cursor.Current = Cursors.Default; // now populate the calendar while (bloggerFeed != null && bloggerFeed.Entries.Count > 0) { foreach (BloggerEntry entry in bloggerFeed.Entries) { int iIndex = this.FeedView.Nodes.Add(new TreeNode(entry.Title.Text)); if (iIndex >= 0) { AtomPerson author = entry.Authors[0]; this.FeedView.Nodes[iIndex].Nodes.Add(new TreeNode("by: " + author.Name)); this.FeedView.Nodes[iIndex].Nodes.Add(new TreeNode("published: " + entry.Published.ToString())); if (entry.Content.Content.Length > 50) { this.FeedView.Nodes[iIndex].Nodes.Add(new TreeNode(entry.Content.Content.Substring(0, 50)+"....")); } else { this.FeedView.Nodes[iIndex].Nodes.Add(new TreeNode(entry.Content.Content)); } } } // do the chunking... if (bloggerFeed.NextChunk != null) { query.Uri = new Uri(bloggerFeed.NextChunk); bloggerFeed = service.Query(query); } else { bloggerFeed = null; } } } // Reset the cursor to the default for all controls. Cursor.Current = Cursors.Default; // stop repainting the TreeView. this.FeedView.EndUpdate(); } private void AddEntry_Click(object sender, System.EventArgs e) { addentry dlg = new addentry(); if (dlg.ShowDialog() == DialogResult.OK && dlg.Entry.Length > 0) { // now add this to the feed. BloggerEntry entry = new BloggerEntry(); entry.Content.Content = dlg.Entry; entry.Content.Type = "html"; entry.Title.Text = dlg.EntryTitle; string userName = this.UserName.Text; string passWord = this.Password.Text; BloggerService service = new BloggerService("BloggerSampleApp.NET"); if (userName != null && userName.Length > 0) { service.Credentials = new GDataCredentials(userName, passWord); } service.Insert(new Uri(this.feedUri), entry); RefreshFeed(this.feedUri); } } /// /// get's called when a new feed was choosen from the combobox /// /// /// private void FeedChooser_SelectedIndexChanged(object sender, System.EventArgs e) { ListEntry listEntry = this.FeedChooser.SelectedItem as ListEntry; this.AddEntry.Enabled = false; this.feedUri = null; if (listEntry != null) { BloggerEntry entry = listEntry.Entry; if (entry != null) { // find the link.rel==feed uri and refresh the treeview foreach (AtomLink link in entry.Links) { if (link.Rel == BaseNameTable.ServiceFeed) { this.feedUri = link.HRef.ToString(); break; } } if (this.feedUri != null) { this.AddEntry.Enabled = true; } } } RefreshFeed(this.feedUri); } } /// /// little helper class to put an atomentry into a combobox /// public class ListEntry { private BloggerEntry entry; public BloggerEntry Entry { get { return this.entry; } set { this.entry = value; } } public ListEntry(BloggerEntry entry) { this.entry = entry; } public override string ToString() { return this.entry != null ? this.entry.Title.Text : "No Entry"; } } }