예제 #1
0
        /// <summary>
        /// Loads the bread crumbs.
        /// </summary>
        private void LoadBreadCrumbs()
        {
            BreadCrumbs bc = GetBreadCrumbsControl();

            bc.AddLink("Create new Company", null);
            bc.LoadControl();
        }
예제 #2
0
        /// <summary>
        /// Loads the bread crumbs.
        /// </summary>
        private void LoadBreadCrumbs()
        {
            BreadCrumbs bc = GetBreadCrumbsControl();

            StageBitz.Data.Project project = GetBL <Logic.Business.Project.ProjectBL>().GetProject(ProjectId);

            int    companyId   = project.Company.CompanyId;
            string companyName = project.Company.CompanyName;
            string projectName = project.ProjectName;

            if (Support.IsCompanyAdministrator(companyId))
            {
                bc.AddLink(companyName, string.Format("~/Company/CompanyDashboard.aspx?companyid={0}", companyId));
            }
            else
            {
                bc.AddLink(companyName, "");
            }

            bc.AddLink(projectName, string.Format("~/Project/ProjectDashboard.aspx?ProjectId={0}", ProjectId));
            bc.AddLink(DisplayTitle, null);
            bc.LoadControl();

            //Build Company and Project name labels
            lblCompanyName.Text = Support.TruncateString(companyName, 100);
            lblProjectName.Text = Support.TruncateString(projectName, 100);
        }
예제 #3
0
 private void BackNode(object obj)
 {
     if (BreadCrumbs.Count > 1)
     {
         BreadCrumbs.Remove(BreadCrumbs.Last());
     }
 }
예제 #4
0
        public void ShowAllGroups()
        {
            try
            {
                CurrentWrapper        = null;
                CurrentWrapperIsGroup = true;
                BreadCrumbs.Clear();
                BreadCrumbs.Add(null);
                CurrentWrapperList.Clear();


                AllGroupFilters.Clear();
                foreach (GroupFilterVM grpFilter in GroupFilterHelper.AllGroupFilters)
                {
                    //if (grpFilter.FilterConditions.Count == 0)
                    //	AllGroupFilter = grpFilter;
                    AllGroupFilters.Add(grpFilter);
                    CurrentWrapperList.Add(grpFilter);
                }
                ShowChildWrappers(AllGroupFilter);
            }
            catch (Exception ex)
            {
                Utils.ShowErrorMessage(ex);
            }
        }
예제 #5
0
        private void LoadBreadCrumbs()
        {
            BreadCrumbs breadCrumbs = GetBreadCrumbsControl();

            breadCrumbs.AddLink("Companies", null);
            breadCrumbs.LoadControl();
        }
예제 #6
0
        /// <summary>
        /// Raises the <see cref="E:System.Web.UI.Control.Load" /> event.
        /// </summary>
        /// <param name="e">The <see cref="T:System.EventArgs" /> object that contains the event data.</param>
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            if (Page.IsPostBack)
            {
                LoadChannelControl(false);
            }
            else
            {
                ShowAllRecipients = false;

                string itemId = PageParameter("CommunicationId");
                if (!string.IsNullOrWhiteSpace(itemId))
                {
                    ShowDetail("CommunicationId", int.Parse(itemId));
                }
                else
                {
                    ShowDetail("CommunicationId", 0);
                }
            }

            BreadCrumbs.Add(new BreadCrumb(PageTitle, true));
        }
예제 #7
0
        private void LoadBreadCrumbs()
        {
            BreadCrumbs breadCrumbs = GetBreadCrumbsControl();

            breadCrumbs.AddLink(DisplayTitle, null);
            breadCrumbs.LoadControl();
        }
예제 #8
0
        public void ShowAllGroups()
        {
            try
            {
                CurrentWrapper        = null;
                CurrentWrapperIsGroup = true;
                BreadCrumbs.Clear();
                BreadCrumbs.Add(null);
                CurrentWrapperList.Clear();


                foreach (GroupFilterVM grpFilter in AllGroupFiltersDictionary.Values)
                {
                    //if (grpFilter.FilterConditions.Count == 0)
                    //	AllGroupFilter = grpFilter;
                    if (!grpFilter.GroupFilterParentId.HasValue)
                    {
                        CurrentWrapperList.Add(grpFilter);
                    }
                }
                ShowChildWrappers(AllGroupFilter);
            }
            catch (Exception ex)
            {
                Utils.ShowErrorMessage(ex);
            }
        }
예제 #9
0
        public void GetBreadCrumbs()
        {
            phBreadCrumbs.Controls.Clear();
            BreadCrumbs breadcrumbs = base.CurrentPortalPage.BreadCrumbs;

            if (BreadcrumbClassSetting != "")
            {
                breadcrumbs.CssClass = BreadcrumbClassSetting;
            }

            if (BreadcrumbSeparatorSetting != "")
            {
                breadcrumbs.Separator = BreadcrumbSeparatorSetting;
            }

            // Remove the number of levels set by the administrator
            if (RemoveLevelsSetting != 0)
            {
                int levels = breadcrumbs.Count - RemoveLevelsSetting;
                for (int i = breadcrumbs.Count; i > levels; i--)
                {
                    breadcrumbs.RemoveAt(i - 1);
                }
            }

            phBreadCrumbs.Controls.Add(new LiteralControl(breadcrumbs.ToString()));
        }
예제 #10
0
 private void StartNode(object obj)
 {
     while (BreadCrumbs.Count > 1)
     {
         BreadCrumbs.Remove(BreadCrumbs.Last());
     }
 }
예제 #11
0
        /// <summary>
        /// Loads the bread crumbs.
        /// </summary>
        /// <param name="companyName">Name of the company.</param>
        private void LoadBreadCrumbs(string companyName)
        {
            BreadCrumbs bc = GetBreadCrumbsControl();

            bc.AddLink(companyName, string.Format("~/Company/CompanyDashboard.aspx?CompanyId={0}", CompanyId));
            bc.AddLink(DisplayTitle, null);
            bc.LoadControl();
        }
예제 #12
0
        private void LoadBreadCrumbs()
        {
            BreadCrumbs breadCrumbs = GetBreadCrumbsControl();

            breadCrumbs.AddLink("Companies", "~/Company/Companies.aspx");
            breadCrumbs.AddLink(DisplayTitle, null);
            breadCrumbs.LoadControl();
        }
예제 #13
0
        private void LoadBreadCrumbs()
        {
            BreadCrumbs breadCrumbs = GetBreadCrumbsControl();

            breadCrumbs.AddLink("Users", "~/User/Users.aspx");
            breadCrumbs.AddLink(DisplayTitle, null);
            breadCrumbs.LoadControl();
        }
예제 #14
0
        private void LoadBreadCrumbs()
        {
            BreadCrumbs breadCrumbs = GetBreadCrumbsControl();

            breadCrumbs.AddLink("Companies", "~/Company/Companies.aspx");
            breadCrumbs.AddLink("Pricing Plan History", null);
            breadCrumbs.LoadControl();
        }
예제 #15
0
        /// <summary>
        /// Loads the bread crumbs.
        /// </summary>
        private void LoadBreadCrumbs()
        {
            BreadCrumbs bc = GetBreadCrumbsControl();

            StageBitz.Data.Company company = DataContext.Companies.Where(c => c.CompanyId == CompanyId).FirstOrDefault();
            bc.AddLink(DisplayTitle, null);
            bc.LoadControl();
        }
        /// <summary>
        /// Builds the navigation.
        /// </summary>
        /// <param name="breadCrumbNavigation">The bread crumb navigation.</param>
        private void BuildNavigation(BreadCrumbs breadCrumbNavigation)
        {
            //Add HomeLink
            HyperLink home = new HyperLink { Text = "Galleries", NavigateUrl = "Default.aspx" };
            breadCrumbNavigation.Links.Add(home);

            Literal galleryLink = new Literal { Text = gallery.Name };
            breadCrumbNavigation.Links.Add(galleryLink);
        }
        /// <summary>
        /// Builds the navigation.
        /// </summary>
        /// <param name="breadCrumbNavigation">The bread crumb navigation.</param>
        private static void BuildNavigation(BreadCrumbs breadCrumbNavigation)
        {
            //Add HomeLink
            Literal home = new Literal {
                Text = "Galleries"
            };

            breadCrumbNavigation.Links.Add(home);
        }
예제 #18
0
        /// <summary>
        /// Loads the bread crumbs.
        /// </summary>
        /// <param name="company">The company.</param>
        private void LoadBreadCrumbs(StageBitz.Data.Company company)
        {
            BreadCrumbs bc         = GetBreadCrumbsControl();
            string      companyUrl = Support.IsCompanyAdministrator(company.CompanyId) ?
                                     string.Format("~/Company/CompanyDashboard.aspx?CompanyId={0}", company.CompanyId) : null;

            bc.AddLink(company.CompanyName, companyUrl);
            bc.AddLink(DisplayTitle, null);
            bc.LoadControl();
        }
 public void TestLinkedCrumbs()
 {
     BreadCrumbs crumbs = new BreadCrumbs(2);
     crumbs.Push("bob");
     crumbs.Push("linked", true);
     crumbs.Push("new");
     crumbs.Pop();
     Assert.AreEqual(1, crumbs.Count());
     Assert.AreEqual("bob", crumbs.ToString());
 }
예제 #20
0
        public void ShouldDoNothingWhenEmpty()
        {
            var context = new BreadCrumbs();
            var chain   = new BehaviorChain <BreadCrumbs>();

            chain.Execute(context);

            context.Crumbs.ShouldBeEmpty();
            context.Exceptions.ShouldBeEmpty();
        }
        public void TestToStringWorksProperly()
        {
            BreadCrumbs crumbs = new BreadCrumbs(2);
            crumbs.Push("sam");
            crumbs.Push("hello");
            crumbs.Push("world");

            Assert.AreEqual(3, crumbs.Count());
            Assert.AreEqual("hello | world", crumbs.ToString());
        }
예제 #22
0
        /// <summary>
        /// Loads the bread crumbs.
        /// </summary>
        private void LoadBreadCrumbs()
        {
            BreadCrumbs bc = GetBreadCrumbsControl();

            bc.ClearLinks();
            bc.AddLink("Company Inventory", string.Format("~/Inventory/CompanyInventory.aspx?CompanyId={0}", this.CompanyId));
            bc.AddLink("My Bookings", null);
            bc.LoadControl();
            bc.UpdateBreadCrumb();
        }
예제 #23
0
        /// <summary>
        /// Loads the bread crumbs.
        /// </summary>
        private void LoadBreadCrumbs()
        {
            BreadCrumbs bc = GetBreadCrumbsControl();

            StageBitz.Data.Company company = DataContext.Companies.Where(c => c.CompanyId == CompanyId).FirstOrDefault();
            bc.AddLink(company.CompanyName, string.Format("~/Company/CompanyDashboard.aspx?CompanyId={0}", company.CompanyId));
            bc.AddLink("Manage Company Team", null);

            bc.LoadControl();
        }
        private void UpdateBreadkCrumbs()
        {
            BreadCrumbs.Clear();
            var breakCrumbs = ConvertToBreadCrumbs(_nodeHistoryState);

            foreach (var breadCrumbViewmodel in breakCrumbs)
            {
                BreadCrumbs.Add(breadCrumbViewmodel);
            }
        }
 /// <summary>
 /// Prepare the breadcrumbs model for this view.
 /// </summary>
 private void ConfigureBreadCrumbs()
 {
     if (SettingsHelper.GetBreadcrumbsHomeEnabled())
     {
         // Set up the breadcrumbs for this action
         var breadCrumbs = new BreadCrumbs();
         breadCrumbs.Add(new BreadCrumb(
             SettingsHelper.GetCatalogBreadcrumbsBaseLabel()));
         ViewData["BreadCrumbs"] = breadCrumbs;
     }
 }
        public int DrawGpsPoint(double latitude, double longitude, double direction, BreadCrumbs breadCrumbs)
        {
            if (MxDocument == null)
            {
                throw new InvalidOperationException("MxDocument not set");
            }

            GetObjectFactoryOrFail();

            return(AddGpsPointGraphic(latitude, longitude, direction, breadCrumbs));
        }
예제 #27
0
        public void TestLinkedCrumbs()
        {
            BreadCrumbs crumbs = new BreadCrumbs(2);

            crumbs.Push("bob");
            crumbs.Push("linked", true);
            crumbs.Push("new");
            crumbs.Pop();
            Assert.AreEqual(1, crumbs.Count());
            Assert.AreEqual("bob", crumbs.ToString());
        }
예제 #28
0
        public void TestToStringWorksProperly()
        {
            BreadCrumbs crumbs = new BreadCrumbs(2);

            crumbs.Push("sam");
            crumbs.Push("hello");
            crumbs.Push("world");

            Assert.AreEqual(3, crumbs.Count());
            Assert.AreEqual("hello | world", crumbs.ToString());
        }
예제 #29
0
 /// <summary>
 /// Prepare the breadcrumbs model for this view.
 /// </summary>
 private void ConfigureBreadCrumbs()
 {
     if (SettingsHelper.GetBreadcrumbsHomeEnabled())
     {
         // Set up the breadcrumbs for this action
         var breadCrumbs = new BreadCrumbs();
         breadCrumbs.Add(new BreadCrumb(
                             SettingsHelper.GetCatalogBreadcrumbsBaseLabel()));
         ViewData["BreadCrumbs"] = breadCrumbs;
     }
 }
예제 #30
0
        private void DrillDown(object obj)
        {
            Node n = obj as Node;

            if (n == null)
            {
                return;
            }

            BreadCrumbs.Add(n);
        }
        /// <summary>
        /// Builds the navigation.
        /// </summary>
        /// <param name="breadCrumbNavigation">The bread crumb navigation.</param>
        private void BuildNavigation(BreadCrumbs breadCrumbNavigation)
        {
            //Add HomeLink
            HyperLink home = new HyperLink {Text = "Galleries", NavigateUrl = "Default.aspx"};
            breadCrumbNavigation.Links.Add(home);

            HyperLink galleryLink = new HyperLink { Text = gallery.Name, NavigateUrl = "Default.aspx?lgid=" + gallery.GalleryId };
            breadCrumbNavigation.Links.Add(galleryLink);

            Literal photos = new Literal { Text = "Photos"};
            breadCrumbNavigation.Links.Add(photos);
        }
예제 #32
0
        /// <summary>
        /// Loads the bread crumbs.
        /// </summary>
        private void LoadBreadCrumbs()
        {
            BreadCrumbs bc = GetBreadCrumbsControl();

            StageBitz.Data.Company company = DataContext.Companies.Where(c => c.CompanyId == CompanyID).FirstOrDefault();
            string companyUrl = Support.IsCompanyAdministrator(company.CompanyId) ?
                                string.Format("~/Company/CompanyDashboard.aspx?CompanyId={0}", company.CompanyId) : null;

            bc.AddLink(company.CompanyName, companyUrl);

            bc.AddLink("Create New Project", null);
            bc.LoadControl();
        }
예제 #33
0
        /// <summary>
        /// Loads the bread crumbs.
        /// </summary>
        /// <param name="project">The project.</param>
        private void LoadBreadCrumbs(StageBitz.Data.Project project)
        {
            BreadCrumbs bc = GetBreadCrumbsControl();

            StageBitz.Data.Company company = project.Company;

            string companyUrl = Support.IsCompanyAdministrator(company.CompanyId) ? string.Format("~/Company/CompanyDashboard.aspx?CompanyId={0}", company.CompanyId) : null;

            bc.AddLink(company.CompanyName, companyUrl);
            bc.AddLink(project.ProjectName, string.Format("~/Project/ProjectDashboard.aspx?projectid={0}", project.ProjectId));
            bc.AddLink("Updates Report", null);
            bc.LoadControl();
        }
        /// <summary>
        /// Loads the bread crumbs.
        /// </summary>
        /// <param name="company">The company.</param>
        private void LoadBreadCrumbs(Data.Company company)
        {
            bool        isCompanyAdmin = Support.IsCompanyAdministrator(this.CompanyId);
            BreadCrumbs bc             = GetBreadCrumbsControl();

            bc.ClearLinks();
            bc.AddLink("Company Inventory", isCompanyAdmin ? string.Format("~/Inventory/CompanyInventory.aspx?CompanyId={0}", this.CompanyId) : null);
            bc.AddLink("My Bookings", string.Format("~/Inventory/MyBookings.aspx?CompanyId={0}", this.CompanyId));
            bc.AddLink("Booking Details", string.Format("~/Inventory/MyBookingDetails.aspx?BookingId={0}&CompanyId={1}", BookingId, CompanyId));
            bc.AddLink("Change Booking Dates", null);
            bc.LoadControl();
            bc.UpdateBreadCrumb();
        }
예제 #35
0
        protected void Page_Load(object sender, EventArgs e)
        {
            string cacheKey = "AdminBreadCrumb";
            string breadCrumbFileContent = (string)Cache[cacheKey];

            if (string.IsNullOrEmpty(breadCrumbFileContent))
            {
                // cache breadcrumb xml
                string breadCrumbFile = Server.MapPath("~/App_Data/adminbreadcrumb.xml");
                breadCrumbFileContent = File.ReadAllText(breadCrumbFile);
                Cache.Add(cacheKey, breadCrumbFileContent, new CacheDependency(breadCrumbFile), Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
            }
            XmlDocument breadCrumbMap = new XmlDocument();

            breadCrumbMap.LoadXml(breadCrumbFileContent);
            string pagePath = Request.AppRelativeCurrentExecutionFilePath.ToLowerInvariant();

            if (pagePath.EndsWith("admin/menu.aspx") && !string.IsNullOrEmpty(Request.QueryString["path"]))
            {
                pagePath += "?path=" + Request.QueryString["path"].ToLowerInvariant();
            }
            List <BreadCrumbItem> breadCrumbList = GenerateBreadCrumbList(breadCrumbMap.DocumentElement, pagePath);

            if (breadCrumbList != null)
            {
                foreach (BreadCrumbItem item in breadCrumbList)
                {
                    ProcessRules(item);
                }
                List <BreadCrumbItem> expandedList = new List <BreadCrumbItem>();
                foreach (BreadCrumbItem item in breadCrumbList)
                {
                    expandedList.Add(item);
                    IList <BreadCrumbItem> childItems = GetChildItems(item);
                    if (childItems.Count > 0)
                    {
                        expandedList.AddRange(childItems);
                    }
                }
                // the last link does not need to do anything
                expandedList[expandedList.Count - 1].Url      = "#";
                expandedList[expandedList.Count - 1].CssClass = "current";
                BreadCrumbs.DataSource = expandedList;
                BreadCrumbs.DataBind();
            }
            else
            {
                // no breadcrumb data, hide this control
                this.Controls.Clear();
            }
        }
        /// <summary>
        /// Prepare the breadcrumbs model for this view.
        /// </summary>
        /// <param name="package"></param>
        private void ConfigureBreadCrumbs(Package package)
        {
            // Set up the breadcrumbs for this action
            var breadCrumbs = new BreadCrumbs();

            breadCrumbs.Add(new BreadCrumb(
                SettingsHelper.GetCatalogBreadcrumbsBaseLabel(),
                "Index",
                "Home"));

            breadCrumbs.Add(new BreadCrumb(
                package.Title));

            ViewData["BreadCrumbs"] = breadCrumbs;
        }
        //
        // GET: /Cache/
        public ActionResult Index(string token)
        {
            CheckToken(token);

            CkanClient client = CkanHelper.GetClient();
            var cachedItems = client.GetCachedRequests();

            // Set up the breadcrumbs for this action
            var breadCrumbs = new BreadCrumbs();
            breadCrumbs.Add(new BreadCrumb(SettingsHelper.GetCatalogBreadcrumbsBaseLabel(), "Index", "Home"));
            breadCrumbs.Add(new BreadCrumb("Admin"));
            breadCrumbs.Add(new BreadCrumb("Cache"));
            ViewData["BreadCrumbs"] = breadCrumbs;

            // Disable analytics on admin pages
            ViewData["DisableAnalytics"] = true;

            return View(cachedItems);
        }
        /// <summary>
        /// Display the error view
        /// </summary>
        /// <param name="errorPresentation"></param>
        public static void DisplayErrorView(ErrorPresentation errorPresentation)
        {

            // Return the error view
            ViewResult result = new ViewResult();
            result.ViewName = "Error";
            result.ViewData = new ViewDataDictionary(errorPresentation);

            // Set up the breadcrumbs for the view
            var breadCrumbs = new BreadCrumbs();

            breadCrumbs.Add(new BreadCrumb(
                "Home",
                "Index",
                "Home"));

            breadCrumbs.Add(new BreadCrumb(
                "Error"));

            result.ViewData.Add("BreadCrumbs", breadCrumbs);

            // Get the context for the error controller
            HttpContext context = HttpContext.Current;

            if (context.CurrentHandler is MvcHandler)
            {
                RequestContext requestContext = ((MvcHandler)context.CurrentHandler).RequestContext;
                //string controllerName = rc.RouteData.GetRequiredString("Error");
                IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory();
                IController controller = factory.CreateController(requestContext, "Error");
                ControllerContext controllerContext = new ControllerContext(requestContext, (ControllerBase)controller);

                // Execute the view results
                result.ExecuteResult(controllerContext);
                context.Server.ClearError();
            }
            
        }
        /// <summary>
        /// Get the breadcrumbs model for this view.
        /// </summary>
        private BreadCrumbs GetBreadCrumbs(string title)
        {
            BreadCrumbs breadCrumbs = null;

            if (SettingsHelper.GetBreadcrumbsEnabled())
            {
                // Set up the breadcrumbs for this action
                breadCrumbs = new BreadCrumbs();

                breadCrumbs.Add(new BreadCrumb(
                    SettingsHelper.GetCatalogBreadcrumbsBaseLabel(),
                    "Index",
                    "Home"));

                // Add breadcrumb for the search action
                if (!String.IsNullOrEmpty(title))
                {
                    breadCrumbs.Add(new BreadCrumb(
                        title));
                }
            }

            return breadCrumbs;
        }
 /// <summary>
 /// Builds the navigation.
 /// </summary>
 /// <param name="breadCrumbNavigation">The bread crumb navigation.</param>
 private static void BuildNavigation(BreadCrumbs breadCrumbNavigation)
 {
     //Add HomeLink
     Literal home = new Literal { Text = "Galleries" };
     breadCrumbNavigation.Links.Add(home);
 }
        /// <summary>
        /// Configure the breadcrumbs for this controller.
        /// </summary>
        /// <param name="q">The query</param>
        /// <param name="tag">The selected tag</param>
        private void ConfigureBreadCrumbs(string q, string tag)
        {
            // Set up the breadcrumbs for this action
            var breadCrumbs = new BreadCrumbs();

            breadCrumbs.Add(new BreadCrumb(
                SettingsHelper.GetCatalogBreadcrumbsBaseLabel(),
                "Index",
                "Home"));

            // Add breadcrumb for the search action
            breadCrumbs.Add(new BreadCrumb(
                "Search"));


            // Add breadcrumb for the search filter (query)
            if (!String.IsNullOrEmpty(q))
            {
                var routeValues = RouteHelper.RouteFromParameters(RouteData.Values);
                // Create a route that removes the q parameter
                breadCrumbs.Add(new BreadCrumb(
                    String.Format("Query: {0}", q),
                    "Index",
                    RouteHelper.UpdateRoute(routeValues, "q", ""),
                    true)
                );
            }

            // Add breadcrumb for the tag filter
            if (!String.IsNullOrEmpty(tag))
            {
               var routeValues = RouteHelper.RouteFromParameters(RouteData.Values);
               // Create a route that removes the tag parameter
               breadCrumbs.Add(new BreadCrumb(
                   String.Format("Tag: {0}",tag),
                   "Index",
                   RouteHelper.UpdateRoute(routeValues, "tag", ""),
                   true)
               );
            }

            ViewData["BreadCrumbs"] = breadCrumbs;
        }
        public MediaContainer GetItemsFromGroup(IProvider prov, int userid, string GroupId, BreadCrumbs info, bool nocast, int? filterID)
        {
            int groupID;
            int.TryParse(GroupId, out groupID);
            if (groupID == -1)
                return new MediaContainer() { ErrorString = "Invalid Group Id" };

            List<Video> retGroups = new List<Video>();
            AnimeGroup grp = RepoFactory.AnimeGroup.GetByID(groupID);

            if (grp == null)
                return new MediaContainer { ErrorString = "Invalid Group" };

            BaseObject ret =
                new BaseObject(prov.NewMediaContainer(MediaContainerTypes.Show, grp.GroupName, false, true, info));
            if (!ret.Init())
                return new MediaContainer();

            Contract_AnimeGroup basegrp = grp?.GetUserContract(userid);
            if (basegrp != null)
            {
                List<AnimeSeries> seriesList = grp.GetSeries();
                if (filterID.HasValue)
                {
                    GroupFilter filter = RepoFactory.GroupFilter.GetByID(filterID.Value);
                    if (filter != null)
                    {
                        if (filter.ApplyToSeries > 0)
                        {
                            if(filter.SeriesIds.ContainsKey(userid))
                                seriesList =
                                    seriesList.Where(a => filter.SeriesIds[userid].Contains(a.AnimeSeriesID)).ToList();
                        }
                    }
                }
                foreach (AnimeGroup grpChild in grp.GetChildGroups())
                {
                    var v = grpChild.GetPlexContract(userid);
                    if (v != null)
                    {
                        v.Type = "show";
                        v.GenerateKey(prov, userid);

                        v.Art = Helper.GetRandomFanartFromVideo(v) ?? v.Art;
                        v.Banner = Helper.GetRandomBannerFromVideo(v) ?? v.Banner;

                        if (nocast) v.Roles = null;
                        retGroups.Add(prov, v, info);
                        v.ParentThumb = v.GrandparentThumb = null;
                    }
                }
                foreach (AnimeSeries ser in seriesList)
                {
                    var v = ser.GetPlexContract(userid)?.Clone<Directory>();
                    if (v != null)
                    {
                        v.AirDate = ser.AirDate;
                        v.Group = basegrp;
                        v.Type = "show";
                        v.GenerateKey(prov, userid);
                        v.Art = Helper.GetRandomFanartFromVideo(v) ?? v.Art;
                        v.Banner = Helper.GetRandomBannerFromVideo(v) ?? v.Banner;
                        if (nocast) v.Roles = null;
                        retGroups.Add(prov, v, info);
                        v.ParentThumb = v.GrandparentThumb = null;
                    }
                }
            }
            ret.MediaContainer.RandomizeArt(retGroups);
            ret.Childrens = Helper.ConvertToDirectory(retGroups.OrderBy(a => a.AirDate).ToList());
            //FilterExtras(prov,ret.Childrens);
            return ret.GetStream(prov);
        }
        private MediaContainer GetItemsFromPlaylist(IProvider prov, int userid, string id, BreadCrumbs info)
        {
            var PlaylistID = -1;
            int.TryParse(id, out PlaylistID);

            if (PlaylistID == 0)
            {
                using (var session = DatabaseFactory.SessionFactory.OpenSession())
                {
                    var ret = new BaseObject(prov.NewMediaContainer(MediaContainerTypes.Show, "Playlists", true, true, info));
                    if (!ret.Init())
                        return new MediaContainer(); //Normal
                    var retPlaylists = new List<Video>();
                    var playlists = RepoFactory.Playlist.GetAll();
                    var sessionWrapper = session.Wrap();

                    foreach (var playlist in playlists)
                    {
                        var dir = new Directory();
                        dir.Key = prov.ShortUrl(prov.ConstructPlaylistIdUrl(userid, playlist.PlaylistID));
                        dir.Title = playlist.PlaylistName;
                        dir.Id = playlist.PlaylistID.ToString();
                        dir.AnimeType = JMMContracts.PlexAndKodi.AnimeTypes.AnimePlaylist.ToString();
                        var episodeID = -1;
                        if (int.TryParse(playlist.PlaylistItems.Split('|')[0].Split(';')[1], out episodeID))
                        {
                            var anime = RepoFactory.AnimeEpisode.GetByID(episodeID).GetAnimeSeries(sessionWrapper).GetAnime();
                            dir.Thumb = anime?.GetDefaultPosterDetailsNoBlanks(sessionWrapper)?.GenPoster();
                            dir.Art = anime?.GetDefaultFanartDetailsNoBlanks(sessionWrapper)?.GenArt();
                            dir.Banner = anime?.GetDefaultWideBannerDetailsNoBlanks(sessionWrapper)?.GenArt();
                        }
                        else
                        {
                            dir.Thumb = Helper.ConstructSupportImageLink("plex_404V.png");
                        }
                        dir.LeafCount = playlist.PlaylistItems.Split('|').Count().ToString();
                        dir.ViewedLeafCount = "0";
                        retPlaylists.Add(prov, dir, info);
                    }
                    retPlaylists = retPlaylists.OrderBy(a => a.Title).ToList();
                    ret.Childrens = retPlaylists;
                    return ret.GetStream(prov);
                }
            }
            if (PlaylistID > 0)
            {
                var playlist = RepoFactory.Playlist.GetByID(PlaylistID);
                var playlistItems = playlist.PlaylistItems.Split('|');
                var vids = new List<Video>();
                var ret =
                    new BaseObject(prov.NewMediaContainer(MediaContainerTypes.Episode, playlist.PlaylistName, true, true,
                        info));
                if (!ret.Init())
                    return new MediaContainer(); //Normal
                foreach (var item in playlistItems)
                {
                    try
                    {
                        var episodeID = -1;
                        int.TryParse(item.Split(';')[1], out episodeID);
                        if (episodeID < 0) return new MediaContainer() { ErrorString = "Invalid Episode ID" };
                        AnimeEpisode e = RepoFactory.AnimeEpisode.GetByID(episodeID);
                        if (e == null)
                            return new MediaContainer() { ErrorString = "Invalid Episode" };
                        KeyValuePair<AnimeEpisode, Contract_AnimeEpisode> ep =
                            new KeyValuePair<AnimeEpisode, Contract_AnimeEpisode>(e,
                                e.GetUserContract(userid));
                        if (ep.Value != null && ep.Value.LocalFileCount == 0)
                            continue;
                        AnimeSeries ser = RepoFactory.AnimeSeries.GetByID(ep.Key.AnimeSeriesID);
                        if (ser == null)
                            return new MediaContainer() { ErrorString = "Invalid Series" };
                        Contract_AnimeSeries con = ser.GetUserContract(userid);
                        if (con == null)
                            return new MediaContainer() { ErrorString = "Invalid Series, Contract not found" };
                        Video v = Helper.VideoFromAnimeEpisode(prov, con.CrossRefAniDBTvDBV2, ep, userid);
                        if (v != null && v.Medias != null && v.Medias.Count > 0)
                        {
                            Helper.AddInformationFromMasterSeries(v, con, ser.GetPlexContract(userid));
                            v.Type = "episode";
                            vids.Add(prov, v, info);
                            if (prov.ConstructFakeIosParent)
                                v.GrandparentKey =
                                    prov.Proxyfy(prov.ConstructFakeIosThumb(userid, v.ParentThumb,
                                        v.Art ?? v.ParentArt ?? v.GrandparentArt));
                            v.ParentKey = null;
                        }
                    }
                    catch (Exception e)
                    {
                        //Fast fix if file do not exist, and still is in db. (Xml Serialization of video info will fail on null)
                    }
                }
                ret.MediaContainer.RandomizeArt(vids);
                ret.Childrens = vids;
                return ret.GetStream(prov);
            }
            return new MediaContainer() { ErrorString = "Invalid Playlist" };
        }
 private MediaContainer GetUnsort(IProvider prov, int userid, BreadCrumbs info)
 {
     BaseObject ret =
         new BaseObject(prov.NewMediaContainer(MediaContainerTypes.Video, "Unsort", true, true, info));
     if (!ret.Init())
         return new MediaContainer();
     List<Video> dirs = new List<Video>();
     List<VideoLocal> vids = RepoFactory.VideoLocal.GetVideosWithoutEpisode();
     foreach (VideoLocal v in vids.OrderByDescending(a => a.DateTimeCreated))
     {
         try
         {
             Video m = Helper.VideoFromVideoLocal(prov, v, userid);
             dirs.Add(prov, m, info);
             m.Thumb = Helper.ConstructSupportImageLink("plex_404.png");
             m.ParentThumb = Helper.ConstructSupportImageLink("plex_unsort.png");
             m.ParentKey = null;
             if (prov.ConstructFakeIosParent)
                 m.GrandparentKey =
                     prov.Proxyfy(prov.ConstructFakeIosThumb(userid, m.ParentThumb,
                         m.Art ?? m.ParentArt ?? m.GrandparentArt));
         }
         catch (Exception e)
         {
             //Fast fix if file do not exist, and still is in db. (Xml Serialization of video info will fail on null)
         }
     }
     ret.Childrens = dirs;
     return ret.GetStream(prov);
 }
        //private void FilterExtras(IProvider provider, List<Video> videos)
        //{
        //    //foreach (Video v in videos)
        //    //{
        //    //    if (!provider.EnableAnimeTitlesInLists)
        //    //        v.Titles = null;
        //    //    if (!provider.EnableGenresInLists)
        //    //        v.Genres = null;
        //    //    if (!provider.EnableRolesInLists)
        //    //        v.Roles = null;
        //    //}
        //}
        public MediaContainer GetItemsFromSerie(IProvider prov, int userid, string SerieId, BreadCrumbs info, bool nocast)
        {
            BaseObject ret = null;
            enEpisodeType? eptype = null;
            int serieID;
            if (SerieId.Contains("_"))
            {
                int ept;
                string[] ndata = SerieId.Split('_');
                if (!int.TryParse(ndata[0], out ept))
                    return new MediaContainer() {ErrorString = "Invalid Serie Id"};
                eptype = (enEpisodeType) ept;
                if (!int.TryParse(ndata[1], out serieID))
                    return new MediaContainer() { ErrorString = "Invalid Serie Id" };
            }
            else
            {
                if (!int.TryParse(SerieId, out serieID))
                    return new MediaContainer() { ErrorString = "Invalid Serie Id" };
            }

            using (var session = DatabaseFactory.SessionFactory.OpenSession())
            {
                if (serieID == -1)
                    return new MediaContainer() { ErrorString = "Invalid Serie Id" };
                ISessionWrapper sessionWrapper = session.Wrap();
                AnimeSeries ser = RepoFactory.AnimeSeries.GetByID(serieID);
                if (ser == null)
                    return new MediaContainer() {ErrorString = "Invalid Series"};
                Contract_AnimeSeries cseries = ser.GetUserContract(userid);
                if (cseries == null)
                    return new MediaContainer() {ErrorString = "Invalid Series, Contract Not Found"};
                Video nv = ser.GetPlexContract(userid);

                Dictionary<AnimeEpisode, Contract_AnimeEpisode> episodes = ser.GetAnimeEpisodes()
                    .ToDictionary(a => a, a => a.GetUserContract(userid));
                episodes = episodes.Where(a => a.Value == null || a.Value.LocalFileCount > 0)
                    .ToDictionary(a => a.Key, a => a.Value);
                if (eptype.HasValue)
                {
                    ret =
                        new BaseObject(prov.NewMediaContainer(MediaContainerTypes.Episode, ser.GetSeriesName(), true,
                            true, info));
                    if (!ret.Init())
                        return new MediaContainer();
                    ret.MediaContainer.Art = cseries.AniDBAnime?.AniDBAnime?.DefaultImageFanart.GenArt();
                    ret.MediaContainer.LeafCount =
                        (cseries.WatchedEpisodeCount + cseries.UnwatchedEpisodeCount).ToString();
                    ret.MediaContainer.ViewedLeafCount = cseries.WatchedEpisodeCount.ToString();
                    episodes = episodes.Where(a => a.Key.EpisodeTypeEnum == eptype.Value)
                        .ToDictionary(a => a.Key, a => a.Value);
                }
                else
                {
                    ret = new BaseObject(prov.NewMediaContainer(MediaContainerTypes.Show, "Types", false, true, info));
                    if (!ret.Init())
                        return new MediaContainer();
                    ret.MediaContainer.Art = cseries.AniDBAnime?.AniDBAnime?.DefaultImageFanart.GenArt();
                    ret.MediaContainer.LeafCount =
                        (cseries.WatchedEpisodeCount + cseries.UnwatchedEpisodeCount).ToString();
                    ret.MediaContainer.ViewedLeafCount = cseries.WatchedEpisodeCount.ToString();
                    List<enEpisodeType> types = episodes.Keys.Select(a => a.EpisodeTypeEnum).Distinct().ToList();
                    if (types.Count > 1)
                    {
                        List<PlexEpisodeType> eps = new List<PlexEpisodeType>();
                        foreach (enEpisodeType ee in types)
                        {
                            PlexEpisodeType k2 = new PlexEpisodeType();
                            PlexEpisodeType.EpisodeTypeTranslated(k2, ee,
                                (AnimeTypes) cseries.AniDBAnime.AniDBAnime.AnimeType,
                                episodes.Count(a => a.Key.EpisodeTypeEnum == ee));
                            eps.Add(k2);
                        }
                        List<Video> dirs = new List<Video>();
                        //bool converttoseason = true;

                        foreach (PlexEpisodeType ee in  eps.OrderBy(a=>a.Name))
                        {
                            Video v = new Directory();
                            v.Art = nv.Art;
                            v.Title = ee.Name;
                            v.AnimeType = "AnimeType";
                            v.LeafCount = ee.Count.ToString();
                            v.ChildCount = v.LeafCount;
                            v.ViewedLeafCount = "0";
                            v.Key = prov.ShortUrl(prov.ConstructSerieIdUrl(userid, ee.Type + "_" + ser.AnimeSeriesID));
                            v.Thumb = Helper.ConstructSupportImageLink(ee.Image);
                            if ((ee.AnimeType == AnimeTypes.Movie) || (ee.AnimeType == AnimeTypes.OVA))
                            {
                                v = Helper.MayReplaceVideo(v, ser, cseries, userid, false, nv);
                            }
                            dirs.Add(prov, v, info, false, true);
                        }
                        ret.Childrens = dirs;
                        return ret.GetStream(prov);
                    }
                }
                List<Video> vids = new List<Video>();

                if ((eptype.HasValue) && (info!=null))
                    info.ParentKey = info.GrandParentKey;
                bool hasRoles = false;
                foreach (KeyValuePair<AnimeEpisode, Contract_AnimeEpisode> ep in episodes)
                {
                    try
                    {
                        Video v = Helper.VideoFromAnimeEpisode(prov, cseries.CrossRefAniDBTvDBV2, ep, userid);
                        if (v!=null && v.Medias != null && v.Medias.Count > 0)
                        {
                            if (nocast && !hasRoles) hasRoles = true;
                            Helper.AddInformationFromMasterSeries(v, cseries, nv, hasRoles);
                            v.Type = "episode";
                            vids.Add(prov, v, info);
                            if (prov.ConstructFakeIosParent)
                                v.GrandparentKey =
                                    prov.Proxyfy(prov.ConstructFakeIosThumb(userid, v.ParentThumb,
                                        v.Art ?? v.ParentArt ?? v.GrandparentArt));
                            v.ParentKey = null;
                            if (!hasRoles) hasRoles = true;
                        }
                    }
                    catch (Exception e)
                    {
                        //Fast fix if file do not exist, and still is in db. (Xml Serialization of video info will fail on null)
                    }
                }
                ret.Childrens = vids.OrderBy(a => int.Parse(a.EpisodeNumber)).ToList();
                //FilterExtras(prov,ret.Childrens);
                return ret.GetStream(prov);
            }
        }
        private MediaContainer GetFromEpisode(IProvider prov, int userid, string Id, BreadCrumbs info)
        {
            int id;
            if (!int.TryParse(Id, out id))
                return new MediaContainer() { ErrorString = "Invalid Episode Id" };
            BaseObject ret =
                new BaseObject(prov.NewMediaContainer(MediaContainerTypes.Episode, "Episode", true, true, info));
            using (var session = DatabaseFactory.SessionFactory.OpenSession())
            {
                List<Video> dirs = new List<Video>();
                ISessionWrapper sessionWrapper = session.Wrap();

                AnimeEpisode e = RepoFactory.AnimeEpisode.GetByID(id);
                if (e == null)
                    return new MediaContainer() { ErrorString = "Invalid Episode Id" };
                KeyValuePair<AnimeEpisode, Contract_AnimeEpisode> ep =
                    new KeyValuePair<AnimeEpisode, Contract_AnimeEpisode>(e,
                        e.GetUserContract(userid));
                if (ep.Value != null && ep.Value.LocalFileCount == 0)
                    return new MediaContainer() { ErrorString = "Episode do not have videolocals" };
                AniDB_Episode aep = ep.Key.AniDB_Episode;
                if (aep == null)
                    return new MediaContainer() { ErrorString = "Invalid Episode AniDB link not found" };
                AnimeSeries ser = RepoFactory.AnimeSeries.GetByID(ep.Key.AnimeSeriesID);
                if (ser == null)
                    return new MediaContainer() { ErrorString = "Invalid Serie" };
                AniDB_Anime anime = ser.GetAnime();
                Contract_AnimeSeries con = ser.GetUserContract(userid);
                if (con == null)
                    return new MediaContainer() { ErrorString = "Invalid Serie, Contract not found" };
                try
                {
                    Video v = Helper.VideoFromAnimeEpisode(prov, con.CrossRefAniDBTvDBV2, ep, userid);
                    if (v != null)
                    {
                        Video nv = ser.GetPlexContract(userid);
                        Helper.AddInformationFromMasterSeries(v, con, ser.GetPlexContract(userid), prov is KodiProvider);
                        if (v.Medias != null && v.Medias.Count > 0)
                        {
                            v.Type = "episode";
                            dirs.EppAdd(prov, v, info, true);
                            if (prov.ConstructFakeIosParent)
                                v.GrandparentKey =
                                    prov.Proxyfy(prov.ConstructFakeIosThumb(userid, v.ParentThumb,
                                        v.Art ?? v.ParentArt ?? v.GrandparentArt));
                            v.ParentKey = null;
                        }
                        if (prov.UseBreadCrumbs)
                            v.Key = prov.ShortUrl(ret.MediaContainer.Key);
                        ret.MediaContainer.Art = Helper.ReplaceSchemeHost(nv.Art ?? nv.ParentArt ?? nv.GrandparentArt);
                    }
                    ret.MediaContainer.Childrens = dirs;
                    return ret.GetStream(prov);
                }
                catch (Exception ex)
                {
                    //Fast fix if file do not exist, and still is in db. (Xml Serialization of video info will fail on null)
                }
            }
            return new MediaContainer() { ErrorString = "Episode Not Found" };
        }
 private MediaContainer GetFromFile(IProvider prov, int userid, string Id, BreadCrumbs info)
 {
     int id;
     if (!int.TryParse(Id, out id))
         return new MediaContainer() { ErrorString = "Invalid File Id" };
     VideoLocal vi = RepoFactory.VideoLocal.GetByID(id);
     BaseObject ret =
         new BaseObject(prov.NewMediaContainer(MediaContainerTypes.File,
             Path.GetFileNameWithoutExtension(vi.FileName ?? ""),
             true, false, info));
     Video v2 = Helper.VideoFromVideoLocal(prov, vi, userid);
     List<Video> dirs = new List<Video>();
     dirs.EppAdd(prov, v2, info, true);
     v2.Thumb = Helper.ConstructSupportImageLink("plex_404.png");
     v2.ParentThumb = Helper.ConstructSupportImageLink("plex_unsort.png");
     if (prov.ConstructFakeIosParent)
         v2.GrandparentKey =
             prov.Proxyfy(prov.ConstructFakeIosThumb(userid, v2.ParentThumb,
                 v2.Art ?? v2.ParentArt ?? v2.GrandparentArt));
     v2.ParentKey = null;
     if (prov.UseBreadCrumbs)
         v2.Key = prov.ShortUrl(ret.MediaContainer.Key);
     ret.MediaContainer.Childrens = dirs;
     return ret.GetStream(prov);
 }
        private MediaContainer GetGroupsOrSubFiltersFromFilter(IProvider prov, int userid, string GroupFilterId,
            BreadCrumbs info, bool nocast)
        {
            //List<Joint> retGroups = new List<Joint>();
            try
            {
                int groupFilterID;
                int.TryParse(GroupFilterId, out groupFilterID);
                using (var session = DatabaseFactory.SessionFactory.OpenSession())
                {
                    List<Video> retGroups = new List<Video>();
                    if (groupFilterID == -1)
                        return new MediaContainer() {ErrorString = "Invalid Group Filter"};
                    DateTime start = DateTime.Now;

                    GroupFilter gf;
                    gf = RepoFactory.GroupFilter.GetByID(groupFilterID);
                    if (gf == null) return new MediaContainer() { ErrorString = "Invalid Group Filter" };

                    BaseObject ret =
                        new BaseObject(prov.NewMediaContainer(MediaContainerTypes.Show, gf.GroupFilterName, false, true,
                            info));
                    if (!ret.Init())
                        return new MediaContainer();
                    List<GroupFilter> allGfs =
                    RepoFactory.GroupFilter.GetByParentID(groupFilterID).Where(a => a.InvisibleInClients == 0 &&
                    (
                        (a.GroupsIds.ContainsKey(userid) && a.GroupsIds[userid].Count > 0)
                        || (a.FilterType & (int)GroupFilterType.Directory) == (int)GroupFilterType.Directory)
                    ).ToList();
                    List<Directory> dirs = new List<Directory>();
                    foreach (GroupFilter gg in allGfs)
                    {
                        Directory pp = Helper.DirectoryFromFilter(prov, gg, userid);
                        if (pp != null)
                            dirs.Add(prov, pp, info);
                    }
                    if (dirs.Count > 0)
                    {
                        ret.Childrens = dirs.OrderBy(a => a.Title).Cast<Video>().ToList();
                        return ret.GetStream(prov);
                    }
                    Dictionary<Contract_AnimeGroup, Video> order = new Dictionary<Contract_AnimeGroup, Video>();
                    if (gf.GroupsIds.ContainsKey(userid))
                    {
                        // NOTE: The ToList() in the below foreach is required to prevent enumerable was modified exception
                        foreach (AnimeGroup grp in gf.GroupsIds[userid].ToList().Select(a => RepoFactory.AnimeGroup.GetByID(a)).Where(a => a != null))
                        {
                            Video v = grp.GetPlexContract(userid)?.Clone<Directory>();
                            if (v != null)
                            {
                                if (v.Group == null)
                                    v.Group = grp.GetUserContract(userid);
                                v.GenerateKey(prov, userid);
                                v.Type = "show";
                                v.Art = Helper.GetRandomFanartFromVideo(v) ?? v.Art;
                                v.Banner = Helper.GetRandomBannerFromVideo(v) ?? v.Banner;
                                if (nocast) v.Roles = null;
                                order.Add(v.Group, v);
                                retGroups.Add(prov, v, info);
                                v.ParentThumb = v.GrandparentThumb = null;
                            }
                        }
                    }
                    ret.MediaContainer.RandomizeArt(retGroups);
                    IEnumerable<Contract_AnimeGroup> grps = retGroups.Select(a => a.Group);
                    grps = gf.SortCriteriaList.Count != 0 ? GroupFilterHelper.Sort(grps, gf) : grps.OrderBy(a => a.GroupName);
                    ret.Childrens = grps.Select(a => order[a]).ToList();
                    //FilterExtras(prov,ret.Childrens);
                    return ret.GetStream(prov);
                }
            }
            catch (Exception ex)
            {
                logger.Error( ex,ex.ToString());
                return new MediaContainer() { ErrorString = "System Error, see JMMServer logs for more information" };

            }
        }