[banshee: 9/61] [InternetArchive] Lots of little improvements
- From: Gabriel Burt <gburt src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [banshee: 9/61] [InternetArchive] Lots of little improvements
- Date: Tue, 3 Nov 2009 06:28:36 +0000 (UTC)
commit c3a9ce1ebcb9b1389607b991b0c6e91a110f081c
Author: Gabriel Burt <gabriel burt gmail com>
Date: Wed Oct 7 17:31:09 2009 -0700
[InternetArchive] Lots of little improvements
Exclude collection items in the search, tweak the default-visible
columns, fix a crasher related to db transactions.
.../Banshee.InternetArchive/HeaderFilters.cs | 23 ++++-
.../Banshee.InternetArchive/Source.cs | 101 ++++++++++++--------
.../InternetArchive/Collection.cs | 40 ++++++++
.../InternetArchive/Item.cs | 17 ++--
.../InternetArchive/MediaType.cs | 79 ++++++++--------
.../InternetArchive/Search.cs | 6 +-
src/Extensions/Banshee.InternetArchive/Makefile.am | 1 +
7 files changed, 172 insertions(+), 95 deletions(-)
---
diff --git a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/HeaderFilters.cs b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/HeaderFilters.cs
index 4d217e5..5f566ec 100644
--- a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/HeaderFilters.cs
+++ b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/HeaderFilters.cs
@@ -92,7 +92,7 @@ namespace Banshee.InternetArchive
private void BuildSearchEntry ()
{
var entry = search_entry = new Banshee.Widgets.SearchEntry () {
- WidthRequest = 200,
+ WidthRequest = 150,
Visible = true,
EmptyMessage = String.Format (Catalog.GetString ("Optional Query"))
};
@@ -108,6 +108,7 @@ namespace Banshee.InternetArchive
combo.AppendText (Catalog.GetString ("Popular This Week"));
combo.AppendText (Catalog.GetString ("Highly Rated"));
combo.AppendText (Catalog.GetString ("Year"));
+ combo.AppendText (Catalog.GetString ("Recently Added"));
combo.Active = 0;
PackStart (new Label (Catalog.GetString ("Sort by:")), false, false, 0);
@@ -129,17 +130,31 @@ namespace Banshee.InternetArchive
{
source.Search.Sorts.Clear ();
- string [] sorts = { "downloads desc", "week asc", "avg_rating desc", "year asc" };
+ string [] sorts = { "downloads desc", "week asc", "avg_rating desc", "year asc", "addeddate desc" };
source.Search.Sorts.Add (new IA.Sort () { Id = sorts[sort_combo.Active] });
+ // And if the above sort value is the same for two items, sort by creator then by title
+ source.Search.Sorts.Add (new IA.Sort () { Id = "creatorSorter asc" });
+ source.Search.Sorts.Add (new IA.Sort () { Id = "titleSorter asc" });
+
TreeIter iter;
if (media_type_combo.GetActiveIter (out iter)) {
var media_type = media_type_store.GetValue (iter, 0) as IA.FieldValue;
- source.Search.Query = media_type.ToString ();
+ string query = media_type.ToString ();
+
+ if (media_type is IA.Collection) {
+ if ((media_type as IA.Collection).MediaType.Id == "music") {
+ //query += " AND (format:mp3 OR format:ogg OR format:flac OR format:shorten)";
+ }
+ }
+
+ query += " AND -mediatype:collection";//(format:mp3 OR format:ogg OR format:flac OR format:shorten)";
if (!String.IsNullOrEmpty (search_entry.Query)) {
- source.Search.Query += String.Format (" AND (title:\"{0}\" OR description:\"{0}\" OR creator:\"{0}\")", search_entry.Query);
+ query += String.Format (" AND (title:\"{0}\" OR description:\"{0}\" OR creator:\"{0}\")", search_entry.Query);
}
+
+ source.Search.Query = query;
}
}
}
diff --git a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/Source.cs b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/Source.cs
index 3af5278..17946cb 100644
--- a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/Source.cs
+++ b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/Source.cs
@@ -66,6 +66,9 @@ namespace Banshee.InternetArchive
public Source () : base (name, name, "internet-archive", 210)
{
+ IA.Search.UserAgent = Banshee.Web.Browser.UserAgent;
+ IA.Search.TimeoutMs = 12*1000;
+
search = new IA.Search () {
Format = IA.ResultsFormat.Json
};
@@ -77,30 +80,36 @@ namespace Banshee.InternetArchive
Properties.SetString ("TrackView.ColumnControllerXml", String.Format (@"
<column-controller>
- <add-default column=""IndicatorColumn"" visible=""true"" />
- <add-default column=""TitleColumn"" visible=""true"" />
- <add-default column=""ArtistColumn"" visible=""true"" />
- <add-default column=""ComposerColumn"" visible=""true"" />
- <add-default column=""CommentColumn"" visible=""true"" />
+ <add-default column=""TitleColumn"" />
+ <add-default column=""ArtistColumn"" />
+ <add-default column=""ComposerColumn"" />
+ <add-default column=""CommentColumn"" />
<add-default column=""RatingColumn"" />
- <add-default column=""DurationColumn"" visible=""true"" />
- <add-default column=""GenreColumn"" />
<add-default column=""YearColumn"" />
- <add-default column=""FileSizeColumn"" visible=""true"" />
- <add-default column=""PlayCountColumn"" visible=""true"" />
- <add-default column=""MimeTypeColumn"" visible=""true"" />
+ <add-default column=""PlayCountColumn"" />
+ <add-default column=""MimeTypeColumn"" />
<add-default column=""LicenseUriColumn"" />
+ <column modify-default=""TitleColumn"">
+ <width>0.50</width>
+ </column>
<column modify-default=""ArtistColumn"">
+ <width>0.25</width>
<title>{0}</title><long-title>{0}</long-title>
</column>
<column modify-default=""PlayCountColumn"">
<title>{1}</title><long-title>{1}</long-title>
</column>
+ <column modify-default=""RatingColumn""><visible>true</visible></column>
+ <column modify-default=""YearColumn""><visible>true</visible></column>
+ <column modify-default=""PlayCountColumn""><visible>true</visible></column>
+ <column modify-default=""LicenseUriColumn""><visible>true</visible></column>
<column modify-default=""CommentColumn"">
<title>{2}</title><long-title>{2}</long-title>
+ <visible>false</visible>
</column>
<column modify-default=""ComposerColumn"">
<title>{3}</title><long-title>{3}</long-title>
+ <visible>false</visible>
</column>
</column-controller>",
Catalog.GetString ("Creator"), Catalog.GetString ("Downloads"),
@@ -139,41 +148,51 @@ namespace Banshee.InternetArchive
SetStatus (Catalog.GetString ("Searching the Internet Archive"), false, true, "gtk-find");
});
+ IA.JsonResults results = null;
+
try {
- var results = new IA.JsonResults (search.GetResults ());
+ results = new IA.JsonResults (search.GetResults ());
total_results = results.TotalResults;
-
- ServiceManager.DbConnection.BeginTransaction ();
-
- ServiceManager.DbConnection.Execute ("DELETE FROM CoreTracks WHERE PrimarySourceID = ?", this.DbId);
- DatabaseTrackModel.Clear ();
-
- foreach (var item in results.Items) {
- var track = new DatabaseTrackInfo () {
- PrimarySource = this,
- ArtistName = item.GetJoined (IA.Field.Creator, ", ") ?? "",
- Comment = Hyena.StringUtil.RemoveHtml (item.Get<string> (IA.Field.Description)),
- Composer = item.GetJoined (IA.Field.Publisher, ", ") ?? "",
- LicenseUri = item.Get<string> (IA.Field.LicenseUrl),
- PlayCount = (int) item.Get<double> (IA.Field.Downloads),
- Rating = (int) Math.Round (item.Get<double> (IA.Field.AvgRating)),
- TrackTitle = item.Get<string> (IA.Field.Title),
- Uri = new Banshee.Base.SafeUri (item.Url),
- MimeType = item.GetJoined (IA.Field.Format, ", "),
- Year = (int) item.Get<double> (IA.Field.Year)
- };
-
- if (track.Comment == "There is currently no description for this item.")
- track.Comment = null;
-
- track.Save (false);
- }
-
- ServiceManager.DbConnection.CommitTransaction ();
- success = true;
} catch (Exception e) {
- ServiceManager.DbConnection.RollbackTransaction ();
Hyena.Log.Exception ("Error searching the Internet Archive", e);
+ results = null;
+ }
+
+ if (results != null) {
+ try {
+ ServiceManager.DbConnection.BeginTransaction ();
+
+ ServiceManager.DbConnection.Execute ("DELETE FROM CoreTracks WHERE PrimarySourceID = ?", this.DbId);
+ DatabaseTrackModel.Clear ();
+
+ foreach (var item in results.Items) {
+ var track = new DatabaseTrackInfo () {
+ PrimarySource = this,
+ ArtistName = item.GetJoined (IA.Field.Creator, ", ") ?? "",
+ Comment = Hyena.StringUtil.RemoveHtml (item.Get<string> (IA.Field.Description)),
+ Composer = item.GetJoined (IA.Field.Publisher, ", ") ?? "",
+ LicenseUri = item.Get<string> (IA.Field.LicenseUrl),
+ PlayCount = (int) item.Get<double> (IA.Field.Downloads),
+ Rating = (int) Math.Round (item.Get<double> (IA.Field.AvgRating)),
+ TrackTitle = item.Get<string> (IA.Field.Title),
+ Uri = new Banshee.Base.SafeUri (item.WebpageUrl),
+ MimeType = item.GetJoined (IA.Field.Format, ", "),
+ //MimeType = item.GetJoined (IA.Field.MediaType, ", "),
+ Year = (int) item.Get<double> (IA.Field.Year)
+ };
+
+ if (track.Comment == "There is currently no description for this item.")
+ track.Comment = null;
+
+ track.Save (false);
+ }
+
+ ServiceManager.DbConnection.CommitTransaction ();
+ success = true;
+ } catch (Exception e) {
+ ServiceManager.DbConnection.RollbackTransaction ();
+ Hyena.Log.Exception ("Error searching the Internet Archive", e);
+ }
}
if (success) {
diff --git a/src/Extensions/Banshee.InternetArchive/InternetArchive/Collection.cs b/src/Extensions/Banshee.InternetArchive/InternetArchive/Collection.cs
new file mode 100644
index 0000000..ddd8988
--- /dev/null
+++ b/src/Extensions/Banshee.InternetArchive/InternetArchive/Collection.cs
@@ -0,0 +1,40 @@
+//
+// Collection.cs
+//
+// Author:
+// Gabriel Burt <gabriel burt gmail com>
+//
+// Copyright (c) 2009 Gabriel Burt
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+
+using Mono.Unix;
+
+namespace InternetArchive
+{
+ public class Collection : FieldValue
+ {
+ public Collection (string id, string name) : base (Field.Collection, id, name) {}
+
+ public MediaType MediaType { get; internal set; }
+ }
+}
diff --git a/src/Extensions/Banshee.InternetArchive/InternetArchive/Item.cs b/src/Extensions/Banshee.InternetArchive/InternetArchive/Item.cs
index b8373db..8167b27 100644
--- a/src/Extensions/Banshee.InternetArchive/InternetArchive/Item.cs
+++ b/src/Extensions/Banshee.InternetArchive/InternetArchive/Item.cs
@@ -48,15 +48,16 @@ namespace InternetArchive
return null;
}
- public string Url {
- get {
- string id = Get<string> (Field.Identifier);
- if (id != null) {
- return String.Format ("http://www.archive.org/details/{0}", id);
- }
+ public string Id {
+ get { return Get<string> (Field.Identifier); }
+ }
- return null;
- }
+ public string JsonDetailsUrl {
+ get { return String.Format ("{0}&output=json", WebpageUrl); }
+ }
+
+ public string WebpageUrl {
+ get { return String.Format ("http://www.archive.org/details/{0}", Id); }
}
public abstract T Get<T> (Field field);
diff --git a/src/Extensions/Banshee.InternetArchive/InternetArchive/MediaType.cs b/src/Extensions/Banshee.InternetArchive/InternetArchive/MediaType.cs
index bb66cbe..f82459c 100644
--- a/src/Extensions/Banshee.InternetArchive/InternetArchive/MediaType.cs
+++ b/src/Extensions/Banshee.InternetArchive/InternetArchive/MediaType.cs
@@ -33,67 +33,68 @@ namespace InternetArchive
{
public class MediaType : FieldValue
{
- private MediaType (string id, string name) : base (Field.MediaType, id, name) {}
+ public MediaType (string id, string name) : base (Field.MediaType, id, name) {}
- private MediaType AddChildren (params FieldValue [] children)
+ public MediaType AddChildren (params Collection [] children)
{
if (Children == null) {
- Children = new List<FieldValue> ();
+ Children = new List<Collection> ();
}
foreach (var child in children) {
Children.Add (child);
+ child.MediaType = this;
}
return this;
}
- public IList<FieldValue> Children { get; set; }
+ public IList<Collection> Children { get; set; }
public static MediaType [] Options = new MediaType [] {
new MediaType ("movies", Catalog.GetString ("Moving Images")).AddChildren (
- new FieldValue (Field.Collection, "animationandcartoons", Catalog.GetString ("Animation & Cartoons")),
- new FieldValue (Field.Collection, "artsandmusicvideos", Catalog.GetString ("Arts & Music")),
- new FieldValue (Field.Collection, "computersandtechvideos", Catalog.GetString ("Computers & Technology")),
- new FieldValue (Field.Collection, "culturalandacademicfilms", Catalog.GetString ("Cultural & Academic Films")),
- new FieldValue (Field.Collection, "ephemera", Catalog.GetString ("Ephemeral Films")),
- new FieldValue (Field.Collection, "home_movies", Catalog.GetString ("Home Movies")),
- new FieldValue (Field.Collection, "moviesandfilms", Catalog.GetString ("Movies")),
- new FieldValue (Field.Collection, "newsandpublicaffairs", Catalog.GetString ("News & Public Affairs")),
- new FieldValue (Field.Collection, "opensource_movies", Catalog.GetString ("Open Source Movies")),
- new FieldValue (Field.Collection, "prelinger", Catalog.GetString ("Prelinger Archives")),
- new FieldValue (Field.Collection, "spiritualityandreligion", Catalog.GetString ("Spirituality & Religion")),
- new FieldValue (Field.Collection, "sports", Catalog.GetString ("Sports Videos")),
- new FieldValue (Field.Collection, "gamevideos", Catalog.GetString ("Videogame Videos")),
- new FieldValue (Field.Collection, "vlogs", Catalog.GetString ("Vlogs")),
- new FieldValue (Field.Collection, "youth_media", Catalog.GetString ("Youth Media"))
+ new Collection ("animationandcartoons", Catalog.GetString ("Animation & Cartoons")),
+ new Collection ("artsandmusicvideos", Catalog.GetString ("Arts & Music")),
+ new Collection ("computersandtechvideos", Catalog.GetString ("Computers & Technology")),
+ new Collection ("culturalandacademicfilms", Catalog.GetString ("Cultural & Academic Films")),
+ new Collection ("ephemera", Catalog.GetString ("Ephemeral Films")),
+ new Collection ("home_movies", Catalog.GetString ("Home Movies")),
+ new Collection ("moviesandfilms", Catalog.GetString ("Movies")),
+ new Collection ("newsandpublicaffairs", Catalog.GetString ("News & Public Affairs")),
+ new Collection ("opensource_movies", Catalog.GetString ("Open Source Movies")),
+ new Collection ("prelinger", Catalog.GetString ("Prelinger Archives")),
+ new Collection ("spiritualityandreligion", Catalog.GetString ("Spirituality & Religion")),
+ new Collection ("sports", Catalog.GetString ("Sports Videos")),
+ new Collection ("gamevideos", Catalog.GetString ("Videogame Videos")),
+ new Collection ("vlogs", Catalog.GetString ("Vlogs")),
+ new Collection ("youth_media", Catalog.GetString ("Youth Media"))
),
new MediaType ("texts", Catalog.GetString ("Texts")).AddChildren (
- new FieldValue (Field.Collection, "americana", Catalog.GetString ("American Libraries")),
- new FieldValue (Field.Collection, "toronto", Catalog.GetString ("Canadian Libraries")),
- new FieldValue (Field.Collection, "universallibrary", Catalog.GetString ("Universal Library")),
- new FieldValue (Field.Collection, "gutenberg", Catalog.GetString ("Project Gutenberg")),
- new FieldValue (Field.Collection, "iacl", Catalog.GetString ("Children's Library")),
- new FieldValue (Field.Collection, "biodiversity", Catalog.GetString ("Biodiversity Heritage Library")),
- new FieldValue (Field.Collection, "additional_collections", Catalog.GetString ("Additional Collections"))
+ new Collection ("americana", Catalog.GetString ("American Libraries")),
+ new Collection ("toronto", Catalog.GetString ("Canadian Libraries")),
+ new Collection ("universallibrary", Catalog.GetString ("Universal Library")),
+ new Collection ("gutenberg", Catalog.GetString ("Project Gutenberg")),
+ new Collection ("iacl", Catalog.GetString ("Children's Library")),
+ new Collection ("biodiversity", Catalog.GetString ("Biodiversity Heritage Library")),
+ new Collection ("additional_collections", Catalog.GetString ("Additional Collections"))
),
new MediaType ("audio", Catalog.GetString ("Audio")).AddChildren (
- new FieldValue (Field.Collection, "audio_bookspoetry", Catalog.GetString ("Audio Books & Poetry")),
- new FieldValue (Field.Collection, "audio_tech", Catalog.GetString ("Computers & Technology")),
- new FieldValue (Field.Collection, "GratefulDead", Catalog.GetString ("Grateful Dead")),
- new FieldValue (Field.Collection, "etree", Catalog.GetString ("Live Music Archive")),
- new FieldValue (Field.Collection, "audio_music", Catalog.GetString ("Music & Arts")),
- new FieldValue (Field.Collection, "netlabels", Catalog.GetString ("Netlabels")),
- new FieldValue (Field.Collection, "audio_news", Catalog.GetString ("News & Public Affairs")),
- new FieldValue (Field.Collection, "audio_foreign", Catalog.GetString ("Non-English Audio")),
- new FieldValue (Field.Collection, "opensource_audio", Catalog.GetString ("Open Source Audio")),
- new FieldValue (Field.Collection, "audio_podcast", Catalog.GetString ("Podcasts")),
- new FieldValue (Field.Collection, "radioprograms", Catalog.GetString ("Radio Programs")),
- new FieldValue (Field.Collection, "audio_religion", Catalog.GetString ("Spirituality & Religion"))
+ new Collection ("audio_bookspoetry", Catalog.GetString ("Audio Books & Poetry")),
+ new Collection ("audio_tech", Catalog.GetString ("Computers & Technology")),
+ new Collection ("GratefulDead", Catalog.GetString ("Grateful Dead")),
+ new Collection ("etree", Catalog.GetString ("Live Music Archive")),
+ new Collection ("audio_music", Catalog.GetString ("Music & Arts")),
+ new Collection ("netlabels", Catalog.GetString ("Netlabels")),
+ new Collection ("audio_news", Catalog.GetString ("News & Public Affairs")),
+ new Collection ("audio_foreign", Catalog.GetString ("Non-English Audio")),
+ new Collection ("opensource_audio", Catalog.GetString ("Open Source Audio")),
+ new Collection ("audio_podcast", Catalog.GetString ("Podcasts")),
+ new Collection ("radioprograms", Catalog.GetString ("Radio Programs")),
+ new Collection ("audio_religion", Catalog.GetString ("Spirituality & Religion"))
),
new MediaType ("education", Catalog.GetString ("Education")),
new MediaType ("software", Catalog.GetString ("Software")).AddChildren (
- new FieldValue (Field.Collection, "clasp", Catalog.GetString ("CLASP"))
+ new Collection ("clasp", Catalog.GetString ("CLASP"))
)
};
}
diff --git a/src/Extensions/Banshee.InternetArchive/InternetArchive/Search.cs b/src/Extensions/Banshee.InternetArchive/InternetArchive/Search.cs
index c78ecb2..2f5f4d6 100644
--- a/src/Extensions/Banshee.InternetArchive/InternetArchive/Search.cs
+++ b/src/Extensions/Banshee.InternetArchive/InternetArchive/Search.cs
@@ -57,7 +57,6 @@ namespace InternetArchive
List<Sort> sorts = new List<Sort> ();
List<Field> result_fields = new List<Field> ();
int NumResults;
- //bool indent = false;
public IList<Field> ReturnFields { get { return result_fields; } }
public IList<Sort> Sorts { get { return sorts; } }
@@ -65,7 +64,7 @@ namespace InternetArchive
public string Query { get; set; }
static Search () {
- //UserAgent = "InternetArchiveSharp";
+ UserAgent = "InternetArchiveSharp";
TimeoutMs = 20000;
}
@@ -83,6 +82,7 @@ namespace InternetArchive
Field.Identifier,
Field.Language,
Field.LicenseUrl,
+ Field.MediaType,
Field.NumReviews,
Field.Publisher,
Field.Title,
@@ -96,7 +96,7 @@ namespace InternetArchive
{
var sb = new System.Text.StringBuilder ();
- sb.AppendFormat ("q={0}", System.Web.HttpUtility.UrlEncode (Query));//"(collection%3Aaudio+OR+mediatype%3Aaudio)+AND+-mediatype%3Acollection");
+ sb.AppendFormat ("q={0}", System.Web.HttpUtility.UrlEncode (Query));
foreach (var field in result_fields) {
sb.AppendFormat ("&fl[]={0}", System.Web.HttpUtility.UrlEncode (field.Id));
diff --git a/src/Extensions/Banshee.InternetArchive/Makefile.am b/src/Extensions/Banshee.InternetArchive/Makefile.am
index 08b281d..64590df 100644
--- a/src/Extensions/Banshee.InternetArchive/Makefile.am
+++ b/src/Extensions/Banshee.InternetArchive/Makefile.am
@@ -4,6 +4,7 @@ LINK = $(REF_EXTENSION_INTERNETARCHIVE)
INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
SOURCES = \
+ InternetArchive/Collection.cs \
InternetArchive/Field.cs \
InternetArchive/FieldValue.cs \
InternetArchive/MediaType.cs \
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]