//
-// System.Net.Mime.ContentDisposition.cs
+// System.Net.Mail.ContentDisposition.cs
//
-// Authors:
+// Author:
// Tim Coleman (tim@timcoleman.com)
-// John Luke (john.luke@gmail.com)
//
// Copyright (C) Tim Coleman, 2004
-// Copyright (C) John Luke, 2005
//
//
#if NET_2_0
-using System.Text;
-using System.Collections;
using System.Collections.Specialized;
-using System.Globalization;
namespace System.Net.Mime {
public class ContentDisposition
{
- // FIXME: "r" was not enough, neither was zzz
- // so this will fail if the offset is not an even hour
- const string rfc822 = "dd MMM yyyy HH':'mm':'ss zz00";
-
#region Fields
+ string disposition;
+ DateTime creationDate;
string dispositionType;
- StringDictionary parameters = new StringDictionary ();
+ string filename;
+ bool inline;
+ DateTime modificationDate;
+ DateTime readDate;
+ int size;
#endregion // Fields
#region Constructors
- public ContentDisposition () : this (DispositionTypeNames.Attachment)
+ [MonoTODO]
+ public ContentDisposition ()
{
}
+ [MonoTODO]
public ContentDisposition (string disposition)
{
- if (disposition == null)
- throw new ArgumentNullException ();
- if (disposition.Length < 1)
- throw new FormatException ();
- Size = -1;
-
- try {
- int index = disposition.IndexOf (';');
- if (index < 0) {
- dispositionType = disposition.Trim ();
- }
- else {
- string[] split = disposition.Split (';');
- dispositionType = split[0].Trim ();
- for (int i = 1; i < split.Length; i++)
- Parse (split[i]);
- }
- } catch {
- throw new FormatException ();
- }
- }
-
- // the individual pieces
- void Parse (string pair)
- {
- if (pair == null || pair.Length < 0)
- return;
-
- string[] split = pair.Split ('=');
- if (split.Length == 2)
- parameters.Add (split[0].Trim (), split[1].Trim ());
- else
- throw new FormatException ();
+ this.disposition = disposition;
}
#endregion // Constructors
#region Properties
public DateTime CreationDate {
- get {
- if (parameters.ContainsKey ("creation-date"))
- return DateTime.ParseExact (parameters["creation-date"], rfc822, null);
- else
- return DateTime.MinValue;
- }
- set {
- if (value > DateTime.MinValue)
- parameters["creation-date"] = value.ToString (rfc822);
- else
- parameters.Remove ("modification-date");
- }
+ get { return creationDate; }
+ set { creationDate = value; }
}
public string DispositionType {
get { return dispositionType; }
- set {
- if (value == null)
- throw new ArgumentNullException ();
- if (value.Length < 1)
- throw new ArgumentException ();
- dispositionType = value;
- }
+ set { dispositionType = value; }
}
public string FileName {
- get { return parameters["filename"]; }
- set { parameters["filename"] = value; }
+ get { return filename; }
+ set { filename = value; }
}
public bool Inline {
- get { return String.Compare (dispositionType, DispositionTypeNames.Inline, true, CultureInfo.InvariantCulture) == 0; }
- set {
- if (value)
- dispositionType = DispositionTypeNames.Inline;
- else
- dispositionType = DispositionTypeNames.Attachment;
- }
+ get { return inline; }
+ set { inline = value; }
}
public DateTime ModificationDate {
- get {
- if (parameters.ContainsKey ("modification-date"))
- return DateTime.ParseExact (parameters["modification-date"], rfc822, null);
- else
- return DateTime.MinValue;
- }
- set {
- if (value > DateTime.MinValue)
- parameters["modification-date"] = value.ToString (rfc822);
- else
- parameters.Remove ("modification-date");
- }
+ get { return modificationDate; }
+ set { modificationDate = value; }
}
+ [MonoTODO]
public StringDictionary Parameters {
- get { return parameters; }
+ get { throw new NotImplementedException (); }
}
public DateTime ReadDate {
- get {
- if (parameters.ContainsKey ("read-date"))
- return DateTime.ParseExact (parameters["read-date"], rfc822, null);
- else
- return DateTime.MinValue;
- }
- set {
- if (value > DateTime.MinValue)
- parameters["read-date"] = value.ToString (rfc822);
- else
- parameters.Remove ("read-date");
- }
+ get { return readDate; }
+ set { readDate = value; }
}
- public long Size {
- get {
- if (parameters.ContainsKey ("size"))
- return long.Parse (parameters["size"]);
- else
- return -1;
- }
- set {
- if (value > -1)
- parameters["size"] = value.ToString ();
- else
- parameters.Remove ("size");
- }
+ public int Size {
+ get { return size; }
+ set { size = value; }
}
+
#endregion // Properties
#region Methods
- public override bool Equals (object obj)
- {
- return Equals (obj as ContentDisposition);
- }
-
- bool Equals (ContentDisposition other)
- {
- return other != null && ToString () == other.ToString ();
- }
-
- public override int GetHashCode ()
- {
- return ToString ().GetHashCode ();
- }
-
+ [MonoTODO]
public override string ToString ()
{
- // the content-disposition header as in RFC 2183
- // ex. attachment; filename=genome.jpeg; modification-date="Wed, 12 Feb 1997 16:29:51 -0500";
- // the dates must be quoted and in RFC 822 format
- StringBuilder sb = new StringBuilder ();
- sb.Append (DispositionType.ToLower ());
- if (Parameters != null && Parameters.Count > 0) {
- foreach (DictionaryEntry pair in Parameters)
- {
- if (pair.Value != null && pair.Value.ToString ().Length > 0) {
- sb.Append ("; ");
- sb.Append (pair.Key);
- sb.Append ("=");
- if (pair.Key.ToString ().EndsWith ("date"))
- sb.Append ("\"");
- sb.Append (pair.Value);
- if (pair.Key.ToString ().EndsWith ("date"))
- sb.Append ("\"");
- }
- }
- }
- return sb.ToString ();
+ return disposition;
}
#endregion // Methods