ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/DecentralizedMedia/DecentralizedMediaClient/DecentralizedMediaClient.cs
Revision: 528
Committed: 2005-06-25T21:06:09-07:00 (20 years ago) by douglas
File size: 3720 byte(s)
Log Message:
Yay!

File Contents

# User Rev Content
1 douglas 518 // Decentralized Media Client
2     //
3     // Douglas Thrift
4     //
5     // $Id$
6    
7 douglas 525 using Shell32;
8 douglas 518 using System;
9 douglas 519 using System.Collections.Generic;
10 douglas 518 using System.Net;
11     using System.IO;
12     using System.Text;
13 douglas 525 using System.Windows.Forms;
14 douglas 518 using System.Xml;
15    
16     public class DecentralizedMediaClient
17     {
18 douglas 519 public DecentralizedMediaClient()
19     {
20 douglas 525 Application.EnableVisualStyles();
21    
22 douglas 519 Extensions();
23    
24 douglas 525 Shell shell = new ShellClass();
25 douglas 527 retry: Folder2 folder = (Folder2)/*shell.BrowseForFolder(0, "Select a media folder", 0, null)*/shell.NameSpace(@"C:\DouglasThrift.net\DecentralizedMedia\Media");
26 douglas 519
27 douglas 525 if (folder != null)
28     if (folder.Self.IsFileSystem)
29     {
30     folders.Add(folder.Self.Path, new MediaFolder(new DirectoryInfo(folder.Self.Path), extensions));
31 douglas 519
32 douglas 525 Media();
33     }
34     else if (MessageBox.Show("The selected folder is not a file system directory.", "", MessageBoxButtons.RetryCancel, MessageBoxIcon.Asterisk) == DialogResult.Retry)
35     goto retry;
36 douglas 519 }
37    
38 douglas 518 public static void Main(string[] args)
39     {
40 douglas 519 DecentralizedMediaClient client = new DecentralizedMediaClient();
41     }
42    
43     private List<string> extensions = new List<string>();
44 douglas 523 private SortedDictionary<string, MediaFolder> folders = new SortedDictionary<string, MediaFolder>();
45 douglas 527 private Dictionary<string, Share> shares = new Dictionary<string, Share>();
46 douglas 519
47     private void Extensions()
48     {
49 douglas 518 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://daemon:6996/");
50    
51 douglas 519 request.Method = "EXTENSIONS";
52    
53     HttpWebResponse response = (HttpWebResponse)request.GetResponse();
54     StreamReader reader = new StreamReader(response.GetResponseStream());
55     string extension;
56    
57     while ((extension = reader.ReadLine()) != null)
58     extensions.Add(extension);
59     }
60    
61     private void Media()
62     {
63 douglas 528 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://daemon:6996/");
64 douglas 519
65 douglas 518 request.Method = "MEDIA";
66     request.SendChunked = true;
67    
68     XmlWriterSettings settings = new XmlWriterSettings();
69    
70     settings.Indent = true;
71    
72     Stream stream = request.GetRequestStream();
73     XmlWriter writer = XmlWriter.Create(stream, settings);
74    
75     writer.WriteStartDocument();
76 douglas 528 writer.WriteStartElement("media");
77 douglas 519
78 douglas 523 foreach (KeyValuePair<string, MediaFolder> folder in folders)
79 douglas 527 {
80     Share share = new Share(folder.Key);
81 douglas 519
82 douglas 527 shares[folder.Key] = share;
83    
84     Console.WriteLine("{0}", share.path);
85    
86     share.Add();
87    
88 douglas 528 Media(folder.Value, share.path, writer);
89 douglas 527 }
90    
91 douglas 528 writer.WriteEndDocument();
92 douglas 518 writer.Close();
93 douglas 519 // XXX: for some reason the XmlWriter's Close() doesn't work right
94 douglas 518 stream.Close();
95 douglas 528 request.GetResponse().Close();
96 douglas 518 }
97 douglas 519
98     private void Media(MediaFolder folder, string path, XmlWriter writer)
99     {
100     writer.WriteStartElement("folder");
101     writer.WriteStartElement("path");
102     writer.WriteString(path);
103     writer.WriteEndElement();
104    
105     foreach (MediaFile file in folder.files)
106     {
107     writer.WriteStartElement("file");
108     writer.WriteStartElement("path");
109     writer.WriteString(file.path);
110     writer.WriteEndElement();
111 douglas 520
112     if (file.artist != null && file.artist != "")
113     {
114     writer.WriteStartElement("artist");
115     writer.WriteString(file.artist);
116     writer.WriteEndElement();
117     }
118    
119     if (file.title != null && file.title != "")
120     {
121     writer.WriteStartElement("title");
122     writer.WriteString(file.title);
123     writer.WriteEndElement();
124     }
125    
126     if (file.album != null && file.album != "")
127     {
128     writer.WriteStartElement("album");
129     writer.WriteString(file.album);
130     writer.WriteEndElement();
131     }
132    
133     if (file.genre != null && file.album != "")
134     {
135     writer.WriteStartElement("genre");
136     writer.WriteString(file.genre);
137     writer.WriteEndElement();
138     }
139    
140 douglas 519 writer.WriteEndElement();
141     }
142    
143     foreach (MediaFolder folder_ in folder.folders)
144     Media(folder_, folder_.path, writer);
145    
146     writer.WriteEndElement();
147     }
148 douglas 518 }

Properties

Name Value
svn:eol-style native
svn:keywords Id