From 2b169cf1a949b5b773b4ee6a60eba768ee3afb79 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Sat, 9 Sep 2023 23:41:36 +1000 Subject: [emacs] Adding a client to forgejo/codeberg --- emacs/.emacs.d/lisp/my/my-codeberg.el | 61 +++++++++++++++++++++++++++++++++++ emacs/.emacs.d/lisp/my/my-github.el | 4 --- emacs/.emacs.d/lisp/my/my-org.el | 2 ++ emacs/.emacs.d/lisp/my/my-utils.el | 4 +++ 4 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 emacs/.emacs.d/lisp/my/my-codeberg.el (limited to 'emacs/.emacs.d/lisp') diff --git a/emacs/.emacs.d/lisp/my/my-codeberg.el b/emacs/.emacs.d/lisp/my/my-codeberg.el new file mode 100644 index 0000000..fbff453 --- /dev/null +++ b/emacs/.emacs.d/lisp/my/my-codeberg.el @@ -0,0 +1,61 @@ +;;; my-codeberg.el -- client to codeberg/forgejo -*- lexical-binding: t -*- + +;; Copyright (C) 2023 Free Software Foundation, Inc. + +;; Author: Yuchen Pei +;; Package-Requires: ((emacs "28.2")) + +;; This file is part of dotted. + +;; dotted is free software: you can redistribute it and/or modify it under +;; the terms of the GNU Affero General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; dotted is distributed in the hope that it will be useful, but WITHOUT +;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General +;; Public License for more details. + +;; You should have received a copy of the GNU Affero General Public +;; License along with dotted. If not, see . + +;;; Commentary: + +;; client to codeberg/forgejo. + +;;; Code: + +(require 'subr-x) +(require 'my-net) +(defvar my-forgejo-host "codeberg.org" "The forgejo host.") + +(defun my-forgejo-api-repos (owner repo) + "Call the forgejo repos API with OWNER and REPO." + (my-url-fetch-json (format "https://%s/api/v1/repos/%s/%s" + my-forgejo-host owner repo))) + +(defun my-grok-codeberg (url) + "Get info of codeberg project located at URL." + (when (string-match (format "%s/\\([^/]+\\)/\\([^/]+\\)/?.*$" my-forgejo-host) + url) + (let ((owner (match-string 1 url)) + (repo (match-string 2 url))) + (my-grok-codeberg-make-info + (my-forgejo-api-repos owner repo))))) + +(defun my-grok-codeberg-make-info (raw) + "Filter common properties from codeberg json response RAW" + (list (cons "Title" (alist-get 'name raw)) + (cons "Description" (alist-get 'description raw)) + (cons "Source" (alist-get 'html_url raw)) + (cons "Website" (alist-get 'website raw)) + (cons "Released" (substring (alist-get 'created_at raw) 0 10)) + (cons "Updated" (substring (alist-get 'updated_at raw) 0 10)) + (cons "Location" (alist-get 'location raw)) + (cons "Subject" (string-join (alist-get 'topics raw) ", ")) + (cons "Language" (alist-get 'language raw)) + (cons "Developers" (alist-get 'username (alist-get 'owner raw))))) + +(provide 'my-codeberg) +;;; my-codeberg.el ends here diff --git a/emacs/.emacs.d/lisp/my/my-github.el b/emacs/.emacs.d/lisp/my/my-github.el index dfa159a..45adcf6 100644 --- a/emacs/.emacs.d/lisp/my/my-github.el +++ b/emacs/.emacs.d/lisp/my/my-github.el @@ -40,10 +40,6 @@ License; name; description; homepage; created at" (my-delete-http-header) (my-grok-github-make-info (json-read))))) -(defun my-post-process-licensing-name (name) - (cond ((equal name "MIT") "expat") - (t name))) - (defun my-grok-github-make-info (raw) (list (cons "Title" (alist-get 'name raw)) (cons "Description" (alist-get 'description raw)) diff --git a/emacs/.emacs.d/lisp/my/my-org.el b/emacs/.emacs.d/lisp/my/my-org.el index 016bdd7..41b73d4 100644 --- a/emacs/.emacs.d/lisp/my/my-org.el +++ b/emacs/.emacs.d/lisp/my/my-org.el @@ -974,10 +974,12 @@ When BLOCK-REGEXP is non-nil, use this regexp to find blocks." (require 'my-gitlab) (require 'my-pacman) (require 'my-openlibrary) +(require 'my-codeberg) (defun my-grok-dispatcher (url) (when-let ((host (url-host (url-generic-parse-url url)))) (cond ((string-match "wikipedia\\.org" host) 'my-grok-wikipedia) ((string-match "github\\.com" host) 'my-grok-github) + ((string-match "codeberg\\.org" host) 'my-grok-codeberg) ((string-match "\\(gitlab\\.\\|salsa.debian.org\\)" host) 'my-grok-gitlab) ((string-match "openlibrary.org" host) 'my-grok-openlibrary) diff --git a/emacs/.emacs.d/lisp/my/my-utils.el b/emacs/.emacs.d/lisp/my/my-utils.el index b10cd41..f80fb13 100644 --- a/emacs/.emacs.d/lisp/my/my-utils.el +++ b/emacs/.emacs.d/lisp/my/my-utils.el @@ -416,4 +416,8 @@ With optional N, search in the Nth line from point." (save-some-buffers t t) (kill-emacs)) +(defun my-post-process-licensing-name (name) + (cond ((equal name "MIT") "expat") + (t name))) + (provide 'my-utils) -- cgit v1.2.3