NewsService.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using MediaBrowser.Common.Configuration;
  2. using MediaBrowser.Controller.News;
  3. using MediaBrowser.Model.News;
  4. using MediaBrowser.Model.Querying;
  5. using MediaBrowser.Model.Serialization;
  6. using System.Collections.Generic;
  7. using System.IO;
  8. using System.Linq;
  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 (DirectoryNotFoundException)
  27. {
  28. // No biggie
  29. return new QueryResult<NewsItem>
  30. {
  31. Items = new NewsItem[] { }
  32. };
  33. }
  34. catch (FileNotFoundException)
  35. {
  36. // No biggie
  37. return new QueryResult<NewsItem>
  38. {
  39. Items = new NewsItem[] { }
  40. };
  41. }
  42. }
  43. private QueryResult<NewsItem> GetProductNewsInternal(NewsQuery query)
  44. {
  45. var path = Path.Combine(_appPaths.CachePath, "news.json");
  46. var items = GetNewsItems(path).OrderByDescending(i => i.Date);
  47. var itemsArray = items.ToArray();
  48. var count = itemsArray.Length;
  49. if (query.StartIndex.HasValue)
  50. {
  51. itemsArray = itemsArray.Skip(query.StartIndex.Value).ToArray();
  52. }
  53. if (query.Limit.HasValue)
  54. {
  55. itemsArray = itemsArray.Take(query.Limit.Value).ToArray();
  56. }
  57. return new QueryResult<NewsItem>
  58. {
  59. Items = itemsArray,
  60. TotalRecordCount = count
  61. };
  62. }
  63. private IEnumerable<NewsItem> GetNewsItems(string path)
  64. {
  65. return _json.DeserializeFromFile<List<NewsItem>>(path);
  66. }
  67. }
  68. }