コード例 #1
0
ファイル: MainPage.cs プロジェクト: CSU-RSF/WoodyPlants
 public void ImageFilesToDownload()
 {
     foreach (WoodySetting imageFile in imageFileSettingsOnServer)
     {
         WoodySetting imageFileLocalSetting = App.WoodySettingsRepo.GetImageZipFileSetting(imageFile.valuetext);
         if (imageFileLocalSetting == null)
         {
             imageFilesToDownload.Add(imageFile);
         }
     }
 }
コード例 #2
0
        //hardcoded
        public async Task <IEnumerable <WoodySetting> > GetImageZipFileSettings()
        {
            result = await client.GetStringAsync(Url + "_settings/ImagesZipFile");

            WoodySetting setting = JsonConvert.DeserializeObject <WoodySetting>(result);

            List <WoodySetting> settingList = new List <WoodySetting>();

            settingList.Add(setting);

            return(settingList);
        }
コード例 #3
0
        // add or update a setting
        public void AddOrUpdateSetting(WoodySetting setting)
        {
            try
            {
                if (string.IsNullOrEmpty(setting.name))
                {
                    throw new Exception("Valid setting name required");
                }

                var result = conn.InsertOrReplace(setting);
                StatusMessage = string.Format("{0} record(s) added [Name: {1})", result, setting);
            }
            catch (Exception ex)
            {
                StatusMessage = string.Format("Failed to add/update {0}. Error: {1}", setting, ex.Message);
            }
        }
コード例 #4
0
        // add a setting async
        public async Task AddSettingAsync(WoodySetting setting)
        {
            try
            {
                if (string.IsNullOrEmpty(setting.name))
                {
                    throw new Exception("Valid setting name required");
                }

                var result = await connAsync.InsertAsync(setting);

                StatusMessage = string.Format("{0} record(s) added [Name: {1})", result, setting);
            }
            catch (Exception ex)
            {
                StatusMessage = string.Format("Failed to add/update {0}. Error: {1}", setting, ex.Message);
            }
        }
コード例 #5
0
ファイル: MainPage.cs プロジェクト: CSU-RSF/WoodyPlants
        //Start here
        protected override async void OnAppearing()
        {
            if (!canceledDownload)
            {
                // Initiate variables
                isConnected           = Connectivity.checkConnection();
                isConnectedToWiFi     = Connectivity.checkWiFiConnection();
                downloadImagesSetting = await App.WoodySettingsRepo.GetSettingAsync("Download Images");

                //downloadImages = (bool)downloadImagesSetting.valuebool;

                //numberOfPlants = new List<WoodyPlant>(App.WoodyPlantRepo.GetAllWoodyPlants()).Count;

                // if connected to WiFi and updates are needed
                if (isConnected)
                {
                    datePlantDataUpdatedLocally = App.WoodySettingsRepo.GetSetting("Date Plants Downloaded");
                    try
                    {
                        datePlantDataUpdatedOnServer = await externalConnection.GetDateUpdatedDataOnServer();

                        imageFileSettingsOnServer = await externalConnection.GetImageZipFileSettings();

                        ImageFilesToDownload();

                        if (datePlantDataUpdatedLocally.valuetimestamp == datePlantDataUpdatedOnServer.valuetimestamp)
                        {
                            DownloadButtonText            = "Plant DB Up To Date";
                            downloadImagesButton.Text     = "Clear Offline Plant Data";
                            streamingLabel.Text           = "You Are Using Offline Plant Data";
                            downloadImagesLabel.TextColor = Color.Green;
                            updatePlants   = false;
                            resyncPlants   = false;
                            clearDatabase  = true;
                            downloadImages = false;
                        }
                        else
                        {
                            if (datePlantDataUpdatedLocally.valuetimestamp == null)
                            {
                                DownloadButtonText            = "Download Plant DB";
                                downloadImagesButton.Text     = "Download Offline Plant Data";
                                streamingLabel.Text           = "You Are Streaming Plant Data";
                                downloadImagesLabel.TextColor = Color.Red;
                                updatePlants   = true;
                                resyncPlants   = false;
                                clearDatabase  = false;
                                downloadImages = true;
                            }
                            else if ((datePlantDataUpdatedLocally.valuetimestamp < datePlantDataUpdatedOnServer.valuetimestamp) && datePlantDataUpdatedLocally.valuetimestamp != null)
                            {
                                DownloadButtonText            = "New Plant DB Available";
                                downloadImagesButton.Text     = "Update Offline Plant Data";
                                streamingLabel.Text           = "You Are Using Offline Plant Data";
                                downloadImagesLabel.TextColor = Color.Yellow;
                                updatePlants   = true;
                                resyncPlants   = true;
                                clearDatabase  = false;
                                downloadImages = false;
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Debug.WriteLine("Canceled UpdatePlants {0}", e.Message);
                    }
                }
                else
                {
                    if (numberOfPlants == 0)
                    {
                        await DisplayAlert("No Local Database Detected", "Please connect to WiFi or cell network to download or use CO Woodys App", "OK");

                        updatePlants   = false;
                        resyncPlants   = false;
                        clearDatabase  = false;
                        downloadImages = true;
                    }
                    else
                    {
                        downloadImagesButton.Text = "No Internet Connection";
                    }
                }
            }
            else
            {
                canceledDownload = false;
            }

            //ObservableCollection<WoodyPlant> plants = new ObservableCollection<WoodyPlant>(App.WoodyPlantRepoLocal.GetAllWoodyPlants());
        }
コード例 #6
0
 private void GetSortField()
 {
     sortField       = App.WoodySettingsRepo.GetSetting("Sort Field");
     sortButton.Text = sortField.valuetext;
 }
コード例 #7
0
        public WoodyPlantsPage(bool cameFromHomeSearch, bool cameFromHomeFamily, bool cameFromHomeFavorites, bool streaming)
        {
            GC.Collect();

            this.streaming             = streaming;
            this.cameFromHomeFamily    = cameFromHomeFamily;
            this.cameFromHomeSearch    = cameFromHomeSearch;
            this.cameFromHomeFavorites = cameFromHomeFavorites;
            // Initialize variables
            sortField        = new WoodySetting();
            sortSearchHeight = 49;

            // Turn off navigation bar and initialize pageContainer
            NavigationPage.SetHasNavigationBar(this, false);
            AbsoluteLayout pageContainer = ConstructPageContainer();

            // Initialize grid for inner container
            Grid innerContainer = new Grid {
                Padding = new Thickness(0, Device.OnPlatform(10, 0, 0), 0, 0), ColumnSpacing = 0
            };

            innerContainer.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });

            gridLayout = new Grid {
                VerticalOptions = LayoutOptions.FillAndExpand, HorizontalOptions = LayoutOptions.FillAndExpand, ColumnSpacing = 0
            };
            gridLayout.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(50)
            });

            var SearchPage = new WoodyPlantsSearchPage();

            // BACK button
            gridLayout.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            gridLayout.Children.Add(BackImageConstructor(cameFromSearch, SearchPage), 0, 0);



            // Construct filter button group
            plantFilterGroup = new Grid {
                ColumnSpacing = -1, Margin = new Thickness(0, 8, 0, 5)
            };
            plantFilterGroup.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(40)
            });

            // Add browse filter
            browseFilter = new Button
            {
                Style = Application.Current.Resources["plantFilterButton"] as Style,
                Text  = "Browse"
            };
            browseFilter.Clicked += FilterPlants;
            plantFilterGroup.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            plantFilterGroup.Children.Add(browseFilter, 0, 0);

            BoxView divider = new BoxView {
                HeightRequest = 40, WidthRequest = 1, BackgroundColor = Color.White
            };

            plantFilterGroup.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1)
            });
            plantFilterGroup.Children.Add(divider, 1, 0);

            // Add Search filter
            searchFilter = new Button
            {
                Style = Application.Current.Resources["plantFilterButton"] as Style,
                Text  = "Search"
            };

            searchFilter.Clicked += async(s, e) => { await Navigation.PushAsync(SearchPage, false); };

            SearchPage.InitRunSearch   += HandleRunSearch;
            SearchPage.InitCloseSearch += HandleCloseSearch;
            plantFilterGroup.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            plantFilterGroup.Children.Add(searchFilter, 2, 0);

            BoxView divider2 = new BoxView {
                HeightRequest = 40, WidthRequest = 1, BackgroundColor = Color.White
            };

            plantFilterGroup.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1)
            });
            plantFilterGroup.Children.Add(divider2, 3, 0);

            // Add Favorites filter
            favoritesFilter = new Button
            {
                Style = Application.Current.Resources["plantFilterButton"] as Style,
                Text  = "Favorites"
            };
            favoritesFilter.Clicked += FilterPlants;
            plantFilterGroup.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            plantFilterGroup.Children.Add(favoritesFilter, 4, 0);

            gridLayout.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(6, GridUnitType.Star)
            });
            gridLayout.Children.Add(plantFilterGroup, 1, 0);

            // Home button
            gridLayout.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            gridLayout.Children.Add(HomeImageConstructor(), 2, 0);

            // Add header to inner container
            innerContainer.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(50)
            });
            innerContainer.Children.Add(gridLayout, 0, 0);

            // Add button group grid
            Grid searchSortGroup = new Grid();

            searchSortGroup.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(sortSearchHeight)
            });
            searchSortGroup.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1.7, GridUnitType.Star)
            });
            searchSortGroup.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });

            // Add search bar
            searchBar = new CustomSearchBar
            {
                Placeholder   = "Search by scientific or common name...",
                FontSize      = 12,
                Margin        = new Thickness(Device.OnPlatform(10, 0, 0), 0, 0, 0),
                SearchCommand = new Command(() => { })
            };
            searchBar.TextChanged += SearchBarOnChange;
            searchSortGroup.Children.Add(searchBar, 0, 0);

            // Add sort container
            Grid sortContainer = new Grid {
                ColumnSpacing = 0
            };

            sortContainer.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(0.7, GridUnitType.Star)
            });
            sortContainer.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(0.25, GridUnitType.Star)
            });
            sortContainer.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(0.05, GridUnitType.Star)
            });
            sortContainer.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(sortSearchHeight)
            });

            sortButton.Clicked += SortPickerTapped;
            sortContainer.Children.Add(sortButton, 0, 0);

            foreach (string option in sortOptions.Keys)
            {
                sortPicker.Items.Add(option);
            }
            sortPicker.IsVisible = false;
            if (Device.OS == TargetPlatform.iOS)
            {
                sortPicker.Unfocused += SortOnUnfocused;
            }
            else
            {
                sortPicker.SelectedIndexChanged += SortItems;
            }

            sortContainer.Children.Add(sortPicker, 0, 0);

            sortDirection.Clicked += ChangeSortDirection;
            sortContainer.Children.Add(sortDirection, 1, 0);

            searchSortGroup.Children.Add(sortContainer, 1, 0);

            innerContainer.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(45)
            });
            innerContainer.Children.Add(searchSortGroup, 0, 1);

            // Create ListView container
            RelativeLayout listViewContainer = new RelativeLayout
            {
                VerticalOptions = LayoutOptions.FillAndExpand,
                BackgroundColor = Color.Transparent,
            };

            // Add Plants ListView
            woodyPlantsList = new ListView(ListViewCachingStrategy.RecycleElement)
            {
                BackgroundColor = Color.Transparent, RowHeight = 100
            };

            woodyPlantsList.ItemTemplate        = CellTemplate();
            woodyPlantsList.ItemSelected       += OnItemSelected;
            woodyPlantsList.SeparatorVisibility = SeparatorVisibility.None;

            listViewContainer.Children.Add(woodyPlantsList,
                                           Constraint.RelativeToParent((parent) => { return(parent.X); }),
                                           Constraint.RelativeToParent((parent) => { return(parent.Y - 105); }),
                                           Constraint.RelativeToParent((parent) => { return(parent.Width * .9); }),
                                           Constraint.RelativeToParent((parent) => { return(parent.Height); })
                                           );


            // Add jump list to right side
            jumpListContainer = new StackLayout {
                Spacing = -1, Orientation = StackOrientation.Vertical, HorizontalOptions = LayoutOptions.CenterAndExpand, VerticalOptions = LayoutOptions.CenterAndExpand
            };

            listViewContainer.Children.Add(jumpListContainer,
                                           Constraint.RelativeToParent((parent) => { return(parent.Width * .9); }),
                                           Constraint.RelativeToParent((parent) => { return(parent.Y - 105); }),
                                           Constraint.RelativeToParent((parent) => { return(parent.Width * .1); }),
                                           Constraint.RelativeToParent((parent) => { return(parent.Height); })
                                           );

            // Add ListView and Jump List to grid
            innerContainer.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(1, GridUnitType.Star)
            });
            innerContainer.Children.Add(listViewContainer, 0, 2);

            // Add FooterBar
            // FooterNavigationOptions footerOptions = new FooterNavigationOptions { plantsFooter = true };
            // Grid footerBar = ConstructFooterBar(footerOptions);
            // innerContainer.RowDefinitions.Add(new RowDefinition { Height = new GridLength(35) });
            //innerContainer.Children.Add(footerBar, 0, 3);

            //Add inner container to page container and set as page content
            pageContainer.Children.Add(innerContainer, new Rectangle(0, 0, 1, 1), AbsoluteLayoutFlags.All);
            Content = pageContainer;

            searchPage = SearchPage;
            GC.Collect();
        }
コード例 #8
0
        public DownloadWoodyPlantsPage(bool updatePlantsNow, WoodySetting dateLocalPlantDataUpdated, WoodySetting datePlantDataUpdated, List <WoodySetting> imageFilesNeedingDownloaded, bool downloadImagesFromServer, bool resyncplants, bool clearDatabase)
        {
            updatePlants                 = updatePlantsNow;
            this.resyncPlants            = resyncplants;
            this.clearDatabase           = clearDatabase;
            datePlantDataUpdatedLocally  = dateLocalPlantDataUpdated;
            datePlantDataUpdatedOnServer = datePlantDataUpdated;
            imageFilesToDownload         = (imageFilesNeedingDownloaded == null) ? new List <WoodySetting>() : imageFilesNeedingDownloaded;
            //downloadImages = downloadImagesFromServer;

            // Turn off navigation bar and initialize pageContainer
            NavigationPage.SetHasNavigationBar(this, false);
            AbsoluteLayout pageContainer = ConstructPageContainer();

            // Initialize grid for inner container
            Grid innerContainer = new Grid
            {
                Padding         = new Thickness(20, Device.OnPlatform(30, 20, 20), 20, 20),
                BackgroundColor = Color.FromHex("88000000")
            };

            innerContainer.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            innerContainer.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(1, GridUnitType.Star)
            });

            // Add label
            innerContainer.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(30)
            });
            innerContainer.Children.Add(downloadLabel, 0, 1);

            // Add progressbar
            innerContainer.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(50)
            });
            innerContainer.Children.Add(progressBar, 0, 2);

            // Add dismiss button
            cancelButton = new Button
            {
                Style        = Application.Current.Resources["outlineButton"] as Style,
                Text         = "CANCEL",
                BorderRadius = Device.OnPlatform(0, 1, 0)
            };
            cancelButton.Clicked += CancelDownload;
            innerContainer.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(50)
            });
            innerContainer.Children.Add(cancelButton, 0, 3);

            innerContainer.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(1, GridUnitType.Star)
            });

            // Add inner container to page container and set as page content
            pageContainer.Children.Add(innerContainer, new Rectangle(0, 0, 1, 1), AbsoluteLayoutFlags.All);
            Content = pageContainer;
        }