{
return File_thumbnail::staticGet('file_id', $this->id);
}
+
+ function blowCache($last=false)
+ {
+ self::blow('file:notice-ids:%s', $this->url);
+ if ($last) {
+ self::blow('file:notice-ids:%s;last', $this->url);
+ }
+ }
+
+ /**
+ * Stream of notices linking to this URL
+ *
+ * @param integer $offset Offset to show; default is 0
+ * @param integer $limit Limit of notices to show
+ * @param integer $since_id Since this notice
+ * @param integer $max_id Before this notice
+ *
+ * @return array ids of notices that link to this file
+ */
+
+ function stream($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $max_id=0)
+ {
+ $ids = Notice::stream(array($this, '_streamDirect'),
+ null,
+ 'file:notice-ids:'.$this->url,
+ $offset, $limit, $since_id, $max_id);
+ return $ids;
+ }
+
+ /**
+ * Stream of notices linking to this URL
+ *
+ * @param integer $offset Offset to show; default is 0
+ * @param integer $limit Limit of notices to show
+ * @param integer $since_id Since this notice
+ * @param integer $max_id Before this notice
+ *
+ * @return array ids of notices that link to this file
+ */
+
+ function _streamDirect($offset, $limit, $since_id, $max_id)
+ {
+ $f2p = new File_to_post();
+
+ $f2p->file_id = $this->id;
+
+ Notice::addWhereSinceId($f2p, $since_id, 'post_id', 'modified');
+ Notice::addWhereMaxId($f2p, $max_id, 'post_id', 'modified');
+
+ $f2p->orderBy('modified DESC, notice_id DESC');
+
+ if (!is_null($offset)) {
+ $reply->limit($offset, $limit);
+ }
+
+ $ids = array();
+
+ if ($f2p->find()) {
+ while ($f2p->fetch()) {
+ $ids[] = $f2p->notice_id;
+ }
+ }
+
+ return $ids;
+ }
}
$f2p->file_id = $file_id;
$f2p->post_id = $notice_id;
$f2p->insert();
+
+ $f = File::staticGet($file_id);
+
+ if (!empty($f)) {
+ $f->blowNoticeCache();
+ }
}
if (empty($seen[$notice_id])) {
{
return Memcached_DataObject::pkeyGet('File_to_post', $kv);
}
+
+ function delete()
+ {
+ $f = File::staticGet('id', $this->file_id);
+ if (!empty($f)) {
+ $f->blowNoticeCache();
+ }
+ return parent::delete();
+ }
}