public async Task <IActionResult> Details(int ID)
        {
            string      userId      = Common.ExtensionMethods.getUserId(this.User);
            MediaObject mediaObject = context.MediaObjects.
                                      Include(s => s.MediaSubType).
                                      Where(u => u.OwnerId == userId).
                                      SingleOrDefault(o => o.ID == ID);

            if (mediaObject != null)
            {
                EditMediaObjectViewModel editMediaObjectViewModel = new EditMediaObjectViewModel(mediaObject, GetSelectListSubTypes());

                if (mediaObject.DatabaseSource == 1)
                {
                    OMDbTitle omdbTitle = await GetImdbData(mediaObject.ExternalId);

                    editMediaObjectViewModel.OMDbTitle = omdbTitle;
                }

                return(View(editMediaObjectViewModel));
            }

            return(Redirect("/Media/Index"));
        }
        public IActionResult Edit(EditMediaObjectViewModel editMediaObjectViewModel)
        {
            if (ModelState.IsValid)
            {
                string      userId        = Common.ExtensionMethods.getUserId(this.User);
                bool        countUpdate   = false;
                MediaObject editCandidate = context.MediaObjects.
                                            Where(u => u.OwnerId == userId).
                                            Where(i => i.ID == editMediaObjectViewModel.ID).
                                            SingleOrDefault();

                //compare existing values to new values
                if (editCandidate.Title != editMediaObjectViewModel.Title)
                {
                    editCandidate.Title = editMediaObjectViewModel.Title;
                    countUpdate         = true;
                }
                if (editCandidate.SubTypeID != editMediaObjectViewModel.SubTypeID)
                {
                    editCandidate.SubTypeID = editMediaObjectViewModel.SubTypeID;
                    countUpdate             = true;
                }
                if (editCandidate.RecommendSource != editMediaObjectViewModel.RecommendSource)
                {
                    editCandidate.RecommendSource = editMediaObjectViewModel.RecommendSource;
                    countUpdate = true;
                }
                //check if Interest value has changed
                if (editCandidate.Interest != editMediaObjectViewModel.Interest)
                {
                    //check if value is in range
                    if (1 <= editMediaObjectViewModel.Interest & editMediaObjectViewModel.Interest <= 10)
                    {
                        //check if new value is > existing value, if not don't count the update
                        if (editMediaObjectViewModel.Interest > editCandidate.Interest)
                        {
                            countUpdate = true;
                        }
                        editCandidate.Interest = editMediaObjectViewModel.Interest;
                    }
                }
                if (editCandidate.Image != editMediaObjectViewModel.Image)
                {
                    editCandidate.Image = editMediaObjectViewModel.Image;
                    countUpdate         = true;
                }

                //strip double values
                //started
                List <bool> startedBools = StripAndConvertIntArrayToListBool(editMediaObjectViewModel.StartedValue);
                //completed
                List <bool> completedBools = StripAndConvertIntArrayToListBool(editMediaObjectViewModel.CompletedValue);

                //check if Started value has changed, then add to UpdateCount
                if (editCandidate.Started != startedBools[0])
                {
                    editCandidate.Started = startedBools[0];
                    countUpdate           = true;
                }
                //check if Completed value has changed
                if (editCandidate.Completed != completedBools[0])
                {
                    editCandidate.Completed = completedBools[0];
                    countUpdate             = true;
                }
                if (countUpdate)
                {
                    editCandidate.UpdateCount += 1;
                }

                context.SaveChanges();
            }

            //Then check for deleted Id and pass any to the DeletePrompt route
            if (editMediaObjectViewModel.DeletedIDs != null)
            {
                List <MediaObject> mediaToDelete = new List <MediaObject>();
                mediaToDelete = ArrayIdsToListMediaObjects(editMediaObjectViewModel.DeletedIDs);
                return(View("DeletePrompt", mediaToDelete));
            }

            return(Redirect("/Media/Details?id=" + editMediaObjectViewModel.ID));
        }