public HomeViewModel(ILog log, IAccount account, ILocalize localize, IApplication application, IHistory history, INavigationService navigationService, IUser user, IRepository repository, IList<IExerciseType> exerciseTypes, ISettings settings) { _log = log; _localize = localize; _application = application; Account = account; _history = history; _history.OnHistoryItemsChanged += _history_OnHistoryItemsChanged; _NavigationService = navigationService; User = user; ExerciseTypes = exerciseTypes; _repository = repository; _settings = settings; _settings.OnSettingsChanged += _settings_OnSettingsChanged; _settings.Load(); _history.Load(); _repository.Single<User>(1).ContinueWith(t => { var foundUser = t.Result; if (foundUser == null) { //this is first load of the app, set it up _repository.Insert<User>(this.User).ContinueWith(task => { this.User = this.User; Account.AccessToken = this.User.RunkeeperToken; }); } else { User = foundUser; Account.AccessToken = foundUser.RunkeeperToken; } }); if (_exerciseTypes == null || _exerciseTypes.Count == 0 || (_exerciseTypes.Count == 1 && _exerciseTypes[0].Id == 0)) { if (HomeViewModel.cachedTypes != null) { this.ExerciseTypes = HomeViewModel.cachedTypes; _log.Info("cache hit"); } else { _log.Info("cache miss"); this.ExerciseTypes = DefaultTypes; _log.Info("default types set, querying"); _repository.Query<ExerciseType>("select * from ExerciseType").ContinueWith(t => { _log.Info("query complete"); var types = t.Result; if (types == null || types.Count == 0) { _log.Info("db does not have Exercise types, loading default items"); foreach (var e in from tt in this.ExerciseTypes orderby tt.Id select tt) { _repository.Insert<ExerciseType>(e); } } else { _log.Info("all excecise types retreived from the db, update local data store"); this.ExerciseTypes = (from tt in types select tt).ToArray(); } _log.Info("cache extypes to static var"); HomeViewModel.cachedTypes = ExerciseTypes; }); } } }
public ConfigService(IRepository repository) { _repository = repository; Current = _repository.Single<Config, string>("settings"); }