private void ProcessUpdatedExhibits(IProgressListener listener, FetchedMediaData fetchedMedia, ITransactionDataAccess dataAccess)
        {
            var exhibits = dataAccess.Exhibits().GetExhibits().ToDictionary(x => x.IdForRestApi);

            foreach (var exhibitDto in updatedExhibits)
            {
                var dbExhibit = exhibits[exhibitDto.Id];

                ExhibitConverter.Convert(exhibitDto, dbExhibit);

                AddImageToExhibit(dbExhibit, exhibitDto.Image, fetchedMedia);
                //TODO: Check if exhibit was already downloaded
                //if(dbExhibit.DetailsDataLoaded)
                //{
                //    IoCManager.Resolve<INewDataCenter>().AddExhibitToBeUpdated(dbExhibit);
                //}

                var removedPages = dbExhibit.Pages.Where(x => !exhibitDto.Pages.Contains(x.IdForRestApi));
                foreach (var page in removedPages)
                {
                    dbExhibit.Pages.Remove(page);
                }

                listener.ProgressOneStep();
            }
        }
Example #2
0
        private void ProcessPages(string exhibitId, CancellationToken token, ITransactionDataAccess dataAccess,
                                  Dictionary <MediaDto, string> mediaToFilePath)
        {
            var fetchedMedia = mediaDataFetcher.CombineMediasAndFiles(dataAccess, mediaToFilePath);

            if (token.IsCancellationRequested)
            {
                return;
            }

            var exhibit = dataAccess.Exhibits().GetExhibit(exhibitId);

            foreach (var pageDto in pageItems)
            {
                var dbPage = PageConverter.Convert(pageDto);

                AddContentToPage(dbPage, pageDto, fetchedMedia);
                // Add Page with content to the exhibit
                exhibit.Pages.Add(dbPage);
            }

            // Rearrange additional information pages
            var pagesToBeRemoved = new List <Page>();

            foreach (var pageDto in pageItems)
            {
                if (pageDto.AdditionalInformationPages.Count > 0)
                {
                    foreach (var existingPageWithInfo in exhibit.Pages)
                    {
                        if (pageDto.Id == existingPageWithInfo.IdForRestApi)
                        {
                            foreach (var pageId in pageDto.AdditionalInformationPages)
                            {
                                foreach (var pageToBeAdded in exhibit.Pages)
                                {
                                    if (pageToBeAdded.IdForRestApi == pageId)
                                    {
                                        existingPageWithInfo.AdditionalInformationPages.Add(pageToBeAdded);
                                        pagesToBeRemoved.Add(pageToBeAdded);
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }

            foreach (var pageToBeRemoved in pagesToBeRemoved)
            {
                exhibit.Pages.Remove(pageToBeRemoved);
            }

            exhibit.DetailsDataLoaded = true;
        }
        private void ProcessNewExhibits(IProgressListener listener, FetchedMediaData fetchedMedia, ITransactionDataAccess dataAccess)
        {
            foreach (var exhibitDto in newExhibits)
            {
                var dbExhibit = ExhibitConverter.Convert(exhibitDto);

                AddImageToExhibit(dbExhibit, exhibitDto.Image, fetchedMedia);
                dataAccess.Exhibits().AddExhibit(dbExhibit);
                listener.ProgressOneStep();
            }
        }
Example #4
0
        private void AddExhibitsToRoute(Route dbRoute, RouteDto routeDto, ITransactionDataAccess dataAccess)
        {
            var exhibits = dataAccess.Exhibits().GetExhibits().ToList();

            if (routeDto.Exhibits.Count > 0)
            {
                foreach (var exhibitId in routeDto.Exhibits)
                {
                    var dbExhibit = exhibits.SingleOrDefault(x => x.IdForRestApi == exhibitId);

                    if (dbExhibit != null)
                    {
                        var waypoint = new Waypoint
                        {
                            Exhibit  = dbExhibit,
                            Location = dbExhibit.Location
                        };

                        dbRoute.Waypoints.Add(waypoint);
                    }
                }

                var removedWaypoints = dbRoute.Waypoints.Where(x => !routeDto.Exhibits.Contains(x.Exhibit.IdForRestApi));
                foreach (var waypoint in removedWaypoints)
                {
                    dbRoute.Waypoints.Remove(waypoint);
                }

                dbRoute.DetailsDataLoaded = false;
            }
            else
            {
                // Hide downloadbutton since there is nothing to download
                dbRoute.DetailsDataLoaded = true;
            }
        }
Example #5
0
        public void CleanupRemovedData(ITransactionDataAccess dataAccess)
        {
            //Backup data fake id
            allMedias.Add(-1);

            var routes   = dataAccess.Routes().GetRoutes().ToList();
            var exhibits = dataAccess.Exhibits().GetExhibits().ToList();

            var deletedExhibits  = exhibits.Where(x => !allExhibits.Contains(x.IdForRestApi)).ToList();
            var deletedRoutes    = routes.Where(x => !allRoutes.Contains(x.IdForRestApi));
            var deletedWaypoints = new List <Waypoint>();
            var deletedTags      = new List <RouteTag>();
            var deletedImages    = new List <Image>();
            var deletedAudios    = new List <Audio>();
            var deletedPages     = new List <Page>();

            foreach (var route in routes)
            {
                RemoveWaypoints(route, deletedWaypoints, deletedExhibits);
                RemoveRouteTags(route, deletedTags, deletedImages);
                if (route.Image != null && !allMedias.Contains(route.Image.IdForRestApi))
                {
                    deletedImages.Add(route.Image);
                    route.Image = null;
                }
                if (route.Audio != null && !allMedias.Contains(route.Audio.IdForRestApi))
                {
                    deletedAudios.Add(route.Audio);
                    route.Audio = null;
                }
            }
            foreach (var exhibit in exhibits)
            {
                RemovePages(exhibit, deletedPages, deletedImages, deletedAudios);
                if (exhibit.Image != null && !allMedias.Contains(exhibit.Image.IdForRestApi))
                {
                    deletedImages.Add(exhibit.Image);
                    exhibit.Image = null;
                }
            }

            foreach (var exhibit in deletedExhibits)
            {
                dataAccess.DeleteItem(exhibit);
            }
            foreach (var route in deletedRoutes)
            {
                dataAccess.DeleteItem(route);
            }
            foreach (var waypoint in deletedWaypoints)
            {
                dataAccess.DeleteItem(waypoint);
            }
            foreach (var tag in deletedTags)
            {
                dataAccess.DeleteItem(tag);
            }
            var fileManager = IoCManager.Resolve <IMediaFileManager>();

            foreach (var image in deletedImages)
            {
                dataAccess.DeleteItem(image);
                fileManager.DeleteFile(image.DataPath);
            }
            foreach (var audio in deletedAudios)
            {
                dataAccess.DeleteItem(audio);
                fileManager.DeleteFile(audio.DataPath);
            }
            foreach (var page in deletedPages)
            {
                dataAccess.DeleteItem(page);
            }
        }