PageRenderTime 58ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/Chat streamer/Badges.cs

https://bitbucket.org/majosa/transparent-chat
C# | 104 lines | 100 code | 3 blank | 1 comment | 6 complexity | 9f93aacebfccaf78ca652ed371758c95 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Xml.Linq;
  5. using Newtonsoft.Json;
  6. using Newtonsoft.Json.Linq;
  7. using System.IO;
  8. using System.Text;
  9. using System.Net;
  10. using System.Windows.Media.Imaging;
  11. using System.Threading.Tasks;
  12. namespace Chat_streamer
  13. {
  14. public class Badges
  15. {
  16. enum BadgeType
  17. {
  18. Mod, Admin, Boardcaster, Staff, Subscriptor
  19. }
  20. private Dictionary<String, BitmapSource> badges;
  21. public Badges(String channel)
  22. {
  23. WebClient request = new WebClient();
  24. request.OpenReadCompleted+=onFileOpened;
  25. request.OpenReadAsync(new Uri("https://api.twitch.tv/kraken/chat/"+channel+"/badges"));
  26. badges = new Dictionary<string, BitmapSource>();
  27. }
  28. void openResource(String badge, String url)
  29. {
  30. DownloaderArgs args=new DownloaderArgs();
  31. args.cache=BitmapCacheOption.OnDemand;
  32. args.options=BitmapCreateOptions.None;
  33. args.downloadedHandle=delegate(object sender, EventArgs ev)
  34. {
  35. badges.Add(badge, ((BitmapDecoder)sender).Frames[0]);
  36. };
  37. args.path=new Uri(url);
  38. DownloadersQueue.AddToQueue(args);
  39. }
  40. void onFileOpened(object sender, OpenReadCompletedEventArgs e)
  41. {
  42. JObject doc = (JObject)JObject.Load(new JsonTextReader(new StreamReader(e.Result)));
  43. foreach(var element in doc){
  44. if (element.Key == "mod") continue; //Outdated icon
  45. if (element.Key[0] == '_') continue; //Autoreference node
  46. if (!element.Value.HasValues) continue; //In subscriber node can appear this case
  47. JToken image;
  48. if (((JObject)element.Value).TryGetValue("alpha",out image))
  49. {
  50. openResource(element.Key, image.Value<string>());
  51. }
  52. else
  53. {
  54. openResource(element.Key, element.Value["image"].Value<string>());
  55. }
  56. }
  57. //JSON keeps outdated, use real badges
  58. openResource("mod", "http://www-cdn.jtvnw.net/images/xarth/g/g18_sword-FFFFFF80.png");
  59. openResource("ign", "http://www-cdn.jtvnw.net/images/xarth/g/g18_ign-00000080.png");
  60. }
  61. public BitmapSource GetBadge(String name)
  62. {
  63. return badges.ContainsKey(name) ? badges[name] : null;
  64. }
  65. public BitmapSource Mod
  66. {
  67. get
  68. {
  69. return badges.ContainsKey("mod") ? badges["mod"] : null;
  70. }
  71. }
  72. public BitmapSource Staff
  73. {
  74. get
  75. {
  76. return badges.ContainsKey("staff") ? badges["staff"] : null;
  77. }
  78. }
  79. public BitmapSource Admin
  80. {
  81. get
  82. {
  83. return badges.ContainsKey("admin") ? badges["admin"] : null;
  84. }
  85. }
  86. public BitmapSource Boardcaster
  87. {
  88. get
  89. {
  90. return badges.ContainsKey("broadcaster") ? badges["broadcaster"] : null;
  91. }
  92. }
  93. public BitmapSource Subscriptor
  94. {
  95. get
  96. {
  97. return badges.ContainsKey("chansub") ? badges["chansub"] : null;
  98. }
  99. }
  100. }
  101. }