public JamendoDownloadManager (string remote_uri, string mimetype)
        {
            this.mimetype = mimetype;
            job = new DownloadManagerJob (this) {
                Title = AddinManager.CurrentLocalizer.GetString ("Jamendo Downloads"),
                Status = AddinManager.CurrentLocalizer.GetString ("Contacting..."),
                IconNames = new string [] { "jamendo" },
                CanCancel = true
            };
            job.Finished += delegate { ServiceManager.SourceManager.MusicLibrary.NotifyUser (); };

            ServiceManager.Get<JobScheduler> ().Add (job);

            import_manager = new LibraryImportManager (true) {
                KeepUserJobHidden = true,
                Debug = true,
                Threaded = false
            };

            var downloader = new HttpFileDownloader () {
                Uri = new Uri (remote_uri),
                TempPathRoot = Path.Combine (Path.GetTempPath (), "banshee-jamendo-downloader"),
                FileExtension = mimetype == "application/zip" ? "zip" : "mp3"
            };
            job.CancelRequested += delegate { downloader.Abort (); };
            QueueDownloader (downloader);
        }
        public SourceWatcher (LibrarySource library)
        {
            this.library = library;
            handle = new ManualResetEvent(false);
            string path = library.BaseDirectoryWithSeparator;
            string home = Environment.GetFolderPath (Environment.SpecialFolder.Personal) + Path.DirectorySeparatorChar;
            if (path == home) {
                throw new Exception ("Will not create LibraryWatcher for the entire home directory");
            }

            import_manager = ServiceManager.Get<LibraryImportManager> ();

            watcher = new FileSystemWatcher (path);
            watcher.IncludeSubdirectories = true;
            watcher.Changed += OnChanged;
            watcher.Created += OnChanged;
            watcher.Deleted += OnChanged;
            watcher.Renamed += OnChanged;

            active = true;
            watch_thread = new Thread (new ThreadStart (Watch));
            watch_thread.Name = String.Format ("LibraryWatcher for {0}", library.Name);
            watch_thread.IsBackground = true;
            watch_thread.Start ();
        }
        public SourceWatcher (LibrarySource library)
        {
            this.library = library;
            handle = new ManualResetEvent(false);
            string path = library.BaseDirectoryWithSeparator;
            string home = Environment.GetFolderPath (Environment.SpecialFolder.Personal) + Path.DirectorySeparatorChar;
            if (path == home) {
                throw new Exception ("Will not create LibraryWatcher for the entire home directory");
            }

            import_manager = ServiceManager.Get<LibraryImportManager> ();

            FileSystemWatcher master_watcher = new FileSystemWatcher (path);
            master_watcher.IncludeSubdirectories = true;
            master_watcher.Changed += OnChanged;
            master_watcher.Created += OnChanged;
            master_watcher.Deleted += OnChanged;
            master_watcher.Renamed += OnChanged;
            watcher.Add (master_watcher);

            foreach (string additional_path in ServiceManager.SourceManager.ActiveSource.Properties.Get<string[]> ("AdditionalWatchedDirectories")) {
                Hyena.Log.DebugFormat ("Watcher: additional LibraryWatcher for {0}", additional_path);
                FileSystemWatcher additional_watcher = new FileSystemWatcher (additional_path);
                additional_watcher.IncludeSubdirectories = true;
                additional_watcher.Changed += OnChanged;
                additional_watcher.Created += OnChanged;
                additional_watcher.Deleted += OnChanged;
                additional_watcher.Renamed += OnChanged;
                watcher.Add (additional_watcher);
            }

            active = true;
            watch_thread = new Thread (new ThreadStart (Watch));
            watch_thread.Name = String.Format ("LibraryWatcher for {0}", library.Name);
            watch_thread.IsBackground = true;
            watch_thread.Start ();
        }
        private void ImportSongs (LibraryImportManager manager, XmlNodeList songs)
        {
            foreach (XmlElement song in songs) {
                if (CheckForCanceled ()) {
                    break;
                }

                processed++;

                string title = String.Empty,
                       genre = String.Empty,
                       artist = String.Empty,
                       album = String.Empty;
                int year = 0,
                    rating = 0,
                    play_count = 0,
                    track_number = 0;
                DateTime date_added = DateTime.Now,
                         last_played = DateTime.MinValue;
                SafeUri uri = null;

                foreach (XmlElement child in song.ChildNodes) {
                    if (child == null || child.InnerText == null || child.InnerText == String.Empty) {
                        continue;
                    }

                    try {
                        switch (child.Name) {
                            case "title":
                                title = child.InnerText;
                                break;
                            case "genre":
                                genre = child.InnerText;
                                break;
                            case "artist":
                                artist = child.InnerText;
                                break;
                            case "album":
                                album = child.InnerText;
                                break;
                            case "track-number":
                                track_number = Int32.Parse (child.InnerText);
                                break;
                            case "location":
                                uri = new SafeUri (child.InnerText);
                                break;
                            case "date":
                                if (child.InnerText != "0") {
                                    year = (new DateTime (1, 1, 1).AddDays (Double.Parse (child.InnerText))).Year;
                                }
                                break;
                            case "rating":
                                rating = Int32.Parse (child.InnerText);
                                break;
                            case "play-count":
                                play_count = Int32.Parse (child.InnerText);
                                break;
                            case "last-played":
                                last_played =  Hyena.DateTimeUtil.ToDateTime (Int64.Parse (child.InnerText));
                                break;
                            case "first-seen":
                                date_added =  Hyena.DateTimeUtil.ToDateTime (Int64.Parse (child.InnerText));;
                                break;
                        }
                    } catch (Exception) {
                        // parsing InnerText failed
                    }
                }

                if (uri == null) {
                    continue;
                }

                UpdateUserJob (processed, count, artist, title);

                try {
                    DatabaseTrackInfo track = manager.ImportTrack (uri);

                    if (track == null) {
                        LogError (SafeUri.UriToFilename (uri), Catalog.GetString ("Unable to import song."));
                        continue;
                    }

                    track.TrackTitle = title;
                    track.ArtistName = artist;
                    track.Genre = genre;
                    track.AlbumTitle = album;
                    track.TrackNumber = track_number;
                    track.Year = year;
                    track.DateAdded = date_added;

                    track.Rating = (rating >= 0 && rating <= 5) ? rating : 0;
                    track.PlayCount = (play_count >= 0) ? play_count : 0;
                    track.LastPlayed = last_played;

                    track.Save (false);
                } catch (Exception e) {
                    LogError (SafeUri.UriToFilename (uri), e);
                }
            }
        }
        //private Stack<DatabaseTrackInfo> stk=new Stack<DatabaseTrackInfo>();
        public void ImportSheet(CueSheet s)
        {
            if (import_manager==null) {
                try {
                    import_manager = new LibraryImportManager (false);
                    /*import_manager.ImportResult+=delegate(object sender,DatabaseImportResultArgs args) {
                        DatabaseTrackInfo trk=args.Track;
                        stk.Push (trk);
                    };*/
                } catch (Exception ex) {
                    Hyena.Log.Error (ex.ToString ());
                }
            }

            Hyena.Log.Debug ("Importsheet: Starting transaction");
            int i,N;
            for(i=0,N=s.nEntries ();i<N;i++) {
                try {
                    CueSheetEntry e=s.entry (i);
                    string file=e.file ();
                    string uuid=Regex.Replace(e.id (),"\\s","_");
                    string ext=".mp3";

                    string uid=Guid.NewGuid ().ToString ();
                    string u1=uid.Substring (0,1);
                    string u2=uid.Substring (0,2);
                    string dir=basedir+"/.banshee/"+u1;
                    if (!Directory.Exists (dir))  {
                        Directory.CreateDirectory(dir);
                    }
                    dir+="/"+u2;
                    if (!Directory.Exists(dir)) {
                        Directory.CreateDirectory(dir);
                    }
                    uuid=dir+"/"+uuid+ext;

                    UnixFileInfo f=new UnixFileInfo(file);
                    if (File.Exists (uuid)) { File.Delete(uuid); }
                    //f.CreateLink (uuid);
                    f.CreateSymbolicLink(uuid);

                    DatabaseTrackInfo trk=import_manager.ImportTrack(uuid);
                    //File.Delete (uuid);
                    /*if (trk==null) {
                        Hyena.Log.Warning ("track = null (file="+e.file ()+")");
                        if (stk.Count>0) { trk=stk.Pop (); }
                    }*/

                    if (trk==null) {
                        Hyena.Log.Error ("track = null (file="+e.file ()+")");
                    } else {
                        Hyena.Log.Information ("track!=null (file="+e.file ()+")");
                        //MySource.DbConnection.BeginTransaction();
                        trk.PartOfCue=1;
                        trk.CueAudioFile=e.file ();
                        trk.AlbumTitle=s.title ();
                        //trk.Album=s.title ();
                        trk.AlbumArtist=s.performer ();
                        trk.Composer=(e.Composer=="") ? s.composer () : e.Composer;
                        //trk.ArtworkId=s.getArtId ();
                        //trk.Artist=
                        trk.ArtistName=(e.performer ()=="") ? s.performer () : e.performer ();
                        trk.TrackTitle=e.title ();
                        trk.TrackNumber=i+1;
                        trk.Genre=s.genre ();
                        trk.BeginOffset=e.BeginOffset;
                        trk.EndOffset=e.EndOffset;
                        //trk.Uri=trk.CueAudioUri;
              						//trk.MediaAttributes = TrackMediaAttributes.ExternalResource;
                        //trk.PrimarySource = ServiceManager.SourceManager.MusicLibrary;

                        trk.Save ();
                        //MySource.DbConnection.CommitTransaction();
                    }
                } catch (Exception ex) {
                    Hyena.Log.Error (ex.ToString ());
                }
            }
            import_manager.NotifyAllSources ();
        }
        public override void Import ()
        {
            var importer = new LibraryImportManager (true) {
                SkipHiddenChildren = false
            };

            foreach (string audio_folder in BaseDirectories) {
                importer.Enqueue (audio_folder);
            }
        }
        private void ProcessSong (LibraryImportManager import_manager, XmlReader xml_reader)
        {
            data.total_processed++;

            var itunes_id = 0;
            var title = String.Empty;
            var title_sort = String.Empty;
            var genre = String.Empty;
            var artist = String.Empty;
            var artist_sort = String.Empty;
            var album_artist = String.Empty;
            var album_artist_sort = String.Empty;
            var composer = String.Empty;
            var album = String.Empty;
            var album_sort = String.Empty;
            var grouping = String.Empty;
            var year = 0;
            var rating = 0;
            var play_count = 0;
            var track_number = 0;
            var date_added = DateTime.Now;
            var last_played = DateTime.MinValue;

            SafeUri uri = null;

            using (xml_reader) {
                while (xml_reader.ReadToFollowing ("key")) {
                    xml_reader.Read();
                    string key = xml_reader.ReadContentAsString ();
                    xml_reader.Read ();
                    xml_reader.Read ();

                    try {
                        switch (key) {
                        case "Track ID":
                            itunes_id = Int32.Parse (xml_reader.ReadContentAsString ());
                            break;
                        case "Name":
                            title = xml_reader.ReadContentAsString ();
                            break;
                        case "Sort Name":
                            title_sort = xml_reader.ReadContentAsString ();
                            break;
                        case "Genre":
                            genre = xml_reader.ReadContentAsString ();
                            break;
                        case "Artist":
                            artist = xml_reader.ReadContentAsString ();
                            break;
                        case "Sort Artist":
                            artist_sort = xml_reader.ReadContentAsString ();
                            break;
                        case "Album Artist":
                            album_artist = xml_reader.ReadContentAsString ();
                            break;
                        case "Sort Album Artist":
                            album_artist_sort = xml_reader.ReadContentAsString ();
                            break;
                        case "Composer":
                            composer = xml_reader.ReadContentAsString ();
                            break;
                        case "Album":
                            album = xml_reader.ReadContentAsString ();
                            break;
                        case "Sort Album":
                            album_sort = xml_reader.ReadContentAsString ();
                            break;
                        case "Grouping":
                            grouping = xml_reader.ReadContentAsString ();
                            break;
                        case "Year":
                            year = Int32.Parse (xml_reader.ReadContentAsString ());
                            break;
                        case "Rating":
                            rating = Int32.Parse (xml_reader.ReadContentAsString ()) / 20;
                            break;
                        case "Play Count":
                            play_count = Int32.Parse (xml_reader.ReadContentAsString ());
                            break;
                        case "Track Number":
                            track_number = Int32.Parse (xml_reader.ReadContentAsString ());
                            break;
                        case "Date Added":
                            date_added = DateTime.Parse (xml_reader.ReadContentAsString (),
                                DateTimeFormatInfo.InvariantInfo, DateTimeStyles.AssumeUniversal);
                            break;
                        case "Play Date UTC":
                            last_played = DateTime.Parse (xml_reader.ReadContentAsString (),
                                DateTimeFormatInfo.InvariantInfo, DateTimeStyles.AssumeUniversal);
                            break;
                        case "Location":
                            uri = ConvertToLocalUri (xml_reader.ReadContentAsString ());
                            break;
                        }
                    } catch {
                    }
                }
            }

            if (uri == null) {
                return;
            }

            UpdateUserJob (data.total_processed, data.total_songs, artist, title);

            try {
                DatabaseTrackInfo track = import_manager.ImportTrack (uri);

                if (track == null) {
                    LogError (SafeUri.UriToFilename (uri), Catalog.GetString ("Unable to import song."));
                    return;
                }

                if (!String.IsNullOrEmpty (title)) {
                    track.TrackTitle = title;
                }
                if (!String.IsNullOrEmpty (title_sort)) {
                    track.TrackTitleSort = title_sort;
                }
                if (!String.IsNullOrEmpty (artist)) {
                    track.ArtistName = artist;
                }
                if (!String.IsNullOrEmpty (artist_sort)) {
                    track.ArtistNameSort = artist_sort;
                }
                if (!String.IsNullOrEmpty (genre)) {
                    track.Genre = genre;
                }
                if (!String.IsNullOrEmpty (album_artist)) {
                    track.AlbumArtist = album_artist;
                }
                if (!String.IsNullOrEmpty (album_artist_sort)) {
                    track.AlbumArtistSort = album_artist_sort;
                }
                if (!String.IsNullOrEmpty (composer)) {
                    track.Composer = composer;
                }
                if (!String.IsNullOrEmpty (album)) {
                    track.AlbumTitle = album;
                }
                if (!String.IsNullOrEmpty (album_sort)) {
                    track.AlbumTitleSort = album_sort;
                }
                if (!String.IsNullOrEmpty (grouping)) {
                    track.Grouping = grouping;
                }
                if (year > 0) {
                    track.Year = year;
                }
                if (data.get_ratings && rating > 0 && rating <= 5) {
                    track.Rating = rating;
                }
                if (data.get_stats && play_count > 0) {
                    track.PlayCount = play_count;
                }
                if (track_number > 0) {
                    track.TrackNumber = track_number;
                }
                if (data.get_stats) {
                    track.DateAdded = date_added;
                }
                if (data.get_stats && last_played > DateTime.MinValue) {
                    track.LastPlayed = last_played;
                }

                data.track_ids.Add (itunes_id, track.TrackId);

                track.Save (false);
            } catch (Exception e) {
                LogError (SafeUri.UriToFilename (uri), e);
            }
        }
 private void ProcessSongs (LibraryImportManager import_manager, XmlReader xml_reader)
 {
     using (xml_reader) {
         xml_reader.ReadToFollowing ("dict");
         while (xml_reader.ReadToFollowing ("dict") && !CheckForCanceled ()) {
             ProcessSong (import_manager, xml_reader.ReadSubtree ());
         }
     }
 }
        private void ProcessLibraryXml (LibraryImportManager import_manager, XmlReader xml_reader)
        {
            while (xml_reader.ReadToFollowing ("key") && !CheckForCanceled ()) {
                xml_reader.Read ();
                string key = xml_reader.ReadContentAsString ();
                xml_reader.Read ();
                xml_reader.Read ();

                switch (key) {
                case "Music Folder":
                    if (!ProcessMusicFolderPath (xml_reader.ReadContentAsString ())) {
                        return;
                    }
                    break;
                case "Tracks":
                    ProcessSongs (import_manager, xml_reader.ReadSubtree ());
                    break;
                case "Playlists":
                    if (data.get_playlists) {
                        ProcessPlaylists (xml_reader.ReadSubtree ());
                    }
                    break;
                }
            }
        }
 public void Import()
 {
     LibraryImportManager importer = new LibraryImportManager (true);
     importer.Enqueue (amazon_base_dir);
 }
Exemple #11
0
        public SourceWatcher(LibrarySource library)
        {
            this.library = library;
            handle = new ManualResetEvent(false);
            string path = library.BaseDirectoryWithSeparator;
            if (String.IsNullOrEmpty (path)) {
                throw new Exception ("Will not create LibraryWatcher for the blank directory");
            }

            string home = Environment.GetFolderPath (Environment.SpecialFolder.Personal) + Path.DirectorySeparatorChar;
            if (path == home) {
                throw new Exception ("Will not create LibraryWatcher for the entire home directory");
            }

            string root = Path.GetPathRoot (Environment.CurrentDirectory);
            if (path == root || path == root + Path.DirectorySeparatorChar) {
                throw new Exception ("Will not create LibraryWatcher for the entire root directory");
            }

            if (!Banshee.IO.Directory.Exists (path)) {
                throw new Exception ("Will not create LibraryWatcher for non-existent directory");
            }

            import_manager = ServiceManager.Get<LibraryImportManager> ();

            watcher = new FileSystemWatcher (path);
            watcher.IncludeSubdirectories = true;
            watcher.Changed += OnModified;
            watcher.Created += OnModified;
            watcher.Deleted += OnModified;
            watcher.Renamed += OnModified;

            active = true;
            watch_thread = new Thread (new ThreadStart (Watch));
            watch_thread.Name = String.Format ("LibraryWatcher for {0}", library.Name);
            watch_thread.IsBackground = true;
            watch_thread.Start ();
        }
        public void Initialize()
        {
            tasks = new Dictionary<string, HttpFileDownloadTask> ();

            import_manager = new LibraryImportManager (true);
            import_manager.ImportResult += HandleImportResult;

            if (download_manager == null)
                download_manager = new DownloadManager (2, tmp_download_path);

            if (download_manager_iface == null) {
                download_manager_iface = new DownloadManagerInterface (download_manager);
                download_manager_iface.Initialize ();
            }

            ServiceManager.Get<DBusCommandService> ().ArgumentPushed += OnCommandLineArgument;
        }