smallkan

Untitled

Feb 25th, 2016
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.49 KB | None | 0 0
  1. (function (App) {
  2. 'use strict';
  3.  
  4. var Q = require('q');
  5. var request = require('request');
  6. var inherits = require('util').inherits;
  7.  
  8. function YTS() {
  9. if (!(this instanceof YTS)) {
  10. return new YTS();
  11. }
  12.  
  13. App.Providers.Generic.call(this);
  14. }
  15. inherits(YTS, App.Providers.Generic);
  16.  
  17. YTS.prototype.extractIds = function (items) {
  18. return _.pluck(items.results, 'imdb_id');
  19. };
  20.  
  21. var format = function (data) {
  22. var results = _.chain(data.movies)
  23. .filter(function (movie) {
  24. // Filter any 3D only movies
  25. return _.any(movie.torrents, function (torrent) {
  26. return torrent.quality !== '3D';
  27. });
  28. }).map(function (movie) {
  29. return {
  30. type: 'movie',
  31. imdb_id: movie.imdb_code,
  32. title: movie.title_english,
  33. year: movie.year,
  34. genre: movie.genres,
  35. rating: movie.rating,
  36. runtime: movie.runtime,
  37. image: movie.medium_cover_image,
  38. cover: movie.medium_cover_image,
  39. backdrop: movie.background_image_original,
  40. synopsis: movie.description_full,
  41. trailer: 'https://www.youtube.com/watch?v=' + movie.yt_trailer_code || false,
  42. certification: movie.mpa_rating,
  43. torrents: _.reduce(movie.torrents, function (torrents, torrent) {
  44. if (torrent.quality !== '3D') {
  45. torrents[torrent.quality] = {
  46. url: torrent.url,
  47. magnet: 'magnet:?xt=urn:btih:' + torrent.hash + '&tr=udp://glotorrents.pw:6969/announce&tr=udp://tracker.opentrackr.org:1337/announce&tr=udp://torrent.gresille.org:80/announce&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.coppersurfer.tk:6969&tr=udp://tracker.leechers-paradise.org:6969&tr=udp://p4p.arenabg.ch:1337&tr=udp://tracker.internetwarriors.net:1337',
  48. size: torrent.size_bytes,
  49. filesize: torrent.size,
  50. seed: torrent.seeds,
  51. peer: torrent.peers
  52. };
  53. }
  54. return torrents;
  55. }, {})
  56. };
  57. }).value();
  58.  
  59. return {
  60. results: Common.sanitize(results),
  61. hasMore: data.movie_count > data.page_number * data.limit
  62. };
  63. };
  64.  
  65. YTS.prototype.fetch = function (filters) {
  66. var params = {
  67. sort_by: 'seeds',
  68. limit: 50,
  69. with_rt_ratings: true
  70. };
  71.  
  72. if (filters.page) {
  73. params.page = filters.page;
  74. }
  75.  
  76. if (filters.keywords) {
  77. params.query_term = filters.keywords;
  78. }
  79.  
  80. if (filters.genre && filters.genre !== 'All') {
  81. params.genre = filters.genre;
  82. }
  83.  
  84. if (filters.order === 1) {
  85. params.order_by = 'asc';
  86. }
  87.  
  88. if (filters.sorter && filters.sorter !== 'popularity') {
  89. switch (filters.sorter) {
  90. case 'last added':
  91. params.sort_by = 'date_added';
  92. break;
  93. case 'trending':
  94. params.sort_by = 'trending_score';
  95. break;
  96. default:
  97. params.sort_by = filters.sorter;
  98. }
  99. }
  100.  
  101. if (Settings.movies_quality !== 'all') {
  102. params.quality = Settings.movies_quality;
  103. }
  104.  
  105. if (Settings.translateSynopsis) {
  106. params.lang = Settings.language;
  107. }
  108.  
  109. var defer = Q.defer();
  110.  
  111. function get(index) {
  112. var options = {
  113. uri: Settings.ytsAPI[index].uri + 'api/v2/list_movies.json',
  114. qs: params,
  115. json: true,
  116. timeout: 10000
  117. };
  118. var req = jQuery.extend(true, {}, Settings.ytsAPI[index], options);
  119. request(req, function (err, res, data) {
  120. if (err || res.statusCode >= 400 || (data && !data.data)) {
  121. win.warn('YTS API endpoint \'%s\' failed.', Settings.ytsAPI[index].uri);
  122. if (index + 1 >= Settings.ytsAPI.length) {
  123. return defer.reject(err || 'Status Code is above 400');
  124. } else {
  125. get(index + 1);
  126. }
  127. return;
  128. } else if (!data || data.status === 'error') {
  129. err = data ? data.status_message : 'No data returned';
  130. return defer.reject(err);
  131. } else {
  132. return defer.resolve(format(data.data));
  133. }
  134. });
  135. }
  136. get(0);
  137.  
  138. return defer.promise;
  139. };
  140.  
  141. YTS.prototype.random = function () {
  142. var defer = Q.defer();
  143.  
  144. function get(index) {
  145. var options = {
  146. uri: Settings.ytsAPI[index].uri + 'api/v2/get_random_movie.json?' + Math.round((new Date()).valueOf() / 1000),
  147. json: true,
  148. timeout: 10000
  149. };
  150. var req = jQuery.extend(true, {}, Settings.ytsAPI[index], options);
  151. request(req, function (err, res, data) {
  152. if (err || res.statusCode >= 400 || (data && !data.data)) {
  153. win.warn('YTS API endpoint \'%s\' failed.', Settings.ytsAPI[index].uri);
  154. if (index + 1 >= Settings.ytsAPI.length) {
  155. return defer.reject(err || 'Status Code is above 400');
  156. } else {
  157. get(index + 1);
  158. }
  159. return;
  160. } else if (!data || data.status === 'error') {
  161. err = data ? data.status_message : 'No data returned';
  162. return defer.reject(err);
  163. } else {
  164. return defer.resolve(Common.sanitize(data.data));
  165. }
  166. });
  167. }
  168. get(0);
  169.  
  170. return defer.promise;
  171. };
  172.  
  173. YTS.prototype.detail = function (torrent_id, old_data) {
  174. return Q(old_data);
  175. };
  176.  
  177. App.Providers.Yts = YTS;
  178.  
  179. })(window.App);
Advertisement
Add Comment
Please, Sign In to add comment