ccache.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  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_feeds.owner_uid = '$owner_uid'");
  108. $unread = (int) db_fetch_result($result, 0, "sv");
  109. } else {
  110. $unread = (int) getFeedArticles($feed_id, $is_cat, true, $owner_uid);
  111. }
  112. db_query("BEGIN");
  113. $result = db_query("SELECT feed_id FROM $table
  114. WHERE owner_uid = '$owner_uid' AND feed_id = '$feed_id' LIMIT 1");
  115. if (db_num_rows($result) == 1) {
  116. db_query("UPDATE $table SET
  117. value = '$unread', updated = NOW() WHERE
  118. feed_id = '$feed_id' AND owner_uid = '$owner_uid'");
  119. } else {
  120. db_query("INSERT INTO $table
  121. (feed_id, value, owner_uid, updated)
  122. VALUES
  123. ($feed_id, $unread, $owner_uid, NOW())");
  124. }
  125. db_query("COMMIT");
  126. if ($feed_id > 0 && $prev_unread != $unread) {
  127. if (!$is_cat) {
  128. /* Update parent category */
  129. if ($update_pcat) {
  130. $result = db_query("SELECT cat_id FROM ttrss_feeds
  131. WHERE owner_uid = '$owner_uid' AND id = '$feed_id'");
  132. $cat_id = (int) db_fetch_result($result, 0, "cat_id");
  133. ccache_update($cat_id, $owner_uid, true, true, true);
  134. }
  135. }
  136. } else if ($feed_id < 0) {
  137. ccache_update_all($owner_uid);
  138. }
  139. return $unread;
  140. }
  141. /* function ccache_cleanup($owner_uid) {
  142. if (DB_TYPE == "pgsql") {
  143. db_query("DELETE FROM ttrss_counters_cache AS c1 WHERE
  144. (SELECT count(*) FROM ttrss_counters_cache AS c2
  145. WHERE c1.feed_id = c2.feed_id AND c2.owner_uid = c1.owner_uid) > 1
  146. AND owner_uid = '$owner_uid'");
  147. db_query("DELETE FROM ttrss_cat_counters_cache AS c1 WHERE
  148. (SELECT count(*) FROM ttrss_cat_counters_cache AS c2
  149. WHERE c1.feed_id = c2.feed_id AND c2.owner_uid = c1.owner_uid) > 1
  150. AND owner_uid = '$owner_uid'");
  151. } else {
  152. db_query("DELETE c1 FROM
  153. ttrss_counters_cache AS c1,
  154. ttrss_counters_cache AS c2
  155. WHERE
  156. c1.owner_uid = '$owner_uid' AND
  157. c1.owner_uid = c2.owner_uid AND
  158. c1.feed_id = c2.feed_id");
  159. db_query("DELETE c1 FROM
  160. ttrss_cat_counters_cache AS c1,
  161. ttrss_cat_counters_cache AS c2
  162. WHERE
  163. c1.owner_uid = '$owner_uid' AND
  164. c1.owner_uid = c2.owner_uid AND
  165. c1.feed_id = c2.feed_id");
  166. }
  167. } */
  168. ?>