refactor: use Changelog Feed doctype to store feed items
This commit is contained in:
parent
fe79183295
commit
440b0bdf1c
8 changed files with 159 additions and 37 deletions
0
frappe/desk/doctype/changelog_feed/__init__.py
Normal file
0
frappe/desk/doctype/changelog_feed/__init__.py
Normal file
8
frappe/desk/doctype/changelog_feed/changelog_feed.js
Normal file
8
frappe/desk/doctype/changelog_feed/changelog_feed.js
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
// Copyright (c) 2023, Frappe Technologies and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
// frappe.ui.form.on("Changelog Feed", {
|
||||
// refresh(frm) {
|
||||
|
||||
// },
|
||||
// });
|
||||
66
frappe/desk/doctype/changelog_feed/changelog_feed.json
Normal file
66
frappe/desk/doctype/changelog_feed/changelog_feed.json
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
{
|
||||
"actions": [],
|
||||
"allow_rename": 1,
|
||||
"creation": "2023-05-16 19:37:51.047664",
|
||||
"default_view": "List",
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"title",
|
||||
"app_name",
|
||||
"link",
|
||||
"creation_of_feed_item"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "title",
|
||||
"fieldtype": "Data",
|
||||
"in_list_view": 1,
|
||||
"label": "Title",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "app_name",
|
||||
"fieldtype": "Data",
|
||||
"label": "App Name"
|
||||
},
|
||||
{
|
||||
"fieldname": "link",
|
||||
"fieldtype": "Data",
|
||||
"in_list_view": 1,
|
||||
"label": "Link",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "creation_of_feed_item",
|
||||
"fieldtype": "Datetime",
|
||||
"label": "Creation of Feed Item",
|
||||
"reqd": 1
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2023-05-22 10:04:52.980692",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Desk",
|
||||
"name": "Changelog Feed",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"states": []
|
||||
}
|
||||
66
frappe/desk/doctype/changelog_feed/changelog_feed.py
Normal file
66
frappe/desk/doctype/changelog_feed/changelog_feed.py
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
# Copyright (c) 2023, Frappe Technologies and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
import frappe
|
||||
from frappe.hooks import app_title
|
||||
from frappe.model.document import Document
|
||||
|
||||
|
||||
class ChangelogFeed(Document):
|
||||
pass
|
||||
|
||||
|
||||
def get_feed():
|
||||
return [
|
||||
{
|
||||
"title": "Spid",
|
||||
"creation": "2023-04-03 16:56:51.436456",
|
||||
"app_name": app_title,
|
||||
"link": "https://frappe.io/wiki",
|
||||
},
|
||||
{
|
||||
"title": "Stable something something",
|
||||
"creation": "2023-05-03 16:56:51.436456",
|
||||
"app_name": "HRMS",
|
||||
"link": "https://frappe.io/blog",
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
def fetch_changelog_feed_items_from_source():
|
||||
"""Fetches changelog feed items from source using
|
||||
`get_changelog_feed` hook and stores in the db"""
|
||||
|
||||
changelog_feed_items = []
|
||||
for fn in frappe.get_hooks("get_changelog_feed"):
|
||||
changelog_feed_items += frappe.get_attr(fn)()
|
||||
|
||||
changelog_feed_items = sorted(changelog_feed_items, key=lambda x: x["creation"], reverse=True)
|
||||
for changelog_feed_item in changelog_feed_items:
|
||||
change_log_feed_item_dict = {
|
||||
"doctype": "Changelog Feed",
|
||||
"title": changelog_feed_item["title"],
|
||||
"app_name": changelog_feed_item["app_name"],
|
||||
"link": changelog_feed_item["link"],
|
||||
"creation_of_feed_item": changelog_feed_item["creation"],
|
||||
}
|
||||
if not frappe.db.exists(change_log_feed_item_dict):
|
||||
feed_doc = frappe.get_doc(change_log_feed_item_dict)
|
||||
feed_doc.insert()
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_changelog_feed_items():
|
||||
"""Returns a list of latest 10 changelog feed items"""
|
||||
changelog_feed_items = frappe.cache().get_value("changelog_feed")
|
||||
if not changelog_feed_items or frappe.conf.developer_mode:
|
||||
fetch_changelog_feed_items_from_source()
|
||||
changelog_feed_items = frappe.get_list(
|
||||
"Changelog Feed",
|
||||
fields=["title", "app_name", "link", "creation_of_feed_item"],
|
||||
order_by="modified desc",
|
||||
limit=10,
|
||||
)
|
||||
frappe.cache().set_value("changelog_feed", changelog_feed_items, expires_in_sec=24 * 60 * 60)
|
||||
|
||||
return changelog_feed_items
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
# Copyright (c) 2023, Frappe Technologies and Contributors
|
||||
# See license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.tests.utils import FrappeTestCase
|
||||
|
||||
|
||||
class TestChangelogFeed(FrappeTestCase):
|
||||
pass
|
||||
|
|
@ -236,6 +236,7 @@ scheduler_events = {
|
|||
"frappe.integrations.doctype.s3_backup_settings.s3_backup_settings.take_backups_daily",
|
||||
"frappe.email.doctype.auto_email_report.auto_email_report.send_daily",
|
||||
"frappe.integrations.doctype.google_drive.google_drive.daily_backup",
|
||||
"frappe.desk.doctype.changelog_feed.changelog_feed.fetch_changelog_feed_items_from_source",
|
||||
],
|
||||
"weekly_long": [
|
||||
"frappe.integrations.doctype.dropbox_settings.dropbox_settings.take_backups_weekly",
|
||||
|
|
@ -425,21 +426,4 @@ extend_bootinfo = [
|
|||
"frappe.utils.telemetry.add_bootinfo",
|
||||
]
|
||||
|
||||
get_changelog_feed = "frappe.hooks.get_feed"
|
||||
|
||||
|
||||
def get_feed():
|
||||
return [
|
||||
{
|
||||
"title": "Spid",
|
||||
"creation": "2023-04-03 16:56:51.436456",
|
||||
"app_title": app_title,
|
||||
"link": "https://frappe.io/wiki",
|
||||
},
|
||||
{
|
||||
"title": "Stable something something",
|
||||
"creation": "2023-05-03 16:56:51.436456",
|
||||
"app_title": "HRMS",
|
||||
"link": "https://frappe.io/blog",
|
||||
},
|
||||
]
|
||||
get_changelog_feed = "frappe.desk.doctype.changelog_feed.changelog_feed.get_feed"
|
||||
|
|
|
|||
|
|
@ -449,7 +449,10 @@ class EventsView extends BaseNotificationsView {
|
|||
class ChangelogFeedView extends BaseNotificationsView {
|
||||
make() {
|
||||
frappe
|
||||
.xcall("frappe.utils.change_log.get_changelog_feed_items", {})
|
||||
.xcall(
|
||||
"frappe.desk.doctype.changelog_feed.changelog_feed.get_changelog_feed_items",
|
||||
{}
|
||||
)
|
||||
.then((changelog_feed_list) => {
|
||||
this.render_changelog_feed_html(changelog_feed_list);
|
||||
});
|
||||
|
|
@ -460,11 +463,13 @@ class ChangelogFeedView extends BaseNotificationsView {
|
|||
if (changelog_feed_list.length) {
|
||||
this.container.empty();
|
||||
const get_changelog_feed_html = (changelog_feed_item) => {
|
||||
const timestamp = frappe.datetime.comment_when(changelog_feed_item.creation);
|
||||
const timestamp = frappe.datetime.comment_when(
|
||||
changelog_feed_item.creation_of_feed_item
|
||||
);
|
||||
const message_html = `<div class="message">
|
||||
<div>${changelog_feed_item.title}</div>
|
||||
<div class="notification-timestamp text-muted">
|
||||
${changelog_feed_item.app_title} | ${timestamp}
|
||||
${changelog_feed_item.app_name} | ${timestamp}
|
||||
</div>
|
||||
</div>`;
|
||||
|
||||
|
|
|
|||
|
|
@ -309,19 +309,3 @@ def show_update_popup():
|
|||
if update_message:
|
||||
frappe.msgprint(update_message, title=_("New updates are available"), indicator="green")
|
||||
cache.srem("update-user-set", user)
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_changelog_feed_items():
|
||||
"""Returns a list of all fetched changelog feed items"""
|
||||
|
||||
changelog_feed_items = frappe.cache().get_value("changelog_feed")
|
||||
if not changelog_feed_items:
|
||||
changelog_feed_items = []
|
||||
for fn in frappe.get_hooks("get_changelog_feed"):
|
||||
changelog_feed_items += frappe.get_attr(fn)()
|
||||
|
||||
changelog_feed_items = sorted(changelog_feed_items, key=lambda x: x["creation"], reverse=True)
|
||||
frappe.cache().set_value("changelog_feed", changelog_feed_items, expires_in_sec=60 * 60)
|
||||
|
||||
return changelog_feed_items
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue