framework_gem 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (872) hide show
  1. checksums.yaml +7 -0
  2. data/lib/EXECUTION_ENGINE.md +282 -0
  3. data/lib/Gemfile +12 -0
  4. data/lib/README.md +138 -0
  5. data/lib/User_Lib/helpers/helpers.rb +13 -0
  6. data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_black_rois.rb +7 -0
  7. data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_color_rois.rb +9 -0
  8. data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_image_rois.rb +7 -0
  9. data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_rois.rb +23 -0
  10. data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_text_rois.rb +48 -0
  11. data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_video_rois.rb +11 -0
  12. data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_black_rois.rb +7 -0
  13. data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_color_rois.rb +7 -0
  14. data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_image_rois.rb +7 -0
  15. data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_rois.rb +23 -0
  16. data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_text_rois.rb +7 -0
  17. data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_video_rois.rb +11 -0
  18. data/lib/User_Lib/rois/apple_tv/apple_tv_black_rois.rb +7 -0
  19. data/lib/User_Lib/rois/apple_tv/apple_tv_color_rois.rb +7 -0
  20. data/lib/User_Lib/rois/apple_tv/apple_tv_image_rois.rb +7 -0
  21. data/lib/User_Lib/rois/apple_tv/apple_tv_rois.rb +23 -0
  22. data/lib/User_Lib/rois/apple_tv/apple_tv_text_rois.rb +7 -0
  23. data/lib/User_Lib/rois/apple_tv/apple_tv_video_rois.rb +7 -0
  24. data/lib/User_Lib/rois/black_rois.rb +33 -0
  25. data/lib/User_Lib/rois/color_rois.rb +38 -0
  26. data/lib/User_Lib/rois/dta/dta_1080/dta_1080_black_rois.rb +8 -0
  27. data/lib/User_Lib/rois/dta/dta_1080/dta_1080_color_rois.rb +8 -0
  28. data/lib/User_Lib/rois/dta/dta_1080/dta_1080_image_rois.rb +8 -0
  29. data/lib/User_Lib/rois/dta/dta_1080/dta_1080_rois.rb +26 -0
  30. data/lib/User_Lib/rois/dta/dta_1080/dta_1080_text_rois.rb +8 -0
  31. data/lib/User_Lib/rois/dta/dta_1080/dta_1080_video_rois.rb +8 -0
  32. data/lib/User_Lib/rois/dta/dta_720/dta_720_black_rois.rb +8 -0
  33. data/lib/User_Lib/rois/dta/dta_720/dta_720_color_rois.rb +8 -0
  34. data/lib/User_Lib/rois/dta/dta_720/dta_720_image_rois.rb +8 -0
  35. data/lib/User_Lib/rois/dta/dta_720/dta_720_rois.rb +26 -0
  36. data/lib/User_Lib/rois/dta/dta_720/dta_720_text_rois.rb +8 -0
  37. data/lib/User_Lib/rois/dta/dta_720/dta_720_video_rois.rb +8 -0
  38. data/lib/User_Lib/rois/dta/dta_black_rois.rb +9 -0
  39. data/lib/User_Lib/rois/dta/dta_color_rois.rb +9 -0
  40. data/lib/User_Lib/rois/dta/dta_image_rois.rb +9 -0
  41. data/lib/User_Lib/rois/dta/dta_rois.rb +26 -0
  42. data/lib/User_Lib/rois/dta/dta_text_rois.rb +9 -0
  43. data/lib/User_Lib/rois/dta/dta_video_rois.rb +9 -0
  44. data/lib/User_Lib/rois/image_rois.rb +38 -0
  45. data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_black_rois.rb +8 -0
  46. data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_color_rois.rb +8 -0
  47. data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_image_rois.rb +8 -0
  48. data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_rois.rb +26 -0
  49. data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_text_rois.rb +8 -0
  50. data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_video_rois.rb +8 -0
  51. data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_black_rois.rb +8 -0
  52. data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_color_rois.rb +8 -0
  53. data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_image_rois.rb +8 -0
  54. data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_rois.rb +26 -0
  55. data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_text_rois.rb +8 -0
  56. data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_video_rois.rb +8 -0
  57. data/lib/User_Lib/rois/mdn/mdn_black_rois.rb +9 -0
  58. data/lib/User_Lib/rois/mdn/mdn_color_rois.rb +9 -0
  59. data/lib/User_Lib/rois/mdn/mdn_image_rois.rb +9 -0
  60. data/lib/User_Lib/rois/mdn/mdn_rois.rb +26 -0
  61. data/lib/User_Lib/rois/mdn/mdn_text_rois.rb +13 -0
  62. data/lib/User_Lib/rois/mdn/mdn_video_rois.rb +9 -0
  63. data/lib/User_Lib/rois/mobile/android/android_black_rois.rb +8 -0
  64. data/lib/User_Lib/rois/mobile/android/android_color_rois.rb +8 -0
  65. data/lib/User_Lib/rois/mobile/android/android_image_rois.rb +8 -0
  66. data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_black_rois.rb +8 -0
  67. data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_color_rois.rb +8 -0
  68. data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_image_rois.rb +43 -0
  69. data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_rois.rb +22 -0
  70. data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_text_rois.rb +8 -0
  71. data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_video_rois.rb +8 -0
  72. data/lib/User_Lib/rois/mobile/android/android_rois.rb +22 -0
  73. data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_black_rois.rb +8 -0
  74. data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_color_rois.rb +8 -0
  75. data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_image_rois.rb +54 -0
  76. data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_rois.rb +22 -0
  77. data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_text_rois.rb +8 -0
  78. data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_video_rois.rb +8 -0
  79. data/lib/User_Lib/rois/mobile/android/android_text_rois.rb +8 -0
  80. data/lib/User_Lib/rois/mobile/android/android_video_rois.rb +8 -0
  81. data/lib/User_Lib/rois/mobile/ios/ios_black_rois.rb +8 -0
  82. data/lib/User_Lib/rois/mobile/ios/ios_color_rois.rb +8 -0
  83. data/lib/User_Lib/rois/mobile/ios/ios_image_rois.rb +8 -0
  84. data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_black_rois.rb +8 -0
  85. data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_color_rois.rb +8 -0
  86. data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_image_rois.rb +8 -0
  87. data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_rois.rb +22 -0
  88. data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_text_rois.rb +8 -0
  89. data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_video_rois.rb +8 -0
  90. data/lib/User_Lib/rois/mobile/ios/ios_rois.rb +22 -0
  91. data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_black_rois.rb +8 -0
  92. data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_color_rois.rb +8 -0
  93. data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_image_rois.rb +8 -0
  94. data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_rois.rb +22 -0
  95. data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_text_rois.rb +8 -0
  96. data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_video_rois.rb +8 -0
  97. data/lib/User_Lib/rois/mobile/ios/ios_text_rois.rb +8 -0
  98. data/lib/User_Lib/rois/mobile/ios/ios_video_rois.rb +8 -0
  99. data/lib/User_Lib/rois/mobile/mobile_black_rois.rb +8 -0
  100. data/lib/User_Lib/rois/mobile/mobile_color_rois.rb +12 -0
  101. data/lib/User_Lib/rois/mobile/mobile_image_rois.rb +38 -0
  102. data/lib/User_Lib/rois/mobile/mobile_rois.rb +22 -0
  103. data/lib/User_Lib/rois/mobile/mobile_text_rois.rb +8 -0
  104. data/lib/User_Lib/rois/mobile/mobile_video_rois.rb +8 -0
  105. data/lib/User_Lib/rois/passport/passport_1080/passport_1080_black_rois.rb +7 -0
  106. data/lib/User_Lib/rois/passport/passport_1080/passport_1080_color_rois.rb +9 -0
  107. data/lib/User_Lib/rois/passport/passport_1080/passport_1080_image_rois.rb +7 -0
  108. data/lib/User_Lib/rois/passport/passport_1080/passport_1080_rois.rb +23 -0
  109. data/lib/User_Lib/rois/passport/passport_1080/passport_1080_text_rois.rb +8 -0
  110. data/lib/User_Lib/rois/passport/passport_1080/passport_1080_video_rois.rb +8 -0
  111. data/lib/User_Lib/rois/passport/passport_720/passport_720_black_rois.rb +7 -0
  112. data/lib/User_Lib/rois/passport/passport_720/passport_720_color_rois.rb +7 -0
  113. data/lib/User_Lib/rois/passport/passport_720/passport_720_image_rois.rb +7 -0
  114. data/lib/User_Lib/rois/passport/passport_720/passport_720_rois.rb +23 -0
  115. data/lib/User_Lib/rois/passport/passport_720/passport_720_text_rois.rb +7 -0
  116. data/lib/User_Lib/rois/passport/passport_720/passport_720_video_rois.rb +7 -0
  117. data/lib/User_Lib/rois/passport/passport_black_rois.rb +7 -0
  118. data/lib/User_Lib/rois/passport/passport_color_rois.rb +7 -0
  119. data/lib/User_Lib/rois/passport/passport_image_rois.rb +7 -0
  120. data/lib/User_Lib/rois/passport/passport_rois.rb +23 -0
  121. data/lib/User_Lib/rois/passport/passport_text_rois.rb +7 -0
  122. data/lib/User_Lib/rois/passport/passport_video_rois.rb +7 -0
  123. data/lib/User_Lib/rois/rois.rb +22 -0
  124. data/lib/User_Lib/rois/roku/roku_720/roku_720_black_rois.rb +37 -0
  125. data/lib/User_Lib/rois/roku/roku_720/roku_720_color_rois.rb +336 -0
  126. data/lib/User_Lib/rois/roku/roku_720/roku_720_image_rois.rb +235 -0
  127. data/lib/User_Lib/rois/roku/roku_720/roku_720_rois.rb +23 -0
  128. data/lib/User_Lib/rois/roku/roku_720/roku_720_text_rois.rb +1523 -0
  129. data/lib/User_Lib/rois/roku/roku_720/roku_720_video_rois.rb +32 -0
  130. data/lib/User_Lib/rois/roku/roku_black_rois.rb +14 -0
  131. data/lib/User_Lib/rois/roku/roku_color_rois.rb +9 -0
  132. data/lib/User_Lib/rois/roku/roku_image_rois.rb +13 -0
  133. data/lib/User_Lib/rois/roku/roku_rois.rb +23 -0
  134. data/lib/User_Lib/rois/roku/roku_text_rois.rb +9 -0
  135. data/lib/User_Lib/rois/roku/roku_video_rois.rb +9 -0
  136. data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_black_rois.rb +12 -0
  137. data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_color_rois.rb +11 -0
  138. data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_image_rois.rb +12 -0
  139. data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_rois.rb +23 -0
  140. data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_text_rois.rb +12 -0
  141. data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_video_rois.rb +12 -0
  142. data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_black_rois.rb +12 -0
  143. data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_color_rois.rb +12 -0
  144. data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_image_rois.rb +12 -0
  145. data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_rois.rb +23 -0
  146. data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_text_rois.rb +12 -0
  147. data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_video_rois.rb +12 -0
  148. data/lib/User_Lib/rois/roku_tv/roku_tv_black_rois.rb +12 -0
  149. data/lib/User_Lib/rois/roku_tv/roku_tv_color_rois.rb +12 -0
  150. data/lib/User_Lib/rois/roku_tv/roku_tv_image_rois.rb +12 -0
  151. data/lib/User_Lib/rois/roku_tv/roku_tv_rois.rb +23 -0
  152. data/lib/User_Lib/rois/roku_tv/roku_tv_text_rois.rb +12 -0
  153. data/lib/User_Lib/rois/roku_tv/roku_tv_video_rois.rb +12 -0
  154. data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_black_rois.rb +13 -0
  155. data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_color_rois.rb +29 -0
  156. data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_image_rois.rb +9 -0
  157. data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_rois.rb +23 -0
  158. data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_text_rois.rb +92 -0
  159. data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_video_rois.rb +11 -0
  160. data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_black_rois.rb +9 -0
  161. data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_color_rois.rb +9 -0
  162. data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_image_rois.rb +9 -0
  163. data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_rois.rb +23 -0
  164. data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_text_rois.rb +12 -0
  165. data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_video_rois.rb +11 -0
  166. data/lib/User_Lib/rois/samsung_tv/samsung_tv_black_rois.rb +9 -0
  167. data/lib/User_Lib/rois/samsung_tv/samsung_tv_color_rois.rb +9 -0
  168. data/lib/User_Lib/rois/samsung_tv/samsung_tv_image_rois.rb +9 -0
  169. data/lib/User_Lib/rois/samsung_tv/samsung_tv_rois.rb +23 -0
  170. data/lib/User_Lib/rois/samsung_tv/samsung_tv_text_rois.rb +12 -0
  171. data/lib/User_Lib/rois/samsung_tv/samsung_tv_video_rois.rb +9 -0
  172. data/lib/User_Lib/rois/sara/sara_1080/sara_1080_black_rois.rb +8 -0
  173. data/lib/User_Lib/rois/sara/sara_1080/sara_1080_color_rois.rb +8 -0
  174. data/lib/User_Lib/rois/sara/sara_1080/sara_1080_image_rois.rb +8 -0
  175. data/lib/User_Lib/rois/sara/sara_1080/sara_1080_rois.rb +26 -0
  176. data/lib/User_Lib/rois/sara/sara_1080/sara_1080_text_rois.rb +8 -0
  177. data/lib/User_Lib/rois/sara/sara_1080/sara_1080_video_rois.rb +8 -0
  178. data/lib/User_Lib/rois/sara/sara_720/sara_720_black_rois.rb +8 -0
  179. data/lib/User_Lib/rois/sara/sara_720/sara_720_color_rois.rb +8 -0
  180. data/lib/User_Lib/rois/sara/sara_720/sara_720_image_rois.rb +8 -0
  181. data/lib/User_Lib/rois/sara/sara_720/sara_720_rois.rb +26 -0
  182. data/lib/User_Lib/rois/sara/sara_720/sara_720_text_rois.rb +8 -0
  183. data/lib/User_Lib/rois/sara/sara_720/sara_720_video_rois.rb +8 -0
  184. data/lib/User_Lib/rois/sara/sara_black_rois.rb +9 -0
  185. data/lib/User_Lib/rois/sara/sara_color_rois.rb +9 -0
  186. data/lib/User_Lib/rois/sara/sara_image_rois.rb +9 -0
  187. data/lib/User_Lib/rois/sara/sara_rois.rb +26 -0
  188. data/lib/User_Lib/rois/sara/sara_text_rois.rb +9 -0
  189. data/lib/User_Lib/rois/sara/sara_video_rois.rb +9 -0
  190. data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_black_rois.rb +9 -0
  191. data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_color_rois.rb +17 -0
  192. data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_image_rois.rb +19 -0
  193. data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_rois.rb +23 -0
  194. data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_text_rois.rb +47 -0
  195. data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_video_rois.rb +23 -0
  196. data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_black_rois.rb +9 -0
  197. data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_color_rois.rb +9 -0
  198. data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_image_rois.rb +9 -0
  199. data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_rois.rb +23 -0
  200. data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_text_rois.rb +17 -0
  201. data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_video_rois.rb +11 -0
  202. data/lib/User_Lib/rois/stb/iguide/iguide_black_rois.rb +9 -0
  203. data/lib/User_Lib/rois/stb/iguide/iguide_color_rois.rb +9 -0
  204. data/lib/User_Lib/rois/stb/iguide/iguide_image_rois.rb +9 -0
  205. data/lib/User_Lib/rois/stb/iguide/iguide_rois.rb +23 -0
  206. data/lib/User_Lib/rois/stb/iguide/iguide_text_rois.rb +9 -0
  207. data/lib/User_Lib/rois/stb/iguide/iguide_video_rois.rb +9 -0
  208. data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_black_rois.rb +8 -0
  209. data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_color_rois.rb +8 -0
  210. data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_image_rois.rb +12 -0
  211. data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_rois.rb +23 -0
  212. data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_text_rois.rb +23 -0
  213. data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_video_rois.rb +11 -0
  214. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_black_rois.rb +46 -0
  215. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_color_rois.rb +142 -0
  216. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_image_rois.rb +103 -0
  217. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_black_rois.rb +6 -0
  218. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_color_rois.rb +6 -0
  219. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_image_rois.rb +6 -0
  220. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_rois.rb +23 -0
  221. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_text_rois.rb +7 -0
  222. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_video_rois.rb +7 -0
  223. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_rois.rb +23 -0
  224. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_black_rois.rb +6 -0
  225. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_color_rois.rb +6 -0
  226. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_image_rois.rb +6 -0
  227. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_rois.rb +23 -0
  228. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_text_rois.rb +7 -0
  229. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_video_rois.rb +7 -0
  230. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_black_rois.rb +6 -0
  231. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_color_rois.rb +77 -0
  232. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_image_rois.rb +67 -0
  233. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_rois.rb +23 -0
  234. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_text_rois.rb +159 -0
  235. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_video_rois.rb +17 -0
  236. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_text_rois.rb +221 -0
  237. data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_video_rois.rb +26 -0
  238. data/lib/User_Lib/rois/stb/odn/odn_black_rois.rb +10 -0
  239. data/lib/User_Lib/rois/stb/odn/odn_color_rois.rb +10 -0
  240. data/lib/User_Lib/rois/stb/odn/odn_image_rois.rb +58 -0
  241. data/lib/User_Lib/rois/stb/odn/odn_rois.rb +23 -0
  242. data/lib/User_Lib/rois/stb/odn/odn_text_rois.rb +70 -0
  243. data/lib/User_Lib/rois/stb/odn/odn_video_rois.rb +19 -0
  244. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_black_rois.rb +16 -0
  245. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_color_rois.rb +373 -0
  246. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_black_rois.rb +7 -0
  247. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_color_rois.rb +7 -0
  248. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_image_rois.rb +7 -0
  249. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_rois.rb +23 -0
  250. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_text_rois.rb +7 -0
  251. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_video_rois.rb +7 -0
  252. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_black_rois.rb +8 -0
  253. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_color_rois.rb +8 -0
  254. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_image_rois.rb +8 -0
  255. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_rois.rb +26 -0
  256. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_text_rois.rb +8 -0
  257. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_video_rois.rb +8 -0
  258. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_black_rois.rb +8 -0
  259. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_color_rois.rb +8 -0
  260. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_image_rois.rb +8 -0
  261. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_rois.rb +26 -0
  262. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_text_rois.rb +8 -0
  263. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_video_rois.rb +8 -0
  264. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_black_rois.rb +8 -0
  265. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_color_rois.rb +8 -0
  266. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_image_rois.rb +8 -0
  267. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_rois.rb +26 -0
  268. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_text_rois.rb +8 -0
  269. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_video_rois.rb +8 -0
  270. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_image_rois.rb +1592 -0
  271. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_black_rois.rb +7 -0
  272. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_color_rois.rb +7 -0
  273. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_image_rois.rb +7 -0
  274. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_rois.rb +23 -0
  275. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_text_rois.rb +7 -0
  276. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_video_rois.rb +7 -0
  277. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_rois.rb +23 -0
  278. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_text_rois.rb +2489 -0
  279. data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_video_rois.rb +64 -0
  280. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_black_rois.rb +7 -0
  281. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_color_rois.rb +63 -0
  282. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_black_rois.rb +8 -0
  283. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_color_rois.rb +8 -0
  284. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_image_rois.rb +8 -0
  285. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_rois.rb +26 -0
  286. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_text_rois.rb +8 -0
  287. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_video_rois.rb +8 -0
  288. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_black_rois.rb +8 -0
  289. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_color_rois.rb +8 -0
  290. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_image_rois.rb +8 -0
  291. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_rois.rb +26 -0
  292. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_text_rois.rb +8 -0
  293. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_video_rois.rb +8 -0
  294. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_black_rois.rb +8 -0
  295. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_color_rois.rb +8 -0
  296. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_image_rois.rb +8 -0
  297. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_rois.rb +26 -0
  298. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_text_rois.rb +8 -0
  299. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_video_rois.rb +8 -0
  300. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_image_rois.rb +117 -0
  301. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_rois.rb +23 -0
  302. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_text_rois.rb +84 -0
  303. data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_video_rois.rb +35 -0
  304. data/lib/User_Lib/rois/stb/spectrum/spectrum_black_rois.rb +9 -0
  305. data/lib/User_Lib/rois/stb/spectrum/spectrum_color_rois.rb +17 -0
  306. data/lib/User_Lib/rois/stb/spectrum/spectrum_image_rois.rb +49 -0
  307. data/lib/User_Lib/rois/stb/spectrum/spectrum_rois.rb +23 -0
  308. data/lib/User_Lib/rois/stb/spectrum/spectrum_text_rois.rb +51 -0
  309. data/lib/User_Lib/rois/stb/spectrum/spectrum_video_rois.rb +9 -0
  310. data/lib/User_Lib/rois/stb/stb_black_rois.rb +9 -0
  311. data/lib/User_Lib/rois/stb/stb_color_rois.rb +9 -0
  312. data/lib/User_Lib/rois/stb/stb_image_rois.rb +9 -0
  313. data/lib/User_Lib/rois/stb/stb_rois.rb +23 -0
  314. data/lib/User_Lib/rois/stb/stb_text_rois.rb +9 -0
  315. data/lib/User_Lib/rois/stb/stb_video_rois.rb +9 -0
  316. data/lib/User_Lib/rois/template.txt +23 -0
  317. data/lib/User_Lib/rois/text_rois.rb +36 -0
  318. data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_black_rois.rb +7 -0
  319. data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_color_rois.rb +9 -0
  320. data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_image_rois.rb +7 -0
  321. data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_rois.rb +23 -0
  322. data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_text_rois.rb +9 -0
  323. data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_video_rois.rb +7 -0
  324. data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_black_rois.rb +7 -0
  325. data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_color_rois.rb +7 -0
  326. data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_image_rois.rb +7 -0
  327. data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_rois.rb +23 -0
  328. data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_text_rois.rb +7 -0
  329. data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_video_rois.rb +7 -0
  330. data/lib/User_Lib/rois/tivo/tivo_black_rois.rb +7 -0
  331. data/lib/User_Lib/rois/tivo/tivo_color_rois.rb +7 -0
  332. data/lib/User_Lib/rois/tivo/tivo_image_rois.rb +7 -0
  333. data/lib/User_Lib/rois/tivo/tivo_rois.rb +23 -0
  334. data/lib/User_Lib/rois/tivo/tivo_text_rois.rb +7 -0
  335. data/lib/User_Lib/rois/tivo/tivo_video_rois.rb +7 -0
  336. data/lib/User_Lib/rois/video_rois.rb +33 -0
  337. data/lib/User_Lib/screen/apple_tv/apple_tv_dvr.rb +25 -0
  338. data/lib/User_Lib/screen/apple_tv/apple_tv_guide.rb +25 -0
  339. data/lib/User_Lib/screen/apple_tv/apple_tv_library.rb +25 -0
  340. data/lib/User_Lib/screen/apple_tv/apple_tv_live_tv.rb +17 -0
  341. data/lib/User_Lib/screen/apple_tv/apple_tv_login.rb +24 -0
  342. data/lib/User_Lib/screen/apple_tv/apple_tv_main_menu.rb +25 -0
  343. data/lib/User_Lib/screen/apple_tv/apple_tv_mini_guide.rb +25 -0
  344. data/lib/User_Lib/screen/apple_tv/apple_tv_movies.rb +25 -0
  345. data/lib/User_Lib/screen/apple_tv/apple_tv_on_demand.rb +25 -0
  346. data/lib/User_Lib/screen/apple_tv/apple_tv_parental_controls.rb +25 -0
  347. data/lib/User_Lib/screen/apple_tv/apple_tv_product_page.rb +25 -0
  348. data/lib/User_Lib/screen/apple_tv/apple_tv_screen.rb +23 -0
  349. data/lib/User_Lib/screen/apple_tv/apple_tv_search.rb +31 -0
  350. data/lib/User_Lib/screen/apple_tv/apple_tv_settings.rb +25 -0
  351. data/lib/User_Lib/screen/apple_tv/apple_tv_tv_shows.rb +25 -0
  352. data/lib/User_Lib/screen/apple_tv/apple_tv_video_store.rb +25 -0
  353. data/lib/User_Lib/screen/dta/dta_dvr.rb +26 -0
  354. data/lib/User_Lib/screen/dta/dta_guide.rb +26 -0
  355. data/lib/User_Lib/screen/dta/dta_library.rb +26 -0
  356. data/lib/User_Lib/screen/dta/dta_live_tv.rb +26 -0
  357. data/lib/User_Lib/screen/dta/dta_log_in.rb +26 -0
  358. data/lib/User_Lib/screen/dta/dta_main_menu.rb +26 -0
  359. data/lib/User_Lib/screen/dta/dta_mini_guide.rb +26 -0
  360. data/lib/User_Lib/screen/dta/dta_movies.rb +26 -0
  361. data/lib/User_Lib/screen/dta/dta_on_demand.rb +26 -0
  362. data/lib/User_Lib/screen/dta/dta_parental_controls.rb +26 -0
  363. data/lib/User_Lib/screen/dta/dta_product_page.rb +26 -0
  364. data/lib/User_Lib/screen/dta/dta_screen.rb +24 -0
  365. data/lib/User_Lib/screen/dta/dta_search.rb +26 -0
  366. data/lib/User_Lib/screen/dta/dta_settings.rb +26 -0
  367. data/lib/User_Lib/screen/dta/dta_tv_shows.rb +26 -0
  368. data/lib/User_Lib/screen/dta/dta_video_store.rb +26 -0
  369. data/lib/User_Lib/screen/mdn/mdn_dvr.rb +26 -0
  370. data/lib/User_Lib/screen/mdn/mdn_guide.rb +26 -0
  371. data/lib/User_Lib/screen/mdn/mdn_library.rb +26 -0
  372. data/lib/User_Lib/screen/mdn/mdn_live_tv.rb +26 -0
  373. data/lib/User_Lib/screen/mdn/mdn_log_in.rb +26 -0
  374. data/lib/User_Lib/screen/mdn/mdn_main_menu.rb +26 -0
  375. data/lib/User_Lib/screen/mdn/mdn_mini_guide.rb +26 -0
  376. data/lib/User_Lib/screen/mdn/mdn_movies.rb +26 -0
  377. data/lib/User_Lib/screen/mdn/mdn_on_demand.rb +26 -0
  378. data/lib/User_Lib/screen/mdn/mdn_parental_controls.rb +26 -0
  379. data/lib/User_Lib/screen/mdn/mdn_product_page.rb +26 -0
  380. data/lib/User_Lib/screen/mdn/mdn_screen.rb +24 -0
  381. data/lib/User_Lib/screen/mdn/mdn_search.rb +26 -0
  382. data/lib/User_Lib/screen/mdn/mdn_settings.rb +26 -0
  383. data/lib/User_Lib/screen/mdn/mdn_tv_shows.rb +26 -0
  384. data/lib/User_Lib/screen/mdn/mdn_video_store.rb +26 -0
  385. data/lib/User_Lib/screen/mobile/android/android_devices.rb +35 -0
  386. data/lib/User_Lib/screen/mobile/android/android_dvr.rb +337 -0
  387. data/lib/User_Lib/screen/mobile/android/android_favorites.rb +164 -0
  388. data/lib/User_Lib/screen/mobile/android/android_guide.rb +256 -0
  389. data/lib/User_Lib/screen/mobile/android/android_live_tv.rb +372 -0
  390. data/lib/User_Lib/screen/mobile/android/android_login.rb +111 -0
  391. data/lib/User_Lib/screen/mobile/android/android_main_menu.rb +53 -0
  392. data/lib/User_Lib/screen/mobile/android/android_on_demand.rb +402 -0
  393. data/lib/User_Lib/screen/mobile/android/android_parental_controls.rb +73 -0
  394. data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_dvr.rb +31 -0
  395. data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_guide.rb +39 -0
  396. data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_live_tv.rb +104 -0
  397. data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_main_menu.rb +27 -0
  398. data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_on_demand.rb +35 -0
  399. data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_product_page.rb +7 -0
  400. data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_search.rb +26 -0
  401. data/lib/User_Lib/screen/mobile/android/android_privacy_legal.rb +54 -0
  402. data/lib/User_Lib/screen/mobile/android/android_product_page.rb +484 -0
  403. data/lib/User_Lib/screen/mobile/android/android_screen.rb +56 -0
  404. data/lib/User_Lib/screen/mobile/android/android_search.rb +39 -0
  405. data/lib/User_Lib/screen/mobile/android/android_settings.rb +90 -0
  406. data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_dvr.rb +58 -0
  407. data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_guide.rb +24 -0
  408. data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_live_tv.rb +24 -0
  409. data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_main_menu.rb +19 -0
  410. data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_on_demand.rb +16 -0
  411. data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_product_page.rb +45 -0
  412. data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_search.rb +14 -0
  413. data/lib/User_Lib/screen/mobile/devices_mobile.rb +53 -0
  414. data/lib/User_Lib/screen/mobile/dvr_mobile.rb +5 -0
  415. data/lib/User_Lib/screen/mobile/favorites_mobile.rb +5 -0
  416. data/lib/User_Lib/screen/mobile/guide_mobile.rb +5 -0
  417. data/lib/User_Lib/screen/mobile/ios/ios_devices.rb +43 -0
  418. data/lib/User_Lib/screen/mobile/ios/ios_dvr.rb +231 -0
  419. data/lib/User_Lib/screen/mobile/ios/ios_favorites.rb +79 -0
  420. data/lib/User_Lib/screen/mobile/ios/ios_guide.rb +53 -0
  421. data/lib/User_Lib/screen/mobile/ios/ios_live_tv.rb +413 -0
  422. data/lib/User_Lib/screen/mobile/ios/ios_login.rb +76 -0
  423. data/lib/User_Lib/screen/mobile/ios/ios_main_menu.rb +38 -0
  424. data/lib/User_Lib/screen/mobile/ios/ios_on_demand.rb +371 -0
  425. data/lib/User_Lib/screen/mobile/ios/ios_parental_controls.rb +104 -0
  426. data/lib/User_Lib/screen/mobile/ios/ios_phone/ios_phone_dvr.rb +14 -0
  427. data/lib/User_Lib/screen/mobile/ios/ios_phone/ios_phone_live_tv.rb +36 -0
  428. data/lib/User_Lib/screen/mobile/ios/ios_phone/ios_phone_main_menu.rb +7 -0
  429. data/lib/User_Lib/screen/mobile/ios/ios_phone/ios_phone_on_demand.rb +7 -0
  430. data/lib/User_Lib/screen/mobile/ios/ios_phone/ios_phone_search.rb +13 -0
  431. data/lib/User_Lib/screen/mobile/ios/ios_privacy_legal.rb +56 -0
  432. data/lib/User_Lib/screen/mobile/ios/ios_product_page.rb +441 -0
  433. data/lib/User_Lib/screen/mobile/ios/ios_screen.rb +60 -0
  434. data/lib/User_Lib/screen/mobile/ios/ios_search.rb +145 -0
  435. data/lib/User_Lib/screen/mobile/ios/ios_settings.rb +34 -0
  436. data/lib/User_Lib/screen/mobile/ios/ios_tablet/ios_tablet_live_tv.rb +34 -0
  437. data/lib/User_Lib/screen/mobile/ios/ios_tablet/ios_tablet_main_menu.rb +7 -0
  438. data/lib/User_Lib/screen/mobile/ios/ios_tablet/ios_tablet_on_demand.rb +7 -0
  439. data/lib/User_Lib/screen/mobile/ios/ios_tablet/ios_tablet_search.rb +13 -0
  440. data/lib/User_Lib/screen/mobile/live_tv_mobile.rb +73 -0
  441. data/lib/User_Lib/screen/mobile/login_mobile.rb +5 -0
  442. data/lib/User_Lib/screen/mobile/main_menu_mobile.rb +83 -0
  443. data/lib/User_Lib/screen/mobile/mobile_screen.rb +232 -0
  444. data/lib/User_Lib/screen/mobile/on_demand_mobile.rb +70 -0
  445. data/lib/User_Lib/screen/mobile/parental_controls_mobile.rb +5 -0
  446. data/lib/User_Lib/screen/mobile/privacy_legal_mobile.rb +5 -0
  447. data/lib/User_Lib/screen/mobile/product_page_mobile.rb +5 -0
  448. data/lib/User_Lib/screen/mobile/search_mobile.rb +5 -0
  449. data/lib/User_Lib/screen/mobile/settings_mobile.rb +33 -0
  450. data/lib/User_Lib/screen/passport/passport_dvr.rb +25 -0
  451. data/lib/User_Lib/screen/passport/passport_guide.rb +37 -0
  452. data/lib/User_Lib/screen/passport/passport_library.rb +25 -0
  453. data/lib/User_Lib/screen/passport/passport_live_tv.rb +17 -0
  454. data/lib/User_Lib/screen/passport/passport_main_menu.rb +25 -0
  455. data/lib/User_Lib/screen/passport/passport_mini_guide.rb +25 -0
  456. data/lib/User_Lib/screen/passport/passport_movies.rb +25 -0
  457. data/lib/User_Lib/screen/passport/passport_on_demand.rb +25 -0
  458. data/lib/User_Lib/screen/passport/passport_parental_controls.rb +25 -0
  459. data/lib/User_Lib/screen/passport/passport_product_page.rb +25 -0
  460. data/lib/User_Lib/screen/passport/passport_screen.rb +23 -0
  461. data/lib/User_Lib/screen/passport/passport_search.rb +25 -0
  462. data/lib/User_Lib/screen/passport/passport_settings.rb +25 -0
  463. data/lib/User_Lib/screen/passport/passport_tv_shows.rb +25 -0
  464. data/lib/User_Lib/screen/passport/passport_video_store.rb +25 -0
  465. data/lib/User_Lib/screen/roku/brs/roku_guide_brs.rb +12 -0
  466. data/lib/User_Lib/screen/roku/brs/roku_home_brs.rb +12 -0
  467. data/lib/User_Lib/screen/roku/brs/roku_live_tv_brs.rb +12 -0
  468. data/lib/User_Lib/screen/roku/brs/roku_login_brs.rb +103 -0
  469. data/lib/User_Lib/screen/roku/brs/roku_main_menu_brs.rb +46 -0
  470. data/lib/User_Lib/screen/roku/brs/roku_on_demand_brs.rb +12 -0
  471. data/lib/User_Lib/screen/roku/brs/roku_product_page_brs.rb +12 -0
  472. data/lib/User_Lib/screen/roku/brs/roku_screen_brs.rb +9 -0
  473. data/lib/User_Lib/screen/roku/brs/roku_search_brs.rb +12 -0
  474. data/lib/User_Lib/screen/roku/brs/roku_settings_brs.rb +42 -0
  475. data/lib/User_Lib/screen/roku/brs/roku_watch_later_brs.rb +12 -0
  476. data/lib/User_Lib/screen/roku/brs/roku_welcome_brs.rb +12 -0
  477. data/lib/User_Lib/screen/roku/roku_dvr.rb +7 -0
  478. data/lib/User_Lib/screen/roku/roku_guide.rb +590 -0
  479. data/lib/User_Lib/screen/roku/roku_home.rb +346 -0
  480. data/lib/User_Lib/screen/roku/roku_library.rb +26 -0
  481. data/lib/User_Lib/screen/roku/roku_live_tv.rb +210 -0
  482. data/lib/User_Lib/screen/roku/roku_login.rb +795 -0
  483. data/lib/User_Lib/screen/roku/roku_main_menu.rb +425 -0
  484. data/lib/User_Lib/screen/roku/roku_mini_guide.rb +7 -0
  485. data/lib/User_Lib/screen/roku/roku_on_demand.rb +479 -0
  486. data/lib/User_Lib/screen/roku/roku_product_page.rb +483 -0
  487. data/lib/User_Lib/screen/roku/roku_screen.rb +85 -0
  488. data/lib/User_Lib/screen/roku/roku_search.rb +229 -0
  489. data/lib/User_Lib/screen/roku/roku_settings.rb +304 -0
  490. data/lib/User_Lib/screen/roku/roku_watch_later.rb +51 -0
  491. data/lib/User_Lib/screen/roku/roku_welcome.rb +10 -0
  492. data/lib/User_Lib/screen/roku_tv/roku_tv_dvr.rb +14 -0
  493. data/lib/User_Lib/screen/roku_tv/roku_tv_guide.rb +14 -0
  494. data/lib/User_Lib/screen/roku_tv/roku_tv_home.rb +14 -0
  495. data/lib/User_Lib/screen/roku_tv/roku_tv_library.rb +14 -0
  496. data/lib/User_Lib/screen/roku_tv/roku_tv_live_tv.rb +14 -0
  497. data/lib/User_Lib/screen/roku_tv/roku_tv_login.rb +14 -0
  498. data/lib/User_Lib/screen/roku_tv/roku_tv_main_menu.rb +14 -0
  499. data/lib/User_Lib/screen/roku_tv/roku_tv_mini_guide.rb +14 -0
  500. data/lib/User_Lib/screen/roku_tv/roku_tv_on_demand.rb +26 -0
  501. data/lib/User_Lib/screen/roku_tv/roku_tv_product_page.rb +14 -0
  502. data/lib/User_Lib/screen/roku_tv/roku_tv_screen.rb +7 -0
  503. data/lib/User_Lib/screen/roku_tv/roku_tv_search.rb +14 -0
  504. data/lib/User_Lib/screen/roku_tv/roku_tv_settings.rb +14 -0
  505. data/lib/User_Lib/screen/roku_tv/roku_tv_watch_later.rb +14 -0
  506. data/lib/User_Lib/screen/roku_tv/roku_tv_welcome.rb +14 -0
  507. data/lib/User_Lib/screen/samsung_tv/samsung_tv_dvr.rb +24 -0
  508. data/lib/User_Lib/screen/samsung_tv/samsung_tv_guide.rb +24 -0
  509. data/lib/User_Lib/screen/samsung_tv/samsung_tv_library.rb +24 -0
  510. data/lib/User_Lib/screen/samsung_tv/samsung_tv_live_tv.rb +21 -0
  511. data/lib/User_Lib/screen/samsung_tv/samsung_tv_login.rb +13 -0
  512. data/lib/User_Lib/screen/samsung_tv/samsung_tv_main_menu.rb +64 -0
  513. data/lib/User_Lib/screen/samsung_tv/samsung_tv_mini_guide.rb +24 -0
  514. data/lib/User_Lib/screen/samsung_tv/samsung_tv_movies.rb +140 -0
  515. data/lib/User_Lib/screen/samsung_tv/samsung_tv_on_demand.rb +76 -0
  516. data/lib/User_Lib/screen/samsung_tv/samsung_tv_parental_controls.rb +24 -0
  517. data/lib/User_Lib/screen/samsung_tv/samsung_tv_product_page.rb +24 -0
  518. data/lib/User_Lib/screen/samsung_tv/samsung_tv_screen.rb +74 -0
  519. data/lib/User_Lib/screen/samsung_tv/samsung_tv_search.rb +29 -0
  520. data/lib/User_Lib/screen/samsung_tv/samsung_tv_settings.rb +189 -0
  521. data/lib/User_Lib/screen/samsung_tv/samsung_tv_tv_shows.rb +24 -0
  522. data/lib/User_Lib/screen/samsung_tv/samsung_tv_video_store.rb +24 -0
  523. data/lib/User_Lib/screen/sara/sara_dvr.rb +26 -0
  524. data/lib/User_Lib/screen/sara/sara_guide.rb +43 -0
  525. data/lib/User_Lib/screen/sara/sara_library.rb +26 -0
  526. data/lib/User_Lib/screen/sara/sara_live_tv.rb +26 -0
  527. data/lib/User_Lib/screen/sara/sara_log_in.rb +26 -0
  528. data/lib/User_Lib/screen/sara/sara_main_menu.rb +26 -0
  529. data/lib/User_Lib/screen/sara/sara_mini_guide.rb +26 -0
  530. data/lib/User_Lib/screen/sara/sara_movies.rb +26 -0
  531. data/lib/User_Lib/screen/sara/sara_on_demand.rb +26 -0
  532. data/lib/User_Lib/screen/sara/sara_parental_controls.rb +26 -0
  533. data/lib/User_Lib/screen/sara/sara_product_page.rb +26 -0
  534. data/lib/User_Lib/screen/sara/sara_screen.rb +24 -0
  535. data/lib/User_Lib/screen/sara/sara_search.rb +26 -0
  536. data/lib/User_Lib/screen/sara/sara_settings.rb +26 -0
  537. data/lib/User_Lib/screen/sara/sara_tv_shows.rb +26 -0
  538. data/lib/User_Lib/screen/sara/sara_video_store.rb +26 -0
  539. data/lib/User_Lib/screen/stb/iguide/iguide_devices.rb +10 -0
  540. data/lib/User_Lib/screen/stb/iguide/iguide_dvr.rb +10 -0
  541. data/lib/User_Lib/screen/stb/iguide/iguide_favorites.rb +10 -0
  542. data/lib/User_Lib/screen/stb/iguide/iguide_guide.rb +39 -0
  543. data/lib/User_Lib/screen/stb/iguide/iguide_home.rb +10 -0
  544. data/lib/User_Lib/screen/stb/iguide/iguide_library.rb +10 -0
  545. data/lib/User_Lib/screen/stb/iguide/iguide_live_tv.rb +59 -0
  546. data/lib/User_Lib/screen/stb/iguide/iguide_login.rb +10 -0
  547. data/lib/User_Lib/screen/stb/iguide/iguide_main_menu.rb +10 -0
  548. data/lib/User_Lib/screen/stb/iguide/iguide_mini_guide.rb +10 -0
  549. data/lib/User_Lib/screen/stb/iguide/iguide_movies.rb +10 -0
  550. data/lib/User_Lib/screen/stb/iguide/iguide_on_demand.rb +531 -0
  551. data/lib/User_Lib/screen/stb/iguide/iguide_parental_controls.rb +10 -0
  552. data/lib/User_Lib/screen/stb/iguide/iguide_privacy_legal.rb +10 -0
  553. data/lib/User_Lib/screen/stb/iguide/iguide_product_page.rb +10 -0
  554. data/lib/User_Lib/screen/stb/iguide/iguide_quick_menu.rb +7 -0
  555. data/lib/User_Lib/screen/stb/iguide/iguide_screen.rb +21 -0
  556. data/lib/User_Lib/screen/stb/iguide/iguide_search.rb +10 -0
  557. data/lib/User_Lib/screen/stb/iguide/iguide_settings.rb +10 -0
  558. data/lib/User_Lib/screen/stb/iguide/iguide_tv_shows.rb +10 -0
  559. data/lib/User_Lib/screen/stb/iguide/iguide_video_store.rb +10 -0
  560. data/lib/User_Lib/screen/stb/login_stb.rb +5 -0
  561. data/lib/User_Lib/screen/stb/odn/odn_dvr.rb +59 -0
  562. data/lib/User_Lib/screen/stb/odn/odn_favorites.rb +8 -0
  563. data/lib/User_Lib/screen/stb/odn/odn_guide.rb +177 -0
  564. data/lib/User_Lib/screen/stb/odn/odn_live_tv.rb +115 -0
  565. data/lib/User_Lib/screen/stb/odn/odn_login.rb +8 -0
  566. data/lib/User_Lib/screen/stb/odn/odn_main_menu.rb +175 -0
  567. data/lib/User_Lib/screen/stb/odn/odn_on_demand.rb +1170 -0
  568. data/lib/User_Lib/screen/stb/odn/odn_on_demand_kids.rb +23 -0
  569. data/lib/User_Lib/screen/stb/odn/odn_on_demand_left_menu.rb +180 -0
  570. data/lib/User_Lib/screen/stb/odn/odn_parental_controls.rb +9 -0
  571. data/lib/User_Lib/screen/stb/odn/odn_product_page.rb +8 -0
  572. data/lib/User_Lib/screen/stb/odn/odn_screen.rb +111 -0
  573. data/lib/User_Lib/screen/stb/odn/odn_search.rb +167 -0
  574. data/lib/User_Lib/screen/stb/odn/odn_settings.rb +142 -0
  575. data/lib/User_Lib/screen/stb/spectrum/spectrum_diagnostics.rb +27 -0
  576. data/lib/User_Lib/screen/stb/spectrum/spectrum_docsis/screen_spectrum_docsis.rb +12 -0
  577. data/lib/User_Lib/screen/stb/spectrum/spectrum_docsis/spectrum_1080_docsis_guide.rb +10 -0
  578. data/lib/User_Lib/screen/stb/spectrum/spectrum_docsis/spectrum_1080_docsis_main_menu.rb +10 -0
  579. data/lib/User_Lib/screen/stb/spectrum/spectrum_docsis/spectrum_1080_docsis_settings.rb +10 -0
  580. data/lib/User_Lib/screen/stb/spectrum/spectrum_dvr.rb +1781 -0
  581. data/lib/User_Lib/screen/stb/spectrum/spectrum_guide.rb +841 -0
  582. data/lib/User_Lib/screen/stb/spectrum/spectrum_library.rb +384 -0
  583. data/lib/User_Lib/screen/stb/spectrum/spectrum_live_tv.rb +259 -0
  584. data/lib/User_Lib/screen/stb/spectrum/spectrum_main_menu.rb +223 -0
  585. data/lib/User_Lib/screen/stb/spectrum/spectrum_mini_guide.rb +404 -0
  586. data/lib/User_Lib/screen/stb/spectrum/spectrum_movies.rb +420 -0
  587. data/lib/User_Lib/screen/stb/spectrum/spectrum_netflix.rb +37 -0
  588. data/lib/User_Lib/screen/stb/spectrum/spectrum_on_demand.rb +2137 -0
  589. data/lib/User_Lib/screen/stb/spectrum/spectrum_parental_controls.rb +528 -0
  590. data/lib/User_Lib/screen/stb/spectrum/spectrum_pay_per_view.rb +26 -0
  591. data/lib/User_Lib/screen/stb/spectrum/spectrum_product_page.rb +58 -0
  592. data/lib/User_Lib/screen/stb/spectrum/spectrum_screen.rb +48 -0
  593. data/lib/User_Lib/screen/stb/spectrum/spectrum_search.rb +92 -0
  594. data/lib/User_Lib/screen/stb/spectrum/spectrum_settings.rb +1657 -0
  595. data/lib/User_Lib/screen/stb/spectrum/spectrum_tv_shows.rb +1532 -0
  596. data/lib/User_Lib/screen/stb/spectrum/spectrum_video_store.rb +1598 -0
  597. data/lib/User_Lib/screen/stb/stb_screen.rb +7 -0
  598. data/lib/User_Lib/screen/tivo/tivo_dvr.rb +25 -0
  599. data/lib/User_Lib/screen/tivo/tivo_guide.rb +25 -0
  600. data/lib/User_Lib/screen/tivo/tivo_library.rb +25 -0
  601. data/lib/User_Lib/screen/tivo/tivo_live_tv.rb +17 -0
  602. data/lib/User_Lib/screen/tivo/tivo_login.rb +25 -0
  603. data/lib/User_Lib/screen/tivo/tivo_main_menu.rb +25 -0
  604. data/lib/User_Lib/screen/tivo/tivo_mini_guide.rb +25 -0
  605. data/lib/User_Lib/screen/tivo/tivo_movies.rb +25 -0
  606. data/lib/User_Lib/screen/tivo/tivo_on_demand.rb +25 -0
  607. data/lib/User_Lib/screen/tivo/tivo_parental_controls.rb +25 -0
  608. data/lib/User_Lib/screen/tivo/tivo_product_page.rb +25 -0
  609. data/lib/User_Lib/screen/tivo/tivo_screen.rb +20 -0
  610. data/lib/User_Lib/screen/tivo/tivo_search.rb +31 -0
  611. data/lib/User_Lib/screen/tivo/tivo_settings.rb +25 -0
  612. data/lib/User_Lib/screen/tivo/tivo_tv_shows.rb +25 -0
  613. data/lib/User_Lib/screen/tivo/tivo_video_store.rb +25 -0
  614. data/lib/config/ConfigParams.xml +96 -0
  615. data/lib/config/ImageROI.xml +45 -0
  616. data/lib/config/ROI.xml +150 -0
  617. data/lib/config/Userlog4j.xml +62 -0
  618. data/lib/config/schema-docs/mode.xsd +12 -0
  619. data/lib/config/schema-docs/processTestJobs.xsd +63 -0
  620. data/lib/config/schema-docs/rackip.xsd +24 -0
  621. data/lib/copy_ref_images.rb +199 -0
  622. data/lib/copy_repo.rb +136 -0
  623. data/lib/diagnostics/conductor/conductor_checkup.tmc +24 -0
  624. data/lib/diagnostics/db/mad_db_check.tmc +56 -0
  625. data/lib/diagnostics/db/mas_db_checkup.tmc +24 -0
  626. data/lib/diagnostics/db/mas_db_checkup_gem.tmc +20 -0
  627. data/lib/diagnostics/db/mas_db_checkup_jar.tmc +50 -0
  628. data/lib/diagnostics/iguide/iguide_nvram_reset.tmc +23 -0
  629. data/lib/diagnostics/iguide/iguide_prepare_stb.tmc +33 -0
  630. data/lib/diagnostics/iguide/iguide_prepare_stb_and_health_check.tmc +63 -0
  631. data/lib/diagnostics/iguide/iguide_stb_health_check.tmc +54 -0
  632. data/lib/diagnostics/prepare_stb.tmc +30 -0
  633. data/lib/diagnostics/prepare_stb_and_health_check.tmc +56 -0
  634. data/lib/diagnostics/script_options/options_checkup.tmc +145 -0
  635. data/lib/diagnostics/server_components_check.tmc +62 -0
  636. data/lib/diagnostics/ssh/dncs_checkup.tmc +24 -0
  637. data/lib/diagnostics/ssh/mas_checkup.tmc +24 -0
  638. data/lib/diagnostics/stb_health_check.tmc +46 -0
  639. data/lib/diagnostics/stb_ip_check.tmc +120 -0
  640. data/lib/diagnostics/webservices/mas_rest_services_checkup.tmc +24 -0
  641. data/lib/diagnostics/webservices/mas_soap_services_checkup.tmc +24 -0
  642. data/lib/dsllib/common/dncs/dncs_utils.rb +449 -0
  643. data/lib/dsllib/common/mas_db/mas_conductor.rb +1328 -0
  644. data/lib/dsllib/common/mas_db/mas_db.rb +154 -0
  645. data/lib/dsllib/common/mas_db/mas_publish.rb +2349 -0
  646. data/lib/dsllib/common/mas_db/mas_rest_services.rb +75 -0
  647. data/lib/dsllib/common/mas_db/mas_soap_services.rb +540 -0
  648. data/lib/dsllib/common/mas_db/mas_utils.rb +422 -0
  649. data/lib/dsllib/common/remote_diagnostics/mdn_remote_diagnostics.rb +1335 -0
  650. data/lib/dsllib/common/remote_diagnostics/odn_web_server.rb +269 -0
  651. data/lib/dsllib/common/utils/excel_export.rb +273 -0
  652. data/lib/dsllib/common/utils/excel_module.rb +890 -0
  653. data/lib/dsllib/common/utils/server_components_utils.rb +130 -0
  654. data/lib/dsllib/common/utils/stb_health_check_utils.rb +92 -0
  655. data/lib/dsllib/common/utils/sword_utils.rb +393 -0
  656. data/lib/dsllib/common/utils/tmc_utils.rb +2944 -0
  657. data/lib/dsllib/common/utils/virtual_keyboard_navigator.rb +208 -0
  658. data/lib/dsllib/common/utils/virtual_keyboard_vp_navigator.rb +195 -0
  659. data/lib/dsllib/performance/DTA/roi.rb +214 -0
  660. data/lib/dsllib/performance/DTA/utils.rb +96 -0
  661. data/lib/dsllib/performance/iguide_concurrent_test/ROI.rb +236 -0
  662. data/lib/dsllib/performance/iguide_concurrent_test/utils.rb +533 -0
  663. data/lib/dsllib/performance/measure_tune.rb +438 -0
  664. data/lib/dsllib/performance/perf_lib.rb +660 -0
  665. data/lib/end_iteration.rb +4 -0
  666. data/lib/lib/data_services/channel.rb +39 -0
  667. data/lib/lib/data_services/data_services.rb +14 -0
  668. data/lib/lib/data_services/guide.rb +104 -0
  669. data/lib/lib/data_services/lineup.rb +114 -0
  670. data/lib/lib/data_services/program.rb +48 -0
  671. data/lib/lib/data_services/schedule.rb +18 -0
  672. data/lib/lib/data_services/splunk_connector.rb +135 -0
  673. data/lib/lib/data_services/splunk_data_reader.rb +77 -0
  674. data/lib/lib/element/element.rb +79 -0
  675. data/lib/lib/extensions/array_extensions.rb +32 -0
  676. data/lib/lib/extensions/datetime_extensions.rb +8 -0
  677. data/lib/lib/extensions/extensions.rb +51 -0
  678. data/lib/lib/extensions/file_extensions.rb +32 -0
  679. data/lib/lib/extensions/float_extensions.rb +32 -0
  680. data/lib/lib/extensions/integer_extensions.rb +39 -0
  681. data/lib/lib/extensions/nethttp_extensions.rb +11 -0
  682. data/lib/lib/extensions/object_extensions.rb +7 -0
  683. data/lib/lib/extensions/string_extensions.rb +35 -0
  684. data/lib/lib/helpers/tmc_helpers/csv_helper/csv_helper.rb +85 -0
  685. data/lib/lib/helpers/tmc_helpers/email_helper/email_helper.rb +71 -0
  686. data/lib/lib/helpers/tmc_helpers/http_helper/http_helper.rb +133 -0
  687. data/lib/lib/helpers/tmc_helpers/roi_helper/roi_helper.rb +17 -0
  688. data/lib/lib/helpers/tmc_helpers/snmp_helper/snmp_helper.rb +71 -0
  689. data/lib/lib/helpers/tmc_helpers/ssh_helper/ssh_helper.rb +337 -0
  690. data/lib/lib/helpers/tmc_helpers/tmc_helpers.rb +1260 -0
  691. data/lib/lib/keyboard/apple_tv/apple_tv_password_keyboard.rb +102 -0
  692. data/lib/lib/keyboard/apple_tv/apple_tv_search_keyboard.rb +103 -0
  693. data/lib/lib/keyboard/apple_tv/apple_tv_username_keyboard.rb +105 -0
  694. data/lib/lib/keyboard/keyboard.rb +504 -0
  695. data/lib/lib/keyboard/keyboard_layout.rb +51 -0
  696. data/lib/lib/keyboard/roku/roku_reset_pin_keyboard.rb +12 -0
  697. data/lib/lib/keyboard/roku/roku_rsg_search_keyboard.rb +67 -0
  698. data/lib/lib/keyboard/roku/roku_rsg_signin_keyboard.rb +106 -0
  699. data/lib/lib/keyboard/roku/roku_search_keyboard.rb +10 -0
  700. data/lib/lib/keyboard/roku/roku_signin_keyboard.rb +42 -0
  701. data/lib/lib/keyboard/samsung_tv/samsung_tv_search_keyboard.rb +50 -0
  702. data/lib/lib/keyboard/samsung_tv/samsung_tv_signin_keyboard.rb +52 -0
  703. data/lib/lib/keyboard/stb/odn/odn_on_demand_search_keyboard.rb +10 -0
  704. data/lib/lib/keyboard/stb/odn/odn_search_keyboard.rb +10 -0
  705. data/lib/lib/keyboard/stb/spectrum/spectrum_netflix_email_keyboard.rb +50 -0
  706. data/lib/lib/keyboard/stb/spectrum/spectrum_netflix_keyboard.rb +43 -0
  707. data/lib/lib/keyboard/stb/spectrum/spectrum_netflix_name_keyboard.rb +16 -0
  708. data/lib/lib/keyboard/stb/spectrum/spectrum_search_keyboard.rb +32 -0
  709. data/lib/lib/keyboard/tivo/tivo_password_keyboard.rb +0 -0
  710. data/lib/lib/keyboard/tivo/tivo_search_keyboard.rb +0 -0
  711. data/lib/lib/keyboard/tivo/tivo_username_keyboard.rb +0 -0
  712. data/lib/lib/keys/apple_tv/apple_tv_keys.rb +26 -0
  713. data/lib/lib/keys/base_keys.rb +14 -0
  714. data/lib/lib/keys/dta/dta_keys.rb +60 -0
  715. data/lib/lib/keys/mdn/mdn_keys.rb +60 -0
  716. data/lib/lib/keys/passport/passport_keys.rb +59 -0
  717. data/lib/lib/keys/roku/roku_keys.rb +31 -0
  718. data/lib/lib/keys/roku_tv/roku_tv_keys.rb +32 -0
  719. data/lib/lib/keys/samsung_tv/samsung_tv_keys.rb +58 -0
  720. data/lib/lib/keys/sara/sara_keys.rb +60 -0
  721. data/lib/lib/keys/stb/iguide/iguide_keys.rb +56 -0
  722. data/lib/lib/keys/stb/odn/odn_keys.rb +63 -0
  723. data/lib/lib/keys/stb/spectrum/spectrum_keys.rb +59 -0
  724. data/lib/lib/keys/stb/stb_keys.rb +13 -0
  725. data/lib/lib/keys/tivo/tivo_keys.rb +26 -0
  726. data/lib/lib/logger/multi_io.rb +14 -0
  727. data/lib/lib/logger/tmc_dut_logger.rb +251 -0
  728. data/lib/lib/logger/tmc_logger.rb +30 -0
  729. data/lib/lib/mixins/assignable.rb +19 -0
  730. data/lib/lib/mixins/can_have_special_methods.rb +50 -0
  731. data/lib/lib/mixins/enumish.rb +16 -0
  732. data/lib/lib/new_platform.rb +302 -0
  733. data/lib/lib/new_sub_platform.rb +90 -0
  734. data/lib/lib/platform/apple_tv/apple_tv.rb +33 -0
  735. data/lib/lib/platform/apple_tv/apple_tv_1080/apple_tv_1080.rb +54 -0
  736. data/lib/lib/platform/apple_tv/apple_tv_720/apple_tv_720.rb +14 -0
  737. data/lib/lib/platform/dta/dta.rb +35 -0
  738. data/lib/lib/platform/dta/dta_1080/dta_1080.rb +15 -0
  739. data/lib/lib/platform/dta/dta_720/dta_720.rb +15 -0
  740. data/lib/lib/platform/mdn/mdn.rb +35 -0
  741. data/lib/lib/platform/mdn/mdn_1080/mdn_1080.rb +15 -0
  742. data/lib/lib/platform/mdn/mdn_720/mdn_720.rb +15 -0
  743. data/lib/lib/platform/mobile/android/android.rb +23 -0
  744. data/lib/lib/platform/mobile/android/android_phone/android_phone.rb +23 -0
  745. data/lib/lib/platform/mobile/android/android_tablet/android_tablet.rb +23 -0
  746. data/lib/lib/platform/mobile/ios/ios.rb +23 -0
  747. data/lib/lib/platform/mobile/ios/ios_phone/ios_phone.rb +23 -0
  748. data/lib/lib/platform/mobile/ios/ios_tablet/ios_tablet.rb +23 -0
  749. data/lib/lib/platform/mobile/mobile.rb +102 -0
  750. data/lib/lib/platform/passport/passport.rb +41 -0
  751. data/lib/lib/platform/passport/passport1080/passport_1080.rb +15 -0
  752. data/lib/lib/platform/passport/passport_720/passport_720.rb +14 -0
  753. data/lib/lib/platform/platform.rb +884 -0
  754. data/lib/lib/platform/roku/roku.rb +96 -0
  755. data/lib/lib/platform/roku/roku_720/roku_720.rb +16 -0
  756. data/lib/lib/platform/roku_tv/roku_tv.rb +33 -0
  757. data/lib/lib/platform/roku_tv/roku_tv_1080/roku_tv_1080.rb +14 -0
  758. data/lib/lib/platform/roku_tv/roku_tv_720/roku_tv_720.rb +14 -0
  759. data/lib/lib/platform/samsung_tv/samsung_tv.rb +31 -0
  760. data/lib/lib/platform/samsung_tv/samsung_tv_1080/samsung_tv_1080.rb +14 -0
  761. data/lib/lib/platform/samsung_tv/samsung_tv_720/samsung_tv_720.rb +14 -0
  762. data/lib/lib/platform/sara/sara.rb +42 -0
  763. data/lib/lib/platform/sara/sara_1080/sara_1080.rb +15 -0
  764. data/lib/lib/platform/sara/sara_720/sara_720.rb +15 -0
  765. data/lib/lib/platform/stb/iguide/iguide.rb +18 -0
  766. data/lib/lib/platform/stb/iguide/iguide_1080/iguide_1080.rb +14 -0
  767. data/lib/lib/platform/stb/iguide/iguide_720/iguide_720.rb +14 -0
  768. data/lib/lib/platform/stb/odn/odn.rb +480 -0
  769. data/lib/lib/platform/stb/odn/odn_1080/odn_1080.rb +14 -0
  770. data/lib/lib/platform/stb/odn/odn_720/odn_720.rb +14 -0
  771. data/lib/lib/platform/stb/odn/odn_720/odn_720_moto/odn_720_moto.rb +14 -0
  772. data/lib/lib/platform/stb/odn/odn_720/odn_720_sa/odn_720_sa.rb +14 -0
  773. data/lib/lib/platform/stb/odn/odn_720/odn_720_samsung/odn_720_samsung.rb +14 -0
  774. data/lib/lib/platform/stb/spectrum/spectrum.rb +48 -0
  775. data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080.rb +14 -0
  776. data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis.rb +16 -0
  777. data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris.rb +15 -0
  778. data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax.rb +15 -0
  779. data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch.rb +15 -0
  780. data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace.rb +14 -0
  781. data/lib/lib/platform/stb/spectrum/spectrum_720/spectrum_720.rb +14 -0
  782. data/lib/lib/platform/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris.rb +15 -0
  783. data/lib/lib/platform/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax.rb +15 -0
  784. data/lib/lib/platform/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch.rb +15 -0
  785. data/lib/lib/platform/stb/stb.rb +93 -0
  786. data/lib/lib/platform/template.txt +16 -0
  787. data/lib/lib/platform/tivo/tivo.rb +28 -0
  788. data/lib/lib/platform/tivo/tivo_1080/tivo_1080.rb +15 -0
  789. data/lib/lib/platform/tivo/tivo_720/tivo_720.rb +14 -0
  790. data/lib/lib/platform/web/web.rb +51 -0
  791. data/lib/lib/platform_libs/roku/roku_controller.rb +254 -0
  792. data/lib/lib/prereqs/prereqs.rb +17 -0
  793. data/lib/lib/prereqs/prereqs_for_dut.rb +14 -0
  794. data/lib/lib/prereqs/prereqs_for_test.rb +14 -0
  795. data/lib/lib/remotes/remotes.rb +8 -0
  796. data/lib/lib/remotes/stb/spectrum/spectrum_remotes.rb +22 -0
  797. data/lib/lib/roi/black/black_roi.rb +125 -0
  798. data/lib/lib/roi/color/color_roi.rb +138 -0
  799. data/lib/lib/roi/image/image_roi.rb +187 -0
  800. data/lib/lib/roi/roi.rb +1064 -0
  801. data/lib/lib/roi/template_roi.txt +9 -0
  802. data/lib/lib/roi/text/text_roi.rb +187 -0
  803. data/lib/lib/roi/video/video_roi.rb +98 -0
  804. data/lib/lib/screen/screen.rb +183 -0
  805. data/lib/lib/screen/template.txt +7 -0
  806. data/lib/lib/screen/template_screen.txt +10 -0
  807. data/lib/lib/screens/apple_tv/apple_tv_screens.rb +44 -0
  808. data/lib/lib/screens/dta/dta_screens.rb +49 -0
  809. data/lib/lib/screens/mdn/mdn_screens.rb +49 -0
  810. data/lib/lib/screens/mobile/android/android_phone/android_phone_screens.rb +28 -0
  811. data/lib/lib/screens/mobile/android/android_screens.rb +40 -0
  812. data/lib/lib/screens/mobile/android/android_tablet/android_tablet_screens.rb +29 -0
  813. data/lib/lib/screens/mobile/ios/ios_phone/ios_phone_screens.rb +22 -0
  814. data/lib/lib/screens/mobile/ios/ios_screens.rb +39 -0
  815. data/lib/lib/screens/mobile/ios/ios_tablet/ios_tablet_screens.rb +20 -0
  816. data/lib/lib/screens/mobile/mobile_screens.rb +18 -0
  817. data/lib/lib/screens/passport/passport_screens.rb +42 -0
  818. data/lib/lib/screens/roku/roku_screens.rb +72 -0
  819. data/lib/lib/screens/roku_tv/roku_tv_screens.rb +43 -0
  820. data/lib/lib/screens/samsung_tv/samsung_tv_screens.rb +44 -0
  821. data/lib/lib/screens/sara/sara_screens.rb +49 -0
  822. data/lib/lib/screens/screens.rb +23 -0
  823. data/lib/lib/screens/stb/iguide/iguide_1080/iguide_1080_screens.rb +56 -0
  824. data/lib/lib/screens/stb/iguide/iguide_720/iguide_720_screens.rb +56 -0
  825. data/lib/lib/screens/stb/iguide/iguide_screens.rb +54 -0
  826. data/lib/lib/screens/stb/odn/odn_screens.rb +40 -0
  827. data/lib/lib/screens/stb/spectrum/spectrum_docsis/spectrum_1080_docsis_screens.rb +18 -0
  828. data/lib/lib/screens/stb/spectrum/spectrum_screens.rb +48 -0
  829. data/lib/lib/screens/stb/stb_screens.rb +13 -0
  830. data/lib/lib/screens/template.txt +52 -0
  831. data/lib/lib/screens/tivo/tivo_screens.rb +44 -0
  832. data/lib/lib/selenium/appium/appium.rb +388 -0
  833. data/lib/lib/selenium/selenium.rb +466 -0
  834. data/lib/lib/selenium/webdriver/webdriver.rb +254 -0
  835. data/lib/lib/test_case/boilerplate/functional.rb +7 -0
  836. data/lib/lib/test_case/boilerplate/performance.rb +7 -0
  837. data/lib/lib/test_case/ci_test.rb +47 -0
  838. data/lib/lib/test_case/functional_test_case.rb +27 -0
  839. data/lib/lib/test_case/make_boilerplate.rb +32 -0
  840. data/lib/lib/test_case/monitoring/apple_monitor.rb +104 -0
  841. data/lib/lib/test_case/monitoring/base_monitor.rb +140 -0
  842. data/lib/lib/test_case/monitoring/dta_monitor.rb +53 -0
  843. data/lib/lib/test_case/monitoring/iguide_monitor.rb +72 -0
  844. data/lib/lib/test_case/monitoring/mdn_monitor.rb +28 -0
  845. data/lib/lib/test_case/monitoring/monitoring_test.rb +111 -0
  846. data/lib/lib/test_case/monitoring/odn_monitor.rb +137 -0
  847. data/lib/lib/test_case/monitoring/passport_monitor.rb +50 -0
  848. data/lib/lib/test_case/monitoring/report_monitor.rb +178 -0
  849. data/lib/lib/test_case/monitoring/roku_monitor.rb +102 -0
  850. data/lib/lib/test_case/monitoring/sara_monitor.rb +33 -0
  851. data/lib/lib/test_case/monitoring/spec_monitor.rb +154 -0
  852. data/lib/lib/test_case/performance_test_case.rb +29 -0
  853. data/lib/lib/test_case/test_case.rb +1055 -0
  854. data/lib/lib/test_case/test_error.rb +29 -0
  855. data/lib/lib/test_case/test_exception.rb +9 -0
  856. data/lib/lib/test_case/test_status.rb +39 -0
  857. data/lib/lib/test_case/test_step.rb +156 -0
  858. data/lib/lib/test_case/test_trace.rb +80 -0
  859. data/lib/lib/test_data.rb +222 -0
  860. data/lib/lib/test_wrapper.rb +146 -0
  861. data/lib/misc/get_latest_android.sh +14 -0
  862. data/lib/misc/get_latest_ios.sh +14 -0
  863. data/lib/package-lock.json +3 -0
  864. data/lib/run_test.rb +4 -0
  865. data/lib/script_validator.rb +48 -0
  866. data/lib/syntax_eval.rb +151 -0
  867. data/lib/tools/convert_old_scripts.rb +100 -0
  868. data/lib/tools/find_duplicate_rois.rb +27 -0
  869. data/lib/tools/roku/inspector.rb +130 -0
  870. data/lib/tools/syntax_checker.rb +83 -0
  871. data/lib/upload_ref_images.rb +255 -0
  872. metadata +912 -0
@@ -0,0 +1,154 @@
1
+ #Test automation script version# TA-5.5.mdn released time stamp: 12-03-12 14:40:20
2
+
3
+ require './dsllib/common/utils/tmc_utils'
4
+
5
+ def mas_db_get_channels_with_long_desc
6
+ region_id = fetch_option(:region_id).to_i
7
+ query_string = "SELECT MYSTRO_CHANNEL.DISPLAY_CHANNEL AS CHANNEL_NUMBER FROM EVENT INNER JOIN EVENT_DETAIL ON EVENT_DETAIL.EVENT_ID = EVENT.EVENT_ID INNER JOIN SERVICE_SCHEDULE ON SERVICE_SCHEDULE.EVENT_DETAIL_ID = EVENT_DETAIL.EVENT_DETAIL_ID INNER JOIN MYSTRO_SERVICE ON MYSTRO_SERVICE.GUIDE_SERVICE_ID = SERVICE_SCHEDULE.GUIDE_SERVICE_ID INNER JOIN MYSTRO_CHANNEL ON MYSTRO_CHANNEL.MYSTRO_SERVICE_ID = MYSTRO_SERVICE.MYSTRO_SERVICE_ID WHERE MYSTRO_CHANNEL.CHANNEL_FLAGS < 32 AND REGION_ID = #{region_id} AND LENGTH(EVENT_DETAIL.EVENT_LONG_DESCRIPTION) > 225 ORDER BY TMS_AIR_DATETIME"
8
+ logdebug "Query_String : #{query_string}"
9
+ return query_mystro_catalog_db(fetch_option(:mystrodb), query_string)
10
+ end
11
+
12
+ def mas_db_get_channels(where_clause='')
13
+ region_id = fetch_option(:region_id).to_i
14
+ query_string = "select display_channel, display_name, service_name, service_full_name, MYSTRO_CHANNEL.CHANNEL_FLAGS, (CASE WHEN PROP_VALUE IS NULL THEN 'false' ELSE PROP_VALUE END) AS EXCLUDE_FROM_SEARCH from MYSTRO_CHANNEL, mystro_service LEFT JOIN SERVICE_PROP ON SERVICE_PROP.MYSTRO_SERVICE_ID = MYSTRO_SERVICE.MYSTRO_SERVICE_ID AND SERVICE_PROP.PROP_NAME = 'EXCLUDE_FROM_SEARCH' where region_id = #{region_id} #{where_clause} and MYSTRO_CHANNEL.MYSTRO_SERVICE_ID = MYSTRO_SERVICE.MYSTRO_SERVICE_ID order by display_channel"
15
+ logdebug "Query_String : #{query_string}"
16
+ return query_mystro_catalog_db(fetch_option(:mystrodb), query_string)
17
+ end
18
+
19
+ def mas_db_get_curr_date
20
+ query_string = "SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD/HH24/MI/SS') \"NOW\" FROM DUAL"
21
+ logdebug "Query_String : #{query_string}"
22
+ return query_mystro_catalog_db(fetch_option(:mystrodb), query_string)
23
+ end
24
+
25
+ def mas_db_genre(where_clause='')
26
+ query_string = "SELECT GENRE_CODE, GENRE_CODE_DESC FROM GENRE_CODE #{where_clause}"
27
+ logdebug "Query_String : #{query_string}"
28
+ return query_mystro_catalog_db(fetch_option(:mystrodb), query_string)
29
+ end
30
+
31
+ def mas_db_guide_data(where_clause='')
32
+ region_id = fetch_option(:region_id).to_i
33
+ time_zone_diff = mas_db_time_zone_diff_in_min
34
+ query_string = "SELECT MYSTRO_CHANNEL.DISPLAY_CHANNEL AS CHANNEL_NUMBER, MYSTRO_SERVICE.DISPLAY_NAME AS CHANNEL_NAME, TO_CHAR((SERVICE_SCHEDULE.TMS_AIR_DATETIME + #{time_zone_diff}/(24*60)), 'YYYY/MM/DD/HH24/MI/SS') AS PROGRAM_START_TIME, TO_CHAR((SERVICE_SCHEDULE.TMS_ENDAIR_TIME + #{time_zone_diff}/(24*60)), 'YYYY/MM/DD/HH24/MI/SS') AS PROGRAM_END_TIME, EVENT.EVENT_TYPE AS PROGRAM_TYPE, EVENT.EVENT_SHORT_TITLE AS PROGRAM_SHORT_TITLE, EVENT.EVENT_LONG_TITLE AS PROGRAM_LONG_TITLE, RATING_FLAG.RATING_FLAG_LONG_DESC AS PROGRAM_RATING_LONG, RATING_FLAG.RATING_FLAG_SHORT_DESC AS PROGRAM_RATING_SHORT, STAR_RATING_CODE.STAR_RATING_CODE_DESC AS PROGRAM_STAR_RATING, EVENT_DETAIL.GENRE_CODE AS PROGRAM_GENRE_CODES ,EVENT_DETAIL.EVENT_SHORT_DESCRIPTION AS PROGRAM_SHORT_DESC, EVENT_DETAIL.EVENT_LONG_DESCRIPTION AS PROGRAM_LONG_DESC, EVENT.EVENT_TYPE AS PROGRAM_TYPE, EVENT_DETAIL.ADVISORY_CODE AS CONTENT_TYPE, SERVICE_SCHEDULE.MYSTRO_EVENT_CODE AS EVENT_CODE, EVENT_DETAIL.EVENT_DETAIL_ID AS EVENT_DETAIL_ID, SERVICE_SCHEDULE.SERVICE_SCHEDULE_ID AS SERVICE_SCHEDULE_ID, MYSTRO_SERVICE.MYSTRO_SERVICE_ID AS MYSTRO_SERVICE_ID, EVENT.EVENT_ID AS EVENT_ID
35
+ FROM EVENT
36
+ INNER JOIN EVENT_DETAIL ON EVENT_DETAIL.EVENT_ID = EVENT.EVENT_ID
37
+ INNER JOIN SERVICE_SCHEDULE ON SERVICE_SCHEDULE.EVENT_DETAIL_ID = EVENT_DETAIL.EVENT_DETAIL_ID
38
+ INNER JOIN MYSTRO_SERVICE ON MYSTRO_SERVICE.GUIDE_SERVICE_ID = SERVICE_SCHEDULE.GUIDE_SERVICE_ID
39
+ INNER JOIN MYSTRO_CHANNEL ON MYSTRO_CHANNEL.MYSTRO_SERVICE_ID = MYSTRO_SERVICE.MYSTRO_SERVICE_ID
40
+ INNER JOIN RATING_FLAG ON RATING_FLAG.RATING_FLAG_ID = SERVICE_SCHEDULE.RATING_FLAG_ID
41
+ INNER JOIN STAR_RATING_CODE ON STAR_RATING_CODE.STAR_RATING_CODE_ID = EVENT_DETAIL.STAR_RATING_CODE_ID
42
+ WHERE REGION_ID = #{region_id} #{where_clause}
43
+ GROUP BY EVENT.EVENT_TYPE, MYSTRO_CHANNEL.DISPLAY_CHANNEL, MYSTRO_SERVICE.DISPLAY_NAME, SERVICE_SCHEDULE.TMS_AIR_DATETIME, SERVICE_SCHEDULE.TMS_ENDAIR_TIME, EVENT.EVENT_SHORT_TITLE, EVENT.EVENT_LONG_TITLE, RATING_FLAG.RATING_FLAG_LONG_DESC, RATING_FLAG.RATING_FLAG_SHORT_DESC, STAR_RATING_CODE.STAR_RATING_CODE_DESC, EVENT_DETAIL.GENRE_CODE, EVENT_DETAIL.EVENT_SHORT_DESCRIPTION, EVENT_DETAIL.EVENT_LONG_DESCRIPTION, EVENT_DETAIL.ADVISORY_CODE, SERVICE_SCHEDULE.MYSTRO_EVENT_CODE, EVENT_DETAIL.EVENT_DETAIL_ID, SERVICE_SCHEDULE.SERVICE_SCHEDULE_ID, MYSTRO_SERVICE.MYSTRO_SERVICE_ID, EVENT.EVENT_ID
44
+ ORDER BY TMS_AIR_DATETIME"
45
+ logdebug "Query_String : #{query_string}"
46
+ return query_mystro_catalog_db(fetch_option(:mystrodb), query_string)
47
+ end
48
+
49
+ def mas_db_parental_ratings
50
+ query_string = "SELECT RATING_FLAG, RATING_FLAG_SHORT_DESC, RATING_FLAG_LONG_DESC FROM RATING_FLAG ORDER BY RATING_FLAG"
51
+ logdebug "Query_String : #{query_string}"
52
+ return query_mystro_catalog_db(fetch_option(:mystrodb), query_string)
53
+ end
54
+
55
+ def mas_db_advisory_flags
56
+ query_string = "SELECT ADVISORY_FLAG.ADVISORY_FLAG, ADVISORY_FLAG.ADVISORY_LONG_DESC FROM ADVISORY_FLAG ORDER BY ADVISORY_FLAG.ADVISORY_FLAG"
57
+ logdebug "Query_String : #{query_string}"
58
+ return query_mystro_catalog_db(fetch_option(:mystrodb), query_string)
59
+ end
60
+
61
+ def mas_db_event_flags
62
+ query_string = "SELECT EV_FLAG.EV_FLAG, EV_FLAG.EV_FLAG_DESC FROM EV_FLAG ORDER BY EV_FLAG.EV_FLAG"
63
+ logdebug "Query_String : #{query_string}"
64
+ return query_mystro_catalog_db(fetch_option(:mystrodb), query_string)
65
+ end
66
+
67
+ def mas_db_guide_data_for_ppv_programs(where_clause='')
68
+ region_id = fetch_option(:region_id).to_i
69
+ time_zone_diff = mas_db_time_zone_diff_in_min
70
+
71
+ query_string = "SELECT
72
+ MYSTRO_CHANNEL.DISPLAY_CHANNEL AS CHANNEL_NUMBER,
73
+ MYSTRO_SERVICE.DISPLAY_NAME AS CHANNEL_NAME,
74
+
75
+ MAX(CASE WHEN WINDOW_TYPE.WINDOW_NAME = 'ADVERTISING_WINDOW' THEN TO_CHAR( PPV_TIME_WINDOW.START_TIME + #{time_zone_diff}/(24*60), 'YYYY/MM/DD/HH24/MI/SS') END) AS ADVERTISING_WINDOW,
76
+ MAX(CASE WHEN WINDOW_TYPE.WINDOW_NAME = 'BUY_WINDOW' THEN TO_CHAR( PPV_TIME_WINDOW.START_TIME + #{time_zone_diff}/(24*60), 'YYYY/MM/DD/HH24/MI/SS') END) AS BUY_WINDOW,
77
+ MAX(CASE WHEN WINDOW_TYPE.WINDOW_NAME = 'CANCEL_WINDOW' THEN TO_CHAR( PPV_TIME_WINDOW.START_TIME + #{time_zone_diff}/(24*60), 'YYYY/MM/DD/HH24/MI/SS') END) AS CANCEL_WINDOW,
78
+ MAX(CASE WHEN WINDOW_TYPE.WINDOW_NAME = 'FREE_CANCEL_WINDOW' THEN TO_CHAR( PPV_TIME_WINDOW.START_TIME + #{time_zone_diff}/(24*60), 'YYYY/MM/DD/HH24/MI/SS') END) AS FREE_CANCEL_WINDOW,
79
+ MAX(CASE WHEN WINDOW_TYPE.WINDOW_NAME = 'LIFETIME_WINDOW' THEN TO_CHAR( PPV_TIME_WINDOW.START_TIME + #{time_zone_diff}/(24*60), 'YYYY/MM/DD/HH24/MI/SS') END) AS LIFETIME_WINDOW,
80
+ MAX(CASE WHEN WINDOW_TYPE.WINDOW_NAME = 'MARKETING_WINDOW' THEN TO_CHAR( PPV_TIME_WINDOW.START_TIME + #{time_zone_diff}/(24*60), 'YYYY/MM/DD/HH24/MI/SS') END) AS MARKETING_WINDOW,
81
+ MAX(CASE WHEN WINDOW_TYPE.WINDOW_NAME = 'PREVIEW_WINDOW' THEN TO_CHAR( PPV_TIME_WINDOW.START_TIME + #{time_zone_diff}/(24*60), 'YYYY/MM/DD/HH24/MI/SS') END) AS PREVIEW_WINDOW,
82
+
83
+ MAX(CASE WHEN WINDOW_TYPE.WINDOW_NAME = 'ADVERTISING_WINDOW' THEN PPV_TIME_WINDOW.DURATION END) AS ADVERTISING_WINDOW_DURATION,
84
+ MAX(CASE WHEN WINDOW_TYPE.WINDOW_NAME = 'BUY_WINDOW' THEN PPV_TIME_WINDOW.DURATION END) AS BUY_WINDOW_DURATION,
85
+ MAX(CASE WHEN WINDOW_TYPE.WINDOW_NAME = 'CANCEL_WINDOW' THEN PPV_TIME_WINDOW.DURATION END) AS CANCEL_WINDOW_DURATION,
86
+ MAX(CASE WHEN WINDOW_TYPE.WINDOW_NAME = 'FREE_CANCEL_WINDOW' THEN PPV_TIME_WINDOW.DURATION END) AS FREE_CANCEL_WINDOW_DURATION,
87
+ MAX(CASE WHEN WINDOW_TYPE.WINDOW_NAME = 'LIFETIME_WINDOW' THEN PPV_TIME_WINDOW.DURATION END) AS LIFETIME_WINDOW_DURATION,
88
+ MAX(CASE WHEN WINDOW_TYPE.WINDOW_NAME = 'MARKETING_WINDOW' THEN PPV_TIME_WINDOW.DURATION END) AS MARKETING_WINDOW_DURATION,
89
+ MAX(CASE WHEN WINDOW_TYPE.WINDOW_NAME = 'PREVIEW_WINDOW' THEN PPV_TIME_WINDOW.DURATION END) AS PREVIEW_WINDOW_DURATION,
90
+
91
+ PPV_EVENT_INFO.PPV_EVENT_INFO_ID as PPV_EVENT_INFO_ID,
92
+ PPV_EVENT_INFO.EVENT_TITLE as PROGRAM_SHORT_TITLE,
93
+ PPV_EVENT_INFO.EVENT_COST as PPV_EVENT_COST,
94
+ PPV_EVENT_INFO.PPV_TYPE as PPV_TYPE
95
+
96
+ FROM PPV_EVENT_INFO
97
+
98
+ INNER JOIN PPV_TIME_WINDOW ON PPV_EVENT_INFO.PPV_EVENT_INFO_ID= PPV_TIME_WINDOW.PPV_EVENT_INFO_ID
99
+ INNER JOIN WINDOW_TYPE ON WINDOW_TYPE.WINDOW_TYPE_ID = PPV_TIME_WINDOW.WINDOW_TYPE_ID
100
+ INNER JOIN MYSTRO_SERVICE on MYSTRO_SERVICE.SERVICE_NAME = PPV_EVENT_INFO.SERVICE_NAME
101
+ INNER JOIN MYSTRO_CHANNEL on MYSTRO_CHANNEL.MYSTRO_SERVICE_ID = MYSTRO_SERVICE.MYSTRO_SERVICE_ID
102
+ WHERE REGION_ID = #{region_id} #{where_clause}
103
+ GROUP BY PPV_EVENT_INFO.PPV_EVENT_INFO_ID,MYSTRO_CHANNEL.DISPLAY_CHANNEL,MYSTRO_SERVICE.DISPLAY_NAME,PPV_EVENT_INFO.PPV_EVENT_INFO_ID,PPV_EVENT_INFO.EVENT_TITLE,PPV_EVENT_INFO.EVENT_COST,PPV_EVENT_INFO.PPV_TYPE
104
+ ORDER BY PPV_EVENT_INFO_ID"
105
+
106
+ logdebug "Query_String : #{query_string}"
107
+ return query_mystro_catalog_db(fetch_option(:mystrodb), query_string)
108
+ end
109
+
110
+ def mas_db_look_back_folders channel_name
111
+ query_string = "select menu_node_id, node_name, node_sequence, parent_node_id, node_type from menu_node where parent_node_id in (select menu_node_id from menu_node where menu_id in ( select menu_id from Menu where menu_type=2 and replace(upper(to_char(menu_name)), ' ', '') = replace(upper('#{channel_name}'), ' ', '')) and upper(node_name) like upper('look back%')) order by NODE_SEQUENCE"
112
+ logdebug "Query_String : #{query_string}"
113
+ return query_mystro_catalog_db(fetch_option(:mystrodb), query_string)
114
+ end
115
+
116
+ def mas_db_look_back_programs_in_folder folder_id
117
+ time_zone_diff = mas_db_time_zone_diff_in_min
118
+ query_string = "select node_name, node_sequence, node_desc, RTA.SCHEDULED_EVENT.event_duration, rating, ADVISORY_CODE, GENRE_CODE, to_char((view_start + #{time_zone_diff}/(24*60)), 'YYYY/MM/DD/HH24/MI/SS') as program_start, to_char((view_stop + #{time_zone_diff}/(24*60)), 'YYYY/MM/DD/HH24/MI/SS') as program_end, to_char((license_window_start + #{time_zone_diff}/(24*60)), 'YYYY/MM/DD/HH24/MI/SS') as license_window_start, to_char((license_window_end + #{time_zone_diff}/(24*60)), 'YYYY/MM/DD/HH24/MI/SS') as license_window_end, mystro_event_code from menu_node inner join node_to_od_asset on node_to_od_asset.menu_node_id = menu_node.menu_node_id inner join RTA.SCHEDULED_EVENT on OFFERING_ID = node_to_od_asset.od_asset_id left join Event_detail on Event_detail.EVENT_DETAIL_ID = RTA.SCHEDULED_EVENT.TMS_ID left join service_schedule on SCHEDULED_EVENT_ID = service_schedule.SERVICE_SCHEDULE_ID where parent_node_id = #{folder_id} order by node_sequence"
119
+ logdebug "Query_String : #{query_string}"
120
+ return query_mystro_catalog_db(fetch_option(:mystrodb), query_string)
121
+ end
122
+
123
+ def mas_db_quickclips channel_name
124
+ query_string = "select menu_node_id, node_name, node_type, node_sequence, node_desc, parent_node_id from menu_node where menu_id = (select menu_id from menu where menu_name like '#{channel_name}' and rownum = 1)"
125
+ logdebug "Query_String : #{query_string}"
126
+ return query_mystro_catalog_db(fetch_option(:mystrodb), query_string)
127
+ end
128
+
129
+ def mas_db_purchased_assets(where_clause='')
130
+ time_zone_diff = mas_db_time_zone_diff_in_min
131
+ query_string = "select PRODUCT,OD_ASSET_ID, PURCHASE_STATE, PURCHASE_ERROR, OFFER_NAME, TO_CHAR(( PURCHASE_TIME + (#{time_zone_diff}/(24*60))), 'YYYY/MM/DD/HH24/MI/SS') as PURCHASE_TIME , OFFERING_WINDOW_HRS, OD_PURCHASE.terminal_id, OD_PURCHASE.billing_code from OD_PURCHASE INNER JOIN OD_ASSET ON OD_PURCHASE.OFFER_ID=OD_ASSET.OD_ASSET_ID where #{where_clause}"
132
+ logdebug "Query_String : #{query_string}"
133
+ return query_mystro_catalog_db(fetch_option(:mystrodb), query_string)
134
+ end
135
+
136
+ def mas_db_quickclip_more_info_for_ids id_array
137
+ query_string = "select menu_node_id, rating_flag_short_desc, duration_seconds, is_valid from node_to_od_asset inner join od_asset on node_to_od_asset.od_asset_id = od_asset.od_asset_id inner join rating_flag on od_asset.rating_flag_id = rating_flag.rating_flag_id where menu_node_id in (#{id_array.join(',')})"
138
+ logdebug "Query_String : #{query_string}"
139
+ return query_mystro_catalog_db(fetch_option(:mystrodb), query_string)
140
+ end
141
+
142
+ def mas_db_od_assets_for_service name
143
+ query_string = "select asset_title from OD_ASSET where product = '#{name}'" #
144
+ logdebug "Query_String : #{query_string}"
145
+ return query_mystro_catalog_db(fetch_option(:mystrodb), query_string)
146
+ end
147
+
148
+ def mas_db_od_assets_in_rsrv(where_clause='')
149
+ time_zone_diff = mas_db_time_zone_diff_in_min
150
+ region_id = fetch_option(:region_id).to_i
151
+ query_string = "select od_rsrv.OD_ASSET_ID, asset_title, od_purchase_id, TO_CHAR(( EXPIRATION_DATE + (#{time_zone_diff}/(24*60))), 'YYYY/MM/DD/HH24/MI/SS') as EXPIRATION_DATE from od_rsrv inner join od_asset on od_rsrv.od_asset_id = od_asset.od_asset_id inner join mystro_channel on od_rsrv.mystro_service_id = mystro_channel.mystro_service_id where REGION_ID = #{region_id} #{where_clause}"
152
+ logdebug "Query_String : #{query_string}"
153
+ return query_mystro_catalog_db(fetch_option(:mystrodb), query_string)
154
+ end
@@ -0,0 +1,2349 @@
1
+ #Test automation script version# TA-5.5.mdn released time stamp: 12-03-12 14:40:20
2
+
3
+ require "rubygems"
4
+
5
+ require 'selenium/client'
6
+ require 'time'
7
+ require './dsllib/common/utils/tmc_utils'
8
+ require './dsllib/common/mas_db/mas_db'
9
+ require './dsllib/common/mas_db/mas_conductor'
10
+
11
+ #Private method
12
+ def _mas_publish_complete?(selenium)
13
+ begin
14
+ 30.times do
15
+ begin
16
+ selenium.click "dijit_layout__TabButton_1"
17
+ rescue StandardError => e
18
+ loginfo2 e.message
19
+ end
20
+ if _mas_publish_inprogress?(selenium)
21
+ loginfo2 'Publish in progress...'
22
+ else
23
+ return true
24
+ end
25
+ loginfo2 "Refreshing page"
26
+ selenium.refresh
27
+ sleep 2.min
28
+ selenium.wait_for_text('Outstanding Catalogs')
29
+ end
30
+ rescue StandardError => e
31
+ loginfo2 e.message
32
+ loginfo2 "Unable to verify if MAS publish is in progress"
33
+ return false
34
+ end
35
+ end
36
+
37
+ #Private method
38
+ def _mas_publish_inprogress?(selenium)
39
+ return !selenium.is_text_present('Outstanding Files to be Published')
40
+ end
41
+
42
+ # Private method
43
+ def _mas_change_dvr_settings(setting_name,setting_value)
44
+ begin
45
+ selenium = _mas_login
46
+ return false if selenium.nil?
47
+ _navigate_to_stb_settings(selenium)
48
+ selenium.wait_for_text 'DVR'
49
+ mas_tsb_length = selenium.get_text("//table[6]/tbody/tr[2]/td/table/tbody/tr[1]/td[2]")
50
+ mas_dvr_jump_value = selenium.get_text("//table[6]/tbody/tr[2]/td/table/tbody/tr[12]/td[2]")
51
+ mas_enable_REW4_FF4 = selenium.get_text("//table[6]/tbody/tr[2]/td/table/tbody/tr[13]/td[2]")
52
+
53
+ mas_dvr_comp_REW1_value=selenium.get_text("//table[6]/tbody/tr[2]/td/table/tbody/tr[4]/td[2]")
54
+ mas_dvr_comp_FF1_value=selenium.get_text("//table[6]/tbody/tr[2]/td/table/tbody/tr[7]/td[2]")
55
+
56
+ if setting_name.casecmp('tsb_length') == 0 && mas_tsb_length.to_s.casecmp(setting_value.to_s.strip) == 0
57
+ loginfo2 "Existing TSB length is already [#{mas_tsb_length}] minutes. No change is required."
58
+ elsif setting_name.casecmp('dvr_jump_value') == 0 && mas_dvr_jump_value.to_s == setting_value.to_s.strip
59
+ loginfo2 "Existing DVR jump value is already [#{mas_dvr_jump_value}] minutes. No change is required."
60
+ elsif setting_name.casecmp('enable_REW4_FF4') == 0 && mas_enable_REW4_FF4.to_s == setting_value.to_s.strip
61
+ loginfo2 "Enable Rew/FF4 is already [#{mas_enable_REW4_FF4}]. No change is required."
62
+ elsif setting_name.strip.casecmp('dvr_comp_REW1_value') == 0 && mas_dvr_comp_REW1_value.to_s ==setting_value.to_s.strip
63
+ loginfo2 "Changing DVR Comp REW1 value from [#{mas_dvr_comp_REW1_value}] to [#{setting_value}] Seconds. No change is required."
64
+ elsif setting_name.strip.casecmp('dvr_comp_FF1_value') == 0 && mas_dvr_comp_FF1_value.to_s ==setting_value.to_s.strip
65
+ loginfo2 "Changing DVR Comp FF1 value from [#{mas_dvr_comp_FF1_value}] to [#{setting_value}] Seconds.e No change is required."
66
+ else
67
+ loginfo2 "Editing DVR parameters"
68
+ selenium.click "//a[contains(@href, '/mystroui/editMsoSettings.do?groupName=DVR')]", :wait_for => :page
69
+ selenium.wait_for_element "dijit_form_Button_0"
70
+ if setting_name.strip.casecmp('tsb_length') == 0
71
+ loginfo2 "Changing TSB length from [#{mas_tsb_length}] to [#{setting_value}] minutes"
72
+ selenium.type '//input[@name="value(Time-shift Buffer length )"]', setting_value.to_s
73
+ elsif setting_name.strip.casecmp('dvr_jump_value') == 0
74
+ loginfo2 "Changing DVR jump value from [#{mas_dvr_jump_value}] to [#{setting_value}] minutes"
75
+ selenium.type '//input[@name="value(DVR jump value)"]', setting_value.to_s
76
+ elsif setting_name.strip.casecmp('enable_REW4_FF4') == 0
77
+ loginfo2 "Changing Enable REW4/FF4 from [#{mas_enable_REW4_FF4}] to [#{setting_value}]"
78
+ selenium.select("//select[@name='value(Enable REW4/FF4)']", "label=false") if setting_value.strip.casecmp('false') == 0
79
+ selenium.select("//select[@name='value(Enable REW4/FF4)']", "label=true") if setting_value.strip.casecmp('true') == 0
80
+ elsif setting_name.strip.casecmp('dvr_comp_REW1_value') == 0
81
+ loginfo2 "Changing DVR Comp REW1 value from [#{mas_dvr_comp_REW1_value}] to [#{setting_value}] Seconds"
82
+ selenium.type '//input[@name="value(DVR compensation value for REW1)"]', setting_value.to_s
83
+ elsif setting_name.strip.casecmp('dvr_comp_FF1_value') == 0
84
+ loginfo2 "Changing DVR Comp FF1 value from [#{mas_dvr_comp_FF1_value}] to [#{setting_value}] Seconds"
85
+ selenium.type '//input[@name="value(DVR compensation value for FF1)"]', setting_value.to_s
86
+ end
87
+ selenium.click "dijit_form_Button_0", :wait_for => :page
88
+ _generate_setting_catalog(selenium)
89
+ end
90
+ return true
91
+ rescue StandardError => e
92
+ loginfo2 e.message
93
+ loginfo2 'Unable to change DVR settings on MAS'
94
+ return false
95
+ ensure
96
+ _mas_logout(selenium) unless selenium.nil?
97
+ end
98
+ end
99
+
100
+ # Private method
101
+ def _mas_change_power_save_mode_settings(setting_name,setting_value)
102
+ begin
103
+ selenium = _mas_login
104
+ return false if selenium.nil?
105
+ _navigate_to_stb_settings(selenium)
106
+ selenium.wait_for_text 'Power Save Mode'
107
+ mas_hours_of_inactivity = selenium.get_text("//table[12]/tbody/tr[2]/td/table/tbody/tr[1]/td[2]")
108
+ mas_power_save_active = selenium.get_text("//table[12]/tbody/tr[2]/td/table/tbody/tr[2]/td[2]")
109
+ selenium.click "//a[contains(@href, '/mystroui/editMsoSettings.do?groupName=Power Save Mode')]", :wait_for => :page
110
+ mas_display_to_user = selenium.is_checked("css=input[name=\"userCanChange(Power Save Active)\"]")
111
+ change_required = false
112
+
113
+ if setting_name.casecmp('hours_of_inactivity') == 0 && mas_hours_of_inactivity.to_s == setting_value.to_s.strip
114
+ loginfo2 "Existing # of Hours of Inactivity to Enter Low Power State is already [#{mas_hours_of_inactivity}] hours. No change is required."
115
+ elsif setting_name.casecmp('power_save_active') == 0 && mas_power_save_active.to_s.casecmp(setting_value.to_s.strip) == 0
116
+ loginfo2 "Power Save Active is already [#{mas_power_save_active}]. No change is required."
117
+ elsif setting_name.casecmp('display_to_user') == 0 && setting_value == mas_display_to_user
118
+ loginfo2 "Power Save Active is already [#{mas_display_to_user}]. No change is required."
119
+ else
120
+ loginfo2 "Editing Power Save Mode parameters"
121
+ selenium.wait_for_element "dijit_form_Button_0"
122
+ if setting_name.strip.casecmp('hours_of_inactivity') == 0
123
+ loginfo2 "Changing Hours of inactivity from [#{mas_hours_of_inactivity}] to [#{setting_value}] hours"
124
+ selenium.type '//input[@name="value(# of Hours of Inactivity to Enter Low Power State)"]', setting_value.to_s
125
+ elsif setting_name.strip.casecmp('power_save_active') == 0
126
+ loginfo2 "Changing Power Save Active from [#{mas_power_save_active}] to [#{setting_value}]"
127
+ selenium.select("//select[@name='value(Power Save Active)']", "label=On") if setting_value.strip.casecmp('On') == 0
128
+ selenium.select("//select[@name='value(Power Save Active)']", "label=Off") if setting_value.strip.casecmp('Off') == 0
129
+ elsif setting_name.casecmp('display_to_user') == 0
130
+ loginfo2 "Changing Display to user from [#{mas_display_to_user}] to [#{setting_value}]"
131
+ selenium.check("css=input[name=\"userCanChange(Power Save Active)\"]") if setting_value == true
132
+ selenium.uncheck("css=input[name=\"userCanChange(Power Save Active)\"]") if setting_value == false
133
+ end
134
+ selenium.click "dijit_form_Button_0", :wait_for => :page
135
+ _generate_setting_catalog(selenium)
136
+ end
137
+ return true
138
+ rescue StandardError => e
139
+ loginfo2 e.message
140
+ loginfo2 'Unable to change DVR settings on MAS'
141
+ return false
142
+ ensure
143
+ _mas_logout(selenium) unless selenium.nil?
144
+ end
145
+ end
146
+
147
+ # Use it to change vod asset licence window start/end date on MAS.
148
+ # * *Args* :
149
+ # - +asset+ -> VOD asset whose settings are to be changed
150
+ # - +setting_name+ -> start_date / end_date
151
+ # - +setting_value+ -> date in format: mm/dd/yyyy
152
+ # - +publish+ -> if true, publishes all outstanding catalogs, if false, only generates catalogs
153
+ # * *Returns* :
154
+ # - true if settings changed and published(optional) successfully
155
+ def _mas_change_vod_asset_licence_window(asset,setting_name,setting_value)
156
+ begin
157
+ selenium = _mas_login
158
+ return false if selenium.nil?
159
+ loginfo2 'Navigating to VOD'
160
+ selenium.wait_for_element "dijit_form_DropDownButton_4"
161
+ selenium.click "dijit_form_DropDownButton_4"
162
+ loginfo2 'Navigating to Offerings'
163
+ selenium.click "//tr[@id='dijit_MenuItem_46']/td[2]", :wait_for => :page
164
+ selenium.select_frame "iframemdn"
165
+ loginfo2 "Searching asset: [#{asset}]"
166
+ selenium.wait_for_element "dijit_form_Button_0"
167
+ selenium.type '//input[@id="offeringTitleInputId"]', asset.strip.to_s
168
+ selenium.click "dijit_form_Button_0", :wait_for => :page
169
+ if selenium.is_text_present('No results matched search criteria')
170
+ loginfo2 selenium.get_text("//form[@id='assetSearchForm']/table[2]/tbody/tr[4]/td")
171
+ return false
172
+ end
173
+ searched = selenium.get_text("css=td.genericTitle")
174
+ loginfo2 "Search result: [#{searched}]"
175
+ unless (searched.strip.casecmp(asset.strip) == 0); loginfo2 "Unable to search asset: #{asset}"; return false; end
176
+ loginfo2 "Editing asset: [#{searched}]"
177
+ selenium.click "link=edit"
178
+ selenium.wait_for_element "dijit_form_Button_1"
179
+ if setting_name.strip.casecmp('start_date') == 0
180
+ loginfo2 "Changing Start date to #{setting_value}"
181
+ selenium.type '//input[@id="editLicenseStartDate"]', setting_value.to_s.strip
182
+ elsif setting_name.strip.casecmp('end_date') == 0
183
+ loginfo2 "Changing End date to #{setting_value}"
184
+ selenium.type '//input[@id="editLicenseEndDate"]', setting_value.strip.to_s
185
+ elsif setting_name.strip.casecmp('view_length') == 0
186
+ loginfo2 "Changing Viewing length to #{setting_value}"
187
+ selenium.type '//input[@id="dijit_form_ValidationTextBox_2"]', setting_value.strip.to_s
188
+ end
189
+ selenium.click "dijit_form_Button_1"
190
+ loginfo2 selenium.get_text("id=errorInfo") if selenium.is_element_present("id=errorInfo")
191
+ selenium.click "closeStatusDialogButton"
192
+ sleep 1.min
193
+ return true
194
+ rescue StandardError => e
195
+ loginfo2 e.message
196
+ loginfo2 'Unable to change vod asset parameters on MAS'
197
+ return false
198
+ ensure
199
+ _mas_logout(selenium) unless selenium.nil?
200
+ end
201
+ end
202
+
203
+ # Private method
204
+ def _mas_change_vod_asset_license_end_date_to_past(asset)
205
+ yesterday = mas_current_date - 86400
206
+ yesterday = "#{yesterday.month}/#{yesterday.day}/#{yesterday.year}"
207
+ loginfo2 "Changing licence window end date of asset: [#{asset}] to past date: [#{yesterday}]"
208
+ return _mas_change_vod_asset_licence_window(asset,'end_date',yesterday)
209
+ end
210
+
211
+ # Use it to change vod asset max viewing length on MAS.
212
+ # * *Args* :
213
+ # - +asset+ -> VOD asset whose settings are to be changed
214
+ # - +length+ -> VOD asset max viewing length in format 'DD:HH:MM' (No. of days:No. of hrs: No. of mins)
215
+ # - +publish+ -> if true, publishes all outstanding catalogs, if false, only generates catalogs
216
+ # * *Returns* :
217
+ # - true if settings changed and published(optional) successfully
218
+ def _mas_change_vod_asset_viewing_length(asset,length)
219
+ loginfo2 "Changing max viewing length of asset: [#{asset}] to length: [#{length}]"
220
+ return _mas_change_vod_asset_licence_window(asset,'view_length',length)
221
+ end
222
+
223
+ #Private method
224
+ def _mas_generate_all_catalogs(selenium)
225
+ result = _navigate_to_home_page selenium
226
+ loginfo2 'Unable to navigate to MAS home page' unless result
227
+ return false unless result
228
+ selenium.select_frame "iframemdn"
229
+ selenium.refresh
230
+ selenium.wait_for_text("Find Shows")
231
+ 2.times do
232
+ (1..16).each do |i|
233
+ if ((selenium.is_element_present "dijit_form_Button_#{i}") && (selenium.get_text("dijit_form_Button_#{i}").include?'Generate Catalog'))
234
+ logdebug "Generating catalog at position #{i}"
235
+ selenium.click "dijit_form_Button_#{i}", :wait_for => :page
236
+ sleep 30.sec
237
+ end
238
+ end
239
+ end
240
+ logdebug 'Waiting 2 minutes to let catalog generation complete'
241
+ sleep 2.min
242
+ return true
243
+ end
244
+
245
+ # Private method
246
+ def _mas_create_new_broadcast_service_and_map_to_channel (service_name,unassigned_source_name,tms_id,region_id,unoccupied_channel)
247
+ begin
248
+ selenium = _mas_login
249
+ return false if selenium.nil?
250
+ return false unless _navigate_to_search_service(selenium)
251
+ result = _create_new_broadcast_service(selenium, service_name,unassigned_source_name,tms_id,region_id,unoccupied_channel)
252
+ loginfo2 'Unable to create service' unless result
253
+ return false unless result
254
+ sleep 1.min
255
+ result = _mas_generate_all_catalogs selenium
256
+ loginfo2 'Unable to generate catalogs' unless result
257
+ return result
258
+ ensure
259
+ _mas_logout(selenium) unless selenium.nil?
260
+ end
261
+ end
262
+
263
+ # Private method
264
+ def _mas_delete_service(service_name)
265
+ begin
266
+ selenium = _mas_login
267
+ return false if selenium.nil?
268
+ result = _navigate_to_search_service(selenium)
269
+ loginfo2 'Unable to open search service' unless result
270
+ return false unless result
271
+ loginfo2 "Searching for service name: [#{service_name}]"
272
+ selenium.type "id=searchBox", service_name
273
+ loginfo2 "Clicking on search button"
274
+ selenium.click "dijit_form_Button_0"
275
+ selenium.wait_for_text 'services for search'
276
+ result = selenium.is_text_present 'Found 0 services for search'
277
+ loginfo2 "Unable to search service: #{service_name}" if result
278
+ return false if result
279
+ searched = selenium.get_text("//tbody[@id='dynaBody']/tr[1]/td[1]")
280
+ loginfo2 "Search result: [#{searched}]"
281
+ unless (searched.strip.casecmp(service_name.strip) == 0); loginfo2 "Unable to search service: #{service_name}"; return false; end
282
+ loginfo2 "Deleting service: [#{service_name}]"
283
+ selenium.click "link=Delete", :wait_for => :page
284
+ result = selenium.is_text_present('Are you sure you want to remove the service')
285
+ loginfo2 'Unable to open delete confirmation page' unless result
286
+ return false unless result
287
+ selenium.click "link=OK", :wait_for => :page
288
+ sleep 2.min
289
+ loginfo2 "Service deleted"
290
+ result = _mas_generate_all_catalogs selenium
291
+ loginfo2 'Unable to generate catalogs' unless result
292
+ return result
293
+ rescue StandardError => e
294
+ loginfo2 e.message
295
+ loginfo2 'Unable to delete service on MAS'
296
+ return false
297
+ ensure
298
+ _mas_logout(selenium) unless selenium.nil?
299
+ end
300
+ end
301
+
302
+ #Use this method to change auto HD feture to on or off
303
+ # Also known as easy hd feature
304
+ # * *Returns* :
305
+ # - true if value is changed successfully
306
+ def _mas_change_auto_hd_feature(status)
307
+ begin
308
+ selenium = _mas_login
309
+ return false if selenium.nil?
310
+ _navigate_to_stb_settings(selenium)
311
+ loginfo2 'Editing HD Setup settings'
312
+ selenium.click "//a[contains(@href, '/mystroui/editMsoSettings.do?groupName=HD Setup')]", :wait_for => :page
313
+ case (_set_drop_down_value(selenium,"//select[@name='value(autoHD Feature Enabled)']",status))
314
+ when 1
315
+ selenium.click "dijit_form_Button_0", :wait_for => :page
316
+ return false unless _generate_setting_catalog(selenium)
317
+ when -1
318
+ return false
319
+ end
320
+ return true
321
+ ensure
322
+ _mas_logout(selenium) unless selenium.nil?
323
+ end
324
+ end
325
+
326
+ # Private method
327
+ def _mas_publish_all_catalogs(wait)
328
+ begin
329
+ selenium = _mas_login
330
+ return false if selenium.nil?
331
+ selenium.click "dijit_form_Button_2", :wait_for => :page
332
+ selenium.select_frame "iframemdn"
333
+ loginfo2 "Navigating to Outstanding catalogs page"
334
+ selenium.click "dijit_layout__TabButton_1"
335
+ sleep 1.min
336
+ loginfo2 'Check if publish already in progress'
337
+ return false unless _mas_publish_complete?(selenium)
338
+ loginfo2 'Previous publish over'
339
+ loginfo2 'Publish all outstanding catalogs'
340
+ exec_mas_cmd "mdiags publish publish"
341
+ sleep 1.min
342
+
343
+ if wait
344
+ selenium.refresh
345
+ return false unless _mas_publish_complete?(selenium)
346
+ loginfo2 "Publish complete"
347
+ end
348
+
349
+ return true
350
+ rescue StandardError => e
351
+ loginfo2 e.message
352
+ loginfo2 'Unable publish all outstanding catalogs on MAS'
353
+ return false
354
+ ensure
355
+ _mas_logout(selenium) unless selenium.nil?
356
+ end
357
+ end
358
+
359
+ #private
360
+ #Use this method to set value of dropdown, before setting it checks its current value
361
+ def _set_drop_down_value (selenium, element, label_val)
362
+ if selenium.get_selected_label(element) == label_val
363
+ loginfo2 "Current value of dropdown is already #{label_val}"
364
+ return 0
365
+ else
366
+ loginfo2 "Value of dropdown is set to: [#{label_val}]"
367
+ selenium.select(element, "label=#{label_val}")
368
+ return 1
369
+ end
370
+ return -1
371
+ end
372
+
373
+ #Private
374
+ #Use this method to generate catalog from setting screen
375
+ def _generate_setting_catalog (selenium)
376
+ loginfo2 'Generating catalog'
377
+ selenium.wait_for_element "link=Generate Settings Catalog"
378
+ selenium.click "link=Generate Settings Catalog", :wait_for => :page
379
+ loginfo2 selenium.get_text("//center")
380
+ loginfo2 "Clicking OK to confirm"
381
+ selenium.click "//a[contains(@href, '/mystroui/buildMsoCatalogs.do?referringpage=persistentdatamgr')]", :wait_for => :page
382
+ loginfo2 selenium.get_text("//code")
383
+ sleep 1.min
384
+ return true
385
+ end
386
+
387
+ #private
388
+ #Use this method to create new broadcast service\
389
+ def _create_new_broadcast_service (selenium, service_name, unassigned_source_name, tms_id, region_id, unoccupied_channel)
390
+ selenium.wait_for_element "link=Create a Broadcast Service"
391
+ selenium.click "link=Create a Broadcast Service", :wait_for => :page
392
+ loginfo2 "Entering service name, banner name and grid name: [#{service_name}]"
393
+ selenium.type "//input[@name='bean.editName']", service_name
394
+ selenium.type "id=bannerName", service_name
395
+ selenium.type "id=gridName", service_name
396
+ loginfo2 "Adding source"
397
+ selenium.click "id=addSaSrcButton"
398
+ selenium.wait_for_text "Unassigned Sources"
399
+ loginfo2 "Selecting dropdown value: [#{unassigned_source_name}] in overlay"
400
+ selenium.type "id=sourceIdDrop", unassigned_source_name
401
+ selenium.click "id=addSourceButton"
402
+ sleep 10.sec
403
+ selenium.click "dijit_form_Button_0", :wait_for => :page
404
+ selenium.click "id=saveLogoSelectBtn", :wait_for => :page
405
+ loginfo2 "Entering TMS ID: [#{tms_id}} in overlay"
406
+ selenium.type "//input[@name='bean.searchTmsId']", tms_id
407
+ selenium.click "//input[@type='submit' and @value='Search by TMS ID']"
408
+ sleep 10.sec
409
+ result = selenium.text?('The System could not find any Guide Services based on your request')
410
+ loginfo2 "Unable to find provided TMS ID #{tms_id}" if result
411
+ return false if result
412
+ selenium.wait_for_text "Link Data"
413
+ loginfo2 "Linking Guide data"
414
+ selenium.click "link=Link Data", :wait_for => :page
415
+ loginfo2 "Selecting Region: [#{region_id}]"
416
+ selenium.wait_for_text "Select One or More Regions"
417
+ selenium.click "//input[@id='selectedRegions' and @value='#{region_id}']"
418
+ loginfo2 "Selecting Channel: [#{unoccupied_channel}]"
419
+ _set_drop_down_value(selenium, "id=svcToRegionsChannels", unoccupied_channel)
420
+ selenium.click "id=dijit_form_Button_1", :wait_for => :page
421
+ loginfo2 "Created service"
422
+ return true
423
+ end
424
+
425
+ def _mas_conductor_delete_client_application(application_name)
426
+ begin
427
+ selenium = _mas_login
428
+ return false if selenium.nil?
429
+ loginfo2 'Navigating to STB'
430
+ selenium.wait_for_element "dijit_form_DropDownButton_3"
431
+ selenium.click "dijit_form_DropDownButton_3"
432
+ loginfo2 'Navigating to STB Settings'
433
+ selenium.click "//tr[@id='dijit_MenuItem_30']/td[2]", :wait_for => :page
434
+ selenium.select_frame "iframemdn"
435
+ begin
436
+ (1..50).each{|i|
437
+ app = selenium.get_text("//div[@id='dataTable-page-0']/div[#{i}]/table/tbody/tr/td").strip
438
+ if app.casecmp(application_name) == 0
439
+ loginfo2 "Deleting application: [#{app}]"
440
+ selenium.click("//div[@id='dataTable-page-0']/div[#{i}]/table/tbody/tr/td[9]/a[2]")
441
+ break
442
+ end}
443
+ rescue
444
+ loginfo2 "Client Application: [#{application_name}] not found"
445
+ return false
446
+ end
447
+ if selenium.is_confirmation_present
448
+ loginfo2 selenium.get_confirmation
449
+ if selenium.is_alert_present
450
+ loginfo2 selenium.get_alert
451
+ end
452
+ end
453
+ loginfo2 "Client Application: [#{application_name}] deleted"
454
+ return true
455
+ ensure
456
+ _mas_logout(selenium) unless selenium.nil?
457
+ end
458
+ end
459
+
460
+ # Private method
461
+ def _mas_conductor_dvr_compensation_display_to_user value
462
+ begin
463
+ selenium = _mas_login
464
+ return false if selenium.nil?
465
+ _navigate_to_stb_settings(selenium)
466
+ loginfo2 'Navigate to DVR Compensation Edit Settings Page'
467
+ selenium.click "//a[contains(@href, '/mystroui/editMsoSettings.do?groupName=DVR')]", :wait_for => :page
468
+ click_result = selenium.is_checked("css=input[name=\"userCanChange(DVR Compensation)\"]")
469
+ return true if click_result== value
470
+ if value
471
+ selenium.check("css=input[name=\"userCanChange(DVR Compensation)\"]")
472
+ else
473
+ selenium.uncheck("css=input[name=\"userCanChange(DVR Compensation)\"]")
474
+ end
475
+ selenium.click "id=dijit_form_Button_0", :wait_for => :page
476
+ result = _mas_generate_all_catalogs selenium
477
+ loginfo2 'Unable to generate catalogs' unless result
478
+ return result
479
+ ensure
480
+ _mas_logout(selenium) unless selenium.nil?
481
+ end
482
+ end
483
+
484
+ def _mas_conductor_include_exclude_from_search(service = [], exclude = true)
485
+ begin
486
+ selenium = _mas_login
487
+ return false if selenium.nil?
488
+ loginfo2 "Navigating to Navigator"
489
+ selenium.wait_for_element "id=dijit_form_DropDownButton_0"
490
+ selenium.click "id=dijit_form_DropDownButton_0"
491
+ _selenium_wait_for_menu_to_load
492
+ loginfo2 "Navigating to Guide Data > Exclude from search"
493
+ selenium.wait_for_element "id=dijit_MenuItem_10"
494
+ selenium.click "id=dijit_MenuItem_10"
495
+ sleep 10.sec #sleep to let all services load
496
+ selenium.select_frame "iframemdn"
497
+ selenium.wait_for_element "id=dijit_form_Button_0"
498
+ loginfo2 "Excluding the given services"
499
+ service.each{ |serv|
500
+ if selenium.is_element_present("//input[@name='excludedServices' and @value='#{serv}']")
501
+ logdebug "Service #{serv} is present"
502
+ if !selenium.is_checked("//input[@name='excludedServices' and @value='#{serv}']") && exclude
503
+ logdebug "Service #{serv} is unchecked"
504
+ selenium.check("//input[@name='excludedServices' and @value='#{serv}']")
505
+ elsif selenium.is_checked("//input[@name='excludedServices' and @value='#{serv}']") && !exclude
506
+ logdebug "Service #{serv} is checked"
507
+ selenium.uncheck("//input[@name='excludedServices' and @value='#{serv}']")
508
+ end
509
+ else
510
+ loginfo2 "Service '#{serv}' is not present"
511
+ return false
512
+ end
513
+ }
514
+ loginfo2 'Submitting the changes'
515
+ selenium.click "id=dijit_form_Button_0", :wait_for => :page
516
+
517
+ loginfo2 'Verifying if the services are excluded'
518
+ service.each{ |serv|
519
+ if !selenium.is_checked("//input[@name='excludedServices' and @value='#{serv}']") && exclude
520
+ loginfo2 "Failed to exclude service '#{serv}'"
521
+ return false
522
+ elsif selenium.is_checked("//input[@name='excludedServices' and @value='#{serv}']") && !exclude
523
+ loginfo2 "Failed to remove from exclude, service, '#{serv}'"
524
+ return false
525
+ end
526
+ }
527
+ loginfo2 'Generating catalogs'
528
+ return _mas_generate_all_catalogs(selenium)
529
+ ensure
530
+ _mas_logout(selenium) unless selenium.nil?
531
+ end
532
+ end
533
+
534
+ # Use it to modify Start Over prompt Delay on MAS.
535
+ # * *Args* :
536
+ # - +delay+ -> delay to be set in min
537
+ # * *Returns* :
538
+ # - true if verified, else false
539
+ def _mas_conductor_modify_start_over_prompt_delay(delay)
540
+ begin
541
+ selenium = _mas_login
542
+ return false if selenium.nil?
543
+ _navigate_to_stb_settings(selenium)
544
+ loginfo2 'Navigating to Misc Edit Settings Page'
545
+ selenium.click "//a[contains(@href, '/mystroui/editMsoSettings.do?groupName=Misc')]", :wait_for => :page
546
+ loginfo2 "Changing Enhanced Menu /Start Over delay (minutes) to [#{delay}] minutes"
547
+ selenium.type("css=input[name=\"value(Enhanced Menu /Start Over delay)\"]",delay)
548
+ selenium.click "id=dijit_form_Button_0", :wait_for => :page
549
+ result = _mas_generate_all_catalogs selenium
550
+ loginfo2 'Unable to generate catalogs' unless result
551
+ return result
552
+ ensure
553
+ _mas_logout(selenium) unless selenium.nil?
554
+ end
555
+ end
556
+
557
+ # Private method
558
+ def _mas_conductor_set_filter_HD_guide_data_for_non_HD_stbs(value)
559
+ begin
560
+ selenium = _mas_login
561
+ return false if selenium.nil?
562
+ return false unless _navigate_to_stb_settings(selenium)
563
+ loginfo2 'Navigating to DVR Compensation Edit Settings Page'
564
+ selenium.click "//a[contains(@href, '/mystroui/editMsoSettings.do?groupName=HD Setup')]", :wait_for => :page
565
+ loginfo2 "Changing Filter HD guide data to: [#{value.to_s}]"
566
+ selenium.select("css=select[name=\"value(Filter HD guide data for non-HD STBs)\"]", value)
567
+ selenium.click "id=dijit_form_Button_0", :wait_for => :page
568
+ result = _mas_generate_all_catalogs selenium
569
+ loginfo2 'Unable to generate catalogs' unless result
570
+ return result
571
+ ensure
572
+ _mas_logout(selenium) unless selenium.nil?
573
+ end
574
+ end
575
+
576
+ # Private method
577
+ def _mas_conductor_add_exclude_from_search_for_services_playing_title title = ''
578
+ all_programs = find_programs({:PROGRAM_LONG_TITLE => title})
579
+ services = []
580
+ channel_numbers = all_programs.collect{|p| p[0].to_s.to_i}
581
+ services = mas_db_get_channels("and display_channel in (#{channel_numbers.join(',')})").collect{|channel| channel['SERVICE_NAME'].to_s}
582
+
583
+ loginfo2 "Services to exclude :#{services}"
584
+ result = _mas_conductor_include_exclude_from_search(services)
585
+ loginfo2 "Failed to exclude services playing title #{title}" unless result
586
+ return result
587
+ end
588
+
589
+ # Private method
590
+ def _mas_conductor_remove_exclude_from_search_for_services_playing_title title = ''
591
+ all_programs = find_programs({:PROGRAM_LONG_TITLE => title})
592
+ services = []
593
+ channel_numbers = all_programs.collect{|p| p[0].to_s.to_i}
594
+
595
+ services = mas_db_get_channels("and display_channel in (#{channel_numbers.join(',')})").collect{|channel| channel['SERVICE_NAME'].to_s}
596
+
597
+ loginfo2 "Services to remove from exclude :#{services}"
598
+ result = _mas_conductor_include_exclude_from_search(services,false)
599
+ loginfo2 "Failed to remove exclude from search for services playing title: #{title}" unless result
600
+ return result
601
+ end
602
+
603
+ # Use it to create split on MAS of specified duration.
604
+ # * *Args* :
605
+ # - +primary_service+ -> Primary service to be set ex: ESPNHD
606
+ # - +secondary_service+ -> Secondary service to be set ex: FoxNews
607
+ # - +active_region_id+ -> Active Region id where split service is to be set ex: 56
608
+ # - +split_start_time+ -> Split Start Time (Ruby Format)
609
+ # - +split_duration+ -> Split Duration (Min)
610
+ # * *Returns* :
611
+ # - true
612
+ def _mas_create_split primary_service, secondary_service, active_region_id, split_start_time, split_duration
613
+
614
+ primary_service = primary_service.gsub(/[^a-zA-Z0-9]/, '')
615
+ secondary_service = secondary_service.gsub(/[^a-zA-Z0-9]/, '')
616
+ start_time = "#{split_start_time.strftime("%I")}:#{split_start_time.strftime("%M")}"
617
+
618
+ begin
619
+ selenium = _mas_login
620
+ return false if selenium.nil?
621
+ loginfo2 'Navigating to Split Services and Blackout'
622
+ selenium.wait_for_element "id=dijit_form_DropDownButton_0"
623
+ selenium.click "id=dijit_form_DropDownButton_0"
624
+ loginfo2 'Navigating to Regions/Lineups > Split Services and Blackout'
625
+ selenium.click "css=#dijit_MenuItem_8 > td.dijitReset.dijitMenuItemLabel", :wait_for => :page
626
+ loginfo2 'Navigating to Create Daily Split'
627
+ selenium.select_frame "iframemdn"
628
+ selenium.wait_for_element "link=Create Daily Split"
629
+ selenium.click "link=Create Daily Split", :wait_for => :page
630
+
631
+ selenium.wait_for_element "id=dijit_form_Button_0"
632
+ loginfo2 "Select the primary service as: #{primary_service}"
633
+ selenium.select("name=bean.primarySvc", "label=#{primary_service}")
634
+ loginfo2 "Select the secondary service as: #{secondary_service}"
635
+ selenium.select("name=bean.alternateSvc", "label=#{secondary_service}")
636
+ loginfo2 "Select the Active Regions as: #{active_region_id}"
637
+ selenium.check("//input[@id='togglee' and @value='#{active_region_id}']")
638
+ loginfo2 "Enter the split start time as: #{start_time}"
639
+ selenium.type("name=bean.startTimeString",start_time)
640
+ loginfo2 "Enter the split duration (min) as: #{split_duration}"
641
+ selenium.type("name=bean.duration",split_duration)
642
+ loginfo2 "Submit the changes"
643
+ selenium.click "id=dijit_form_Button_0", :wait_for => :page
644
+
645
+ result = _mas_generate_all_catalogs selenium
646
+ loginfo2 'Unable to generate catalogs' unless result
647
+ return result
648
+ ensure
649
+ _mas_logout(selenium) unless selenium.nil?
650
+ end
651
+ end
652
+
653
+ # Private method
654
+ def _mas_conductor_set_dvr_compensation value
655
+ begin
656
+ selenium = _mas_login
657
+ return false if selenium.nil?
658
+ _navigate_to_stb_settings(selenium)
659
+ dvr_compensation = selenium.get_text("//table[6]/tbody/tr[2]/td/table/tbody/tr[18]/td[2]")
660
+ dvr_compensation = dvr_compensation.split('-')[1].strip
661
+ loginfo2 'Editing DVR parameters'
662
+ selenium.click "//a[contains(@href, '/mystroui/editMsoSettings.do?groupName=DVR')]", :wait_for => :page
663
+ loginfo2 "Changing DVR compensation value from: [#{dvr_compensation}] to [#{value}]"
664
+ option = "User DVR Compensation - #{value}"
665
+ selenium.select("css=select[name=\"value(DVR Compensation)\"]", option)
666
+ selenium.click("id=dijit_form_Button_0", :wait_for => :page)
667
+ loginfo2 "Successfully set DVR compensation value : #{value}"
668
+
669
+ result = _mas_generate_all_catalogs selenium
670
+ loginfo2 'Unable to generate catalogs' unless result
671
+ return result
672
+ rescue StandardError => e
673
+ logdebug "Error while setting DVR Comp value : #{e.message}"
674
+ return false
675
+ ensure
676
+ _mas_logout(selenium) unless selenium.nil?
677
+ end
678
+ end
679
+
680
+ # Private method
681
+ def _mas_create_blackout primary_service, secondary_service, active_region_id, blackout_start_time, blackout_duration
682
+
683
+ primary_service = primary_service.gsub(/[^a-zA-Z0-9]/, '')
684
+ secondary_service = secondary_service.gsub(/[^a-zA-Z0-9]/, '')
685
+ blackout_date = "#{blackout_start_time.strftime("%m")}/#{blackout_start_time.strftime("%d")}/#{blackout_start_time.strftime("%Y")}"
686
+ start_time = "#{blackout_start_time.strftime("%I")}:#{blackout_start_time.strftime("%M")}"
687
+
688
+ begin
689
+ selenium = _mas_login
690
+ return false if selenium.nil?
691
+ loginfo2 'Navigating to Split Services and Blackout'
692
+ selenium.wait_for_element "id=dijit_form_DropDownButton_0"
693
+ selenium.click "id=dijit_form_DropDownButton_0"
694
+ loginfo2 'Navigating to Regions/Lineups > Split Services and Blackout'
695
+ selenium.click "css=#dijit_MenuItem_8 > td.dijitReset.dijitMenuItemLabel", :wait_for => :page
696
+ loginfo2 'Navigating to Create Blackout'
697
+ selenium.select_frame "iframemdn"
698
+ selenium.wait_for_element "link=Create Blackout"
699
+ selenium.click "link=Create Blackout", :wait_for => :page
700
+
701
+ selenium.wait_for_element "id=dijit_form_Button_0"
702
+ loginfo2 "Select the primary service as: #{primary_service}"
703
+ selenium.select("name=bean.primarySvc", "label=#{primary_service}")
704
+ loginfo2 "Select the secondary service as: #{secondary_service}"
705
+ selenium.select("name=bean.alternateSvc", "label=#{secondary_service}")
706
+ loginfo2 "Select the Active Regions as: #{active_region_id}"
707
+ selenium.check("//input[@id='togglee' and @value='#{active_region_id}']")
708
+ loginfo2 "Enter the blackout date as: #{blackout_date}"
709
+ selenium.type("name=bean.blackoutDate",blackout_date)
710
+ loginfo2 "Enter the blackout start time as: #{start_time}"
711
+ selenium.type("name=bean.startTimeString",start_time)
712
+ loginfo2 "Enter the blackout duration (min) as: #{blackout_duration}"
713
+ selenium.type("name=bean.duration",blackout_duration)
714
+
715
+ loginfo2 "Submit the changes"
716
+ selenium.click "id=dijit_form_Button_0", :wait_for => :page
717
+
718
+ result = _mas_generate_all_catalogs selenium
719
+ loginfo2 'Unable to generate catalogs' unless result
720
+ return result
721
+ ensure
722
+ _mas_logout(selenium) unless selenium.nil?
723
+ end
724
+ end
725
+
726
+ # Private method
727
+ def _mas_edit_split existing_primary_service, existing_secondary_service, existing_split_start_time, existing_split_duration, existing_split_region_name , existing_split_region_id, existing_split_type = 'Daily Split', new_primary_service= '', new_secondary_service = '', new_split_start_time = 0, new_split_duration = 0, new_split_region_id = 0
728
+
729
+ existing_split_start = "#{existing_split_start_time.strftime("%I")}:#{existing_split_start_time.strftime("%M")}"
730
+ existing_split = [existing_primary_service, existing_secondary_service, existing_split_type, existing_split_start, existing_split_duration.to_s, existing_split_region_name]
731
+ new_split_start = ''
732
+
733
+ begin
734
+ selenium = _mas_login
735
+ return false if selenium.nil?
736
+ loginfo2 'Navigating to Split Services and Blackout'
737
+ selenium.wait_for_element "id=dijit_form_DropDownButton_0"
738
+ selenium.click "id=dijit_form_DropDownButton_0"
739
+ loginfo2 'Navigating to Regions/Lineups > Split Services and Blackout'
740
+ selenium.click "css=#dijit_MenuItem_8 > td.dijitReset.dijitMenuItemLabel", :wait_for => :page
741
+ selenium.select_frame "iframemdn"
742
+ selenium.wait_for_element "link=Create Daily Split"
743
+
744
+ max_row_table = 50 # Max no. of splits
745
+ max_col_table = 6
746
+
747
+ max_row_table.times do |iRow|
748
+ split_found = false
749
+
750
+ text_primary = selenium.get_table("//tr[2]/td/table.#{iRow}.0")
751
+ text_start_time = selenium.get_table("//tr[2]/td/table.#{iRow}.3")
752
+
753
+ puts text_primary
754
+ puts text_start_time
755
+
756
+ split_found = true if ((text_primary == existing_primary_service) && (text_start_time == existing_split_start))
757
+
758
+ if split_found== true
759
+ new_primary_service = new_primary_service=="" ? existing_primary_service : new_primary_service
760
+ new_secondary_service = new_secondary_service=="" ? existing_secondary_service : new_secondary_service
761
+ new_split_start_time = new_split_start_time==0 ? existing_split_start_time : new_split_start_time
762
+ new_split_duration = new_split_duration==0 ? existing_split_duration : new_split_duration
763
+ new_split_region_id = new_split_region_id==0 ? existing_split_region_id : new_split_region_id
764
+ new_split_start = "#{new_split_start_time.strftime("%I")}:#{new_split_start_time.strftime("%M")}"
765
+ selenium.click "//div[2]/div/table/tbody/tr[2]/td/table/tbody/tr[#{iRow}]/td[7]/center/a", :wait_for => :page
766
+ break
767
+ end
768
+ end
769
+
770
+ loginfo2 "Select the new primary_service primary service as: [#{new_primary_service}]"
771
+ selenium.select("name=bean.primarySvc", "label=#{new_primary_service}")
772
+ loginfo2 "Select the new secondary service as: [#{new_secondary_service}]"
773
+ selenium.select("name=bean.alternateSvc", "label=#{new_secondary_service}")
774
+ loginfo2 "Select the new Active Regions as: [#{new_split_region_id}]"
775
+ selenium.check("//input[@id='togglee' and @value='#{new_split_region_id}']")
776
+ loginfo2 "Enter the new split start time as: [#{new_split_start}]"
777
+ selenium.type("name=bean.startTimeString",new_split_start)
778
+ loginfo2 "Enter the new split duration (min) as: [#{new_split_duration}]"
779
+ selenium.type("name=bean.duration",new_split_duration)
780
+ loginfo2 "Submit the changes"
781
+ selenium.click "id=dijit_form_Button_0", :wait_for => :page
782
+
783
+ result = _mas_generate_all_catalogs selenium
784
+ loginfo2 'Unable to generate catalogs' unless result
785
+ return false unless result
786
+
787
+ return true
788
+ rescue StandardError => e
789
+ loginfo2 e.message
790
+ loginfo2 "Failed to edit the given split: [#{existing_split.join(', ')}]"
791
+ return false
792
+ ensure
793
+ _mas_logout(selenium) unless selenium.nil?
794
+ end
795
+ end
796
+
797
+ # Private method
798
+ def _mas_conductor_add_channel_to_service_on_region channel,service,region_id
799
+ begin
800
+ selenium = _mas_login
801
+ return false if selenium.nil?
802
+ _navigate_to_search_service(selenium)
803
+ loginfo2 "Searching Given Service: #{service}"
804
+ selenium.type "id=searchBox", service
805
+ selenium.click "id=dijit_form_Button_0"
806
+ sleep 20.sec
807
+ loginfo2 'Navigating to exact service'
808
+ i=1
809
+ while selenium.is_element_present("//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{i}]/td/a")
810
+ name = selenium.get_text("//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{i}]/td/a")
811
+ logdebug "Current service #{name}"
812
+ break if name.casecmp(service) == 0
813
+ i+=1
814
+ end
815
+ loginfo2 'Found the given service. Going to channels'
816
+ selenium.click("//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{i}]/td[5]/a", :wait_for => :page)
817
+ loginfo2 'Navigating to Assign Service to Regions'
818
+ selenium.click("link=Assign Service to Regions")
819
+ sleep 20.sec
820
+ loginfo2 "Selecting region id #{region_id}"
821
+ selenium.check "//input[@id='selectedRegions' and @value='#{region_id}']"
822
+ loginfo2 "Selecting channel: #{channel}"
823
+ selenium.select "id=svcToRegionsChannels","#{channel}"
824
+ loginfo2 'Submiting the changes'
825
+ selenium.click "id=dijit_form_Button_0"
826
+ sleep 15.sec
827
+ loginfo2 'Generating catalogs'
828
+ return _mas_generate_all_catalogs(selenium)
829
+ rescue StandardError => e
830
+ logdebug e.message
831
+ loginfo2 "Failed to add channel to given service on given region"
832
+ return false
833
+ ensure
834
+ _mas_logout(selenium) unless selenium.nil?
835
+ end
836
+ end
837
+
838
+ # Private method
839
+ def _mas_conductor_remove_channel_from_service_on_region channel,service,region_name
840
+ begin
841
+ selenium = _mas_login
842
+ return false if selenium.nil?
843
+ _navigate_to_search_service(selenium)
844
+ loginfo2 "Searching Given Service: #{service}"
845
+ selenium.type "id=searchBox", service
846
+ selenium.click "id=dijit_form_Button_0"
847
+ sleep 20.sec
848
+ loginfo2 'Navigating to exact service'
849
+ i=1
850
+ i+=1 while(service.casecmp(selenium.get_text("//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{i}]/td/a"))!=0)
851
+
852
+ loginfo2 'Found the given service. Going to channels'
853
+ selenium.click("//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{i}]/td[5]/a", :wait_for => :page)
854
+
855
+ loginfo2 "Finding region '#{region_name}' from which channel is to be deleted"
856
+ i=1
857
+ i+=1 while(region_name.casecmp(selenium.get_text("//div/div/table[2]/tbody/tr[4]/td/table/tbody/tr[#{i}]/td[1]"))!=0)
858
+
859
+ loginfo2 "Deleting channel '#{channel}' from Region"
860
+ i+=1
861
+ while selenium.is_element_present("//div/div/table[2]/tbody/tr[4]/td/table/tbody/tr[#{i}]/td[2]") && !selenium.get_text("//div/div/table[2]/tbody/tr[4]/td/table/tbody/tr[#{i}]/td[2]").empty?
862
+ channel_found = selenium.get_text("//div/div/table[2]/tbody/tr[4]/td/table/tbody/tr[#{i}]/td[2]")
863
+ logdebug "Found channel #{channel_found}"
864
+ if channel_found.casecmp(channel.to_s)==0
865
+ loginfo2 'Found the given channel. Removing it from given region'
866
+ selenium.click "//div/div/table[2]/tbody/tr[4]/td/table/tbody/tr[#{i}]/td[7]/center/a[2]"
867
+ sleep 5.sec
868
+ selenium.click "//*[@id=\"dijit_form_Button_1\"]"
869
+ sleep 15.sec
870
+ loginfo2 'Generating catalogs'
871
+ _mas_generate_all_catalogs(selenium)
872
+ return true
873
+ end
874
+ i+=1
875
+ end
876
+ loginfo2 'Failed to find the given channel'
877
+ return false
878
+ rescue StandardError => e
879
+ logdebug e.message
880
+ loginfo2 "Failed to remove channel from given service on given region"
881
+ return false
882
+ ensure
883
+ _mas_logout(selenium) unless selenium.nil?
884
+ end
885
+ end
886
+
887
+ # Use it to change to given source on given service
888
+ # * *Args* :
889
+ # - +service_name+ -> Service name
890
+ # - +unassigned_source_name+ -> Source name to assign to service
891
+ # * *Returns* :
892
+ # - true if added source succefully else false
893
+ def _mas_conductor_add_source_to_service service_name, unassigned_source_name, prefered=false
894
+ begin
895
+ selenium = _mas_login
896
+ return false if selenium.nil?
897
+ _navigate_to_search_service(selenium)
898
+ loginfo2 "Searching Given Service"
899
+ selenium.type "id=searchBox", service_name
900
+ selenium.click "id=dijit_form_Button_0"
901
+ sleep 10.sec
902
+ i=1
903
+ service = selenium.get_text("//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{i}]/td[1]/a")
904
+ while(service_name.to_s != service.to_s)
905
+ i=i+1
906
+ service = selenium.get_text("//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{i}]/td[1]/a")
907
+ end
908
+ loginfo2 "Editing Service"
909
+ selenium.click "//tbody[@id='dynaBody']/tr[#{i}]/td[8]/center/a[1]", :wait_for => :page
910
+
911
+ #selenium.wait_for_page_to_load "30000"
912
+ selenium.click "id=addSaSrcButton"
913
+ selenium.wait_for_text "Unassigned Sources"
914
+ loginfo2 "Selecting dropdown value: [#{unassigned_source_name}] in overlay"
915
+ selenium.type "id=sourceIdDrop", unassigned_source_name
916
+ selenium.click "id=addSourceButton"
917
+ loginfo2 "Confirmed source to add"
918
+ sleep 10.sec
919
+ if prefered==true
920
+ loginfo2 "Finding Source #{unassigned_source_name} to prefer"
921
+ i=1
922
+ source_name1 = selenium.get_text("//div[@id='saSourcesGrid-page-0']/div[#{i}]/table/tbody/tr/td[2]")
923
+ source_name2 = selenium.get_text("//div[@id='saSourcesGrid-page-0']/div[#{i}]/table/tbody/tr/td[3]")
924
+ source_name ="#{source_name1} (#{source_name2})"
925
+ loginfo2 "source_name = #{source_name}"
926
+ while (source_name.to_s != unassigned_source_name.to_s)
927
+ i = i+1
928
+ source_name1 = selenium.get_text("//div[@id='saSourcesGrid-page-0']/div[#{i}]/table/tbody/tr/td[2]")
929
+ source_name2 = selenium.get_text("//div[@id='saSourcesGrid-page-0']/div[#{i}]/table/tbody/tr/td[3]")
930
+ source_name ="#{source_name1} (#{source_name2})"
931
+ loginfo2 "source_name = #{source_name}"
932
+ end
933
+ selenium.click("//div[@id='saSourcesGrid-page-0']/div[#{i}]/table/tbody/tr/td[1]/input")
934
+ end
935
+
936
+ selenium.click "dijit_form_Button_0", :wait_for => :page
937
+
938
+ result = _mas_generate_all_catalogs selenium
939
+ loginfo2 'Unable to generate catalogs' unless result
940
+ return false unless result
941
+ rescue StandardError => e
942
+ logdebug "Error while Adding Source to service : #{e.message}"
943
+ return false
944
+ ensure
945
+ _mas_logout(selenium) unless selenium.nil?
946
+ end
947
+
948
+ if prefered == true
949
+ loginfo2 "Successfully Changed source #{unassigned_source_name} to service #{service_name}"
950
+ else
951
+ loginfo2 "Successfully Added source #{unassigned_source_name} to service #{service_name}"
952
+ end
953
+ return true
954
+ end
955
+
956
+ # Use it to remove given source from given service
957
+ # * *Args* :
958
+ # - +service_name+ -> Service name
959
+ # - +source_name_to_delete+ -> Source name to assign to service
960
+ # * *Returns* :
961
+ # - true if added source succefully else false
962
+ def _mas_conductor_remove_source_from_service service_name, source_name_to_delete
963
+ begin
964
+ selenium = _mas_login
965
+ return false if selenium.nil?
966
+ _navigate_to_search_service(selenium)
967
+ loginfo2 "Searching Given Service"
968
+ selenium.type "id=searchBox", service_name
969
+ selenium.click "id=dijit_form_Button_0"
970
+ sleep 10.sec
971
+ i=1
972
+ service = selenium.get_text("//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{i}]/td[1]/a")
973
+ while(service_name.to_s != service.to_s)
974
+ i=i+1
975
+ service = selenium.get_text("//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{i}]/td[1]/a")
976
+ end
977
+ loginfo2 "Editing Service"
978
+ selenium.click "//tbody[@id='dynaBody']/tr[#{i}]/td[8]/center/a[1]", :wait_for => :page
979
+ i=1
980
+ source_name1 = selenium.get_text("//div[@id='saSourcesGrid-page-0']/div[#{i}]/table/tbody/tr/td[2]")
981
+ source_name2 = selenium.get_text("//div[@id='saSourcesGrid-page-0']/div[#{i}]/table/tbody/tr/td[3]")
982
+ source_name ="#{source_name1} (#{source_name2})"
983
+ loginfo2 "source_name = #{source_name}"
984
+ while (source_name.to_s != source_name_to_delete.to_s)
985
+ i = i+1
986
+ source_name1 = selenium.get_text("//div[@id='saSourcesGrid-page-0']/div[#{i}]/table/tbody/tr/td[2]")
987
+ source_name2 = selenium.get_text("//div[@id='saSourcesGrid-page-0']/div[#{i}]/table/tbody/tr/td[3]")
988
+ source_name ="#{source_name1} (#{source_name2})"
989
+ loginfo2 "source_name = #{source_name}"
990
+ end
991
+ loginfo2 "Removing source #{source_name_to_delete} from from service: #{service_name}"
992
+ selenium.click("//div[@id='saSourcesGrid-page-0']/div[#{i}]/table/tbody/tr/td[7]/input")
993
+
994
+ selenium.click("id=removeSaSrcButton")
995
+ selenium.click "id=removeSourcesButton"
996
+ sleep 10.sec
997
+ selenium.click "dijit_form_Button_0", :wait_for => :page
998
+
999
+ result = _mas_generate_all_catalogs selenium
1000
+ loginfo2 'Unable to generate catalogs' unless result
1001
+ return false unless result
1002
+ rescue StandardError => e
1003
+ logdebug "Error while deleting Source from service : #{e.message}"
1004
+ return false
1005
+ ensure
1006
+ _mas_logout(selenium) unless selenium.nil?
1007
+ end
1008
+
1009
+ loginfo2 "Successfully deleted source #{source_name_to_delete} for service #{service_name}"
1010
+ return true
1011
+ end
1012
+
1013
+ # Private method
1014
+ def _mas_conductor_remove_service_from_region service_name, region_name
1015
+ begin
1016
+ selenium = _mas_login
1017
+ return false if selenium.nil?
1018
+ _navigate_to_search_service(selenium)
1019
+ loginfo2 "Searching Given Service"
1020
+ selenium.type "id=searchBox", service_name
1021
+ selenium.click "id=dijit_form_Button_0"
1022
+ sleep 10.sec
1023
+ i=1
1024
+ service = selenium.get_text("//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{i}]/td[1]/a")
1025
+ while(service_name.to_s != service.to_s)
1026
+ i=i+1
1027
+ service = selenium.get_text("//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{i}]/td[1]/a")
1028
+ end
1029
+
1030
+ selenium.click "//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{i}]/td[5]/a", :wait_for => :page
1031
+
1032
+ loginfo2 "Finding region to delete service"
1033
+ i=1
1034
+ region = selenium.get_text "//div/div/table[2]/tbody/tr[4]/td/table/tbody/tr[#{i}]/td[1]"
1035
+ while(region_name.casecmp(region.to_s)!=0)
1036
+ i=i+1
1037
+ region = selenium.get_text "//div/div/table[2]/tbody/tr[4]/td/table/tbody/tr[#{i}]/td[1]"
1038
+ end
1039
+ loginfo2 "Deleting service from Region"
1040
+ while selenium.is_element_present("//div/div/table[2]/tbody/tr[4]/td/table/tbody/tr[#{i+1}]/td[2]") && !selenium.get_text("//div/div/table[2]/tbody/tr[4]/td/table/tbody/tr[#{i+1}]/td[2]").empty?
1041
+ selenium.click "//div/div/table[2]/tbody/tr[4]/td/table/tbody/tr[#{i+1}]/td[7]/center/a[2]"
1042
+ selenium.click "//*[@id=\"dijit_form_Button_1\"]"
1043
+ end
1044
+
1045
+ result = _mas_generate_all_catalogs selenium
1046
+ loginfo2 'Unable to generate catalogs' unless result
1047
+ return false unless result
1048
+ rescue StandardError => e
1049
+ logdebug "Error while deleting a service : #{e.message}"
1050
+ return false
1051
+ ensure
1052
+ _mas_logout(selenium) unless selenium.nil?
1053
+ end
1054
+
1055
+ loginfo2 "Successfully deleted service #{service_name} on Region : #{region_name}"
1056
+ return true
1057
+ end
1058
+
1059
+ # Use it to prefer a source of given service
1060
+ # * *Args* :
1061
+ # - +service_name+ -> Service name
1062
+ # - +source_name_to_modify+ -> Sorce name to modify preference
1063
+ # * *Returns* :
1064
+ # - true if delete service succefully else false
1065
+ def _mas_conductor_prefer_a_source_of_service service_name, source_name_to_modify
1066
+ begin
1067
+ selenium = _mas_login
1068
+ return false if selenium.nil?
1069
+ _navigate_to_search_service(selenium)
1070
+ loginfo2 "Searching Given Service"
1071
+ selenium.type "id=searchBox", service_name
1072
+ selenium.click "id=dijit_form_Button_0"
1073
+ sleep 10.sec
1074
+
1075
+ i=1
1076
+ service = selenium.get_text("//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{i}]/td[1]/a")
1077
+ while(service_name.to_s != service.to_s)
1078
+ i=i+1
1079
+ service = selenium.get_text("//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{i}]/td[1]/a")
1080
+ end
1081
+ loginfo2 "Editing Service"
1082
+ selenium.click "//tbody[@id='dynaBody']/tr[#{i}]/td[8]/center/a[1]", :wait_for => :page
1083
+
1084
+ loginfo2 "Searching Source to prefer"
1085
+ i=1
1086
+ source_name1 = selenium.get_text("//div[@id='saSourcesGrid-page-0']/div[#{i}]/table/tbody/tr/td[2]")
1087
+ source_name2 = selenium.get_text("//div[@id='saSourcesGrid-page-0']/div[#{i}]/table/tbody/tr/td[3]")
1088
+ source_name ="#{source_name1} (#{source_name2})"
1089
+ loginfo2 "source_name = #{source_name}"
1090
+ while (source_name.to_s != source_name_to_modify.to_s)
1091
+ i = i+1
1092
+ source_name1 = selenium.get_text("//div[@id='saSourcesGrid-page-0']/div[#{i}]/table/tbody/tr/td[2]")
1093
+ source_name2 = selenium.get_text("//div[@id='saSourcesGrid-page-0']/div[#{i}]/table/tbody/tr/td[3]")
1094
+ source_name ="#{source_name1} (#{source_name2})"
1095
+ loginfo2 "source_name = #{source_name}"
1096
+ end
1097
+
1098
+ selenium.click("//div[@id='saSourcesGrid-page-0']/div[#{i}]/table/tbody/tr/td[1]/input")
1099
+ selenium.click "dijit_form_Button_0", :wait_for => :page
1100
+
1101
+ result = _mas_generate_all_catalogs selenium
1102
+ loginfo2 'Unable to generate catalogs' unless result
1103
+ return false unless result
1104
+ rescue StandardError => e
1105
+ logdebug "Error while deleting a service : #{e.message}"
1106
+ return false
1107
+ ensure
1108
+ _mas_logout(selenium) unless selenium.nil?
1109
+ end
1110
+
1111
+ loginfo2 "Successfully prefered a #{source_name_to_modify} for service #{service_name}"
1112
+ return true
1113
+ end
1114
+
1115
+ #Use it to change the default language
1116
+ # * *Args* :
1117
+ # - +language+ -> English/Spanish
1118
+ # * *Returns* :
1119
+ # - true if changed succefully else false
1120
+ def _mas_conductor_change_default_language_to language
1121
+ if language.strip.casecmp('English')==0
1122
+ language = 'English'
1123
+ else
1124
+ language = 'Spanish'
1125
+ end
1126
+ begin
1127
+ selenium = _mas_login
1128
+ return false if selenium.nil?
1129
+ _navigate_to_stb_settings(selenium)
1130
+ selenium.wait_for_text 'STB Display language'
1131
+ default = selenium.get_text("//div[2]/div/div/table/tbody/tr[2]/td/table/tbody/tr/td[2]")
1132
+ loginfo2 "Default langugae: #{default}"
1133
+ if (default.casecmp(language)==0)
1134
+ loginfo2 "Language already set to '#{language}'. Nothing to do"
1135
+ else
1136
+ loginfo2 'Changing the default language'
1137
+ selenium.click "//a[contains(@href, 'Language')]", :wait_for => :page
1138
+ selenium.select "//select[@name='value(STB Display language)']", "label=#{language}"
1139
+ selenium.click "//*[@id=\"dijit_form_Button_0\"]", :wait_for => :page
1140
+
1141
+ loginfo2 'Verifying changes'
1142
+ selenium.wait_for_text 'STB Display language'
1143
+ default = selenium.get_text("//div[2]/div/div/table/tbody/tr[2]/td/table/tbody/tr/td[2]")
1144
+ loginfo2 "Default language set: #{default}"
1145
+ unless (default.casecmp(language)==0)
1146
+ loginfo2 "Failed to set default language to #{language}"
1147
+ return false
1148
+ end
1149
+ # _generate_setting_catalog(selenium)
1150
+ loginfo2 'Succesfully changed the default language'
1151
+ end
1152
+ return true
1153
+ rescue StandardError => e
1154
+ logdebug e.message
1155
+ loginfo2 "Failed to change default language"
1156
+ return false
1157
+ ensure
1158
+ _mas_logout(selenium) unless selenium.nil?
1159
+ end
1160
+ end
1161
+
1162
+ # Private method
1163
+ def _mas_conductor_change_purchase_pin new_purchase_pin
1164
+ begin
1165
+ selenium = _mas_login
1166
+ return false if selenium.nil?
1167
+ _navigate_to_stb_settings(selenium)
1168
+
1169
+ loginfo2 'Navigate to PIN ENTRY PARAMETERS Edit Settings Page'
1170
+ selenium.click '//a[contains(@href, \'/mystroui/editMsoSettings.do?groupName=PIN Entry Parameters\')]', :wait_for => :page
1171
+
1172
+ loginfo2 'Entering the new purchase PIN'
1173
+ selenium.type('css=input[name="value(Purchase PIN Number)"]',new_purchase_pin)
1174
+
1175
+ loginfo2 'Submitting the changes'
1176
+ selenium.click "id=dijit_form_Button_0", :wait_for => :page
1177
+
1178
+ result = _mas_generate_all_catalogs selenium
1179
+ loginfo2 'Unable to generate catalogs' unless result
1180
+ return result
1181
+ rescue StandardError => e
1182
+ logdebug "Error while setting purchase PIN value : #{e.message}"
1183
+ return false
1184
+ ensure
1185
+ _mas_logout(selenium) unless selenium.nil?
1186
+ end
1187
+ end
1188
+
1189
+ # Private method
1190
+ def _mas_conductor_remove_channel_from_lineup region_name, channel_number
1191
+
1192
+ channel_info = guide_screen_channel_info channel_number
1193
+ if channel_info.nil?
1194
+ loginfo2 "Failed to get channel info from MAS-DB query", true
1195
+ return false
1196
+ end
1197
+
1198
+ begin
1199
+ selenium = _mas_login
1200
+ return false if selenium.nil?
1201
+
1202
+ _navigate_to_search_service(selenium)
1203
+
1204
+ loginfo2 "Searching service for the given channel"
1205
+ selenium.type "id=searchBox", channel_info[:service_name]
1206
+ selenium.click "id=dijit_form_Button_0"
1207
+ sleep 10.sec
1208
+
1209
+ iRow=1
1210
+ service = selenium.get_text("//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{iRow}]/td")
1211
+
1212
+ while(channel_info[:service_name].to_s!=service)
1213
+ iRow = iRow+1
1214
+ service = selenium.get_text("//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{iRow}]/td")
1215
+ end
1216
+
1217
+ selenium.click "//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{iRow}]/td[5]/a", :wait_for => :page
1218
+
1219
+ loginfo2 "Finding Region to delete mapping"
1220
+ iRow=1
1221
+ region = selenium.get_text("//div/div/table[2]/tbody/tr[4]/td/table/tbody/tr[#{iRow}]/td")
1222
+ while(region_name!=region)
1223
+ iRow = iRow+1
1224
+ region = selenium.get_text("//div/div/table[2]/tbody/tr[4]/td/table/tbody/tr[#{iRow}]/td")
1225
+ end
1226
+
1227
+ loginfo2 "Deleting the corresponding Mapping"
1228
+ selenium.click "//div/div/table[2]/tbody/tr[4]/td/table/tbody/tr[#{iRow+1}]/td[7]/center/a[2]"
1229
+ sleep 5.sec
1230
+
1231
+ selenium.click "//*[@id=\"dijit_form_Button_1\"]", :wait_for => :page
1232
+
1233
+ result = _mas_generate_all_catalogs selenium
1234
+ loginfo2 'Unable to generate catalogs' unless result
1235
+ return result
1236
+ rescue StandardError => e
1237
+ logdebug "Error while removing channel from Lineup: #{e.message}"
1238
+ return false
1239
+ ensure
1240
+ _mas_logout(selenium) unless selenium.nil?
1241
+ end
1242
+ end
1243
+
1244
+ #Private method
1245
+ def _mas_conductor_add_channel_to_lineup region_name, region_id, channel_number
1246
+
1247
+ channel_info = guide_screen_channel_info channel_number
1248
+ if channel_info.nil?
1249
+ loginfo2 "Failed to get channel info from MAS-DB query", true
1250
+ return false
1251
+ end
1252
+
1253
+ begin
1254
+ selenium = _mas_login
1255
+ return false if selenium.nil?
1256
+
1257
+ _navigate_to_search_service(selenium)
1258
+
1259
+ loginfo2 "Searching service for the given channel"
1260
+ selenium.type "id=searchBox", channel_info[:service_name]
1261
+ selenium.click "id=dijit_form_Button_0"
1262
+ sleep 10.sec
1263
+
1264
+ iRow=1
1265
+ service = selenium.get_text("//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{iRow}]/td")
1266
+
1267
+ while(channel_info[:service_name].to_s!=service)
1268
+ iRow = iRow+1
1269
+ service = selenium.get_text("//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{iRow}]/td")
1270
+ end
1271
+
1272
+ selenium.click "//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{iRow}]/td[5]/a", :wait_for => :page
1273
+
1274
+ loginfo2 "Assigning service to given region"
1275
+ selenium.click "link=Assign Service to Regions"
1276
+
1277
+ loginfo2 "Selecting the given Region"
1278
+ selenium.click "//input[@id='selectedRegions' and @value='#{region_id}']"
1279
+
1280
+ loginfo2 "Selecting the given channel"
1281
+ selenium.select "id=svcToRegionsChannels", "label=#{channel_number}"
1282
+
1283
+ loginfo2 "Submitting the changes"
1284
+ selenium.click "id=dijit_form_Button_0"
1285
+
1286
+ result = _mas_generate_all_catalogs selenium
1287
+ loginfo2 'Unable to generate catalogs' unless result
1288
+ return result
1289
+ rescue StandardError => e
1290
+ logdebug "Error while adding channel to Lineup: #{e.message}"
1291
+ return false
1292
+ ensure
1293
+ _mas_logout(selenium) unless selenium.nil?
1294
+ end
1295
+ end
1296
+
1297
+ # Use it to set ppv event source and service type for given ppv service
1298
+ # * *Args* :
1299
+ # - +service_name+ -> [String] service name
1300
+ # - +ppv_event_source+ -> [String] event sorce
1301
+ # - +service_type+ -> [String] sd/hd
1302
+ # * *Returns* :
1303
+ # - true if delete service succefully else false
1304
+ def _mas_conductor_set_ppv_event_source_and_service_type service_name, ppv_event_source,service_type
1305
+ begin
1306
+ selenium = _mas_login
1307
+ return false if selenium.nil?
1308
+ _navigate_to_search_service(selenium)
1309
+ loginfo2 "Searching Given Service"
1310
+ selenium.type "id=searchBox", service_name
1311
+ selenium.click "id=dijit_form_Button_0"
1312
+ sleep 20.sec
1313
+ loginfo2 'Navigating to exact service'
1314
+ # getting row number of table where column value is same as service name
1315
+ i=1
1316
+ i+=1 while(service_name.casecmp(selenium.get_text("//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{i}]/td/a"))!=0)
1317
+
1318
+ # Click on the same row - edit column text
1319
+ loginfo2 'Found the given service. Going to Edit Service'
1320
+ selenium.click "//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{i}]/td[8]/center/a[1]", :wait_for => :page
1321
+ loginfo2 "selecting event source"
1322
+ selenium.select "name=bean.saEventSourceID", "label=#{ppv_event_source}"
1323
+
1324
+ result = selenium.is_checked("//input[@id='saEventHighDefCb']")
1325
+ if (service_type.casecmp('hd')!= 0) and result
1326
+ selenium.uncheck("//input[@id='saEventHighDefCb']")
1327
+ elsif (service_type.casecmp('hd')== 0) and !result
1328
+ selenium.check("//input[@id='saEventHighDefCb']")
1329
+ end
1330
+
1331
+ loginfo2 "confirming first page"
1332
+ selenium.click "dijit_form_Button_0", :wait_for => :page
1333
+ sleep 1.min
1334
+ result = _mas_generate_all_catalogs selenium
1335
+ loginfo2 'Unable to generate catalogs' unless result
1336
+ return result
1337
+ rescue StandardError => e
1338
+ logdebug "Error while setting ppv event source to #{service_type}: #{e.message}"
1339
+ return false
1340
+ ensure
1341
+ _mas_logout(selenium) unless selenium.nil?
1342
+ end
1343
+ end
1344
+
1345
+ # Use it to set ppv barker source and service type for given ppv service
1346
+ # * *Args* :
1347
+ # - +service_name+ -> [String] service name
1348
+ # - +ppv_barker_source+ -> [String] barker sorce
1349
+ # - +service_type+ -> [String] sd/hd as string
1350
+ # * *Returns* :
1351
+ # - true if delete service succefully else false
1352
+ def _mas_conductor_set_ppv_barker_source_and_service_type service_name, ppv_barker_source,service_type
1353
+ begin
1354
+ selenium = _mas_login
1355
+ return false if selenium.nil?
1356
+ _navigate_to_search_service(selenium)
1357
+ loginfo2 "Searching Given Service"
1358
+ selenium.type "id=searchBox", service_name
1359
+ selenium.click "id=dijit_form_Button_0"
1360
+ sleep 20.sec
1361
+ # getting row number of table where column value is same as service name
1362
+ loginfo2 'Navigating to exact service'
1363
+ i=1
1364
+ i+=1 while(service_name.casecmp(selenium.get_text("//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{i}]/td/a"))!=0)
1365
+
1366
+ # Click on the same row - edit column text
1367
+ loginfo2 'Found the given service. Going to Edit Service'
1368
+ selenium.click "//div[2]/div/table[3]/tbody/tr[2]/td/table/tbody/tr[#{i}]/td[8]/center/a[1]", :wait_for => :page
1369
+ loginfo2 "selecting barker source"
1370
+ selenium.select "name=bean.saBarkerSourceID", "label=#{ppv_barker_source}"
1371
+
1372
+ result = selenium.is_checked("//input[@id='saEventHighDefCb']")
1373
+ if (service_type.casecmp('hd')!= 0) and result
1374
+ selenium.uncheck("//input[@id='saBarkerHighDefCb']")
1375
+ elsif (service_type.casecmp('hd')== 0) and !result
1376
+ selenium.check("//input[@id='saBarkerHighDefCb']")
1377
+ end
1378
+
1379
+ loginfo2 "confirming first page"
1380
+ selenium.click "dijit_form_Button_0", :wait_for => :page
1381
+ sleep 1.min
1382
+ result = _mas_generate_all_catalogs selenium
1383
+ loginfo2 'Unable to generate catalogs' unless result
1384
+ return result
1385
+ rescue StandardError => e
1386
+ logdebug "Error while setting ppv barker source source to #{service_type}: #{e.message}"
1387
+ return false
1388
+ ensure
1389
+ _mas_logout(selenium) unless selenium.nil?
1390
+ end
1391
+ end
1392
+
1393
+ # Use it to change value Graphics Transparency on STB Settings from MAS.
1394
+ # * *Args* :
1395
+ # - +setting_value+ -> value to assign to graphic transparency {true, false}
1396
+ # * *Returns* :
1397
+ # - true if settings changed and published(optional) successfully
1398
+ def _mas_conductor_set_graphics_transparency setting_value,publish=false
1399
+ begin
1400
+ selenium = _mas_login
1401
+ return false if selenium.nil?
1402
+ _navigate_to_stb_settings(selenium)
1403
+ selenium.wait_for_text 'Misc'
1404
+ graphics_trans_value = selenium.get_text("//div[2]/div/div/table[10]/tbody/tr[2]/td/table/tbody/tr[9]/td[2]")
1405
+ if graphics_trans_value.to_s.casecmp(setting_value.strip.to_s) == 0
1406
+ loginfo2 "Existing Graphics Transparency is already [#{graphics_trans_value}]. No change is required."
1407
+ else
1408
+ loginfo2 "Editing graphics transperancy"
1409
+ selenium.click "//a[contains(@href, '/mystroui/editMsoSettings.do?groupName=Misc')]", :wait_for => :page
1410
+ selenium.wait_for_element "dijit_form_Button_0"
1411
+ loginfo2 "Changing graphics transperancy from [#{graphics_trans_value}] to [#{setting_value}]"
1412
+ selenium.select("css=select[name='value(Graphics Transparency)']", setting_value)
1413
+ selenium.click "dijit_form_Button_0", :wait_for => :page
1414
+ _generate_setting_catalog(selenium)
1415
+ end
1416
+ rescue StandardError => e
1417
+ loginfo2 e.message
1418
+ loginfo2 'Unable to change Graphics Transparency on MAS'
1419
+ selenium.close_current_browser_session
1420
+ return false
1421
+ ensure
1422
+ _mas_logout(selenium) unless selenium.nil?
1423
+ end
1424
+
1425
+ if publish
1426
+ return false unless mas_publish_all_catalogs
1427
+ end
1428
+
1429
+ return true
1430
+ end
1431
+
1432
+ #private method
1433
+ def _mas_conductor_set_paused_session_timeout new_paused_session_timeout
1434
+ begin
1435
+ selenium = _mas_login
1436
+ return false if selenium.nil?
1437
+ return false unless _navigate_to_stb_settings(selenium)
1438
+
1439
+ loginfo2 "Navigating to Edit Timeout parameters"
1440
+ selenium.click "//a[contains(@href, '/mystroui/editMsoSettings.do?groupName=Timeout Parameters')]", :wait_for => :page
1441
+
1442
+ loginfo2 "Editing the Paused Session Timeout"
1443
+ selenium.type("css=input[name=\"value(Paused Session Timeout)\"]", new_paused_session_timeout)
1444
+
1445
+ selenium.click "id=dijit_form_Button_0", :wait_for => :page
1446
+
1447
+ result = _mas_generate_all_catalogs selenium
1448
+ loginfo2 'Unable to generate catalogs' unless result
1449
+ return result
1450
+ rescue StandardError => e
1451
+ logdebug "Error while changing pause session timeout from MAS: #{e.message}"
1452
+ return false
1453
+ ensure
1454
+ _mas_logout(selenium) unless selenium.nil?
1455
+ end
1456
+ end
1457
+
1458
+ # Private method
1459
+ def _mas_conductor_set_display_sleep_timer_in_quick_settings value = true
1460
+ begin
1461
+ selenium = _mas_login
1462
+ return [] if selenium.nil?
1463
+ _navigate_to_stb_settings(selenium)
1464
+ loginfo2 'Fetching Power Save mode settings'
1465
+ selenium.wait_for_text 'Display sleep timer in Quick Settings menu'
1466
+ set_value = selenium.get_text('//div[2]/div/div/table[17]/tbody/tr[2]/td/table/tbody/tr/td[2]')
1467
+ unless set_value == value.to_s
1468
+ loginfo2 "Value of 'Display sleep timer in Quick Settings menu' set to #{set_value}. Navigating to 'edit settings'"
1469
+ selenium.click('//div[2]/div/div/table[17]/tbody/tr/td/table/tbody/tr/td[2]/a', :wait_for => :page)
1470
+ loginfo2 "Selecting value #{value}"
1471
+ selenium.select('css=select[name="value(Display sleep timer in Quick Settings menu)"]', value)
1472
+ loginfo2 "Submitting the changes"
1473
+ selenium.click('id=dijit_form_Button_0', :wait_for => :page)
1474
+ selenium.wait_for_text 'Display sleep timer in Quick Settings menu'
1475
+ set_value = selenium.get_text('//div[2]/div/div/table[17]/tbody/tr[2]/td/table/tbody/tr/td[2]')
1476
+ loginfo2 "Verifying the changes"
1477
+ unless set_value == value.to_s
1478
+ loginfo2 "Failed to set value of 'Display sleep timer in Quick Settings menu' to #{value}"
1479
+ return false
1480
+ else
1481
+ loginfo2 "Value of 'Display sleep timer in Quick Settings menu' set to #{value}"
1482
+ _generate_setting_catalog(selenium)
1483
+ end
1484
+ else
1485
+ loginfo2 "Value of 'Display sleep timer in Quick Settings menu' already set to #{value}"
1486
+ end
1487
+ return true
1488
+ ensure
1489
+ _mas_logout(selenium) unless selenium.nil?
1490
+ end
1491
+ end
1492
+
1493
+ # Use it to set value of 'EID for authorization of Start Over'
1494
+ # * *Args* :
1495
+ # - +value+ -> (Integer)Value to set
1496
+ # * *Returns* :
1497
+ # - true if able to set else false
1498
+ def _mas_conductor_set_eid_for_authorization_of_start_over(value)
1499
+ begin
1500
+ selenium = _mas_login
1501
+ return false if selenium.nil?
1502
+ _navigate_to_stb_settings(selenium)
1503
+ loginfo2 'Fetching Power Save mode settings'
1504
+ selenium.wait_for_text 'EID for authorization of Start Over'
1505
+ set_value = selenium.get_text('//div[2]/div/div/table[14]/tbody/tr[2]/td/table/tbody/tr[4]/td[2]').to_i
1506
+ unless set_value == value
1507
+ loginfo2 "Value of 'EID for authorization of Start Over' set to #{set_value}. Navigating to 'edit settings'"
1508
+ selenium.click('//div[2]/div/div/table[14]/tbody/tr/td/table/tbody/tr/td[2]/a', :wait_for => :page)
1509
+ loginfo2 "Selecting value #{value}"
1510
+ selenium.select('css=select[name="value(EID for authorization of Start Over)"]', "value=#{value}")
1511
+ loginfo2 "Submitting the changes"
1512
+ selenium.click('id=dijit_form_Button_0', :wait_for => :page)
1513
+ selenium.wait_for_text 'EID for authorization of Start Over'
1514
+ set_value = selenium.get_text('//div[2]/div/div/table[14]/tbody/tr[2]/td/table/tbody/tr[4]/td[2]').to_i
1515
+ loginfo2 "Verifying the changes"
1516
+ unless set_value == value
1517
+ loginfo2 "Failed to set value of 'EID for authorization of Start Over' to #{value}"
1518
+ return false
1519
+ else
1520
+ loginfo2 "Value of 'EID for authorization of Start Over' set to #{value}"
1521
+ return false unless _generate_setting_catalog(selenium)
1522
+ end
1523
+ else
1524
+ loginfo2 "Value of 'EID for authorization of Start Over' already set to #{value}"
1525
+ end
1526
+ return true
1527
+ ensure
1528
+ _mas_logout(selenium) unless selenium.nil?
1529
+ end
1530
+ end
1531
+
1532
+ # Private method
1533
+ def _mas_conductor_set_start_over_eid_for_service(service_name, eid)
1534
+ begin
1535
+ selenium = _mas_login
1536
+ return false if selenium.nil?
1537
+ return false unless _navigate_to_search_service(selenium)
1538
+ loginfo2 "Searching Given Service: [#{service_name}]"
1539
+ selenium.type "id=searchBox", service_name
1540
+ selenium.click "id=dijit_form_Button_0"
1541
+ selenium.wait_for_text "Found"
1542
+ loginfo2 "Opening service: [#{service_name}]"
1543
+ begin
1544
+ (1..100).each{|i|
1545
+ if selenium.get_text("//tbody[@id='dynaBody']/tr[#{i}]/td").strip == service_name.strip
1546
+ loginfo2 "Found service: [#{service_name}]"
1547
+ loginfo2 "Click Edit"
1548
+ selenium.click "//tbody[@id='dynaBody']/tr[#{i}]/td[8]/center/a", :wait_for => :page
1549
+ break
1550
+ end}
1551
+ rescue
1552
+ loginfo2 "Service: [#{service_name}] not found"
1553
+ return false
1554
+ end
1555
+
1556
+ selenium.wait_for_text "SA Start Over Entitlement ID"
1557
+
1558
+ existing = selenium.get_selected_label("name=bean.saSOEID")
1559
+ logdebug "SO EID: [#{existing}]"
1560
+
1561
+ selenium.select("name=bean.saSOEID", "value=#{eid}")
1562
+
1563
+ changed = selenium.get_selected_label("name=bean.saSOEID")
1564
+ logdebug "SO EID changed to: [#{changed}]"
1565
+ selenium.click "id=dijit_form_Button_0", :wait_for => :page
1566
+ return true
1567
+ rescue StandardError => e
1568
+ loginfo2 e.message
1569
+ loginfo2 "Unable to change SO EID to: [#{eid}] for service: [#{service_name}] from MAS"
1570
+ return false
1571
+ ensure
1572
+ _mas_logout(selenium) unless selenium.nil?
1573
+ end
1574
+ end
1575
+
1576
+ # Private method
1577
+ def _mas_conductor_change_screen_saver_timeout value
1578
+ begin
1579
+ selenium = _mas_login
1580
+ return false if selenium.nil?
1581
+ _navigate_to_stb_settings(selenium)
1582
+ time_out = selenium.get_text("//table[10]/tbody/tr[2]/td/table/tbody/tr[2]/td[2]")
1583
+ loginfo2 'Editing DVR parameters'
1584
+ selenium.click "//a[contains(@href, '/mystroui/editMsoSettings.do?groupName=Misc')]", :wait_for => :page
1585
+ loginfo2 "Changing Screen saver timeout from: [#{time_out}] to [#{value}]"
1586
+ selenium.type('css=input[name="value(Screen Saver Timeout {0 to disable})"]', value)
1587
+ selenium.click("id=dijit_form_Button_0", :wait_for => :page)
1588
+ loginfo2 "Successfully set Screen saver timeout: [#{value}] minutes"
1589
+
1590
+ result = _mas_generate_all_catalogs selenium
1591
+ loginfo2 'Unable to generate catalogs' unless result
1592
+ return result
1593
+ rescue StandardError => e
1594
+ logdebug "Error while setting screen saver timeout value : #{e.message}"
1595
+ return false
1596
+ ensure
1597
+ _mas_logout(selenium) unless selenium.nil?
1598
+ end
1599
+ end
1600
+
1601
+ # Private method
1602
+ def _download_new_tms_data_and_generate_guide
1603
+ loginfo2 'Downloading new tms data and generating guide'
1604
+ cmd = "mdiags guide generate force"
1605
+ loginfo2 "Executing MAS command: #{cmd}"
1606
+ result = exec_mas_cmd cmd
1607
+
1608
+ #VERIFYING
1609
+ 3.times do
1610
+ loginfo2 'Sleeping 10 min to let guide data generate'
1611
+ sleep 10.min
1612
+
1613
+ loginfo2 'Verifying in mas conductor if guide is generated'
1614
+ selenium = _mas_login
1615
+ return false if selenium.nil?
1616
+ selenium.select_frame "iframemdn"
1617
+ selenium.wait_for_element("//tbody[@id='MDNGuideManager_tbody']/tr/td[2]")
1618
+ text = selenium.get_text("//tbody[@id='MDNGuideManager_tbody']/tr/td[2]")
1619
+ loginfo3 "TEXT: #{text}"
1620
+ if text.include?('No action required')
1621
+ loginfo2 'Catalogs are generated'
1622
+ mas_logout(selenium)
1623
+ return true
1624
+ end
1625
+ mas_logout(selenium)
1626
+ end
1627
+
1628
+ loginfo2 'Failed to verify if catalogs are generated'
1629
+ return false
1630
+ end
1631
+
1632
+ # Private method
1633
+ def _mas_delete_split existing_primary_service, existing_split_start_time
1634
+ existing_split_start = "#{existing_split_start_time.strftime("%I")}:#{existing_split_start_time.strftime("%M")}"
1635
+
1636
+ begin
1637
+ selenium = _mas_login
1638
+ return false if selenium.nil?
1639
+ loginfo2 'Navigating to Split Services and Blackout'
1640
+ selenium.wait_for_element "id=dijit_form_DropDownButton_0"
1641
+ selenium.click "id=dijit_form_DropDownButton_0"
1642
+ loginfo2 'Navigating to Regions/Lineups > Split Services and Blackout'
1643
+ selenium.click "css=#dijit_MenuItem_8 > td.dijitReset.dijitMenuItemLabel", :wait_for => :page
1644
+ selenium.select_frame "iframemdn"
1645
+ selenium.wait_for_element "link=Create Daily Split"
1646
+
1647
+ max_row_table = 50 # Max no. of splits
1648
+ max_col_table = 6
1649
+
1650
+ max_row_table.times do |iRow|
1651
+ split_found = false
1652
+
1653
+ text_primary = selenium.get_table("//tr[2]/td/table.#{iRow}.0")
1654
+ text_start_time = selenium.get_table("//tr[2]/td/table.#{iRow}.3")
1655
+
1656
+ split_found = true if ((text_primary == existing_primary_service) && (text_start_time == existing_split_start))
1657
+
1658
+ if split_found== true
1659
+ selenium.click "xpath=(//a[contains(text(),'Delete')])[#{iRow}]", :wait_for => :page
1660
+ selenium.wait_for_element "link=OK"
1661
+ selenium.click "link=OK", :wait_for => :page
1662
+ break
1663
+ end
1664
+ end
1665
+
1666
+ result = _mas_generate_all_catalogs selenium
1667
+ loginfo2 'Unable to generate catalogs' unless result
1668
+ return false unless result
1669
+
1670
+ return true
1671
+ rescue StandardError => e
1672
+ loginfo2 e.message
1673
+ loginfo2 "Failed to delete the given split"
1674
+ return false
1675
+ ensure
1676
+ _mas_logout(selenium) unless selenium.nil?
1677
+ end
1678
+ end
1679
+
1680
+ #################################################### MAS Publish methods using locks #######################################################################
1681
+
1682
+ #Use this method to publish all generated outstanding catalogs
1683
+ # * *Args* :
1684
+ # - +wait+ -> true if script needs to wait for publish to complete, false otherwise
1685
+ # * *Returns* :
1686
+ # - true if publish gets completed successfully, false otherwise
1687
+ def mas_conductor_publish_all_outstanding_catalogs(wait=true)
1688
+ loginfo2 "Attempting to take MAS publish lock."
1689
+ 3.times do |pub_attempt|
1690
+ loginfo2 "Retry attempt: [#{pub_attempt}]" if pub_attempt > 0
1691
+ pub_status = lock_resource('MAS', 'publish', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 90.min) {
1692
+ loginfo2 "I got the MAS publish lock."
1693
+ minutes_till_next_hour = 60 - DateTime.now.min
1694
+ loginfo2 "Sleeping for #{minutes_till_next_hour} minutes, till next hour begins."
1695
+ sleep minutes_till_next_hour.min
1696
+
1697
+ loginfo2 "Performing Publish."
1698
+ return false unless _mas_publish_all_catalogs(wait)
1699
+ }
1700
+
1701
+ if pub_status == 0
1702
+ loginfo2 "I published."
1703
+ # Expect from ONE STB
1704
+ break
1705
+ elsif pub_status == 1
1706
+ loginfo2 "Someone else published."
1707
+ # Expect from other STBs.
1708
+ break
1709
+ else
1710
+ loginfo2 "Timed out..."
1711
+ end
1712
+
1713
+ if pub_status == -1 and pub_attempt == 2
1714
+ log PREREQUISITES_NOT_MET, "Script is unable to take MAS publish lock after 3 attempts. Aborting..."
1715
+ end
1716
+ end
1717
+
1718
+ if pub_status != -1
1719
+ loginfo2 "Publish completed. Sleeping 15 min for catalog to be effective."
1720
+ sleep 15.min
1721
+ return true
1722
+ end
1723
+ return false
1724
+ end
1725
+
1726
+ # Use it to change dvr settings of STB on MAS.
1727
+ # * *Args* :
1728
+ # - +setting_name+ -> tsb_length / dvr_jump_value / enable_REW4_FF4 / REW1 and FF1
1729
+ # - +setting_value+ ->
1730
+ # - tsb_length: Length of TSB(minutes)
1731
+ # - dvr_jump_value: DVR jump value(minutes)
1732
+ # - enable_REW4_FF4: true/false (string)
1733
+ # - dvr_comp_REW1_value : DVR Comp REW1 value (seconds)
1734
+ # - dvr_comp_FF1_value : DVR Comp FF1 value (seconds)
1735
+ # * *Returns* :
1736
+ # - true if settings changed and published(optional) successfully
1737
+ def mas_conductor_change_dvr_settings settings
1738
+ req_queued_status = lock_resource('MAS', 'dvr', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
1739
+ settings.each_pair do |key, value|
1740
+ loginfo2 "Changing DVR setting: [#{key}] to [#{value}]"
1741
+ return false unless _mas_change_dvr_settings(key, value)
1742
+ end
1743
+ }
1744
+
1745
+ if req_queued_status == -1
1746
+ loginfo2 "Someone is stuck with dvr settings lock for more than 10 minutes. Aborting..."
1747
+ return false
1748
+ end
1749
+
1750
+ return mas_conductor_publish_all_outstanding_catalogs
1751
+ end
1752
+
1753
+ # Use it to change power save mode settings of STB on MAS.
1754
+ # * *Args* :
1755
+ # - +setting_name+ -> hours_of_inactivity / power_save_active / display_to_user
1756
+ # - +setting_value+ ->
1757
+ # - hours_of_inactivity: 'String'-No. of Hours of Inactivity to Enter Low Power State (hours)
1758
+ # - power_save_active: 'String'-On/Off
1759
+ # - display_to_user: 'Boolean'- true/false
1760
+ # * *Returns* :
1761
+ # - true if settings changed and published(optional) successfully
1762
+ def mas_conductor_change_power_save_mode_settings settings
1763
+ req_queued_status = lock_resource('MAS', 'power_save_mode', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
1764
+ settings.each_pair do |key, value|
1765
+ loginfo2 "Changing Power save setting: [#{key}] to [#{value}]"
1766
+ return false unless _mas_change_power_save_mode_settings(key, value)
1767
+ end
1768
+ }
1769
+
1770
+ if req_queued_status == -1
1771
+ loginfo2 "Someone is stuck with power save mode setting lock for more than 10 minutes. Aborting..."
1772
+ return false
1773
+ end
1774
+
1775
+ return mas_conductor_publish_all_outstanding_catalogs
1776
+ end
1777
+
1778
+ # Use it to modify purchase PIN on MAS.
1779
+ # * *Args* :
1780
+ # - +new_purchase_pin+ -> The new purchase PIN to be set(string) ex: "1111"
1781
+ # * *Returns* :
1782
+ # - true if changed, else false
1783
+ def mas_conductor_change_purchase_pin new_purchase_pin
1784
+ req_queued_status = lock_resource('pin_entry', 'purchase_pin', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
1785
+ loginfo2 "Changing Purchase PIN number to: [#{new_purchase_pin}]"
1786
+ return false unless _mas_conductor_change_purchase_pin(new_purchase_pin)
1787
+ }
1788
+
1789
+ if req_queued_status == -1
1790
+ loginfo2 "Someone is stuck with purchase pin setting lock for more than 10 minutes. Aborting..."
1791
+ return false
1792
+ end
1793
+
1794
+ return mas_conductor_publish_all_outstanding_catalogs
1795
+ end
1796
+
1797
+ # Use it to set value to check/uncheck display to user check box of DVR Compensation on MAS.
1798
+ # * *Args* :
1799
+ # - +value+ -> true - check, false - uncheck
1800
+ # * *Returns* :
1801
+ # - true
1802
+ def mas_conductor_change_dvr_compensation_display_to_user value
1803
+ req_queued_status = lock_resource('MAS', 'dvr', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
1804
+ loginfo2 "Changing DVR compensation - Display to user to: [#{value}]"
1805
+ return false unless _mas_conductor_dvr_compensation_display_to_user value
1806
+ }
1807
+
1808
+ if req_queued_status == -1
1809
+ loginfo2 "Someone is stuck with dvr settings lock for more than 10 minutes. Aborting..."
1810
+ return false
1811
+ end
1812
+
1813
+ return mas_conductor_publish_all_outstanding_catalogs
1814
+ end
1815
+
1816
+ # Use it to set the value of DVR Compensation.
1817
+ # * *Args* :
1818
+ # - +value+ -> 'Less', 'More', 'Normal', 'None'
1819
+ # * *Returns* :
1820
+ # - true if successfully set else false
1821
+ def mas_conductor_change_dvr_compensation_display_to_user value
1822
+ req_queued_status = lock_resource('MAS', 'dvr', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
1823
+ loginfo2 "Changing DVR compensation value to: [#{value}]"
1824
+ return false unless _mas_conductor_set_dvr_compensation value
1825
+ }
1826
+
1827
+ if req_queued_status == -1
1828
+ loginfo2 "Someone is stuck with dvr settings lock for more than 10 minutes. Aborting..."
1829
+ return false
1830
+ end
1831
+
1832
+ return mas_conductor_publish_all_outstanding_catalogs
1833
+ end
1834
+
1835
+ # Use it to set the value of pause session timeout
1836
+ # * *Args* :
1837
+ # - +new_paused_session_timeout+ -> new pause session time out value required.
1838
+ # * *Returns* :
1839
+ # - true if successfully set else false
1840
+ def mas_conductor_change_paused_session_timeout new_paused_session_timeout
1841
+ req_queued_status = lock_resource('MAS', 'timeout', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
1842
+ loginfo2 "Changing Pause Session timeout value to: [#{new_paused_session_timeout}]"
1843
+ return false unless _mas_conductor_set_paused_session_timeout new_paused_session_timeout
1844
+ }
1845
+
1846
+ if req_queued_status == -1
1847
+ loginfo2 "Someone is stuck with timeout settings lock for more than 10 minutes. Aborting..."
1848
+ return false
1849
+ end
1850
+ return mas_conductor_publish_all_outstanding_catalogs
1851
+
1852
+ end
1853
+
1854
+ # Use it to set the value of Screen Saver Timeout
1855
+ # * *Args* :
1856
+ # - +value+ -> timeout in minutes
1857
+ # * *Returns* :
1858
+ # - true if successfully set else false
1859
+ def mas_conductor_change_screen_saver_timeout value
1860
+ req_queued_status = lock_resource('MAS', 'screen_saver_timeout', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
1861
+ loginfo2 "Changing screen saver timeout value to: [#{value}]"
1862
+ return false unless _mas_conductor_change_screen_saver_timeout value
1863
+ }
1864
+
1865
+ if req_queued_status == -1
1866
+ loginfo2 "Someone is stuck with screen_saver_timeout lock for more than 10 minutes. Aborting..."
1867
+ return false
1868
+ end
1869
+
1870
+ return mas_conductor_publish_all_outstanding_catalogs
1871
+ end
1872
+
1873
+ # Use it to change vod asset licence window end date to a past date on MAS.
1874
+ # * *Args* :
1875
+ # - +asset+ -> VOD asset name whose settings are to be changed
1876
+ # - +publish+ -> if true, publishes all outstanding catalogs, if false, only generates catalogs
1877
+ # * *Returns* :
1878
+ # - true if settings changed and published(optional) successfully
1879
+ def mas_conductor_change_vod_asset_license_end_date_to_past asset
1880
+ req_queued_status = lock_resource('MAS', 'OD', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
1881
+ loginfo2 "Changing licence window end date of VOD asset: [#{asset}] to past date"
1882
+ return false unless _mas_change_vod_asset_license_end_date_to_past asset
1883
+ }
1884
+
1885
+ if req_queued_status == -1
1886
+ loginfo2 "Someone is stuck with OD lock for more than 10 minutes. Aborting..."
1887
+ return false
1888
+ end
1889
+
1890
+ return mas_conductor_publish_all_outstanding_catalogs
1891
+ end
1892
+
1893
+ # Use it to download TMS data and generate guide catalogs
1894
+ # * *Returns* :
1895
+ # - true if guide generated successfully
1896
+ def mas_download_and_generate_guide
1897
+ req_queued_status = lock_resource('MAS', 'guide', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
1898
+ loginfo2 "Downloading TMS data and generating guide"
1899
+ return false unless _download_new_tms_data_and_generate_guide
1900
+ }
1901
+
1902
+ if req_queued_status == -1
1903
+ loginfo2 "Someone is stuck with Guide lock for more than 10 minutes. Aborting..."
1904
+ return false
1905
+ end
1906
+
1907
+ return true
1908
+ end
1909
+
1910
+ # Use it to set the value of Filter HD guide data for non-HD STBs on MAS.
1911
+ # * *Args* :
1912
+ # - +value+ -> true-enable, false-disable
1913
+ # * *Returns* :
1914
+ # - true
1915
+ def mas_conductor_change_hd_guide_data_filter value
1916
+ req_queued_status = lock_resource('MAS', 'HD', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
1917
+ loginfo2 "Changing 'Filter HD guide data for non-HD STBs' to: [#{value}]"
1918
+ return false unless _mas_conductor_set_filter_HD_guide_data_for_non_HD_stbs value
1919
+ }
1920
+
1921
+ if req_queued_status == -1
1922
+ loginfo2 "Someone is stuck with HD setup settings lock for more than 10 minutes. Aborting..."
1923
+ return false
1924
+ end
1925
+
1926
+ return mas_conductor_publish_all_outstanding_catalogs
1927
+ end
1928
+
1929
+ # Use this method to create a new broadcast service
1930
+ def mas_conductor_create_new_broadcast_service(service_name,unassigned_source_name,tms_id,region_id,unoccupied_channel)
1931
+ req_queued_status = lock_resource('MAS', 'service', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
1932
+ return false unless _mas_create_new_broadcast_service_and_map_to_channel(service_name,unassigned_source_name,tms_id,region_id,unoccupied_channel)
1933
+ }
1934
+
1935
+ if req_queued_status == -1
1936
+ loginfo2 "Someone is stuck with service lock for more than 10 minutes. Aborting..."
1937
+ return false
1938
+ end
1939
+
1940
+ return mas_conductor_publish_all_outstanding_catalogs
1941
+ end
1942
+
1943
+ # Use this method to delete a service
1944
+ def mas_conductor_delete_broadcast_service(service_name)
1945
+ req_queued_status = lock_resource('MAS', 'service', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
1946
+ return false unless _mas_delete_service(service_name)
1947
+ }
1948
+
1949
+ if req_queued_status == -1
1950
+ loginfo2 "Someone is stuck with service lock for more than 10 minutes. Aborting..."
1951
+ return false
1952
+ end
1953
+
1954
+ return mas_conductor_publish_all_outstanding_catalogs
1955
+ end
1956
+
1957
+ # Use it to add a channel to given service on given region
1958
+ # * *Args* :
1959
+ # - +channel+ -> channel number
1960
+ # - +service+ -> exact service name
1961
+ # - +region_id+ -> Region id
1962
+ # * *Returns* :
1963
+ # - true if succesfully added, else false
1964
+ def mas_conductor_add_new_channel_to_service_on_region(channel,service,region_id)
1965
+ req_queued_status = lock_resource('MAS', 'service', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
1966
+ return false unless _mas_conductor_add_channel_to_service_on_region channel,service,region_id
1967
+ }
1968
+
1969
+ if req_queued_status == -1
1970
+ loginfo2 "Someone is stuck with service lock for more than 10 minutes. Aborting..."
1971
+ return false
1972
+ end
1973
+
1974
+ return mas_conductor_publish_all_outstanding_catalogs
1975
+ end
1976
+
1977
+ # Use it to remove a channel from given service on given region
1978
+ # * *Args* :
1979
+ # - +channel+ -> channel number
1980
+ # - +service+ -> exact service name
1981
+ # - +region_name+ -> Region name
1982
+ # * *Returns* :
1983
+ # - true if succesfully removed, else false
1984
+ def mas_conductor_delete_channel_from_service_on_region(channel,service,region_name)
1985
+ req_queued_status = lock_resource('MAS', 'service', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
1986
+ return false unless _mas_conductor_remove_channel_from_service_on_region channel,service,region_name
1987
+ }
1988
+
1989
+ if req_queued_status == -1
1990
+ loginfo2 "Someone is stuck with service lock for more than 10 minutes. Aborting..."
1991
+ return false
1992
+ end
1993
+
1994
+ return mas_conductor_publish_all_outstanding_catalogs
1995
+ end
1996
+
1997
+ # Use it to delete given service from a given region
1998
+ # * *Args* :
1999
+ # - +service_name+ -> Service name to delete
2000
+ # - +region_name+ ->region name
2001
+ # * *Returns* :
2002
+ # - true if delete service succefully else false
2003
+ def mas_conductor_remove_service_from_region(service_name, region_name)
2004
+ req_queued_status = lock_resource('MAS', 'service', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
2005
+ return false unless _mas_conductor_remove_service_from_region service_name, region_name
2006
+ }
2007
+
2008
+ if req_queued_status == -1
2009
+ loginfo2 "Someone is stuck with service lock for more than 10 minutes. Aborting..."
2010
+ return false
2011
+ end
2012
+
2013
+ return mas_conductor_publish_all_outstanding_catalogs
2014
+ end
2015
+
2016
+ # Use it to change the Start Over EID for a service
2017
+ # * *Args* :
2018
+ # - +service_name+ -> Service name to delete
2019
+ # - +eid+ -> new eid (0 for None)
2020
+ # * *Returns* :
2021
+ # - true if changed succefully else false
2022
+ def mas_conductor_change_start_over_eid_for_service(service_name, eid)
2023
+ req_queued_status = lock_resource('MAS', 'SO', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
2024
+ return false unless _mas_conductor_set_start_over_eid_for_service service_name, eid
2025
+ }
2026
+
2027
+ if req_queued_status == -1
2028
+ loginfo2 "Someone is stuck with Start Over lock for more than 10 minutes. Aborting..."
2029
+ return false
2030
+ end
2031
+
2032
+ return mas_conductor_publish_all_outstanding_catalogs
2033
+ end
2034
+
2035
+ # Use it to create blackout on MAS of specified duration.
2036
+ # * *Args* :
2037
+ # - +primary_service+ -> Primary service to be set ex: ESPNHD
2038
+ # - +secondary_service+ -> Secondary service to be set ex: FoxNews
2039
+ # - +active_region_id+ -> Active Region id where split service is to be set ex: 56
2040
+ # - +blackout_start_time+ -> Blackout Start Time (Ruby Format)
2041
+ # - +blackout_duration+ -> Blackout Duration (Min)
2042
+ # * *Returns* :
2043
+ # - true
2044
+ def mas_conductor_create_blackout primary_service, secondary_service, active_region_id, blackout_start_time, blackout_duration, publish = true
2045
+ req_queued_status = lock_resource('MAS', 'blackout', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
2046
+ return false unless _mas_create_blackout primary_service, secondary_service, active_region_id, blackout_start_time, blackout_duration
2047
+ }
2048
+
2049
+ if req_queued_status == -1
2050
+ loginfo2 "Someone is stuck with Blackout lock for more than 10 minutes. Aborting..."
2051
+ return false
2052
+ end
2053
+
2054
+ return mas_conductor_publish_all_outstanding_catalogs if publish
2055
+ return true
2056
+ end
2057
+
2058
+ # Use it to create split on MAS of specified duration.
2059
+ # * *Args* :
2060
+ # - +primary_service+ -> Primary service to be set ex: ESPNHD
2061
+ # - +secondary_service+ -> Secondary service to be set ex: FoxNews
2062
+ # - +active_region_id+ -> Active Region id where split service is to be set ex: 56
2063
+ # - +split_start_time+ -> Split Start Time (Ruby Format)
2064
+ # - +split_duration+ -> Split Duration (Min)
2065
+ # * *Returns* :
2066
+ # - true
2067
+ def mas_conductor_create_split primary_service, secondary_service, active_region_id, split_start_time, split_duration
2068
+ req_queued_status = lock_resource('MAS', 'split', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
2069
+ return false unless _mas_create_split primary_service, secondary_service, active_region_id, split_start_time, split_duration
2070
+ }
2071
+
2072
+ if req_queued_status == -1
2073
+ loginfo2 "Someone is stuck with Split lock for more than 10 minutes. Aborting..."
2074
+ return false
2075
+ end
2076
+
2077
+ return mas_conductor_publish_all_outstanding_catalogs
2078
+ end
2079
+
2080
+ # Use it to change to given source on given service
2081
+ # * *Args* :
2082
+ # - +service_name+ -> Service name
2083
+ # - +source_name_to_delete+ -> Source name to assign to service
2084
+ # - +unassigned_source_name+ -> Source name to assign to service
2085
+ # * *Returns* :
2086
+ # - true if changed source succefully else false
2087
+ def mas_conductor_change_service_source(service_name, source_name_to_delete, unassigned_source_name)
2088
+ req_queued_status = lock_resource('MAS', 'service', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 15.min) {
2089
+ return false unless _mas_conductor_remove_source_from_service service_name, source_name_to_delete
2090
+ return false unless _mas_conductor_add_source_to_service service_name, unassigned_source_name, true
2091
+ }
2092
+
2093
+ if req_queued_status == -1
2094
+ loginfo2 "Someone is stuck with service lock for more than 15 minutes. Aborting..."
2095
+ return false
2096
+ end
2097
+
2098
+ return mas_conductor_publish_all_outstanding_catalogs
2099
+ end
2100
+
2101
+ # Use it to add given channel to a given region
2102
+ # * *Args* :
2103
+ # - +region_name+ ->region name
2104
+ # - +region_id+ ->region id
2105
+ # - +channel_number+ -> Channel number (integer) to delete
2106
+ # * *Returns* :
2107
+ # - true if delete service succefully else false
2108
+ def mas_conductor_add_channel_to_lineup region_name, region_id, channel_number
2109
+ req_queued_status = lock_resource('MAS', 'service', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 15.min) {
2110
+ return false unless _mas_conductor_add_channel_to_lineup region_name, region_id, channel_number
2111
+ }
2112
+
2113
+ if req_queued_status == -1
2114
+ loginfo2 "Someone is stuck with region lock for more than 15 minutes. Aborting..."
2115
+ return false
2116
+ end
2117
+
2118
+ return mas_conductor_publish_all_outstanding_catalogs
2119
+ end
2120
+
2121
+ # Use it to delete given channel from a given region
2122
+ # * *Args* :
2123
+ # - +region_name+ ->region name
2124
+ # - +channel_number+ -> Channel number (integer) to delete
2125
+ # * *Returns* :
2126
+ # - true if delete service succefully else false
2127
+ def mas_conductor_remove_channel_from_lineup region_name, channel_number
2128
+ req_queued_status = lock_resource('MAS', 'service', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 15.min) {
2129
+ return false unless _mas_conductor_remove_channel_from_lineup region_name, channel_number
2130
+ }
2131
+
2132
+ if req_queued_status == -1
2133
+ loginfo2 "Someone is stuck with region lock for more than 15 minutes. Aborting..."
2134
+ return false
2135
+ end
2136
+
2137
+ return mas_conductor_publish_all_outstanding_catalogs
2138
+ end
2139
+
2140
+ #Use this method to change auto HD feture to on or off
2141
+ # Also known as easy hd feature
2142
+ # * *Returns* :
2143
+ # - true if value is changed successfully
2144
+ def mas_change_auto_hd_feature(status)
2145
+ req_queued_status = lock_resource('MAS', 'hd', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 15.min) {
2146
+ return false unless _mas_change_auto_hd_feature status
2147
+ }
2148
+
2149
+ if req_queued_status == -1
2150
+ loginfo2 "Someone is stuck with hd lock for more than 15 minutes. Aborting..."
2151
+ return false
2152
+ end
2153
+
2154
+ return mas_conductor_publish_all_outstanding_catalogs
2155
+ end
2156
+
2157
+ # Use it to exclude the title from the search service
2158
+ # * *Args* :
2159
+ # - +title+ ->title to be excluded
2160
+ # * *Returns* :
2161
+ # - true if service is excluded successfully
2162
+ def mas_conductor_add_exclude_from_search_for_services_playing_title title = ''
2163
+ req_queued_status = lock_resource('MAS', 'service', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 15.min) {
2164
+ return false unless _mas_conductor_add_exclude_from_search_for_services_playing_title title = ''
2165
+ }
2166
+
2167
+ if req_queued_status == -1
2168
+ loginfo2 "Someone is stuck with the service lock for more than 15 minutes. Aborting..."
2169
+ return false
2170
+ end
2171
+
2172
+ return mas_conductor_publish_all_outstanding_catalogs
2173
+ end
2174
+
2175
+ #Use this method to add excluded title back to the search service
2176
+ # - +title+ -> excluded title to be added
2177
+ # * *Returns* :
2178
+ # - true if removed service is added successfully
2179
+ def mas_conductor_remove_exclude_from_search_for_services_playing_title title = ''
2180
+ req_queued_status = lock_resource('MAS', 'service', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 15.min) {
2181
+ return false unless _mas_conductor_remove_exclude_from_search_for_services_playing_title title = ''
2182
+ }
2183
+
2184
+ if req_queued_status == -1
2185
+ loginfo2 "Someone is stuck with the service lock for more than 15 minutes. Aborting..."
2186
+ return false
2187
+ end
2188
+
2189
+ return mas_conductor_publish_all_outstanding_catalogs
2190
+ end
2191
+
2192
+ # Use it to delete split on MAS of specified duration.
2193
+ # * *Args* :
2194
+ # - +primary_service+ -> Primary service of split, ex: ESPNHD
2195
+ # - +split_start_time+ -> Split Start Time (Ruby Format)
2196
+ # * *Returns* :
2197
+ # - true
2198
+ def mas_conductor_delete_split primary_service, split_start_time
2199
+ req_queued_status = lock_resource('MAS', 'split', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
2200
+ return false unless _mas_delete_split primary_service, split_start_time
2201
+ }
2202
+
2203
+ if req_queued_status == -1
2204
+ loginfo2 "Someone is stuck with Split lock for more than 10 minutes. Aborting..."
2205
+ return false
2206
+ end
2207
+
2208
+ return mas_conductor_publish_all_outstanding_catalogs
2209
+ end
2210
+
2211
+ # Use it to edit existing Split on MAS.
2212
+ # * *Args* :
2213
+ # - +existing_primary_service+ -> Existing Primary service.
2214
+ # - +existing_secondary_service+ -> Existing Secondary service to be set ex: FoxNews
2215
+ # - +existing_split_start_time+ -> Existing Split Start Time (Ruby Format)
2216
+ # - +existing_split_duration+ -> Existing Split Duration (Min)
2217
+ # - +existing_split_region_name+ -> Existing Split Active Region Name
2218
+ # - +existing_split_region_id+ -> Existing Split Active Region id
2219
+ # - +existing_split_type+ -> Existing Split Type ex: "Daily Split"
2220
+ # - +new_primary_service+ -> New Primary service.
2221
+ # - +new_secondary_service+ -> New Secondary service to be set ex: FoxNews
2222
+ # - +new_split_start_time+ -> New Split Start Time (Ruby Format)
2223
+ # - +new_split_duration+ -> New Split Duration (Min)
2224
+ # - +new_split_region_id+ -> New Split Active Region ID
2225
+ # * *Returns* :
2226
+ # - true
2227
+ def mas_conductor_edit_split existing_primary_service, existing_secondary_service, existing_split_start_time, existing_split_duration, existing_split_region_name , existing_split_region_id, existing_split_type = 'Daily Split', new_primary_service= '', new_secondary_service = '', new_split_start_time = 0, new_split_duration = 0, new_split_region_id = 0
2228
+ req_queued_status = lock_resource('MAS', 'split', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
2229
+ return false unless _mas_edit_split existing_primary_service, existing_secondary_service, existing_split_start_time, existing_split_duration, existing_split_region_name , existing_split_region_id, existing_split_type = 'Daily Split', new_primary_service= '', new_secondary_service = '', new_split_start_time = 0, new_split_duration = 0, new_split_region_id = 0
2230
+ }
2231
+
2232
+ if req_queued_status == -1
2233
+ loginfo2 "Someone is stuck with Split lock for more than 10 minutes. Aborting..."
2234
+ return false
2235
+ end
2236
+
2237
+ return mas_conductor_publish_all_outstanding_catalogs
2238
+ end
2239
+
2240
+ # Use it to change the Start Over prompt delay
2241
+ # * *Args* :
2242
+ # - +delay_in_min+ -> value to be set for Start over to appear on info banner
2243
+ # * *Returns* :
2244
+ # - true if changed succefully else false
2245
+ def mas_conductor_change_start_over_prompt_delay_time(delay_in_min)
2246
+ req_queued_status = lock_resource('MAS', 'SO_PD', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
2247
+ return false unless _mas_conductor_modify_start_over_prompt_delay(delay_in_min)
2248
+ }
2249
+
2250
+ if req_queued_status == -1
2251
+ loginfo2 "Someone is stuck with Start Over prompt delay lock for more than 10 minutes. Aborting..."
2252
+ return false
2253
+ end
2254
+
2255
+ return mas_conductor_publish_all_outstanding_catalogs
2256
+ end
2257
+
2258
+ # Use it to set value of 'Display sleep timer in Quick Settings menu'
2259
+ # * *Args* :
2260
+ # - +value+ -> (Boolean)Value to set true/false
2261
+ # * *Returns* :
2262
+ # - true if able to set else false
2263
+ def mas_conductor_change_display_sleep_timer_in_quick_settings value=true
2264
+ req_queued_status = lock_resource('MAS', 'timers', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
2265
+ return false unless _mas_conductor_set_display_sleep_timer_in_quick_settings value
2266
+ }
2267
+
2268
+ if req_queued_status == -1
2269
+ loginfo2 "Someone is stuck with Timers for more than 10 minutes. Aborting..."
2270
+ return false
2271
+ end
2272
+
2273
+ return mas_conductor_publish_all_outstanding_catalogs
2274
+ end
2275
+
2276
+ # Private method
2277
+ def _mas_conductor_change_info_banner_timeout value
2278
+ begin
2279
+ selenium = _mas_login
2280
+ return false if selenium.nil?
2281
+ _navigate_to_stb_settings(selenium)
2282
+ loginfo2 'Navigating to Misc Timeout Parameters Settings Page'
2283
+ selenium.click "xpath=(//a[contains(text(),'Edit Settings')])[16]", :wait_for => :page
2284
+ loginfo2 "Changing Banner: Timeout of Info banner (seconds) to [#{value}] seconds"
2285
+ selenium.type('css=input[name="value(Banner: Timeout of Info banner )"]',value)
2286
+ selenium.click "id=dijit_form_Button_0", :wait_for => :page
2287
+ result = _mas_generate_all_catalogs selenium
2288
+ loginfo2 'Unable to generate catalogs' unless result
2289
+ return result
2290
+ ensure
2291
+ _mas_logout(selenium) unless selenium.nil?
2292
+ end
2293
+ end
2294
+
2295
+ # Private method
2296
+ def _mas_conductor_change_start_over_prompt_timeout value
2297
+ begin
2298
+ selenium = _mas_login
2299
+ return false if selenium.nil?
2300
+ _navigate_to_stb_settings(selenium)
2301
+ loginfo2 'Navigating to Timeout Parameters Edit Settings Page'
2302
+ selenium.click "xpath=(//a[contains(text(),'Edit Settings')])[16]", :wait_for => :page
2303
+ loginfo2 "Changing Start Over Prompt Timeout (seconds) to [#{value}] seconds"
2304
+ selenium.type('css=input[name="value(Start Over Prompt Timeout)"]',value)
2305
+ selenium.click "id=dijit_form_Button_0", :wait_for => :page
2306
+ result = _mas_generate_all_catalogs selenium
2307
+ loginfo2 'Unable to generate catalogs' unless result
2308
+ return result
2309
+ ensure
2310
+ _mas_logout(selenium) unless selenium.nil?
2311
+ end
2312
+ end
2313
+
2314
+ # Use it to change the Start Over prompt display timeout
2315
+ # * *Args* :
2316
+ # - +timeout_in_sec+ -> Timeout value for start over prompt to disappear
2317
+ # * *Returns* :
2318
+ # - true if changed succefully else false
2319
+ def mas_conductor_change_start_over_prompt_display_timeout(timeout_in_sec)
2320
+ req_queued_status = lock_resource('MAS', 'SO_PT', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
2321
+ return false unless _mas_conductor_change_start_over_prompt_timeout(timeout_in_sec)
2322
+ }
2323
+
2324
+ if req_queued_status == -1
2325
+ loginfo2 "Someone is stuck with Start Over prompt timeout lock for more than 10 minutes. Aborting..."
2326
+ return false
2327
+ end
2328
+
2329
+ return mas_conductor_publish_all_outstanding_catalogs
2330
+ end
2331
+
2332
+ # Use it to change the Info Banner display timeout
2333
+ # * *Args* :
2334
+ # - +timeout_in_sec+ -> Timeout value for start over prompt to disappear
2335
+ # * *Returns* :
2336
+ # - true if changed succefully else false
2337
+ def mas_conductor_change_info_banner_display_timeout(timeout_in_sec)
2338
+ req_queued_status = lock_resource('MAS', 'Info_timeout', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
2339
+ return false unless _mas_conductor_change_info_banner_timeout(timeout_in_sec)
2340
+ }
2341
+
2342
+ if req_queued_status == -1
2343
+ loginfo2 "Someone is stuck with Info banner timeout lock for more than 10 minutes. Aborting..."
2344
+ return false
2345
+ end
2346
+
2347
+ return mas_conductor_publish_all_outstanding_catalogs
2348
+ end
2349
+