NewsService.cs 2.1 KB

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