private static async Task SetValueAsyncInternal(string name, string value, SQLiteAsyncConnection conn)
        {
            // if we don't have a connection, assume the system one...
            if(conn == null)
			    conn = StreetFooRuntime.GetSystemDatabase();

			// load an existing value...
			var setting = await conn.Table<SettingItem>().Where(v => v.Name == name).FirstOrDefaultAsync();
			if (setting != null)
			{
				// change and update...
				setting.Value = value;
				await conn.UpdateAsync(setting);
			}
			else
			{
				setting = new SettingItem()
				{
					Name = name,
					Value = value
				};

				// save...
				await conn.InsertAsync(setting);
			}
        }
        internal static async Task SetValueAsync(string name, string value)
        {
			var conn = StreetFooRuntime.GetSystemDatabase();

			// load an existing value...
			var setting = await conn.Table<SettingItem>().Where(v => v.Name == name).FirstOrDefaultAsync();
			if (setting != null)
			{
				// change and update...
				setting.Value = value;
				await conn.UpdateAsync(setting);
			}
			else
			{
				setting = new SettingItem()
				{
					Name = name,
					Value = value
				};

				// save...
				await conn.InsertAsync(setting);
			}
        }
        private async Task SearchAsync(string queryText)
        {
            // flag...
            this.SearchDone = true;

            // set...
            this.QueryText = queryText;

            // set the narrative...
            if (string.IsNullOrEmpty(queryText))
            {
                this.QueryNarrative = string.Empty;
            }
            else
            {
                this.QueryNarrative = string.Format("Results for '{0}'", queryText);
            }

            // load...
            var reports = await ReportItem.SearchCacheAsync(queryText);

            this.MasterItems.Clear();
            foreach (var report in reports)
            {
                this.MasterItems.Add(new ReportViewItem(report));
            }

            // what was our selected filter?
            var current = this.ActiveFilter;

            if (current != null)
            {
                var builder = new ToastNotificationBuilder(current.Description);
                builder.Update();
            }

            // do we have anything?
            this.Filters.Clear();
            if (this.MasterItems.Any())
            {
                // all filter...
                var allFilter = new SearchFilter("all", this.MasterItems.Count, null, false);
                allFilter.SelectionCommand = new DelegateCommand(async(args) => await HandleFilterActivatedAsync(allFilter));
                this.Filters.Add(allFilter);

                // build up a list of nouns...
                var nouns = new Dictionary <string, int>();
                var regex = new Regex(@"\b\w+$", RegexOptions.Singleline | RegexOptions.IgnoreCase);
                foreach (var report in reports)
                {
                    var match = regex.Match(report.Title);

                    // word...
                    string noun = match.Value.ToLower();
                    if (!(nouns.ContainsKey(noun)))
                    {
                        nouns[noun] = 0;
                    }
                    nouns[noun]++;
                }

                // add the filters...
                foreach (var noun in nouns.Keys)
                {
                    var filter = new SearchFilter(noun, nouns[noun], noun);
                    filter.SelectionCommand = new DelegateCommand(async(args) => await HandleFilterActivatedAsync(filter));
                    this.Filters.Add(filter);
                }

                // update...
                var manager = new ReportImageCacheManager();
                foreach (var report in this.MasterItems)
                {
                    await report.InitializeAsync(manager);
                }
            }

            // do we need to select the filter?
            var lastQuery = await SettingItem.GetValueAsync(LastQueryKey);

            if (lastQuery == queryText)
            {
                // select the filter...
                var lastFilterName = await SettingItem.GetValueAsync(LastFilterKey);

                if (!(string.IsNullOrEmpty(lastFilterName)))
                {
                    ActivateFilter(lastFilterName);
                }
            }
            else
            {
                // update...
                await SettingItem.SetValueAsync(LastQueryKey, queryText);
            }

            // apply the filter...
            this.ApplyFilter();
        }