NewsfeedPlugin.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from Plugin import PluginManager
  2. import re, time
  3. @PluginManager.registerTo("UiWebsocket")
  4. class UiWebsocketPlugin(object):
  5. def actionFeedFollow(self, to, feeds):
  6. self.user.setFeedFollow(self.site.address, feeds)
  7. self.user.save()
  8. self.response(to, "ok")
  9. def actionFeedListFollow(self, to):
  10. feeds = self.user.sites[self.site.address].get("follow", {})
  11. self.response(to, feeds)
  12. def actionFeedQuery(self, to):
  13. if "ADMIN" not in self.site.settings["permissions"]:
  14. return self.response(to, "FeedQuery not allowed")
  15. from Site import SiteManager
  16. rows = []
  17. for address, site_data in self.user.sites.iteritems():
  18. feeds = site_data.get("follow")
  19. if not feeds:
  20. continue
  21. for name, query_set in feeds.iteritems():
  22. site = SiteManager.site_manager.get(address)
  23. try:
  24. query, params = query_set
  25. if ":params" in query:
  26. query = query.replace(":params", ",".join(["?"]*len(params)))
  27. res = site.storage.query(query+" ORDER BY date_added DESC LIMIT 10", params)
  28. else:
  29. res = site.storage.query(query+" ORDER BY date_added DESC LIMIT 10")
  30. except Exception, err: # Log error
  31. self.log.error("%s feed query %s error: %s" % (address, name, err))
  32. continue
  33. for row in res:
  34. row = dict(row)
  35. if row["date_added"] > time.time() + 120:
  36. continue # Feed item is in the future, skip it
  37. row["site"] = address
  38. row["feed_name"] = name
  39. rows.append(row)
  40. return self.response(to, rows)
  41. @PluginManager.registerTo("User")
  42. class UserPlugin(object):
  43. # Set queries that user follows
  44. def setFeedFollow(self, address, feeds):
  45. site_data = self.getSiteData(address)
  46. site_data["follow"] = feeds
  47. self.save()
  48. return site_data