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 +++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 emacs/.emacs.d/lisp/my/my-codeberg.el (limited to 'emacs/.emacs.d/lisp/my/my-codeberg.el') 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 -- cgit v1.2.3