banshee r3684 - in trunk/musicbrainz-sharp: src/MusicBrainz src/MusicBrainz/MusicBrainz tests tests/MusicBrainz.Tests
- From: scottp svn gnome org
- To: svn-commits-list gnome org
- Subject: banshee r3684 - in trunk/musicbrainz-sharp: src/MusicBrainz src/MusicBrainz/MusicBrainz tests tests/MusicBrainz.Tests
- Date: Sun, 6 Apr 2008 03:32:50 +0100 (BST)
Author: scottp
Date: Sun Apr 6 03:32:49 2008
New Revision: 3684
URL: http://svn.gnome.org/viewvc/banshee?rev=3684&view=rev
Log:
* src/MusicBrainz/MusicBrainz.mdp,
src/MusicBrainz/MusicBrainz/Relation.cs,
src/MusicBrainz/MusicBrainz/MusicBrainzObject.cs,
src/MusicBrainz/MusicBrainz/Label.cs,
src/MusicBrainz/MusicBrainz/Release.cs,
src/MusicBrainz/MusicBrainz/MusicBrainzEntity.cs,
src/MusicBrainz/MusicBrainz/LocalDisc.cs,
src/MusicBrainz/MusicBrainz/Track.cs,
src/MusicBrainz/MusicBrainz/Query.cs,
src/MusicBrainz/MusicBrainz/MusicBrainzItem.cs,
src/MusicBrainz/MusicBrainz/Artist.cs,
src/MusicBrainz/MusicBrainz/MusicBrainzService.cs: Reorganized some
code.
* src/MusicBrainz/MusicBrainz/DiscLinux.cs,
src/MusicBrainz/MusicBrainz/LinuxDisc.cs,
src/MusicBrainz/MusicBrainz/DiscWin32.cs,
src/MusicBrainz/MusicBrainz/Win32Disc.cs: Renamed
* tests/MusicBrainz.Tests/ArtistTests.cs: Disabled warning.
Added:
trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/LinuxDisc.cs
- copied, changed from r3683, /trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/DiscLinux.cs
trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Win32Disc.cs
- copied, changed from r3683, /trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/DiscWin32.cs
Removed:
trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/DiscLinux.cs
trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/DiscWin32.cs
Modified:
trunk/musicbrainz-sharp/src/MusicBrainz/ChangeLog
trunk/musicbrainz-sharp/src/MusicBrainz/Makefile.am
trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz.mdp
trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Artist.cs
trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Label.cs
trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/LocalDisc.cs
trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzEntity.cs
trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzItem.cs
trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzObject.cs
trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzService.cs
trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Query.cs
trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Relation.cs
trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Release.cs
trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Track.cs
trunk/musicbrainz-sharp/tests/ChangeLog
trunk/musicbrainz-sharp/tests/MusicBrainz.Tests/ArtistTests.cs
Modified: trunk/musicbrainz-sharp/src/MusicBrainz/Makefile.am
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/Makefile.am (original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/Makefile.am Sun Apr 6 03:32:49 2008
@@ -5,10 +5,9 @@
SOURCES = \
MusicBrainz/Artist.cs \
MusicBrainz/Disc.cs \
- MusicBrainz/DiscLinux.cs \
- MusicBrainz/DiscWin32.cs \
MusicBrainz/Event.cs \
MusicBrainz/Label.cs \
+ MusicBrainz/LinuxDisc.cs \
MusicBrainz/LocalDisc.cs \
MusicBrainz/MusicBrainzEntity.cs \
MusicBrainz/MusicBrainzException.cs \
@@ -20,6 +19,7 @@
MusicBrainz/Release.cs \
MusicBrainz/Track.cs \
MusicBrainz/Utils.cs \
+ MusicBrainz/Win32Disc.cs \
MusicBrainz/XmlRequestEventArgs.cs
instdir = $(prefix)/lib/musicbrainz-sharp
Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz.mdp
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz.mdp (original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz.mdp Sun Apr 6 03:32:49 2008
@@ -16,7 +16,7 @@
<Contents>
<File name="MusicBrainz/Artist.cs" subtype="Code" buildaction="Compile" />
<File name="MusicBrainz/Disc.cs" subtype="Code" buildaction="Compile" />
- <File name="MusicBrainz/DiscWin32.cs" subtype="Code" buildaction="Compile" />
+ <File name="MusicBrainz/Win32Disc.cs" subtype="Code" buildaction="Compile" />
<File name="MusicBrainz/Event.cs" subtype="Code" buildaction="Compile" />
<File name="MusicBrainz/Label.cs" subtype="Code" buildaction="Compile" />
<File name="MusicBrainz/MusicBrainzEntity.cs" subtype="Code" buildaction="Compile" />
@@ -28,7 +28,7 @@
<File name="MusicBrainz/Release.cs" subtype="Code" buildaction="Compile" />
<File name="MusicBrainz/Track.cs" subtype="Code" buildaction="Compile" />
<File name="MusicBrainz/Utils.cs" subtype="Code" buildaction="Compile" />
- <File name="MusicBrainz/DiscLinux.cs" subtype="Code" buildaction="Compile" />
+ <File name="MusicBrainz/LinuxDisc.cs" subtype="Code" buildaction="Compile" />
<File name="MusicBrainz/XmlRequestEventArgs.cs" subtype="Code" buildaction="Compile" />
<File name="MusicBrainz/LocalDisc.cs" subtype="Code" buildaction="Compile" />
<File name="MusicBrainz/MusicBrainzService.cs" subtype="Code" buildaction="Compile" />
Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Artist.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Artist.cs (original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Artist.cs Sun Apr 6 03:32:49 2008
@@ -32,57 +32,18 @@
namespace MusicBrainz
{
- public enum ArtistType
- {
- Unknown,
- Group,
- Person
- }
-
- public sealed class ArtistReleaseType
+ public sealed class Artist : MusicBrainzEntity
{
- string str;
-
- public ArtistReleaseType (ReleaseType type, bool various) : this ((Enum)type, various)
- {
- }
-
- public ArtistReleaseType (ReleaseStatus status, bool various) : this ((Enum)status, various)
- {
- }
- public ArtistReleaseType (ReleaseType type, ReleaseStatus status, bool various)
- {
- StringBuilder builder = new StringBuilder ();
- Format (builder, type, various);
- builder.Append ('+');
- Format (builder, status, various);
- str = builder.ToString ();
- }
-
- ArtistReleaseType (Enum enumeration, bool various)
- {
- StringBuilder builder = new StringBuilder ();
- Format (builder, enumeration, various);
- str = builder.ToString ();
- }
+ #region Private
- void Format (StringBuilder builder, Enum enumeration, bool various)
- {
- builder.Append (various ? "va-" : "sa-");
- Utils.EnumToString (builder, enumeration.ToString ());
- }
-
- public override string ToString ()
- {
- return str;
- }
-
- }
-
- public sealed class Artist : MusicBrainzEntity
- {
const string EXTENSION = "artist";
+ ArtistReleaseType artist_release_type = DefaultArtistReleaseType;
+ ArtistType? type;
+ ReadOnlyCollection<Release> releases;
+ bool have_all_releases;
+
+ #endregion
#region Constructors
@@ -107,7 +68,7 @@
#endregion
- #region Protected Overrides
+ #region Protected
protected override string UrlExtension {
get { return EXTENSION; }
@@ -171,8 +132,6 @@
public static ArtistReleaseType DefaultArtistReleaseType =
new ArtistReleaseType (ReleaseStatus.Official, false);
- ArtistReleaseType artist_release_type = DefaultArtistReleaseType;
-
public ArtistReleaseType ArtistReleaseType {
get { return artist_release_type; }
set {
@@ -192,14 +151,11 @@
get { return base.Name; }
}
- ArtistType? type;
[Queryable ("artype")]
public ArtistType Type {
get { return GetPropertyOrDefault (ref type, ArtistType.Unknown); }
}
- ReadOnlyCollection<Release> releases;
- bool have_all_releases;
public ReadOnlyCollection<Release> Releases {
get {
return releases ?? (have_all_releases
@@ -238,4 +194,57 @@
#endregion
}
+
+ #region Ancillary Types
+
+ public enum ArtistType
+ {
+ Unknown,
+ Group,
+ Person
+ }
+
+ public sealed class ArtistReleaseType
+ {
+ string str;
+
+ public ArtistReleaseType (ReleaseType type, bool various) : this ((Enum)type, various)
+ {
+ }
+
+ public ArtistReleaseType (ReleaseStatus status, bool various) : this ((Enum)status, various)
+ {
+ }
+
+ public ArtistReleaseType (ReleaseType type, ReleaseStatus status, bool various)
+ {
+ StringBuilder builder = new StringBuilder ();
+ Format (builder, type, various);
+ builder.Append ('+');
+ Format (builder, status, various);
+ str = builder.ToString ();
+ }
+
+ ArtistReleaseType (Enum enumeration, bool various)
+ {
+ StringBuilder builder = new StringBuilder ();
+ Format (builder, enumeration, various);
+ str = builder.ToString ();
+ }
+
+ void Format (StringBuilder builder, Enum enumeration, bool various)
+ {
+ builder.Append (various ? "va-" : "sa-");
+ Utils.EnumToString (builder, enumeration.ToString ());
+ }
+
+ public override string ToString ()
+ {
+ return str;
+ }
+
+ }
+
+ #endregion
+
}
Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Label.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Label.cs (original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Label.cs Sun Apr 6 03:32:49 2008
@@ -30,23 +30,18 @@
namespace MusicBrainz
{
- public enum LabelType
- {
- Unspecified,
- Distributor,
- Holding,
- OriginalProduction,
- BootlegProduction,
- ReissueProduction
- }
-
public sealed class Label : MusicBrainzEntity
{
+
+ #region Private
+
const string EXTENSION = "label";
+ string country;
+ LabelType? type;
- protected override string UrlExtension {
- get { return EXTENSION; }
- }
+ #endregion
+
+ #region Constructors
Label (string mbid) : base (mbid, null)
{
@@ -59,6 +54,14 @@
internal Label (XmlReader reader) : base (reader, false)
{
}
+
+ #endregion
+
+ #region Protected
+
+ protected override string UrlExtension {
+ get { return EXTENSION; }
+ }
protected override void LoadMissingDataCore ()
{
@@ -88,17 +91,21 @@
reader.Close ();
return result;
}
+
+ #endregion
- string country;
+ #region Properties
+
public string Country {
get { return GetPropertyOrNull (ref country); }
}
- LabelType? type;
public LabelType Type {
- get { return GetPropertyOrDefault (ref type, LabelType.Unspecified); }
+ get { return GetPropertyOrDefault (ref type, LabelType.None); }
}
+ #endregion
+
#region Static
public static Label Get (string mbid)
@@ -127,4 +134,19 @@
#endregion
}
+
+ #region Ancillary Types
+
+ public enum LabelType
+ {
+ None,
+ Distributor,
+ Holding,
+ OriginalProduction,
+ BootlegProduction,
+ ReissueProduction
+ }
+
+ #endregion
+
}
Copied: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/LinuxDisc.cs (from r3683, /trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/DiscLinux.cs)
==============================================================================
--- /trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/DiscLinux.cs (original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/LinuxDisc.cs Sun Apr 6 03:32:49 2008
@@ -1,6 +1,6 @@
#region License
-// DiscLinux.cs
+// LinuxDisc.cs
//
// Copyright (c) 2008 Scott Peterson <lunchtimemama gmail com>
//
@@ -29,7 +29,7 @@
namespace MusicBrainz
{
- internal sealed class DiscLinux : LocalDisc
+ internal sealed class LinuxDisc : LocalDisc
{
const int O_RDONLY = 0x0;
const int O_NONBLOCK = 0x4000;
@@ -138,7 +138,7 @@
return ReadTocEntry (fd, CDROM_LEADOUT, ref lba);
}
- internal DiscLinux (string device)
+ internal LinuxDisc (string device)
{
int fd = open (device, O_RDONLY | O_NONBLOCK);
Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/LocalDisc.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/LocalDisc.cs (original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/LocalDisc.cs Sun Apr 6 03:32:49 2008
@@ -32,6 +32,8 @@
{
public abstract class LocalDisc : Disc
{
+ public static string SubmissionServiceUrl = "http://mm.musicbrainz.org/bare/cdlookup.html";
+
byte first_track;
byte last_track;
int [] track_durations;
@@ -97,35 +99,36 @@
string submission_url;
public string SubmissionUrl {
- get {
- if (submission_url == null) {
- StringBuilder builder = new StringBuilder ();
- builder.Append ("http://mm.musicbrainz.org/bare/cdlookup.html");
- builder.Append ("?id=");
- builder.Append (Id);
- builder.Append ("&tracks=");
- builder.Append (last_track);
- builder.Append ("&toc=");
- builder.Append (first_track);
- builder.Append ('+');
- builder.Append (last_track);
- builder.Append ('+');
- builder.Append (track_offsets [0]);
- for (int i = first_track; i <= last_track; i++) {
- builder.Append ('+');
- builder.Append (track_offsets [i]);
- }
- submission_url = builder.ToString ();
- }
- return submission_url;
+ get { return submission_url ?? submission_url = BuildSubmissionUrl (); }
+ }
+
+ string BuildSubmissionUrl ()
+ {
+ StringBuilder builder = new StringBuilder ();
+ builder.Append (SubmissionServiceUrl);
+ builder.Append ("?id=");
+ builder.Append (Id);
+ builder.Append ("&tracks=");
+ builder.Append (last_track);
+ builder.Append ("&toc=");
+ builder.Append (first_track);
+ builder.Append ('+');
+ builder.Append (last_track);
+ builder.Append ('+');
+ builder.Append (track_offsets [0]);
+ for (int i = first_track; i <= last_track; i++) {
+ builder.Append ('+');
+ builder.Append (track_offsets [i]);
}
+ return builder.ToString ();
}
public static LocalDisc GetFromDevice (string device)
{
if (device == null) throw new ArgumentNullException ("device");
return Environment.OSVersion.Platform != PlatformID.Unix
- ? (LocalDisc)new DiscWin32 (device) : new DiscLinux (device);
+ ? (LocalDisc)new Win32Disc (device)
+ : new LinuxDisc (device);
}
}
}
Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzEntity.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzEntity.cs (original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzEntity.cs Sun Apr 6 03:32:49 2008
@@ -36,6 +36,17 @@
public abstract class MusicBrainzEntity : MusicBrainzObject
{
+ #region Private
+
+ string name;
+ string sort_name;
+ string disambiguation;
+ string begin_date;
+ string end_date;
+ ReadOnlyCollection<string> aliases;
+
+ #endregion
+
#region Constructors
internal MusicBrainzEntity (string mbid, string parameters) : base (mbid, parameters)
@@ -48,7 +59,7 @@
#endregion
- #region Protected Overrides
+ #region Protected
protected override void CreateIncCore (StringBuilder builder)
{
@@ -108,40 +119,39 @@
return result;
}
+ protected static string CreateNameParameter (string name)
+ {
+ return "&name=" + Utils.PercentEncode (name);
+ }
+
#endregion
#region Properties
- string name;
public virtual string Name {
get { return GetPropertyOrNull (ref name); }
}
- string sort_name;
[Queryable]
public virtual string SortName {
get { return GetPropertyOrNull (ref sort_name); }
}
- string disambiguation;
[Queryable ("comment")]
public virtual string Disambiguation {
get { return GetPropertyOrNull (ref disambiguation); }
}
- string begin_date;
[Queryable ("begin")]
public virtual string BeginDate {
get { return GetPropertyOrNull (ref begin_date); }
}
- string end_date;
[Queryable ("end")]
public virtual string EndDate {
get { return GetPropertyOrNull (ref end_date); }
}
- ReadOnlyCollection<string> aliases;
[QueryableMember ("Contains", "alias")]
public virtual ReadOnlyCollection<string> Aliases {
get { return GetPropertyOrNew (ref aliases); }
@@ -149,14 +159,14 @@
#endregion
- protected static string CreateNameParameter (string name)
- {
- return "&name=" + Utils.PercentEncode (name);
- }
-
+ #region Public
+
public override string ToString ()
{
return name;
}
+
+ #endregion
+
}
}
Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzItem.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzItem.cs (original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzItem.cs Sun Apr 6 03:32:49 2008
@@ -30,81 +30,17 @@
namespace MusicBrainz
{
- public abstract class ItemQueryParameters
- {
- internal ItemQueryParameters ()
- {
- }
-
- string title;
- public string Title {
- get { return title; }
- set { title = value; }
- }
-
- string artist;
- public string Artist {
- get { return artist; }
- set { artist = value; }
- }
-
- string artist_id;
- public string ArtistId {
- get { return artist_id; }
- set { artist_id = value; }
- }
-
- ReleaseType? release_type;
- public ReleaseType? ReleaseType {
- get { return release_type; }
- set { release_type = value; }
- }
-
- ReleaseStatus? release_status;
- public ReleaseStatus? ReleaseStatus {
- get { return release_status; }
- set { release_status = value; }
- }
-
- int? count;
- public int? TrackCount {
- get { return count; }
- set { count = value; }
- }
-
- protected void AppendBaseToBuilder (StringBuilder builder)
- {
- if (title != null) {
- builder.Append ("&title=");
- Utils.PercentEncode (builder, title);
- }
- if (artist != null) {
- builder.Append ("&artist=");
- Utils.PercentEncode (builder, artist);
- }
- if (artist_id != null) {
- builder.Append ("&artistid=");
- builder.Append (artist_id);
- }
- if (release_type != null) {
- builder.Append ("&releasetypes=");
- builder.Append (Utils.EnumToString (release_type.Value));
- }
- if (release_status != null) {
- builder.Append (release_type != null ? "+" : "&releasetypes=");
- builder.Append (release_status);
- }
- if (count != null) {
- builder.Append ("&count=");
- builder.Append (count.Value);
- }
- }
- }
-
// The item-like product of an artist, such as a track or a release.
public abstract class MusicBrainzItem : MusicBrainzObject
{
+ #region Private
+
+ string title;
+ Artist artist;
+
+ #endregion
+
#region Constructors
internal MusicBrainzItem (string mbid, string parameters) : base (mbid, parameters)
@@ -156,12 +92,10 @@
#region Properties
- string title;
public virtual string Title {
get { return GetPropertyOrNull (ref title); }
}
- Artist artist;
[Queryable ("artist")]
public virtual Artist Artist {
get { return GetPropertyOrNull (ref artist); }
@@ -169,9 +103,90 @@
#endregion
+ #region Public
+
public override string ToString ()
{
return title;
}
+
+ #endregion
+
+ }
+
+ #region Ancillary Types
+
+ public abstract class ItemQueryParameters
+ {
+ internal ItemQueryParameters ()
+ {
+ }
+
+ string title;
+ public string Title {
+ get { return title; }
+ set { title = value; }
+ }
+
+ string artist;
+ public string Artist {
+ get { return artist; }
+ set { artist = value; }
+ }
+
+ string artist_id;
+ public string ArtistId {
+ get { return artist_id; }
+ set { artist_id = value; }
+ }
+
+ ReleaseType? release_type;
+ public ReleaseType? ReleaseType {
+ get { return release_type; }
+ set { release_type = value; }
+ }
+
+ ReleaseStatus? release_status;
+ public ReleaseStatus? ReleaseStatus {
+ get { return release_status; }
+ set { release_status = value; }
+ }
+
+ int? count;
+ public int? TrackCount {
+ get { return count; }
+ set { count = value; }
+ }
+
+ protected void AppendBaseToBuilder (StringBuilder builder)
+ {
+ if (title != null) {
+ builder.Append ("&title=");
+ Utils.PercentEncode (builder, title);
+ }
+ if (artist != null) {
+ builder.Append ("&artist=");
+ Utils.PercentEncode (builder, artist);
+ }
+ if (artist_id != null) {
+ builder.Append ("&artistid=");
+ builder.Append (artist_id);
+ }
+ if (release_type != null) {
+ builder.Append ("&releasetypes=");
+ builder.Append (Utils.EnumToString (release_type.Value));
+ }
+ if (release_status != null) {
+ builder.Append (release_type != null ? "+" : "&releasetypes=");
+ builder.Append (release_status);
+ }
+ if (count != null) {
+ builder.Append ("&count=");
+ builder.Append (count.Value);
+ }
+ }
}
+
+ #endregion
+
}
Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzObject.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzObject.cs (original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzObject.cs Sun Apr 6 03:32:49 2008
@@ -36,26 +36,36 @@
namespace MusicBrainz
{
- internal delegate void XmlProcessingDelegate (XmlReader reader);
-
public abstract class MusicBrainzObject
{
- static TimeSpan min_interval = new TimeSpan (0, 0, 1); // 1 second
+
+ #region Private Fields
+
static DateTime last_accessed;
+ static readonly TimeSpan min_interval = new TimeSpan (0, 0, 1); // 1 second
static readonly object server_mutex = new object ();
-
+ static readonly string [] rels_params = new string [] {
+ "artist-rels",
+ "release-rels",
+ "track-rels",
+ "label-rels",
+ "url-rels"
+ };
+
bool all_data_loaded;
- protected bool AllDataLoaded {
- get { return all_data_loaded; }
- }
-
bool all_rels_loaded;
- protected bool AllRelsLoaded {
- get { return all_rels_loaded; }
- set { all_rels_loaded = value; }
- }
-
- protected abstract string UrlExtension { get; }
+
+ string id;
+ byte score;
+ ReadOnlyCollection<Relation<Artist>> artist_rels;
+ ReadOnlyCollection<Relation<Release>> release_rels;
+ ReadOnlyCollection<Relation<Track>> track_rels;
+ ReadOnlyCollection<Relation<Label>> label_rels;
+ ReadOnlyCollection<UrlRelation> url_rels;
+
+ #endregion
+
+ #region Constructors
internal MusicBrainzObject (string mbid, string parameters)
{
@@ -68,48 +78,11 @@
this.all_rels_loaded = all_rels_loaded;
CreateFromXml (reader);
}
-
- protected string CreateInc ()
- {
- StringBuilder builder = new StringBuilder ();
- CreateIncCore (builder);
- return builder.ToString ();
- }
- static readonly string [] rels_params = new string [] {
- "artist-rels",
- "release-rels",
- "track-rels",
- "label-rels",
- "url-rels"
- };
-
- protected virtual void CreateIncCore (StringBuilder builder)
- {
- if (!all_rels_loaded)
- AppendIncParameters (builder, rels_params);
- }
+ #endregion
- protected void AppendIncParameters (StringBuilder builder, string parameter)
- {
- builder.Append (builder.Length == 0 ? "&inc=" : "+");
- builder.Append (parameter);
- }
+ #region Private Methods
- protected void AppendIncParameters (StringBuilder builder, string parameter1, string parameter2)
- {
- builder.Append (builder.Length == 0 ? "&inc=" : "+");
- builder.Append (parameter1);
- builder.Append ('+');
- builder.Append (parameter2);
- }
-
- protected void AppendIncParameters (StringBuilder builder, string [] parameters)
- {
- foreach (string parameter in parameters)
- AppendIncParameters (builder, parameter);
- }
-
void CreateFromMbid (string mbid, string parameters)
{
XmlProcessingClosure (
@@ -122,9 +95,6 @@
}
);
}
-
- protected abstract bool ProcessAttributes (XmlReader reader);
- protected abstract bool ProcessXml (XmlReader reader);
void CreateFromXml (XmlReader reader)
{
@@ -183,7 +153,53 @@
}
reader.Close ();
}
+
+ #endregion
+
+ #region Protected
+
+ protected bool AllDataLoaded {
+ get { return all_data_loaded; }
+ }
+
+ protected bool AllRelsLoaded {
+ get { return all_rels_loaded; }
+ set { all_rels_loaded = value; }
+ }
+
+ protected string CreateInc ()
+ {
+ StringBuilder builder = new StringBuilder ();
+ CreateIncCore (builder);
+ return builder.ToString ();
+ }
+
+ protected virtual void CreateIncCore (StringBuilder builder)
+ {
+ if (!all_rels_loaded)
+ AppendIncParameters (builder, rels_params);
+ }
+
+ protected void AppendIncParameters (StringBuilder builder, string parameter)
+ {
+ builder.Append (builder.Length == 0 ? "&inc=" : "+");
+ builder.Append (parameter);
+ }
+
+ protected void AppendIncParameters (StringBuilder builder, string parameter1, string parameter2)
+ {
+ builder.Append (builder.Length == 0 ? "&inc=" : "+");
+ builder.Append (parameter1);
+ builder.Append ('+');
+ builder.Append (parameter2);
+ }
+ protected void AppendIncParameters (StringBuilder builder, string [] parameters)
+ {
+ foreach (string parameter in parameters)
+ AppendIncParameters (builder, parameter);
+ }
+
protected void LoadMissingData ()
{
if (!all_data_loaded) {
@@ -192,7 +208,6 @@
}
}
- protected abstract void LoadMissingDataCore ();
protected void LoadMissingDataCore (MusicBrainzObject obj)
{
if (!all_rels_loaded) {
@@ -203,7 +218,14 @@
url_rels = obj.UrlRelations;
}
}
-
+
+ protected abstract void LoadMissingDataCore ();
+ protected abstract bool ProcessAttributes (XmlReader reader);
+ protected abstract bool ProcessXml (XmlReader reader);
+ protected abstract string UrlExtension { get; }
+
+ #endregion
+
#region Properties
protected T GetPropertyOrNull<T> (ref T field_reference) where T : class
@@ -229,41 +251,38 @@
return field_reference ?? new ReadOnlyCollection<T> (new T [0]);
}
- string id;
public virtual string Id {
get { return id; }
}
- byte score;
public virtual byte Score {
get { return score; }
}
- ReadOnlyCollection<Relation<Artist>> artist_rels;
public virtual ReadOnlyCollection<Relation<Artist>> ArtistRelations {
get { return GetPropertyOrNew (ref artist_rels, !all_rels_loaded); }
}
- ReadOnlyCollection<Relation<Release>> release_rels;
public virtual ReadOnlyCollection<Relation<Release>> ReleaseRelations {
get { return GetPropertyOrNew (ref release_rels, !all_rels_loaded); }
}
- ReadOnlyCollection<Relation<Track>> track_rels;
public virtual ReadOnlyCollection<Relation<Track>> TrackRelations {
get { return GetPropertyOrNew (ref track_rels, !all_rels_loaded); }
}
- ReadOnlyCollection<Relation<Label>> label_rels;
public virtual ReadOnlyCollection<Relation<Label>> LabelRelations {
get { return GetPropertyOrNew (ref label_rels, !all_rels_loaded); }
}
- ReadOnlyCollection<UrlRelation> url_rels;
public virtual ReadOnlyCollection<UrlRelation> UrlRelations {
get { return GetPropertyOrNew (ref url_rels, !all_rels_loaded); }
}
+ #endregion
+
+ #region Public
+
public override bool Equals (object obj)
{
MusicBrainzObject mbobj = obj as MusicBrainzObject;
@@ -274,7 +293,7 @@
{
return (GetType ().Name + Id).GetHashCode ();
}
-
+
#endregion
#region Static
@@ -323,8 +342,8 @@
static string CreateUrl (string url_extension, string mbid, string parameters)
{
StringBuilder builder = new StringBuilder (
- MusicBrainzService.ProviderUrl.Length + mbid.Length + parameters.Length + 9);
- builder.Append (MusicBrainzService.ProviderUrl);
+ MusicBrainzService.ServiceUrl.Length + mbid.Length + parameters.Length + 9);
+ builder.Append (MusicBrainzService.ServiceUrl);
builder.Append (url_extension);
builder.Append ('/');
builder.Append (mbid);
@@ -436,4 +455,6 @@
#endregion
}
+
+ internal delegate void XmlProcessingDelegate (XmlReader reader);
}
Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzService.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzService.cs (original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzService.cs Sun Apr 6 03:32:49 2008
@@ -31,7 +31,7 @@
{
public static class MusicBrainzService
{
- public static string ProviderUrl = @"http://musicbrainz.org/ws/1/";
+ public static string ServiceUrl = @"http://musicbrainz.org/ws/1/";
public static RequestCachePolicy CachePolicy;
public static event EventHandler<XmlRequestEventArgs> XmlRequest;
Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Query.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Query.cs (original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Query.cs Sun Apr 6 03:32:49 2008
@@ -33,16 +33,15 @@
{
public sealed class Query<T> : IEnumerable<T> where T : MusicBrainzObject
{
+
+ #region Private
+
string parameters;
string url_extension;
byte limit;
-
- internal Query (string url_extension, byte limit, string parameters)
- {
- this.url_extension = url_extension;
- this.limit = limit;
- this.parameters = parameters;
- }
+
+ int offset;
+ int? count;
List<T> results;
List<T> ResultsWindow {
@@ -53,7 +52,6 @@
}
}
- int offset;
Dictionary<int, WeakReference> weak_references = new Dictionary<int, WeakReference> ();
int Offset {
get { return offset; }
@@ -73,8 +71,22 @@
}
}
}
+
+ #endregion
- int? count;
+ #region Constructors
+
+ internal Query (string url_extension, byte limit, string parameters)
+ {
+ this.url_extension = url_extension;
+ this.limit = limit;
+ this.parameters = parameters;
+ }
+
+ #endregion
+
+ #region Public
+
public int Count {
get {
if(count == null && ResultsWindow == null) { } // just accessing ResultsWindow will give count a value
@@ -90,7 +102,41 @@
return ResultsWindow [i - offset];
}
}
-
+
+ public T First ()
+ {
+ byte tmp_limit = limit;
+ limit = 1;
+ T result = Count > 0 ? this [0] : null;
+ limit = tmp_limit;
+ return result;
+ }
+
+ public T PerfectMatch ()
+ {
+ byte tmp_limit = limit;
+ limit = 2;
+ T result1 = Count > 0 ? this [0] : null;
+ T result2 = Count > 1 ? this [1] : null;
+ limit = tmp_limit;
+
+ return (result1 != null && result1.Score == 100 && (result2 == null || result2.Score < 100))
+ ? result1 : null;
+ }
+
+ public IEnumerable<T> Best ()
+ {
+ return Best (100);
+ }
+
+ public IEnumerable<T> Best (int score_threshold)
+ {
+ foreach (T result in this) {
+ if (result.Score < score_threshold) yield break;
+ yield return result;
+ }
+ }
+
public List<T> ToList ()
{
return ToList (0);
@@ -109,7 +155,7 @@
for(int i = 0; i < Count; i++) array [i] = this [i];
return array;
}
-
+
public IEnumerator<T> GetEnumerator ()
{
for (int i = 0; i < Count; i++) yield return this [i];
@@ -120,44 +166,13 @@
return GetEnumerator ();
}
- public IEnumerable<T> Best ()
- {
- return Best (100);
- }
-
- public IEnumerable<T> Best (int score_threshold)
- {
- foreach (T result in this) {
- if (result.Score < score_threshold) yield break;
- yield return result;
- }
- }
-
- public T PerfectMatch ()
- {
- byte tmp_limit = limit;
- limit = 2;
- T result1 = Count > 0 ? this [0] : null;
- T result2 = Count > 1 ? this [1] : null;
- limit = tmp_limit;
-
- return (result1 != null && result1.Score == 100 && (result2 == null || result2.Score < 100))
- ? result1 : null;
- }
-
- public T First ()
- {
- byte tmp_limit = limit;
- limit = 1;
- T result = Count > 0 ? this [0] : null;
- limit = tmp_limit;
- return result;
- }
-
public static implicit operator T (Query<T> query)
{
return query.First ();
}
+
+ #endregion
+
}
[AttributeUsage (AttributeTargets.Property)]
@@ -180,6 +195,7 @@
{
public readonly string Name;
public readonly string Member;
+
public QueryableMemberAttribute (string member, string name)
{
Member = member;
Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Relation.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Relation.cs (original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Relation.cs Sun Apr 6 03:32:49 2008
@@ -28,12 +28,6 @@
namespace MusicBrainz
{
- public enum RelationDirection
- {
- Forward,
- Backward
- }
-
public abstract class RelationBase<T>
{
T target;
@@ -104,4 +98,10 @@
{
}
}
+
+ public enum RelationDirection
+ {
+ Forward,
+ Backward
+ }
}
Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Release.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Release.cs (original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Release.cs Sun Apr 6 03:32:49 2008
@@ -32,117 +32,23 @@
namespace MusicBrainz
{
-
- #region Enums
-
- public enum ReleaseType
- {
- None,
- Album,
- Single,
- EP,
- Compilation,
- Soundtrack,
- Spokenword,
- Interview,
- Audiobook,
- Live,
- Remix,
- Other
- }
-
- public enum ReleaseStatus
- {
- None,
- Official,
- Promotion,
- Bootleg,
- PsudoRelease
- }
-
- public enum ReleaseFormat
- {
- None,
- Cartridge,
- Cassette,
- CD,
- DAT,
- Digital,
- DualDisc,
- DVD,
- LaserDisc,
- MiniDisc,
- Other,
- ReelToReel,
- SACD,
- Vinyl
- }
-
- #endregion
-
- public sealed class ReleaseQueryParameters : ItemQueryParameters
- {
- string disc_id;
- public string DiscId {
- get { return disc_id; }
- set { disc_id = value; }
- }
-
- string date;
- public string Date {
- get { return date; }
- set { date = value; }
- }
-
- string asin;
- public string Asin {
- get { return asin; }
- set { asin = value; }
- }
-
- string language;
- public string Language {
- get { return language; }
- set { language = value; }
- }
-
- string script;
- public string Script {
- get { return script; }
- set { script = value; }
- }
-
- public override string ToString ()
- {
- StringBuilder builder = new StringBuilder ();
- if (disc_id != null) {
- builder.Append ("&discid=");
- builder.Append (disc_id);
- }
- if (date != null) {
- builder.Append ("&date=");
- Utils.PercentEncode (builder, date);
- }
- if (asin != null) {
- builder.Append ("&asin=");
- builder.Append (asin);
- }
- if (language != null) {
- builder.Append ("&lang=");
- builder.Append (language);
- }
- if (script != null) {
- builder.Append ("&script=");
- builder.Append (script);
- }
- AppendBaseToBuilder (builder);
- return builder.ToString ();
- }
- }
-
public sealed class Release : MusicBrainzItem
{
+
+ #region Private
+
const string EXTENSION = "release";
+ ReleaseType? type;
+ ReleaseStatus? status;
+ string language;
+ string script;
+ string asin;
+ ReadOnlyCollection<Disc> discs;
+ ReadOnlyCollection<Event> events;
+ ReadOnlyCollection<Track> tracks;
+ int? track_number;
+
+ #endregion
#region Constructors
@@ -279,55 +185,46 @@
get { return base.Title; }
}
- ReleaseType? type;
[Queryable]
public ReleaseType Type {
get { return GetPropertyOrDefault (ref type, ReleaseType.None); }
}
- ReleaseStatus? status;
[Queryable]
public ReleaseStatus Status {
get { return GetPropertyOrDefault (ref status, ReleaseStatus.None); }
}
- string language;
public string Language {
get { return GetPropertyOrNull (ref language); }
}
- string script;
[Queryable]
public string Script {
get { return GetPropertyOrNull (ref script); }
}
- string asin;
[Queryable]
public string Asin {
get { return GetPropertyOrNull (ref asin); }
}
- ReadOnlyCollection<Disc> discs;
[QueryableMember("Count", "discids")]
public ReadOnlyCollection<Disc> Discs {
get { return GetPropertyOrNew (ref discs); }
}
- ReadOnlyCollection<Event> events;
public ReadOnlyCollection<Event> Events {
get { return GetPropertyOrNew (ref events); }
}
- ReadOnlyCollection<Track> tracks;
[QueryableMember ("Count", "tracks")]
public ReadOnlyCollection<Track> Tracks {
get { return GetPropertyOrNew (ref tracks); }
}
- int? track_number;
internal int TrackNumber {
- get { return track_number != null ? track_number.Value : -1; }
+ get { return track_number ?? -1; }
}
#endregion
@@ -398,4 +295,112 @@
#endregion
}
+
+ #region Ancillary Types
+
+ public enum ReleaseType
+ {
+ None,
+ Album,
+ Single,
+ EP,
+ Compilation,
+ Soundtrack,
+ Spokenword,
+ Interview,
+ Audiobook,
+ Live,
+ Remix,
+ Other
+ }
+
+ public enum ReleaseStatus
+ {
+ None,
+ Official,
+ Promotion,
+ Bootleg,
+ PsudoRelease
+ }
+
+ public enum ReleaseFormat
+ {
+ None,
+ Cartridge,
+ Cassette,
+ CD,
+ DAT,
+ Digital,
+ DualDisc,
+ DVD,
+ LaserDisc,
+ MiniDisc,
+ Other,
+ ReelToReel,
+ SACD,
+ Vinyl
+ }
+
+ public sealed class ReleaseQueryParameters : ItemQueryParameters
+ {
+ string disc_id;
+ public string DiscId {
+ get { return disc_id; }
+ set { disc_id = value; }
+ }
+
+ string date;
+ public string Date {
+ get { return date; }
+ set { date = value; }
+ }
+
+ string asin;
+ public string Asin {
+ get { return asin; }
+ set { asin = value; }
+ }
+
+ string language;
+ public string Language {
+ get { return language; }
+ set { language = value; }
+ }
+
+ string script;
+ public string Script {
+ get { return script; }
+ set { script = value; }
+ }
+
+ public override string ToString ()
+ {
+ StringBuilder builder = new StringBuilder ();
+ if (disc_id != null) {
+ builder.Append ("&discid=");
+ builder.Append (disc_id);
+ }
+ if (date != null) {
+ builder.Append ("&date=");
+ Utils.PercentEncode (builder, date);
+ }
+ if (asin != null) {
+ builder.Append ("&asin=");
+ builder.Append (asin);
+ }
+ if (language != null) {
+ builder.Append ("&lang=");
+ builder.Append (language);
+ }
+ if (script != null) {
+ builder.Append ("&script=");
+ builder.Append (script);
+ }
+ AppendBaseToBuilder (builder);
+ return builder.ToString ();
+ }
+ }
+
+ #endregion
+
}
Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Track.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Track.cs (original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Track.cs Sun Apr 6 03:32:49 2008
@@ -32,69 +32,17 @@
namespace MusicBrainz
{
- public sealed class TrackQueryParameters : ItemQueryParameters
- {
- string release;
- public string Release {
- get { return release; }
- set { release = value; }
- }
-
- string release_id;
- public string ReleaseId {
- get { return release_id; }
- set { release_id = value; }
- }
-
- uint? duration;
- public uint? Duration {
- get { return duration; }
- set { duration = value; }
- }
-
- int? track_number;
- public int? TrackNumber {
- get { return track_number; }
- set { track_number = value; }
- }
-
- string puid;
- public string Puid {
- get { return puid; }
- set { puid = value; }
- }
-
- public override string ToString ()
- {
- StringBuilder builder = new StringBuilder ();
- if (release != null) {
- builder.Append ("&release=");
- Utils.PercentEncode (builder, release);
- }
- if (release_id != null) {
- builder.Append ("&releaseid=");
- builder.Append (release_id);
- }
- if (duration != null) {
- builder.Append ("&duration=");
- builder.Append (duration.Value);
- }
- if (track_number != null) {
- builder.Append ("&tracknumber=");
- builder.Append (track_number.Value);
- }
- if (puid != null) {
- builder.Append ("&puid=");
- builder.Append (puid);
- }
- AppendBaseToBuilder (builder);
- return builder.ToString ();
- }
- }
-
public sealed class Track : MusicBrainzItem
{
+
+ #region Private
+
const string EXTENSION = "track";
+ uint duration;
+ ReadOnlyCollection<Release> releases;
+ ReadOnlyCollection<string> puids;
+
+ #endregion
#region Constructors
@@ -195,20 +143,17 @@
get { return base.Title; }
}
- uint duration;
[Queryable ("dur")]
public uint Duration {
get { return duration; }
}
- ReadOnlyCollection<Release> releases;
[QueryableMember ("Contains", "release")]
public ReadOnlyCollection<Release> Releases {
get { return GetPropertyOrNew (ref releases); }
}
- ReadOnlyCollection<string> puids;
public ReadOnlyCollection<string> Puids {
get { return GetPropertyOrNew (ref puids); }
}
@@ -286,4 +231,69 @@
#endregion
}
+
+ #region Ancillary Types
+
+ public sealed class TrackQueryParameters : ItemQueryParameters
+ {
+ string release;
+ public string Release {
+ get { return release; }
+ set { release = value; }
+ }
+
+ string release_id;
+ public string ReleaseId {
+ get { return release_id; }
+ set { release_id = value; }
+ }
+
+ uint? duration;
+ public uint? Duration {
+ get { return duration; }
+ set { duration = value; }
+ }
+
+ int? track_number;
+ public int? TrackNumber {
+ get { return track_number; }
+ set { track_number = value; }
+ }
+
+ string puid;
+ public string Puid {
+ get { return puid; }
+ set { puid = value; }
+ }
+
+ public override string ToString ()
+ {
+ StringBuilder builder = new StringBuilder ();
+ if (release != null) {
+ builder.Append ("&release=");
+ Utils.PercentEncode (builder, release);
+ }
+ if (release_id != null) {
+ builder.Append ("&releaseid=");
+ builder.Append (release_id);
+ }
+ if (duration != null) {
+ builder.Append ("&duration=");
+ builder.Append (duration.Value);
+ }
+ if (track_number != null) {
+ builder.Append ("&tracknumber=");
+ builder.Append (track_number.Value);
+ }
+ if (puid != null) {
+ builder.Append ("&puid=");
+ builder.Append (puid);
+ }
+ AppendBaseToBuilder (builder);
+ return builder.ToString ();
+ }
+ }
+
+ #endregion
+
}
Copied: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Win32Disc.cs (from r3683, /trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/DiscWin32.cs)
==============================================================================
--- /trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/DiscWin32.cs (original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Win32Disc.cs Sun Apr 6 03:32:49 2008
@@ -1,6 +1,6 @@
#region License
-// DiscWin32.cs
+// Win32Disc.cs
//
// Copyright (c) 2008 Scott Peterson <lunchtimemama gmail com>
//
@@ -31,25 +31,19 @@
namespace MusicBrainz
{
- internal sealed class DiscWin32 : LocalDisc
+ internal sealed class Win32Disc : LocalDisc
{
[DllImport ("winmm")]
- static extern Int32 mciSendString (String command,
- StringBuilder buffer,
- Int32 bufferSize,
- IntPtr hwndCallback);
+ static extern Int32 mciSendString (String command, StringBuilder buffer, Int32 bufferSize, IntPtr hwndCallback);
[DllImport ("winmm")]
- static extern Int32 mciGetErrorString (Int32 errorCode,
- StringBuilder errorText,
- Int32 errorTextSize);
+ static extern Int32 mciGetErrorString (Int32 errorCode, StringBuilder errorText, Int32 errorTextSize);
delegate void MciCall (string result);
- internal DiscWin32 (string device)
+ internal Win32Disc (string device)
{
- string device_string = device.Length == 0
- ? "cdaudio" : string.Format ("{0} type cdaudio", device);
+ string device_string = device.Length == 0 ? "cdaudio" : string.Format ("{0} type cdaudio", device);
string alias = string.Format ("musicbrainz_cdio_{0}_{1}",
Environment.TickCount, Thread.CurrentThread.ManagedThreadId);
Modified: trunk/musicbrainz-sharp/tests/MusicBrainz.Tests/ArtistTests.cs
==============================================================================
--- trunk/musicbrainz-sharp/tests/MusicBrainz.Tests/ArtistTests.cs (original)
+++ trunk/musicbrainz-sharp/tests/MusicBrainz.Tests/ArtistTests.cs Sun Apr 6 03:32:49 2008
@@ -156,12 +156,14 @@
[Test]
public void TestArgumentNullException()
{
+ #pragma warning disable 0219
try {
Artist a = Artist.Query(null);
throw new Exception();
} catch (ArgumentNullException e) {
Assert.AreEqual(e.ParamName, "name");
}
+ #pragma warning restore 0219
}
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]