NewsService.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using MediaBrowser.Common.Configuration;
  2. using MediaBrowser.Controller.News;
  3. using MediaBrowser.Model.News;
  4. using MediaBrowser.Model.Querying;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using System.Linq;
  8. using MediaBrowser.Model.Serialization;
  9. namespace MediaBrowser.Server.Implementations.News
  10. {
  11. public class NewsService : INewsService
  12. {
  13. private readonly IApplicationPaths _appPaths;
  14. private readonly IJsonSerializer _json;
  15. public NewsService(IApplicationPaths appPaths, IJsonSerializer json)
  16. {
  17. _appPaths = appPaths;
  18. _json = json;
  19. }
  20. public QueryResult<NewsItem> GetProductNews(NewsQuery query)
  21. {
  22. try
  23. {
  24. return GetProductNewsInternal(query);
  25. }
  26. catch (FileNotFoundException)
  27. {
  28. // No biggie
  29. return new QueryResult<NewsItem>
  30. {
  31. Items = new NewsItem[] { }
  32. };
  33. }
  34. }
  35. private QueryResult<NewsItem> GetProductNewsInternal(NewsQuery query)
  36. {
  37. var path = Path.Combine(_appPaths.CachePath, "news.json");
  38. var items = GetNewsItems(path).OrderByDescending(i => i.Date);
  39. var itemsArray = items.ToArray();
  40. var count = itemsArray.Length;
  41. if (query.StartIndex.HasValue)
  42. {
  43. itemsArray = itemsArray.Skip(query.StartIndex.Value).ToArray();
  44. }
  45. if (query.Limit.HasValue)
  46. {
  47. itemsArray = itemsArray.Take(query.Limit.Value).ToArray();
  48. }
  49. return new QueryResult<NewsItem>
  50. {
  51. Items = itemsArray,
  52. TotalRecordCount = count
  53. };
  54. }
  55. private IEnumerable<NewsItem> GetNewsItems(string path)
  56. {
  57. return _json.DeserializeFromFile<List<NewsItem>>(path);
  58. }
  59. }
  60. }