banshee r3785 - in trunk/banshee: . src/Core/Banshee.Core/Banshee.Collection src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp src/Libraries/Hyena.Gui/Hyena.Query.Gui src/Libraries/Hyena/Hyena src/Libraries/Hyena/Hyena.Query src/Libraries/Mtp/Mtp



Author: gburt
Date: Wed Apr 16 21:28:54 2008
New Revision: 3785
URL: http://svn.gnome.org/viewvc/banshee?rev=3785&view=rev

Log:
2008-04-16  Gabriel Burt  <gabriel burt gmail com>

	* src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs: Specify what
	folder to upload the track to - Music or Video.

	* src/Libraries/Mtp/Mtp/MtpDevice.cs: Set the parent_id on the track
	before uploading it.

	* src/Libraries/Mtp/Mtp/Track.cs: Improve the DetectFileType method.

	* src/Libraries/Hyena/Hyena.Query/FileSizeQueryValue.cs:
	* src/Libraries/Hyena/Hyena.Query/RelativeTimeSpanQueryValue.cs:
	* src/Libraries/Hyena/Hyena.Query/TimeSpanQueryValue.cs: Parse values as
	doubles instead of ints, allowing queryies and smart playlists to specy
	"size>2.2MB" for instance.

	* src/Libraries/Hyena.Gui/Hyena.Query.Gui/FileSizeQueryValueEntry.cs:
	* src/Libraries/Hyena.Gui/Hyena.Query.Gui/TimeSpanQueryValueEntry.cs: Add
	a single decimal place to the spin button.

	* src/Libraries/Hyena/Hyena/StringUtil.cs: Improve FormatDouble method,
	now returns 1 if N < 1.1, etc.


Modified:
   trunk/banshee/ChangeLog
   trunk/banshee/src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs
   trunk/banshee/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs
   trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Query.Gui/FileSizeQueryValueEntry.cs
   trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Query.Gui/TimeSpanQueryValueEntry.cs
   trunk/banshee/src/Libraries/Hyena/Hyena.Query/FileSizeQueryValue.cs
   trunk/banshee/src/Libraries/Hyena/Hyena.Query/RelativeTimeSpanQueryValue.cs
   trunk/banshee/src/Libraries/Hyena/Hyena.Query/TimeSpanQueryValue.cs
   trunk/banshee/src/Libraries/Hyena/Hyena/StringUtil.cs
   trunk/banshee/src/Libraries/Mtp/Mtp/MtpDevice.cs
   trunk/banshee/src/Libraries/Mtp/Mtp/Track.cs

Modified: trunk/banshee/src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs	Wed Apr 16 21:28:54 2008
@@ -305,7 +305,7 @@
             get { return can_play; }
             set { can_play = value; }
         }
-        
+
         private TrackMediaAttributes media_attributes = TrackMediaAttributes.Default;
         public virtual TrackMediaAttributes MediaAttributes {
             get { return media_attributes; }

Modified: trunk/banshee/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs
==============================================================================
--- trunk/banshee/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs	(original)
+++ trunk/banshee/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs	Wed Apr 16 21:28:54 2008
@@ -179,7 +179,7 @@
                     writer.Write ("foo");
                 }
                 Track mtp_track = new Track (System.IO.Path.GetFileName (empty_file.LocalPath), 3);
-                mtp_device.UploadTrack (empty_file.AbsolutePath, mtp_track);
+                mtp_device.UploadTrack (empty_file.AbsolutePath, mtp_track, mtp_device.MusicFolder);
                 mtp_device.Remove (mtp_track);
             } finally {
                 Banshee.IO.File.Delete (empty_file);
@@ -192,8 +192,6 @@
         {
             base.Rename (newName);
             mtp_device.Name = newName;
-
-            Console.WriteLine ("BytesUsed = {0}", BytesUsed);
         }
 
         public override long BytesUsed {
@@ -226,7 +224,9 @@
                 return;
 
             Track mtp_track = TrackInfoToMtpTrack (track);
-            mtp_device.UploadTrack (track.Uri.AbsolutePath, mtp_track);
+            bool video = (track.MediaAttributes & TrackMediaAttributes.VideoStream) != 0;
+            Console.WriteLine ("Sending track {0}, is video? {1}", track, video);
+            mtp_device.UploadTrack (track.Uri.AbsolutePath, mtp_track, video ? mtp_device.VideoFolder : mtp_device.MusicFolder);
 
             MtpTrackInfo new_track = new MtpTrackInfo (mtp_track);
             new_track.PrimarySource = this;

Modified: trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Query.Gui/FileSizeQueryValueEntry.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Query.Gui/FileSizeQueryValueEntry.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Query.Gui/FileSizeQueryValueEntry.cs	Wed Apr 16 21:28:54 2008
@@ -45,12 +45,14 @@
             FileSizeFactor.None, FileSizeFactor.KB, FileSizeFactor.MB, FileSizeFactor.GB
         };
 
+        bool combo_set = false;
+
         // Relative: [<|>] [num] [minutes|hours] ago
         // TODO: Absolute: [>|>=|=|<|<=] [date/time]
         public FileSizeQueryValueEntry () : base ()
         {
             spin_button = new SpinButton (0.0, 1.0, 1.0);
-            spin_button.Digits = 0;
+            spin_button.Digits = 1;
             spin_button.WidthChars = 4;
             spin_button.SetRange (0.0, Double.MaxValue);
             Add (spin_button);
@@ -60,7 +62,7 @@
             combo.AppendText (Catalog.GetString ("KB"));
             combo.AppendText (Catalog.GetString ("MB"));
             combo.AppendText (Catalog.GetString ("GB"));
-            combo.Realized += delegate { combo.Active = 2; };
+            combo.Realized += delegate { if (!combo_set) { combo.Active = 2; } };
             Add (combo);
 
             spin_button.ValueChanged += HandleValueChanged;
@@ -73,6 +75,8 @@
                 spin_button.ValueChanged -= HandleValueChanged;
                 combo.Changed -= HandleValueChanged;
                 query_value = value as FileSizeQueryValue;
+                spin_button.Value = query_value.FactoredValue;
+                combo_set = true;
                 combo.Active = Array.IndexOf (factors, query_value.Factor);
                 spin_button.ValueChanged += HandleValueChanged;
                 combo.Changed += HandleValueChanged;
@@ -81,7 +85,7 @@
 
         protected void HandleValueChanged (object o, EventArgs args)
         {
-            query_value.SetValue (spin_button.ValueAsInt, factors [combo.Active]);
+            query_value.SetValue (spin_button.Value, factors [combo.Active]);
         }
     }
 }

Modified: trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Query.Gui/TimeSpanQueryValueEntry.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Query.Gui/TimeSpanQueryValueEntry.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Query.Gui/TimeSpanQueryValueEntry.cs	Wed Apr 16 21:28:54 2008
@@ -50,7 +50,7 @@
         public TimeSpanQueryValueEntry () : base ()
         {
             spin_button = new SpinButton (0.0, 1.0, 1.0);
-            spin_button.Digits = 0;
+            spin_button.Digits = 1;
             spin_button.WidthChars = 4;
             spin_button.SetRange (0.0, Double.MaxValue);
             Add (spin_button);
@@ -87,7 +87,7 @@
 
         protected virtual void HandleValueChanged (object o, EventArgs args)
         {
-            query_value.SetRelativeValue (spin_button.ValueAsInt, factors [combo.Active]);
+            query_value.SetRelativeValue (spin_button.Value, factors [combo.Active]);
         }
     }
 }

Modified: trunk/banshee/src/Libraries/Hyena/Hyena.Query/FileSizeQueryValue.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena.Query/FileSizeQueryValue.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Query/FileSizeQueryValue.cs	Wed Apr 16 21:28:54 2008
@@ -60,16 +60,21 @@
             DetermineFactor ();
         }
 
+        public double FactoredValue {
+            get { return (double)value / (double)factor; }
+        }
+
         public override void ParseUserQuery (string input)
         {
             if (input.Length > 1 && (input[input.Length - 1] == 'b' || input[input.Length - 1] == 'B')) {
                 input = input.Substring (0, input.Length - 1);
             }
 
-            base.ParseUserQuery (input);
+            double double_value;
+            IsEmpty = !Double.TryParse (input, out double_value);
 
             if (IsEmpty && input.Length > 1) {
-                base.ParseUserQuery (input.Substring (0, input.Length - 1));
+                IsEmpty = !Double.TryParse (input.Substring (0, input.Length - 1), out double_value);
             }
 
             if (!IsEmpty) {
@@ -79,7 +84,7 @@
                     case 'g': case 'G': factor = FileSizeFactor.GB; break;
                     default : factor = FileSizeFactor.None; break;
                 }
-                value *= (long) factor;
+                value = (long) ((double)factor * double_value);
             }
         }
 
@@ -89,9 +94,9 @@
             DetermineFactor ();
         }
 
-        public void SetValue (int value, FileSizeFactor factor)
+        public void SetValue (double value, FileSizeFactor factor)
         {
-            this.value = (long) value * (long) factor;
+            this.value = (long) (value * (double)factor);
             this.factor = factor;
             IsEmpty = false;
         }
@@ -100,7 +105,7 @@
         {
             if (!IsEmpty && value != 0) {
                 foreach (FileSizeFactor factor in Enum.GetValues (typeof(FileSizeFactor))) {
-                    if (value >= (long) factor) {
+                    if (value >= (double) factor) {
                         this.factor = factor;
                     }
                 }
@@ -110,8 +115,9 @@
         public override string ToUserQuery ()
         {
             if (factor != FileSizeFactor.None) {
-                return String.Format ("{0} {1}",
-                    IntValue == 0 ? 0 : (IntValue / (long) factor),
+                return String.Format (
+                    "{0} {1}",
+                    IntValue == 0 ? "0" : StringUtil.FormatDouble (((double)IntValue / (double)factor)),
                     factor.ToString ()
                 );
             } else {

Modified: trunk/banshee/src/Libraries/Hyena/Hyena.Query/RelativeTimeSpanQueryValue.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena.Query/RelativeTimeSpanQueryValue.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Query/RelativeTimeSpanQueryValue.cs	Wed Apr 16 21:28:54 2008
@@ -55,11 +55,11 @@
             get { return "date"; }
         }
 
-        public override long Offset {
+        public override double Offset {
             get { return -offset; }
         }
 
-        public override void SetUserRelativeValue (long offset, TimeFactor factor)
+        public override void SetUserRelativeValue (double offset, TimeFactor factor)
         {
             SetRelativeValue (-offset, factor);
         }
@@ -75,7 +75,7 @@
             return DateTimeUtil.FromDateTime (DateTime.Now + TimeSpan.FromSeconds ((double) offset)).ToString (System.Globalization.CultureInfo.InvariantCulture);
         }
 
-        protected override string FactorString (TimeFactor factor, int count)
+        protected override string FactorString (TimeFactor factor, double count)
         {
             string translated = base.FactorString (factor, count);
             return (translated == null) ? null : String.Format (Catalog.GetString ("{0} ago"), translated);

Modified: trunk/banshee/src/Libraries/Hyena/Hyena.Query/TimeSpanQueryValue.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena.Query/TimeSpanQueryValue.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Query/TimeSpanQueryValue.cs	Wed Apr 16 21:28:54 2008
@@ -57,7 +57,7 @@
         public static readonly Operator LessThan           = new Operator ("lessThan", "< {0}", "<");
         public static readonly Operator GreaterThan        = new Operator ("greaterThan", "> {0}", ">");*/
 
-        protected long offset = 0;
+        protected double offset = 0;
         protected TimeFactor factor = TimeFactor.Second;
 
         public override string XmlElementName {
@@ -74,7 +74,7 @@
             get { return offset; }
         }
 
-        public virtual long Offset {
+        public virtual double Offset {
             get { return offset; }
         }
 
@@ -82,19 +82,20 @@
             get { return factor; }
         }
 
-        public long FactoredValue {
-            get { return Offset / (long) factor; }
+        public double FactoredValue {
+            get { return Offset / (double) factor; }
         }
 
-        private static Regex number_regex = new Regex ("\\d+", RegexOptions.Compiled);
+        // FIXME replace period in following with culture-dependent character
+        private static Regex number_regex = new Regex ("\\d+(\\.\\d+)?", RegexOptions.Compiled);
         public override void ParseUserQuery (string input)
         {
             Match match = number_regex.Match (input);
             if (match != Match.Empty && match.Groups.Count > 0) {
-                int val = Convert.ToInt32 (match.Groups[0].Captures[0].Value);
+                double val = Convert.ToDouble (match.Groups[0].Captures[0].Value);
                 foreach (TimeFactor factor in Enum.GetValues (typeof(TimeFactor))) {
                     if (input == FactorString (factor, val)) {
-                        SetUserRelativeValue ((long) val, factor);
+                        SetUserRelativeValue (val, factor);
                         return;
                     }
                 }
@@ -104,25 +105,25 @@
 
         public override string ToUserQuery ()
         {
-            return FactorString (factor, (int) FactoredValue);
+            return FactorString (factor, FactoredValue);
         }
 
-        public virtual void SetUserRelativeValue (long offset, TimeFactor factor)
+        public virtual void SetUserRelativeValue (double offset, TimeFactor factor)
         {
             SetRelativeValue (offset, factor);
         }
 
-        public void SetRelativeValue (long offset, TimeFactor factor)
+        public void SetRelativeValue (double offset, TimeFactor factor)
         {
             this.factor = factor;
-            this.offset = offset * (long) factor;
+            this.offset = (long) (offset * (double)factor);
             IsEmpty = false;
         }
 
         public void LoadString (string val)
         {
             try {
-                SetRelativeValue (Convert.ToInt64 (val), TimeFactor.Second);
+                SetRelativeValue (Convert.ToDouble (val), TimeFactor.Second);
                 DetermineFactor ();
             } catch {
                 IsEmpty = true;
@@ -131,9 +132,9 @@
 
         protected void DetermineFactor ()
         {
-            long val = Math.Abs (offset);
+            double val = Math.Abs (offset);
             foreach (TimeFactor factor in Enum.GetValues (typeof(TimeFactor))) {
-                if (val >= (long) factor) {
+                if (val >= (double) factor) {
                     this.factor = factor;
                 }
             }
@@ -153,21 +154,22 @@
             return Convert.ToString (offset * 1000, System.Globalization.CultureInfo.InvariantCulture);
         }
 
-        protected virtual string FactorString (TimeFactor factor, int count)
+        protected virtual string FactorString (TimeFactor factor, double count)
         {
             string translated = null;
+            int plural_count = StringUtil.DoubleToPluralInt (count);
             switch (factor) {
-                case TimeFactor.Second: translated = Catalog.GetPluralString ("{0} second", "{0} seconds", count); break;
-                case TimeFactor.Minute: translated = Catalog.GetPluralString ("{0} minute", "{0} minutes", count); break;
-                case TimeFactor.Hour:   translated = Catalog.GetPluralString ("{0} hour",   "{0} hours", count); break;
-                case TimeFactor.Day:    translated = Catalog.GetPluralString ("{0} day",    "{0} days", count); break;
-                case TimeFactor.Week:   translated = Catalog.GetPluralString ("{0} week",   "{0} weeks", count); break;
-                case TimeFactor.Month:  translated = Catalog.GetPluralString ("{0} month",  "{0} months", count); break;
-                case TimeFactor.Year:   translated = Catalog.GetPluralString ("{0} year",   "{0} years", count); break;
+                case TimeFactor.Second: translated = Catalog.GetPluralString ("{0} second", "{0} seconds", plural_count); break;
+                case TimeFactor.Minute: translated = Catalog.GetPluralString ("{0} minute", "{0} minutes", plural_count); break;
+                case TimeFactor.Hour:   translated = Catalog.GetPluralString ("{0} hour",   "{0} hours", plural_count); break;
+                case TimeFactor.Day:    translated = Catalog.GetPluralString ("{0} day",    "{0} days", plural_count); break;
+                case TimeFactor.Week:   translated = Catalog.GetPluralString ("{0} week",   "{0} weeks", plural_count); break;
+                case TimeFactor.Month:  translated = Catalog.GetPluralString ("{0} month",  "{0} months", plural_count); break;
+                case TimeFactor.Year:   translated = Catalog.GetPluralString ("{0} year",   "{0} years", plural_count); break;
                 default: return null;
             }
 
-            return String.Format (translated, count);
+            return String.Format (translated, StringUtil.FormatDouble (count));
         }
     }
 }

Modified: trunk/banshee/src/Libraries/Hyena/Hyena/StringUtil.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena/StringUtil.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena/StringUtil.cs	Wed Apr 16 21:28:54 2008
@@ -115,7 +115,8 @@
 
         public static string FormatDouble (double num)
         {
-            if (num == (int)num)
+            // Don't show x.0
+            if (num - (int)num < 0.1)
                 return Convert.ToString ((int)num);
             else
                 return String.Format ("{0:0.0}", num);

Modified: trunk/banshee/src/Libraries/Mtp/Mtp/MtpDevice.cs
==============================================================================
--- trunk/banshee/src/Libraries/Mtp/Mtp/MtpDevice.cs	(original)
+++ trunk/banshee/src/Libraries/Mtp/Mtp/MtpDevice.cs	Wed Apr 16 21:28:54 2008
@@ -221,17 +221,7 @@
 		
 		public void UploadTrack (string path, Track track, Folder folder)
 		{
-			UploadTrack (path, track, folder);
-		}
-		
-		public void UploadTrack (string path, Track track)
-		{
-			this.UploadTrack(path, track, new Folder(0, 0, "", this), null);
-		}
-		
-		public void UploadTrack (string path, Track track, ProgressFunction callback)
-		{
-			this.UploadTrack(path, track, new Folder(0, 0, "", this), callback);
+			UploadTrack (path, track, folder, null);
 		}
 		
 		public void UploadTrack (string path, Track track, Folder folder, ProgressFunction callback)
@@ -240,6 +230,8 @@
 				throw new ArgumentNullException("path");
 			if (track == null)
 				throw new ArgumentNullException("track");
+
+            track.trackStruct.parent_id = folder.FolderId;
 			
 			// We send the trackstruct by ref so that when the file_id gets filled in, our copy is updated
 			Track.SendTrack (Handle, path, ref track.trackStruct, callback, IntPtr.Zero, folder.FolderId);

Modified: trunk/banshee/src/Libraries/Mtp/Mtp/Track.cs
==============================================================================
--- trunk/banshee/src/Libraries/Mtp/Mtp/Track.cs	(original)
+++ trunk/banshee/src/Libraries/Mtp/Mtp/Track.cs	Wed Apr 16 21:28:54 2008
@@ -36,7 +36,7 @@
 	{
 		internal TrackStruct trackStruct;
 		private MtpDevice device;
-		
+
 		public uint FileId {
 			get { return trackStruct.item_id; }
 		}
@@ -162,40 +162,18 @@
 		
 		private static FileType DetectFileType (Track track)
 		{
-			if(track.FileName.EndsWith(".asf", System.StringComparison.OrdinalIgnoreCase))
-				return FileType.ASF;
-			
-			if(track.FileName.EndsWith(".avi", System.StringComparison.OrdinalIgnoreCase))
-				return  FileType.AVI;
-			
-			if(track.FileName.EndsWith(".BMP", System.StringComparison.OrdinalIgnoreCase))
-				return  FileType.BMP;
-			
-			if(track.FileName.EndsWith(".JPEG", System.StringComparison.OrdinalIgnoreCase)
-			   || track.FileName.EndsWith(".JPG", System.StringComparison.OrdinalIgnoreCase))
-				return FileType.JPEG;
-			
-			if(track.FileName.EndsWith(".MP3", System.StringComparison.OrdinalIgnoreCase))
-				return FileType.MP3;
-			
-			if(track.FileName.EndsWith(".MPG", System.StringComparison.OrdinalIgnoreCase)
-			   || track.FileName.EndsWith(".MPEG", System.StringComparison.OrdinalIgnoreCase))
-				return FileType.MPEG;
-			
-			if(track.FileName.EndsWith(".OGG", System.StringComparison.OrdinalIgnoreCase)
-			   || track.FileName.EndsWith(".OGM", System.StringComparison.OrdinalIgnoreCase))
-				return  FileType.OGG;
-						
-			if(track.FileName.EndsWith(".PNG", System.StringComparison.OrdinalIgnoreCase))
-				return  FileType.PNG;
-			
-			if(track.FileName.EndsWith(".WAV", System.StringComparison.OrdinalIgnoreCase))
-				return FileType.WAV;
-									
-			if(track.FileName.EndsWith(".WMA", System.StringComparison.OrdinalIgnoreCase))
-				return FileType.WMA;
+            string ext = System.IO.Path.GetExtension (track.FileName);
 
-			return  FileType.UNKNOWN;
+            // Strip leading .
+            if (ext.Length > 0)
+                ext = ext.Substring (1, ext.Length - 1);
+
+            Console.WriteLine ("DetectFileType for {0} is {1}", track.FileName, ext);
+
+            FileType type = (FileType) Enum.Parse (typeof(FileType), ext, true);
+            //if (type == null)
+            //    return FileType.UNKNOWN;
+            return type;
 		}
 
 		internal static void DestroyTrack (IntPtr track)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]