/// <summary> /// Initializes the singleton application object. This is the first line of authored code /// executed, and as such is the logical equivalent of main() or WinMain(). /// </summary> public App() { this.InitializeComponent(); this.Suspending += OnSuspending; using (var db = new PicturePlaceDb()) { db.Database.Migrate(); } }
/*Deletes everything from the database */ private void DeleteFromDB() { using (var db = new PicturePlaceDb()) { foreach (var item in db.data) { db.data.Remove(item); } db.SaveChanges(); } }
/*Method stores pics in the local database */ private void StorePicture(Datum pic, PicturePlaceDb db) { var picInfo = new FbPicInfo { city = pic.place.location.city, country = pic.place.location.country, latitude = pic.place.location.latitude, longitude = pic.place.location.longitude, id = pic.id, name = pic.place.name, source = pic.source }; db.Add(picInfo); db.SaveChanges(); }
/*Checks to see if there are any new pics in the results returned from facebook, if yes, they are added to the database, otherwise return true "All Pics Added" */ private Boolean SortPictures(PicturePlaceObject results, PicturePlaceDb db) { Boolean addedAllPics = true; foreach (var pic in results.data) //loop through all the Pics in results.data { if (pic.place != null && pic.place.location != null) //Only add Pics that have a place/location from results { var placeId = db.data.Select(id => id.id); //COLLECTION OF ALL THE IDS IN THE DATABASE //check to see if the collection of ids already contains the new id, if not a new pic is found etc. if (!placeId.Contains(pic.id)) { addedAllPics = false; StorePicture(pic, db); } } } return(addedAllPics); }
/*Method takes in the Database object and creates a temporary list which is then looped through and passed into AddPinToMap() to paint the pin to map */ private async void PaintPins(PicturePlaceDb db) { var tempList = db.data.AsEnumerable().Select(pic => new FbPicInfo { longitude = pic.longitude, latitude = pic.latitude, source = pic.source, name = pic.name, country = pic.country, city = pic.city }).ToList(); foreach (var pic in tempList)//loop through all the Pics in tempList { AddPinToMap(DesignPin(pic), CreateBasicGeoPosition(pic)); } if (tempList.Count == 0) { var dialog = new MessageDialog("You are not currently not tagged in any facebook pictures with locations.\nPlease Tag youself in a picture on facebook and give it a location and run the app again"); dialog.Title = "No Tagged Photos Found With Locations"; await dialog.ShowAsync(); } }
/*On Successful login, send GET request to FB endpoint with params and DeserializeJson the results into objects/Dictonary */ private async void OnSuccessLogin() { string endpoint = "/me/photos";//where the url starts from PropertySet parameters = new PropertySet(); parameters.Add("fields", "source,place"); //Required fields needed FBSingleValue value = new FBSingleValue(endpoint, parameters, DeserializeJson.FromJson); //send the request and get back a JSON responce FBResult graphResult = await value.GetAsync(); if (graphResult.Succeeded)//check to see if the Request Succeeded { PicturePlaceObject results = graphResult.Object as PicturePlaceObject; var db = new PicturePlaceDb(); GetAllFbPic(results, parameters, endpoint, db); } else { MessageDialog dialog = new MessageDialog("Try Again Later!"); await dialog.ShowAsync(); } }
/*Method keeps sending get requets to facebook api using paging, untill all pictures have been added */ private async void GetAllFbPic(PicturePlaceObject results, PropertySet parameters, string endpoint, PicturePlaceDb db) { Boolean addedAllPics = false; do //only do this while there is a next page and all pics have not been added { addedAllPics = SortPictures(results, db); //Add Results to a list if (addedAllPics == false) { parameters.Remove("after"); //Remove previous parameters parameters.Add("after", results.paging.cursors.after); //the next page to send the request too FBSingleValue value = new FBSingleValue(endpoint, parameters, DeserializeJson.FromJson); //send the request and get back a JSON responce FBResult graphResult = await value.GetAsync(); //check to see if the Requets Succeeded results = graphResult.Object as PicturePlaceObject; } } while ((results.paging != null || results.data.Count() != 0) && addedAllPics == false); PaintPins(db); }