public DeviceRepositoryViewModel()
        {
            this.DriveManager = new DriveManager();
            m_repository = new DeviceRepository();

            SearchFrom = DateTime.Today;
            SearchTo = DateTime.Today + TimeSpan.FromHours(23) + TimeSpan.FromMinutes(59);
            SearchAll = true;
            AutoPlay = true;

            LoadCommand = new DelegateCommand<object>(DoLoad, CanLoad);
            SearchCommand = new DelegateCommand(DoSearch, CanSearch);
            SaveCommand = new DelegateCommand(DoSave, CanSave);

            if (PersonalDomain.Domain.EventAggregator != null) {
                PersonalDomain.Domain.EventAggregator.GetEvent<DeviceTrackActivatedEvent>().Subscribe((track) => {
                    track.IsChecked = true;
                    ActiveTrack = track;
                });

                PersonalDomain.Domain.EventAggregator.GetEvent<TrackPointChangedEvent>().Subscribe((point) => {
                    this.TrackPoint = point;
                });
            }
        }
        public void Save(DeviceRepository source, LocalRepository target, SaveOption options)
        {
            Debug.Assert(source != null);
            Debug.Assert(target != null);
            Debug.Assert(options != null);

            IEnumerable<Track> m_tracks = null;
            switch (options.Scope) {
            case SaveScope.All:
                m_tracks = source.Tracks;
                break;
            case SaveScope.Selection:
                m_tracks = source.Selection;
                break;
            case SaveScope.Range:
                m_tracks = source.Tracks.Where((t) =>
                    (t.StartTime >= options.StartDate) && (t.StartTime <= options.EndDate));
                break;
            }

            if (m_tracks != null) {
                List<string> files = new List<string>();
                foreach (Track track in m_tracks) {
                    files.Add(track.TrackFile);
                }
                new TrackImportHelper(target).Import(source.Vehicle, files, options.Convert, options.Overwrite);
            }
        }
 public void OpenTest()
 {
     DeviceRepository repo = new DeviceRepository();
     Vehicle vehicle = new Vehicle();
     string rootPath = PersonalTest.DeviceRoot;
     repo.Open(vehicle, rootPath, () => {
         string[] files = Directory.GetFiles(rootPath, "*.inc");
         Assert.AreEqual(files.Length, repo.TrackCount);
     });
 }
 public SaveViewModel(DeviceRepository repository, DateTime dateFrom, DateTime dateTo)
 {
     Repository = repository;
     Options = new SaveOption();
     Options.StartDate = dateFrom;
     Options.EndDate = dateTo;
     Options.Convert = false;
     Options.Overwrite = true;
     IsCancelable = true;
     CancelText = "취소";
     SubmitText = "저장";
 }
 public void SaveDevice(DeviceRepository source, SaveOption options)
 {
     new DeviceSaveHelper().Save(source, Repository, options);
 }
        public RepositoryViewModel()
        {
            CommandBindings = new CommandBindingCollection();

            this.DriveManager = new DriveManager();
            m_deviceRepository = new DeviceRepository();

            m_vehicles = new ListCollectionView(PersonalDomain.Domain.Vehicles);
            m_vehicles.CurrentChanged += new EventHandler(Vehicles_CurrentChanged);

            m_selectedTracks = new TrackCollection();
            m_playbackManager = new PlaybackManager(m_selectedTracks);

            SearchFrom = DateTime.Today;
            SearchTo = DateTime.Today + TimeSpan.FromMinutes(23 * 60 + 59);
            SearchAll = true;
            SearchMode = SearchMode.Recent;
            AutoPlay = true;
            AllPlay = true;

            OpenCommand = new DelegateCommand<object>(DoOpen, CanOpen);
            SearchCommand = new DelegateCommand<object>(DoSearch, CanSearch);
            PlaybackCommand = new DelegateCommand<object>(DoPlayback, CanPlayback);
            SaveCommand = new DelegateCommand(DoSave, CanSave);
            ArrangeCommand = new DelegateCommand(DoArrange, CanArrange);

            DeleteCommand = new RoutedUICommand("삭제", "삭제", typeof(RepositoryViewModel));
            CommandBinding binding = new CommandBinding(DeleteCommand, DoDelete, CanDelete);
            CommandManager.RegisterClassCommandBinding(typeof(RepositoryViewModel), binding);
            CommandBindings.Add(binding);

            RegisterGlobalEvents();
        }