;;; 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