ccache.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. <?php
  2. /* function ccache_zero($feed_id, $owner_uid) {
  3. db_query("UPDATE ttrss_counters_cache SET
  4. value = 0, updated = NOW() WHERE
  5. feed_id = '$feed_id' AND owner_uid = '$owner_uid'");
  6. } */
  7. function ccache_zero_all($owner_uid) {
  8. db_query("UPDATE ttrss_counters_cache SET
  9. value = 0 WHERE owner_uid = '$owner_uid'");
  10. db_query("UPDATE ttrss_cat_counters_cache SET
  11. value = 0 WHERE owner_uid = '$owner_uid'");
  12. }
  13. function ccache_remove($feed_id, $owner_uid, $is_cat = false) {
  14. if (!$is_cat) {
  15. $table = "ttrss_counters_cache";
  16. } else {
  17. $table = "ttrss_cat_counters_cache";
  18. }
  19. db_query("DELETE FROM $table WHERE
  20. feed_id = '$feed_id' AND owner_uid = '$owner_uid'");
  21. }
  22. function ccache_update_all($owner_uid) {
  23. if (get_pref('ENABLE_FEED_CATS', $owner_uid)) {
  24. $result = db_query("SELECT feed_id FROM ttrss_cat_counters_cache
  25. WHERE feed_id > 0 AND owner_uid = '$owner_uid'");
  26. while ($line = db_fetch_assoc($result)) {
  27. ccache_update($line["feed_id"], $owner_uid, true);
  28. }
  29. /* We have to manually include category 0 */
  30. ccache_update(0, $owner_uid, true);
  31. } else {
  32. $result = db_query("SELECT feed_id FROM ttrss_counters_cache
  33. WHERE feed_id > 0 AND owner_uid = '$owner_uid'");
  34. while ($line = db_fetch_assoc($result)) {
  35. print ccache_update($line["feed_id"], $owner_uid);
  36. }
  37. }
  38. }
  39. function ccache_find($feed_id, $owner_uid, $is_cat = false,
  40. $no_update = false) {
  41. if (!is_numeric($feed_id)) return;
  42. if (!$is_cat) {
  43. $table = "ttrss_counters_cache";
  44. /* if ($feed_id > 0) {
  45. $tmp_result = db_query("SELECT owner_uid FROM ttrss_feeds
  46. WHERE id = '$feed_id'");
  47. $owner_uid = db_fetch_result($tmp_result, 0, "owner_uid");
  48. } */
  49. } else {
  50. $table = "ttrss_cat_counters_cache";
  51. }
  52. if (DB_TYPE == "pgsql") {
  53. $date_qpart = "updated > NOW() - INTERVAL '15 minutes'";
  54. } else if (DB_TYPE == "mysql") {
  55. $date_qpart = "updated > DATE_SUB(NOW(), INTERVAL 15 MINUTE)";
  56. }
  57. $result = db_query("SELECT value FROM $table
  58. WHERE owner_uid = '$owner_uid' AND feed_id = '$feed_id'
  59. LIMIT 1");
  60. if (db_num_rows($result) == 1) {
  61. return db_fetch_result($result, 0, "value");
  62. } else {
  63. if ($no_update) {
  64. return -1;
  65. } else {
  66. return ccache_update($feed_id, $owner_uid, $is_cat);
  67. }
  68. }
  69. }
  70. function ccache_update($feed_id, $owner_uid, $is_cat = false,
  71. $update_pcat = true, $pcat_fast = false) {
  72. if (!is_numeric($feed_id)) return;
  73. /* if (!$is_cat && $feed_id > 0) {
  74. $tmp_result = db_query("SELECT owner_uid FROM ttrss_feeds
  75. WHERE id = '$feed_id'");
  76. $owner_uid = db_fetch_result($tmp_result, 0, "owner_uid");
  77. } */
  78. $prev_unread = ccache_find($feed_id, $owner_uid, $is_cat, true);
  79. /* When updating a label, all we need to do is recalculate feed counters
  80. * because labels are not cached */
  81. if ($feed_id < 0) {
  82. ccache_update_all($owner_uid);
  83. return;
  84. }
  85. if (!$is_cat) {
  86. $table = "ttrss_counters_cache";
  87. } else {
  88. $table = "ttrss_cat_counters_cache";
  89. }
  90. if ($is_cat && $feed_id >= 0) {
  91. if ($feed_id != 0) {
  92. $cat_qpart = "cat_id = '$feed_id'";
  93. } else {
  94. $cat_qpart = "cat_id IS NULL";
  95. }
  96. /* Recalculate counters for child feeds */
  97. if (!$pcat_fast) {
  98. $result = db_query("SELECT id FROM ttrss_feeds
  99. WHERE owner_uid = '$owner_uid' AND $cat_qpart");
  100. while ($line = db_fetch_assoc($result)) {
  101. ccache_update($line["id"], $owner_uid, false, false);
  102. }
  103. }
  104. $result = db_query("SELECT SUM(value) AS sv
  105. FROM ttrss_counters_cache, ttrss_feeds
  106. WHERE id = feed_id AND $cat_qpart AND
  107. ttrss_counters_cache.owner_uid = $owner_uid AND
  108. ttrss_feeds.owner_uid = '$owner_uid'");
  109. $unread = (int) db_fetch_result($result, 0, "sv");
  110. } else {
  111. $unread = (int) getFeedArticles($feed_id, $is_cat, true, $owner_uid);
  112. }
  113. db_query("BEGIN");
  114. $result = db_query("SELECT feed_id FROM $table
  115. WHERE owner_uid = '$owner_uid' AND feed_id = '$feed_id' LIMIT 1");
  116. if (db_num_rows($result) == 1) {
  117. db_query("UPDATE $table SET
  118. value = '$unread', updated = NOW() WHERE
  119. feed_id = '$feed_id' AND owner_uid = '$owner_uid'");
  120. } else {
  121. db_query("INSERT INTO $table
  122. (feed_id, value, owner_uid, updated)
  123. VALUES
  124. ($feed_id, $unread, $owner_uid, NOW())");
  125. }
  126. db_query("COMMIT");
  127. if ($feed_id > 0 && $prev_unread != $unread) {
  128. if (!$is_cat) {
  129. /* Update parent category */
  130. if ($update_pcat) {
  131. $result = db_query("SELECT cat_id FROM ttrss_feeds
  132. WHERE owner_uid = '$owner_uid' AND id = '$feed_id'");
  133. $cat_id = (int) db_fetch_result($result, 0, "cat_id");
  134. ccache_update($cat_id, $owner_uid, true, true, true);
  135. }
  136. }
  137. } else if ($feed_id < 0) {
  138. ccache_update_all($owner_uid);
  139. }
  140. return $unread;
  141. }
  142. /* function ccache_cleanup($owner_uid) {
  143. if (DB_TYPE == "pgsql") {
  144. db_query("DELETE FROM ttrss_counters_cache AS c1 WHERE
  145. (SELECT count(*) FROM ttrss_counters_cache AS c2
  146. WHERE c1.feed_id = c2.feed_id AND c2.owner_uid = c1.owner_uid) > 1
  147. AND owner_uid = '$owner_uid'");
  148. db_query("DELETE FROM ttrss_cat_counters_cache AS c1 WHERE
  149. (SELECT count(*) FROM ttrss_cat_counters_cache AS c2
  150. WHERE c1.feed_id = c2.feed_id AND c2.owner_uid = c1.owner_uid) > 1
  151. AND owner_uid = '$owner_uid'");
  152. } else {
  153. db_query("DELETE c1 FROM
  154. ttrss_counters_cache AS c1,
  155. ttrss_counters_cache AS c2
  156. WHERE
  157. c1.owner_uid = '$owner_uid' AND
  158. c1.owner_uid = c2.owner_uid AND
  159. c1.feed_id = c2.feed_id");
  160. db_query("DELETE c1 FROM
  161. ttrss_cat_counters_cache AS c1,
  162. ttrss_cat_counters_cache AS c2
  163. WHERE
  164. c1.owner_uid = '$owner_uid' AND
  165. c1.owner_uid = c2.owner_uid AND
  166. c1.feed_id = c2.feed_id");
  167. }
  168. } */