update.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. var REST_PARAMS = REST_PARAMS || {};
  2. REST_PARAMS.api = "wp-json/wp/v2";
  3. REST_PARAMS.posts = REST_PARAMS.api + "/posts?";
  4. REST_PARAMS.pages = REST_PARAMS.api + "/pages?";
  5. REST_PARAMS.max_page = 10;
  6. REST_PARAMS.per_page = 'per_page=' + REST_PARAMS.max_page;
  7. function aggiornaPages() {
  8. var jsonurl = weburl + REST_PARAMS.pages;
  9. $.ajax({
  10. dataType: "json",
  11. url: jsonurl,
  12. success: function (data) {
  13. $.each(data, function (key, val) {
  14. var id = val.id;
  15. var time = val.modified;
  16. var title = val.title.rendered;
  17. var content = val.content.rendered;
  18. FONTE.dbHandler.executeSql('INSERT INTO xm24_pages VALUES (?,?,?,?)', [id, title, time, content], function (resultSet) {
  19. console.log('resultSet.insertId: ' + resultSet.insertId);
  20. console.log('resultSet.rowsAffected: ' + resultSet.rowsAffected);
  21. }, function (error) {
  22. console.log('INSERT error: ' + error.message);
  23. });
  24. });
  25. },
  26. error: JSONErrorHandler
  27. });
  28. }
  29. function aggiornaSingleCategory(category) {
  30. //resetta la variabile d'errore per le chiamate ajax asincrone
  31. FONTE.ajaxError = false;
  32. var jsonurl = weburl + REST_PARAMS.posts + REST_PARAMS.per_page;
  33. var storage = window.localStorage;
  34. var lastUpdate = storage.getItem('db_update_date');
  35. if (lastUpdate) jsonurl += "&filter[date_query][column]=post_modified_gmt&filter[date_query][after]=" + lastUpdate;
  36. getSinglePageRecur(jsonurl, category, 1);
  37. }
  38. function resetAndUpdate() {
  39. var storage = window.localStorage;
  40. //resetto la data e droppo le tabelle
  41. storage.setItem('db_update_date', null);
  42. FONTE.dbHandler.executeSql('DROP TABLE IF EXISTS xm24_posts;');
  43. FONTE.dbHandler.executeSql('CREATE TABLE IF NOT EXISTS xm24_posts (id INTEGER PRIMARY KEY, title, date, category, post)');
  44. postsUpdate();
  45. }
  46. function update() {
  47. FONTE.dbHandler.executeSql('SELECT COUNT(*) AS numPosts FROM xm24_posts', [], function (resultSet) {
  48. var numPosts = resultSet.rows.item(0).numPosts;
  49. if (numPosts < 300) { //questo numero e' scelto in maniera arbitraria, ricordati Cri.
  50. resetAndUpdate();
  51. } else {
  52. postsUpdate();
  53. }
  54. });
  55. }
  56. function postsUpdate(categories) {
  57. $(FONTE.contentListClass).empty();
  58. var storage = window.localStorage;
  59. var type = getObjKey(FONTE.categories, categories);
  60. var jsonurl = weburl + REST_PARAMS.posts + REST_PARAMS.per_page + "&categories=" + categories.join(',');
  61. FONTE.updatedCategoriesCount = 0;
  62. FONTE.updatedPostsCount = 0;
  63. FONTE.neededPostsCount = 0;
  64. FONTE.ajaxError = false;
  65. var lastUpdate = storage.getItem('db_update_' + type + '_date');
  66. if (lastUpdate)
  67. jsonurl += "&after=" + lastUpdate;
  68. //jsonurl += "&filter[date_query][column]=post_modified_gmt&filter[date_query][after]=" + lastUpdate;
  69. var firstTime = storage.getItem('db_last_' + type + '_firsttime');
  70. if (firstTime === null) storage.setItem('db_last_' + type + '_firsttime', 'yes');
  71. if (firstTime == 'yes') storage.setItem('db_last_' + type + '_firsttime', 'no');
  72. getLastSinglePageRecur(jsonurl, 1, categories);
  73. }
  74. var updateLocalStorageDate = function(type){
  75. var date = new Date();
  76. var currentUpdate = date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + date.getDate()).slice(-2);
  77. currentUpdate += 'T' + ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + ':' + ('0' + date.getSeconds()).slice(-2);
  78. var lastUpdate = window.localStorage.getItem('db_update_' + type + '_date');
  79. window.localStorage.setItem('db_update_' + type + '_date', currentUpdate);
  80. window.localStorage.setItem('db_last_' + type + '_date', lastUpdate);
  81. };
  82. var getPrevNews = function(div, categories, page) {
  83. var storage = window.localStorage;
  84. var type = getObjKey(FONTE.categories, categories);
  85. var jsonurl = weburl + REST_PARAMS.posts + REST_PARAMS.per_page + "&categories=" + FONTE.categories[type].join(',');
  86. FONTE.updatedCategoriesCount = 0;
  87. FONTE.updatedPostsCount = 0;
  88. FONTE.neededPostsCount = 0;
  89. var oldest_date = window.localStorage.getItem('db_oldest_' + type + '_date');
  90. if (oldest_date)
  91. jsonurl += "&before=" + oldest_date;
  92. getPrevSinglePageRecur(jsonurl, 1, FONTE.categories[type]);
  93. };
  94. function loadMore(type) {
  95. var categories = FONTE.categories[type];
  96. renderPrevNews(FONTE.contentListClass, categories, FONTE.page_loaded[type], function(){
  97. getPrevNews(FONTE.contentListClass, categories, FONTE.page_loaded[type]);
  98. });
  99. }
  100. function getPrevSinglePageRecur(url, pagenum, categories) {
  101. $.mobile.loading('show');
  102. var type = getObjKey(FONTE.categories, categories);
  103. console.log('url:'+url);
  104. $.ajax({
  105. dataType: "json",
  106. url: url + "&page=" + pagenum,
  107. success: function (data, textStatus, jqXHR) {
  108. var totalPages = jqXHR.getResponseHeader('X-WP-TotalPages');
  109. FONTE.neededPostsCount += data.length;
  110. if (FONTE.neededPostsCount === 0) {
  111. $.mobile.loading('hide');
  112. toastr.info('Non ci sono altri alticoli da visualizzare in questa sezione');
  113. updateLocalStorageDate(type);
  114. }
  115. var n_error = 0;
  116. var oldest_date = window.localStorage.getItem('db_oldest_' + type + '_date');
  117. $.each(data, function (key, val) {
  118. var id = val.id;
  119. var time = val.date;
  120. var title = val.title.rendered;
  121. var tags = val.tags;
  122. var postCategories = val.categories;
  123. var blob = JSON.stringify(val);
  124. FONTE.dbHandler.executeSql('INSERT OR REPLACE INTO xm24_posts VALUES (?,?,?,?)', [id, title, time, blob], function (resultSet) {
  125. FONTE.updatedPostsCount++;
  126. oldest_date = time;
  127. if (n_error + FONTE.updatedPostsCount >= FONTE.neededPostsCount) {
  128. updateLocalStorageDate(type);
  129. window.localStorage.setItem('db_oldest_' + type + '_date', oldest_date);
  130. toastr.info('Caricati altri ' + FONTE.updatedPostsCount + ' articoli.');
  131. loadMore(type);
  132. } //manca il caso in cui sono stati cancellati dei post online, vanno cancellati anche dall'app.
  133. }, function (error) {
  134. n_error++;
  135. if (n_error + FONTE.updatedPostsCount >= FONTE.neededPostsCount && FONTE.updatedPostsCount > 0 ) {
  136. updateLocalStorageDate(type);
  137. window.localStorage.setItem('db_oldest_' + type + '_date', oldest_date);
  138. toastr.info('Caricati altri ' + FONTE.updatedPostsCount + ' articoli.');
  139. loadMore(type);
  140. }
  141. });
  142. $.each(postCategories, function (key, val) {
  143. insertOrUpdateCatToPost(id, val);
  144. });
  145. });
  146. },
  147. error: JSONErrorHandler
  148. });
  149. }
  150. function getLastSinglePageRecur(url, pagenum, categories) {
  151. // resetto la paginazione di #info e #ilove
  152. FONTE.page_loaded.info = 0;
  153. FONTE.page_loaded.ilove = 0;
  154. var type = getObjKey(FONTE.categories, categories);
  155. console.log('url:'+url);
  156. $.ajax({
  157. dataType: "json",
  158. url: url + "&page=" + pagenum,
  159. success: function (data, textStatus, jqXHR) {
  160. var totalPages = jqXHR.getResponseHeader('X-WP-TotalPages');
  161. FONTE.neededPostsCount += data.length;
  162. if (FONTE.neededPostsCount === 0) {
  163. toastr.info('Nessun nuovo articolo.');
  164. updateLocalStorageDate(type);
  165. if(FONTE.page_loaded[type] === 0) {
  166. renderLastNews(FONTE.contentListClass, categories);
  167. }
  168. }
  169. var n_error = 0;
  170. var oldest_date = window.localStorage.getItem('db_oldest_' + type + '_date');
  171. var older_date = null;
  172. $.each(data, function (key, val) {
  173. var id = val.id;
  174. var time = val.date;
  175. var title = val.title.rendered;
  176. var tags = val.tags;
  177. var postCategories = val.categories;
  178. var blob = JSON.stringify(val);
  179. FONTE.dbHandler.executeSql('INSERT OR REPLACE INTO xm24_posts VALUES (?,?,?,?)', [id, title, time, blob], function (resultSet) {
  180. FONTE.updatedPostsCount++;
  181. console.log('Voci aggiornate: ' + FONTE.updatedPostsCount);
  182. older_date = time;
  183. if (n_error + FONTE.updatedPostsCount >= FONTE.neededPostsCount) {
  184. updateLocalStorageDate(type);
  185. if(! oldest_date)
  186. window.localStorage.setItem('db_oldest_' + type + '_date', older_date);
  187. toastr.info('Ci sono ' + FONTE.updatedPostsCount + ' nuovi articoli.');
  188. renderLastNews(FONTE.contentListClass, categories);
  189. } //manca il caso in cui sono stati cancellati dei post online, vanno cancellati anche dall'app.
  190. }, function (error) {
  191. n_error++;
  192. if (n_error + FONTE.updatedPostsCount >= FONTE.neededPostsCount && FONTE.updatedPostsCount > 0 ) {
  193. updateLocalStorageDate(type);
  194. if(! oldest_date)
  195. window.localStorage.setItem('db_oldest_' + type + '_date', older_date);
  196. toastr.info('Aggiornati ' + FONTE.updatedPostsCount + ' nuovi articoli.');
  197. renderLastNews(FONTE.contentListClass, categories);
  198. }
  199. });
  200. // $.each(tags, function (key, val) {
  201. // aggiornaTagsToPosts(id, val);
  202. // });
  203. $.each(postCategories, function (key, val) {
  204. insertOrUpdateCatToPost(id, val);
  205. });
  206. });
  207. // if (data.length === 0) {
  208. // renderLastNews(FONTE.contentListClass, categories);
  209. // }
  210. },
  211. error: JSONErrorHandler
  212. });
  213. }