Пример #1
0
 public ContentController(IContentFacade facade)
 {
     this.facade = facade;
 }
Пример #2
0
 public TasksController(ICourseTopicFacade courseTopicFacade, IContentFacade contentFacade)
 {
     this.courseTopicFacade = courseTopicFacade;
     this.contentFacade     = contentFacade;
 }
 public Layout(IContentFacade contentFacade, SitePage page, Settings settings)
 {
     this.ContentFacade = contentFacade ?? throw new ArgumentNullException(nameof(contentFacade));
     this.Page          = page ?? throw new ArgumentNullException(nameof(page));
     this.Settings      = settings ?? throw new ArgumentNullException(nameof(settings));
 }
Пример #4
0
        private async Task ProcessSearchSafe(IReadOnlyList <PackageInfo> packages, IContentFacade unused, HttpContext context)
        {
            // targetFramework = '...'
            // $filter = IsLatestVersion

            IQueryCollection query = context.Request.Query;

            int skip = 0;
            int top  = 0;

            bool check =
                int.TryParse(query.GetFirst("$skip", string.Empty), out skip) &&
                int.TryParse(query.GetFirst("$top", string.Empty), out top);

            if (check == false)
            {
                context.Response.StatusCode = 400;
                lock (Globals.ConsoleLock)
                    Console.WriteLine($"Search: return {context.Response.StatusCode}");
                return;
            }

            string searchTerm = query.GetFirst("searchTerm", "").Trim(Characters.SingleQuote);

            var packagesMatchingByIdIndices = new List <int>();

            for (int packageIndex = 0; packageIndex < packages.Count; packageIndex++)
            {
                if (packages[packageIndex].Id.IndexOf(searchTerm, StringComparison.OrdinalIgnoreCase) > -1)
                {
                    packagesMatchingByIdIndices.Add(packageIndex);
                }
            }

            int totalPacketCount = packagesMatchingByIdIndices.Count;

            top = Math.Min(top, totalPacketCount);

            var matchingPackageIndices = packagesMatchingByIdIndices
                                         .Skip(skip)
                                         .Take(top);

            lock (Globals.ConsoleLock)
            {
                Console.WriteLine();
                Console.WriteLine("--- Search -----------------------------------");
                foreach (var index in matchingPackageIndices)
                {
                    Console.WriteLine($"{packages[index].Id} - {packages[index].LatestVersion}");
                }
                Console.WriteLine("----------------------------------------------");
                Console.WriteLine();
            }

            var doc = new XElement(
                XmlElements.feed,
                new XAttribute(XmlElements.baze, XmlNamespaces.baze),
                new XAttribute(XmlElements.m, XmlNamespaces.m),
                new XAttribute(XmlElements.d, XmlNamespaces.d),
                new XAttribute(XmlElements.georss, XmlNamespaces.georss),
                new XAttribute(XmlElements.gml, XmlNamespaces.gml),
                new XElement(XmlElements.m_count, totalPacketCount.ToString()),
                matchingPackageIndices.Select(idx =>
                                              new XElement(
                                                  XmlElements.entry,
                                                  new XElement(XmlElements.id, $"{context.Request.Scheme}://{context.Request.Host}{Segment}/Packages(Id='{packages[idx].Id}',Version='{packages[idx].LatestVersion}')"),
                                                  new XElement(
                                                      XmlElements.content,
                                                      new XAttribute("type", "application/zip"),
                                                      new XAttribute("src", $"{context.Request.Scheme}://{context.Request.Host}{Segment}/download/{packages[idx].LatestContentId}")
                                                      ),
                                                  new XElement(
                                                      XmlElements.m_properties,
                                                      new XElement(XmlElements.d_id, packages[idx].Id),
                                                      new XElement(XmlElements.d_version, packages[idx].LatestVersion)
                                                      )
                                                  )
                                              )
                );

            var bytes = Encoding.UTF8.GetBytes(doc.ToString(SaveOptions.DisableFormatting));

            context.Response.StatusCode  = 200;
            context.Response.ContentType = "application/xml";
            await context.Response.Body.WriteAsync(bytes, 0, bytes.Length);
        }