예제 #1
0
        public ActionResult GetNew(DateTime firstDate, String token, Coordinates location = null)
        {
            CategoryPersonalizer personalize = new CategoryPersonalizer(context);
            IQueryable<NewsFile> articles;
            var request = NewsRequest.Construct(Guid.Parse(token), context, location);
            firstDate.AddSeconds(1);
            articles = personalize.GetNews(request).OrderByDescending(x => x.PubDate);
            articles = articles.Where(x => x.PubDate > firstDate);

            return new FeedResult(listToRss(articles.ToList(), personalize.Messages));
        }
예제 #2
0
        public static Func<Coordinates> CreateCoordinatesRandomFunc(String query, int KilometerRandomOffset)
        {
            var Coord = GeoCode(query);
            return () =>
            {
                Random rnd = new Random();
                var coordinates = new Coordinates { Latitude = Coord.Latitude, Longitude = Coord.Longitude };
                double dy = rnd.Next(0, 100);
                double dx = 100 - dy;

                //111km == 1 deegre
                float km = ((float)KilometerRandomOffset) / 111f;

                coordinates.Latitude = coordinates.Latitude + (km * dy) / 100;
                coordinates.Longitude = coordinates.Longitude + (km * dx) / 100;
                return coordinates;
            };
        }
예제 #3
0
        //
        // GET: /Feed/
        public ActionResult Index(DateTime? lastDate, String token = null, Coordinates location = null)
        {
            CategoryPersonalizer personalize = new CategoryPersonalizer(context);
            IQueryable<NewsFile> articles;
            if (token == null)
            {
                articles = context.NewsFiles.OrderByDescending(pub => pub.PubDate);
            }
            else
            {
                var request = NewsRequest.Construct(Guid.Parse(token), context, location);
                articles = personalize.GetNews(request).OrderByDescending(x => x.PubDate);
            }
            if (lastDate != null)
            {
                articles = articles.Where(x => x.PubDate < lastDate);
            }

            return new FeedResult(listToRss(articles.Take(15).ToList(), personalize.Messages));
        }
예제 #4
0
        public String Click(DateTime ClickDate, String token, int? newsId, Coordinates coordinates = null)
        {
            if (ClickDate!=null&&token!=null&&newsId!=null)
            {
                var categoryId = context.NewsFiles.Where(x => x.NewsId == newsId.Value).Select(x => x.CategoryId).First();
                Guid g = Guid.Parse(token);
                var userId = context.Users.Where(x => x.AccessToken == g).First().UserId;
                var click = new ClickCounter { UserId = userId, ClickDate = ClickDate, CategoryId = categoryId, NewsId = newsId.Value };
                if(coordinates!=null && (coordinates.Latitude==0 && coordinates.Longitude==0)){
                    coordinates=null;
                }
                click.SetLocation(coordinates);
                click.SetDayOfWeekAndTimeOfDay();
                context.Clicks.Add(click);
                context.SaveChanges();
                return "Click saved";
            }

            return "Bad info";
        }
예제 #5
0
 public void SetLocation(Coordinates coord)
 {
     if (coord == null)
     {
         Longitude = null;
         Latitude = null;
     }
     else
     {
         Longitude = coord.Longitude;
         Latitude = coord.Latitude;
     }
 }
 public static double DistanceInM(Coordinates c1, Coordinates c2)
 {
     return HaversineInM(c1.Latitude, c1.Longitude, c2.Latitude, c2.Longitude);
 }
예제 #7
0
 public RadiusFilter(int RadiusInKm, Coordinates GivenPosition)
 {
     this.RadiusInKm = RadiusInKm;
     this.GivenPosition = GivenPosition;
 }
예제 #8
0
 public IQueryable<ClickCounter> FilterByClicksInGivenRadius(IQueryable<ClickCounter> clicks, double radiusInKm, Coordinates GivenPosition)
 {
     var l = clicks.Where(x => x.Latitude != null && x.Longitude != null).ToList();
     var closest = l.Where(x => CoordinateHelper.DistanceInM(x.Coordinates, GivenPosition) < radiusInKm * 1000);
     return closest.AsQueryable();
 }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="clicks">Click queryable</param>
 /// <param name="N">Number of nearest clicks</param>
 /// <param name="GivenPosition">Position to look fod</param>
 /// <returns></returns>
 public static IQueryable<ClickCounter> FilterByNNearestClicks(IQueryable<ClickCounter> clicks, int N, Coordinates GivenPosition)
 {
     var l = clicks.Where(x => x.Latitude != null && x.Longitude != null).ToList();
     var closest = l.OrderBy(x => CoordinateHelper.DistanceInM(x.Coordinates, GivenPosition)).Take(N);
     return closest.AsQueryable();
 }
 public static NewsRequest Construct(String username, MobilniPortalNovicContext12 context, Coordinates l = null)
 {
     var user = context.Users.Where(x => x.Username == username).First();
     return new NewsRequest(user, l);
 }
 public static NewsRequest Construct(Guid token, MobilniPortalNovicContext12 context, Coordinates l = null)
 {
     var user = context.Users.Where(x => x.AccessToken == token).First();
     return new NewsRequest(user, l);
 }
 public static NewsRequest Construct(int id, MobilniPortalNovicContext12 context, Coordinates l = null)
 {
     var user = context.Users.Find(id);
     return new NewsRequest(user, l);
 }
 private NewsRequest(User u, Coordinates l)
 {
     TargetTime = DateTime.Now;
     Location = l;
     RadiusInKm = 10;
     User = u;
 }