public  WebAlbumSelectorViewModel(IMusicSession ims,  IModifiableAlbum imad, int iMaxResult=5)
        {
            _IModifiableAlbum = imad;
            _IMS = ims; 
            
            _IsLoading = true;
            _FoundSomething = true;
     
            _MergeStategy = MergeStategy.OnlyCover;

            var lookfor = imad.GetAlbumDescriptor();

            IWebQuery wb = ims.WebQueryFactory.FromAlbumDescriptor(lookfor);
            wb.NeedCoverArt = true;
            wb.MaxResult = iMaxResult;

            _OriginalAlbumName = lookfor.ToString();
            _IInternetFinder = ims.GetInternetFinder(wb);

            SelectCover = Register(RelayCommand.InstanciateAsync(()=>DoSelect(), () => SelectedInfos.Count>0));
            Cancel = Register(RelayCommand.Instanciate(DoCancel, ()=>IsLoading));
            Close = RelayCommand.Instanciate(DoClose);

            //LoadResult().DoNotWaitSafe();
        }
        public AlbumEditorViewModel(IMusicSession iMusicSession, IModifiableAlbum iModifiableAlbum)
        {
            _IModifiableAlbum = iModifiableAlbum;
            _Session = iMusicSession;

            ArtistSearchableFactory = new ArtistSearchableFactory(iMusicSession);

            GenreFactory = FactoryBuilder.Instanciate((n) => iMusicSession.GetGenreFactory().Create(n));

            Images = _IModifiableAlbum.Images;
            SelectedImages = new WrappedObservableCollection<IAlbumPicture>();
            

            if (Images.Count > 0)
                SelectedImage = Images[0];

            Images.CollectionChanged += Images_CollectionChanged;
                
            SelectedTracks = new WrappedObservableCollection<IModifiableTrack>();

            Authours = _IModifiableAlbum.Artists;
            _Genre = iMusicSession.GetGenreFactory().Get(_IModifiableAlbum.Genre);
            Genres = Register(iMusicSession.AllGenres.LiveOrderBy(global => global.FullName));

            Tracks = new WrappedObservableCollection<IModifiableTrack>(_IModifiableAlbum.Tracks.
                OrderBy(t => t.DiscNumber).ThenBy(t => t.TrackNumber).ThenBy(t => t.Name));

            SetFrontCover = Register(RelayCommand.Instanciate<IAlbumPicture>(SetToFront, ial => (ial != null) && Images.IndexOf(ial) > 0));
            ToLast = Register(RelayCommand.Instanciate<IAlbumPicture>(SetToLast, ial => (ial != null) && Images.IndexOf(ial) != Images.Count - 1));

            SplitImage = Register(RelayCommand.Instanciate<IAlbumPicture>(DoSplitImage, ial => ial != null));
            RotateImageRight = Register(RelayCommand.Instanciate<IAlbumPicture>((al)=>DoRotateImage(al,true), ial => ial != null));
            RotateImageLeft = Register(RelayCommand.Instanciate<IAlbumPicture>((al) => DoRotateImage(al, false), ial => ial != null));
            DeleteImage = Register(RelayCommand.Instanciate<IAlbumPicture>(DoDeleteImage, ial => ial != null));
            ImageFromFile = RelayCommand.Instanciate(DoImageFromFile);
            PasteImage = RelayCommand.InstanciateStatic(DoPasteImage, CanExecuteImage);

            DeleteTrack = Register(RelayCommand.Instanciate<IModifiableTrack>(DoDeleteTrack, ial => ial != null));
            WindowOpenTrack = Register(RelayCommand.Instanciate<IModifiableTrack>(DoWindowOpenTrack, ial => ial != null));
            UpdateFromFileName = Register(RelayCommand.Instanciate<IModifiableTrack>(DoUpdateFromFileName, ial => ial != null));
            RemoveTrackNumber= Register(RelayCommand.Instanciate<IModifiableTrack>(DoRemoveTrackNumber, ial => ial != null));
            PreFixByArtistName = Register(RelayCommand.Instanciate<IModifiableTrack>(DoPreFixByArtistName, ial => ial != null));
            ChangeDiscNumber = Register(RelayCommand.Instanciate<IModifiableTrack>(DoChangeDiscNumber, ial => ial != null));

            FindFromDB = RelayCommand.Instanciate(DoFindFromInternet);
            BrowseInternet = RelayCommand.Instanciate(FindOnInternet);
            OK = RelayCommand.Instanciate(DoCommit);
        }
        private bool AddImagesFromFile(IModifiableAlbum imoda)
        {
            try
            {
                string MainDirectory = imoda.MainDirectory;
                List<string> myfiles = ImagesFromDirectory(MainDirectory);

                if (myfiles.Count == 0)
                {
                    string otherdir = Path.Combine(MainDirectory, "cover");
                    myfiles = ImagesFromDirectory(otherdir);

                    if (myfiles.Count == 0)
                    {
                        string newotherdir = Path.Combine(MainDirectory, "covers");
                        myfiles = ImagesFromDirectory(newotherdir);
                    }
                }

                if (myfiles.Count == 0)
                {
                    return false;
                }

                int i = 0;
                foreach (string file in myfiles)
                {
                    imoda.AddAlbumPicture(file, i++);
                }

                return true;
            }
            catch (Exception e)
            {
                Console.WriteLine("Problem {0}", e);
                return false;
            }

        }
 public InternetFinderViewModel(IModifiableAlbum IAl)
 {
     _Uri = new Uri (@"http://www.google.com/images?q="+IAl.CreateSearchGoogleSearchString(), 
             UriKind.RelativeOrAbsolute);;
 }
 public DiscEditor(IModifiableAlbum Al, IMusicSession Session)
 {
     DataContext = Al;
    InitializeComponent();
    (Editor as ISessionAcessor).Session = Session;
 }