1 |
douglas |
518 |
// Decentralized Media Client |
2 |
|
|
// |
3 |
|
|
// Douglas Thrift |
4 |
|
|
// |
5 |
|
|
// $Id$ |
6 |
|
|
|
7 |
|
|
using System; |
8 |
douglas |
519 |
using System.Collections.Generic; |
9 |
douglas |
518 |
using System.Net; |
10 |
|
|
using System.IO; |
11 |
|
|
using System.Text; |
12 |
|
|
using System.Xml; |
13 |
|
|
|
14 |
|
|
public class DecentralizedMediaClient |
15 |
|
|
{ |
16 |
douglas |
519 |
public DecentralizedMediaClient() |
17 |
|
|
{ |
18 |
|
|
Extensions(); |
19 |
|
|
|
20 |
|
|
DirectoryInfo folder = new DirectoryInfo(@"C:\DouglasThrift.net\DecentralizedMedia\Media"); |
21 |
|
|
|
22 |
|
|
folders.Add(new KeyValuePair<DirectoryInfo,MediaFolder>(folder, new MediaFolder(folder, extensions))); |
23 |
|
|
|
24 |
|
|
Media(); |
25 |
|
|
} |
26 |
|
|
|
27 |
douglas |
518 |
public static void Main(string[] args) |
28 |
|
|
{ |
29 |
douglas |
519 |
DecentralizedMediaClient client = new DecentralizedMediaClient(); |
30 |
|
|
} |
31 |
|
|
|
32 |
|
|
private List<string> extensions = new List<string>(); |
33 |
|
|
private List<KeyValuePair<DirectoryInfo, MediaFolder>> folders = new List<KeyValuePair<DirectoryInfo, MediaFolder>>(); |
34 |
|
|
|
35 |
|
|
private void Extensions() |
36 |
|
|
{ |
37 |
douglas |
518 |
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://daemon:6996/"); |
38 |
|
|
|
39 |
douglas |
519 |
request.Method = "EXTENSIONS"; |
40 |
|
|
|
41 |
|
|
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); |
42 |
|
|
StreamReader reader = new StreamReader(response.GetResponseStream()); |
43 |
|
|
string extension; |
44 |
|
|
|
45 |
|
|
while ((extension = reader.ReadLine()) != null) |
46 |
|
|
extensions.Add(extension); |
47 |
|
|
} |
48 |
|
|
|
49 |
|
|
private void Media() |
50 |
|
|
{ |
51 |
|
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://daemon:6996/"); |
52 |
|
|
|
53 |
douglas |
518 |
request.Method = "MEDIA"; |
54 |
|
|
request.SendChunked = true; |
55 |
|
|
|
56 |
|
|
XmlWriterSettings settings = new XmlWriterSettings(); |
57 |
|
|
|
58 |
|
|
settings.Indent = true; |
59 |
|
|
|
60 |
|
|
Stream stream = request.GetRequestStream(); |
61 |
|
|
XmlWriter writer = XmlWriter.Create(stream, settings); |
62 |
|
|
|
63 |
|
|
writer.WriteStartDocument(); |
64 |
|
|
writer.WriteStartElement("media"); |
65 |
douglas |
519 |
|
66 |
|
|
foreach (KeyValuePair<DirectoryInfo, MediaFolder> folder in folders) |
67 |
|
|
Media(folder.Value, "//unplugged/DCXXXX$", writer); |
68 |
|
|
|
69 |
douglas |
518 |
writer.WriteEndDocument(); |
70 |
|
|
writer.Close(); |
71 |
douglas |
519 |
// XXX: for some reason the XmlWriter's Close() doesn't work right |
72 |
douglas |
518 |
stream.Close(); |
73 |
|
|
|
74 |
|
|
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); |
75 |
|
|
|
76 |
|
|
Console.WriteLine("{0} {1}", (int)response.StatusCode, response.StatusDescription); |
77 |
|
|
|
78 |
|
|
response.Close(); |
79 |
|
|
} |
80 |
douglas |
519 |
|
81 |
|
|
private void Media(MediaFolder folder, string path, XmlWriter writer) |
82 |
|
|
{ |
83 |
|
|
writer.WriteStartElement("folder"); |
84 |
|
|
writer.WriteStartElement("path"); |
85 |
|
|
writer.WriteString(path); |
86 |
|
|
writer.WriteEndElement(); |
87 |
|
|
|
88 |
|
|
foreach (MediaFile file in folder.files) |
89 |
|
|
{ |
90 |
|
|
writer.WriteStartElement("file"); |
91 |
|
|
writer.WriteStartElement("path"); |
92 |
|
|
writer.WriteString(file.path); |
93 |
|
|
writer.WriteEndElement(); |
94 |
douglas |
520 |
|
95 |
|
|
if (file.artist != null && file.artist != "") |
96 |
|
|
{ |
97 |
|
|
writer.WriteStartElement("artist"); |
98 |
|
|
writer.WriteString(file.artist); |
99 |
|
|
writer.WriteEndElement(); |
100 |
|
|
} |
101 |
|
|
|
102 |
|
|
if (file.title != null && file.title != "") |
103 |
|
|
{ |
104 |
|
|
writer.WriteStartElement("title"); |
105 |
|
|
writer.WriteString(file.title); |
106 |
|
|
writer.WriteEndElement(); |
107 |
|
|
} |
108 |
|
|
|
109 |
|
|
if (file.album != null && file.album != "") |
110 |
|
|
{ |
111 |
|
|
writer.WriteStartElement("album"); |
112 |
|
|
writer.WriteString(file.album); |
113 |
|
|
writer.WriteEndElement(); |
114 |
|
|
} |
115 |
|
|
|
116 |
|
|
if (file.genre != null && file.album != "") |
117 |
|
|
{ |
118 |
|
|
writer.WriteStartElement("genre"); |
119 |
|
|
writer.WriteString(file.genre); |
120 |
|
|
writer.WriteEndElement(); |
121 |
|
|
} |
122 |
|
|
|
123 |
douglas |
519 |
writer.WriteEndElement(); |
124 |
|
|
} |
125 |
|
|
|
126 |
|
|
foreach (MediaFolder folder_ in folder.folders) |
127 |
|
|
Media(folder_, folder_.path, writer); |
128 |
|
|
|
129 |
|
|
writer.WriteEndElement(); |
130 |
|
|
} |
131 |
douglas |
518 |
} |