Beispiel #1
0
        private void SearchByEffects(string req) // Search strains by effects chosen
        {
            SuggestedStrains strains = JsonConvert.DeserializeObject <SuggestedStrains>(req);

            if ((strains.SuggestedStrainList.Count == 0) || (strains.Status != 0))   // No result
            {
                Status.Text = "No strains found - Please narrow search parameters.";
            }
            if (strains.Status == 0) // Only exact matches
            {
                found.Text = $"Found {strains.SuggestedStrainList.Count} matching strains:";
                foreach (Strain s in strains.SuggestedStrainList)
                {
                    strainListGui.Items.Add(s);
                }
            }
        }
        private void FillStrainList(SuggestedStrains localStrainList)
        {
            if (StrainList.Children.Count > 0)
            {
                StrainList.Children.Clear();
            }

            int i = 1;

            foreach (var strain in localStrainList.SuggestedStrainList)
            {
                string addition = null;

                switch (sortType)
                {
                case SortType.MATCH:
                    addition = localStrainList.Status != 0 ? string.Format(" ({0:0}% match)", strain.MatchingPercent) : "";
                    break;

                case SortType.RANK:
                    addition = string.Format(" (rank: {0:0})", strain.Rank);
                    break;

                case SortType.COUNT:
                    addition = $" (count: {strain.NumberOfUsages})";
                    break;
                }
                var r = new RadioButton()
                {
                    Foreground = new SolidColorBrush(Windows.UI.Colors.Black),
                    FontSize   = 15,
                    VerticalContentAlignment = VerticalAlignment.Top,
                    FontWeight  = FontWeights.Bold,
                    Content     = $"{i++}. {strain.Name}{addition}",
                    DataContext = strain
                };
                r.IsChecked = false;
                r.Checked  += OnChecked;
                StrainList.Children.Add(r);
            }
        }
        private void RadioChecked(object sender, RoutedEventArgs e)
        { // Radio buttons for sorting list
            var b = sender as RadioButton;

            switch (b.Tag)
            {
            case "match":     // Sort by match percentage
                sortType             = SortType.MATCH;
                RadioCount.IsChecked = false;
                RadioRank.IsChecked  = false;
                FillStrainList(matchSortedStrains);
                break;

            case "rank":     // Sort by rank
                sortType             = SortType.RANK;
                RadioCount.IsChecked = false;
                RadioMatch.IsChecked = false;

                if (rankSortedStrains == null)
                {     // Perform sort
                    strains.SuggestedStrainList.Sort(Strain.RankComparison);
                    rankSortedStrains = new SuggestedStrains(strains.Status, new List <Strain>(strains.SuggestedStrainList));
                }
                FillStrainList(rankSortedStrains);
                break;

            case "count":     // Sort by number of usages
                sortType             = SortType.COUNT;
                RadioRank.IsChecked  = false;
                RadioMatch.IsChecked = false;
                if (countSortedStrains == null)
                {     // Perform sort
                    strains.SuggestedStrainList.Sort(Strain.CountComparison);
                    countSortedStrains = new SuggestedStrains(strains.Status, new List <Strain>(strains.SuggestedStrainList));
                }
                FillStrainList(countSortedStrains);
                break;
            }
        }
        private async void OnPageLoaded(object sender, RoutedEventArgs e)
        {
            progressRing.IsActive     = true;
            UsageContext.ChosenStrain = null;
            if (GlobalContext.CurrentUser != null)
            { // Get recommended strains for user from server
                Message.Text = "Searching for matching strains based on your profile...";

                var user_id = GlobalContext.CurrentUser.Data.UserID;
                var url     = Constants.MakeUrl($"strains/recommended/{user_id}/"); // Build url for user

                try
                { // Send request to server
                    var res = await HttpManager.Manager.Get(url);

                    if (res == null)
                    {
                        progressRing.IsActive = false;
                        return;
                    }
                    // Successful request
                    PagesUtilities.SleepSeconds(0.2);

                    // Recommended strain list
                    strains = await Task.Run(() => HttpManager.ParseJson <SuggestedStrains>(res)); // Parsing JSON

                    if (strains.SuggestedStrainList.Count == 0)
                    {
                        ErrorNoStrainFound.Visibility = Visibility.Visible;
                    }
                    else
                    {
                        switch (strains.Status)
                        {       // Status for match type
                        case 0: // Full match
                            Message.Text = $"Showing {strains.SuggestedStrainList.Count} exactly matched strains:";
                            break;

                        case 1:     // Partial match - medical match but positive dont
                            Message.Text = $"No exact matches found!\nTry updating your positive preferences.\nShowing {strains.SuggestedStrainList.Count} partially matching strains:";
                            break;

                        case 2:     // Partial match - medical and positive don't match
                            Message.Text = $"No exact matches found!\nTry updating your positive and medical preferences.\nShowing {strains.SuggestedStrainList.Count} partially matching strains:";
                            break;
                        }
                        Scroller.Height = Stack.ActualHeight - Message.ActualHeight - 20;

                        Random rnd = new Random();

                        foreach (var strain in strains.SuggestedStrainList)
                        { // **Random numbers**
                            strain.Rank           = rnd.Next(1, 100);
                            strain.NumberOfUsages = rnd.Next(0, 1000);
                        }

                        if (strains.Status != 0)
                        { // Calculate partal match rate
                            foreach (var strain in strains.SuggestedStrainList)
                            {
                                strain.MatchingPercent = strain / GlobalContext.CurrentUser;
                            }

                            strains.SuggestedStrainList.Sort(Strain.MatchComparison);
                            matchSortedStrains = new SuggestedStrains(strains.Status, new List <Strain>(strains.SuggestedStrainList));;
                        }

                        var names = $"[{string.Join(", ", from u in strains.SuggestedStrainList select $"{u.Name}")}]";
                        AppDebug.Line($"Status={strains.Status} Got {strains.SuggestedStrainList.Count} strains: {names}");

                        FillStrainList(strains);

                        foreach (var child in ButtonsGrid.Children)
                        { // Display buttons to choose strains
                            if (child.GetType() == typeof(Viewbox))
                            {
                                var b = (child as Viewbox).Child as RadioButton;
                                if (!((string)b.Tag == "match" && strains.Status == 0))
                                {
                                    b.IsEnabled = true;
                                }
                            }
                        }
                        ButtonsGrid.Opacity = 1;
                        //StrainList.Height = Scroller.ActualHeight;
                    }
                }
                catch (Exception x)
                {
                    AppDebug.Exception(x, "OnPageLoaded");
                    await new MessageDialog("Error while getting suggestions from the server", "Error").ShowAsync();
                }

                progressRing.IsActive = false;
            }
        }