From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Philip Kaludercic Newsgroups: gmane.emacs.devel Subject: Re: [NonGNU ELPA] New package: hyperdrive (repast) Date: Sun, 03 Sep 2023 08:18:14 +0000 Message-ID: <8734zv4qm1.fsf@posteo.net> References: <87bkeucmu8.fsf@ushin.org> <87msyeow4z.fsf@posteo.net> <874jklk0rf.fsf_-_@posteo.net> <87jzte32as.fsf@ushin.org> <87ttsikqog.fsf@posteo.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="23192"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Emacs Devel Mailing List , Adam Porter , Paula Maas , Protesilaos Stavrou To: Joseph Turner Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sun Sep 03 10:19:18 2023 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qciKC-0005l7-QW for ged-emacs-devel@m.gmane-mx.org; Sun, 03 Sep 2023 10:19:17 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qciJK-0006Nt-Fk; Sun, 03 Sep 2023 04:18:22 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qciJJ-0006Ni-1p for emacs-devel@gnu.org; Sun, 03 Sep 2023 04:18:21 -0400 Original-Received: from mout02.posteo.de ([185.67.36.66]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qciJF-0000Lj-Ga for emacs-devel@gnu.org; Sun, 03 Sep 2023 04:18:20 -0400 Original-Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 4681D240101 for ; Sun, 3 Sep 2023 10:18:15 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1693729095; bh=m7vdby8OdM7Fi0lwG05T5p3tNDXehsEwkLwvADTQonM=; h=From:To:Cc:Subject:Autocrypt:Date:Message-ID:MIME-Version:From; b=Jw4aoutpWPrpJbQxeZ0dWFoMcInZR3aS9RHC9ef5rkm3P5nuYvq/QTB09prdJcpfE PNxIZHb/fHtwDCKCLkw36/h14CuS/urqUvEQ6gtrFa33Pa9WxmYwyaKLHgVouV8FGK OL8pSl28w27bGAa6wuqackFwENzdHM54d9xTExk6Wa9T31QBrft5dPRnk2feURWLXR 3PsBY6y2LMIxPiA4kOhbI1do6fcA1XzLlqRItHbx5L2Xbt5c11d9VxgxMhrlC7BvxB pDPZiE1A3TVrJfocIfS2DiIqNsFNLYZNJY1/SL9HbChLnqcy6v8eEGKCKMVJqEnGGc oMwAeuS3IV8Rw== Original-Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4Rdl5L3LK1z9rxH; Sun, 3 Sep 2023 10:18:14 +0200 (CEST) In-Reply-To: <87ttsikqog.fsf@posteo.net> (Philip Kaludercic's message of "Tue, 29 Aug 2023 13:56:31 +0200") Autocrypt: addr=philipk@posteo.net; keydata= mDMEZBBQQhYJKwYBBAHaRw8BAQdAHJuofBrfqFh12uQu0Yi7mrl525F28eTmwUDflFNmdui0QlBo aWxpcCBLYWx1ZGVyY2ljIChnZW5lcmF0ZWQgYnkgYXV0b2NyeXB0LmVsKSA8cGhpbGlwa0Bwb3N0 ZW8ubmV0PoiWBBMWCAA+FiEEDg7HY17ghYlni8XN8xYDWXahwukFAmQQUEICGwMFCQHhM4AFCwkI BwIGFQoJCAsCBBYCAwECHgECF4AACgkQ8xYDWXahwulikAEA77hloUiSrXgFkUVJhlKBpLCHUjA0 mWZ9j9w5d08+jVwBAK6c4iGP7j+/PhbkxaEKa4V3MzIl7zJkcNNjHCXmvFcEuDgEZBBQQhIKKwYB BAGXVQEFAQEHQI5NLiLRjZy3OfSt1dhCmFyn+fN/QKELUYQetiaoe+MMAwEIB4h+BBgWCAAmFiEE Dg7HY17ghYlni8XN8xYDWXahwukFAmQQUEICGwwFCQHhM4AACgkQ8xYDWXahwukm+wEA8cml4JpK NeAu65rg+auKrPOP6TP/4YWRCTIvuYDm0joBALw98AMz7/qMHvSCeU/hw9PL6u6R2EScxtpKnWof z4oM Received-SPF: pass client-ip=185.67.36.66; envelope-from=philipk@posteo.net; helo=mout02.posteo.de X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:309938 Archived-At: --=-=-= Content-Type: text/plain Philip Kaludercic writes: > Joseph Turner writes: > >>> My main difficulty is understanding what Hyperdrive is... >> >> Hyperdrive is a p2p file-sharing tool (like Dropbox, but FLOSS and with >> no third-party intermediary; like Bittorrent, but mutable and versioned; >> like IPFS, but without CIDs and faster for mutable data). >> >> User story: Alice creates a new hyperdrive and adds some files. Her >> computer returns a public key URL that uniquely identies the hyperdrive. >> Alice shares that URL with Bob, who can then download Alice's files >> directly from Alice's computer (no third-party servers are required to >> route the connection - they find each other using a DHT or using mDNS if >> they're on the same LAN). Bob can download some of Alice's without >> having to load her whole drive. >> >> Data is distributed on the network; once Bob has loaded Alice's files, >> Carol can get them from Bob even when Alice is offline. Drives are >> mutable; When Alice adds/removes/changes files in the drive, Bob can >> refresh her drive on his machine to get the latest changes. Drives are >> versioned; anyone with the URL can "check out" prior versions of Alice's >> drive to see what her files used to look like. >> >> There's more info in the manual, especially in the Concepts section: >> >> https://ushin.org/hyperdrive/hyperdrive-manual.html#Concepts >> >> There's also this talk at LibrePlanet 2023. Comparison of peer-to-peer >> protocols starts @36:49: >> >> https://media.libreplanet.org/u/libreplanet/m/emacs-for-p2p-deliberation/ > > Thanks! > >>> The second issue I have is that there is quite a lot of code, and >>> I'd like to take a look at everything before I add anything. >> >> Take your time. I'm happy to get on a videocall to go through the code >> together with you. > > That is not necessary, I'll understand what is going on, the issue is > just finding the time to at least skim through everything once. > >> Thank you! >> >> Joseph Done. Overall it looks fine, and I'll add the package to NonGNU ELPA, it would be nice if you could take a look and consider addressing the changes I propose and comments I made: --=-=-= Content-Type: text/plain Content-Disposition: inline diff --git a/hyperdrive-lib.el b/hyperdrive-lib.el index 43ca32e3cb..d77b3d1e3c 100644 --- a/hyperdrive-lib.el +++ b/hyperdrive-lib.el @@ -1034,6 +1034,8 @@ Affected by option `hyperdrive-reuse-buffers', which see." "Call `message' with MESSAGE and ARGS, prefixing MESSAGE with \"Hyperdrive:\"." (apply #'message (concat "Hyperdrive: " message) args)) +;; Might be nice to use `define-error' for `condition-case' to detect +;; this as a specific error type? (defun hyperdrive-error (string &rest args) "Call `error' with STRING and ARGS, prefixing STRING with \"Hyperdrive:\"." (apply #'error (concat "Hyperdrive: " string) args)) @@ -1099,6 +1101,8 @@ When BASE is non-nil, PATH will be expanded against BASE instead." ;; of Emacs (going back to the version we declare support for), for ;; features that aren't present in `compat'. +;; If there is anything you'd like to see in Compat, please mention it. + (eval-and-compile (if (< emacs-major-version 29) (define-derived-mode hyperdrive-clean-mode fundamental-mode "Clean" diff --git a/hyperdrive-mirror.el b/hyperdrive-mirror.el index caa9e881b7..27113c5052 100644 --- a/hyperdrive-mirror.el +++ b/hyperdrive-mirror.el @@ -166,7 +166,7 @@ predicate and set NO-CONFIRM to t." ;;;; Mode (defvar-keymap hyperdrive-mirror-mode-map - :parent tabulated-list-mode-map + :parent tabulated-list-mode-map :doc "Local keymap for `hyperdrive-mirror-mode' buffers." "C-c C-c" #'hyperdrive-mirror-do-upload) diff --git a/hyperdrive-vars.el b/hyperdrive-vars.el index afc3cf6ef5..ba59e042d9 100644 --- a/hyperdrive-vars.el +++ b/hyperdrive-vars.el @@ -39,18 +39,15 @@ (defcustom hyperdrive-storage-location (expand-file-name "~/.local/share/hyper-gateway-nodejs/") "Location to store Hypercore data." - :type '(file :must-match t) - :group 'hyperdrive) + :type '(file :must-match t)) (defcustom hyperdrive-hyper-gateway-port 4973 "Port on which to run the hyper-gateway server." - :type 'natnum - :group 'hyperdrive) + :type 'natnum) (defcustom hyperdrive-honor-auto-mode-alist t "If non-nil, use file extension of hyperdrive file to set `major-mode'." - :type 'boolean - :group 'hyperdrive) + :type 'boolean) (defcustom hyperdrive-persist-location nil "Location where `persist' will store data. @@ -58,19 +55,18 @@ - `hyperdrive-hyperdrives' - `hyperdrive-version-ranges'" :type '(choice (const :tag "Use default persist location" nil) - (file :tag "Custom location")) - :group 'hyperdrive) - -(defcustom hyperdrive-download-directory (expand-file-name - (if (bound-and-true-p eww-download-directory) - (if (stringp eww-download-directory) - eww-download-directory - (funcall eww-download-directory)) - "~/")) + (file :tag "Custom location"))) + +(defcustom hyperdrive-download-directory + (expand-file-name + (if (bound-and-true-p eww-download-directory) + (if (stringp eww-download-directory) + eww-download-directory + (funcall eww-download-directory)) + "~/")) "Location where `hyperdrive-download-url' will download files. Defaults to `eww-download-directory'." - :type '(file :must-match t) - :group 'hyperdrive) + :type '(file :must-match t)) (defvar hyperdrive-timestamp-format-string) (defcustom hyperdrive-timestamp-format "%x %X" @@ -78,20 +74,20 @@ Defaults to `eww-download-directory'." Passed to `format-time-string', which see." :type 'string :set (lambda (option value) - (set option value) + (set-default option value) (setf hyperdrive-timestamp-format-string (format "%%%ds" ;; FIXME: This value varies based on current ;; time. (format-time-string "%-I") will ;; be one or two characters long ;; depending on the time of day - (string-width (format-time-string value))))) - :group 'hyperdrive) + (string-width (format-time-string value)))))) (defcustom hyperdrive-directory-display-buffer-action '(display-buffer-same-window) "Display buffer action for hyperdrive directories. Passed to `display-buffer', which see." + ;; Perhaps use `display-buffer--action-custom-type'? :type '(choice (const :tag "Same window" (display-buffer-same-window)) (const :tag "Pop up window" (display-buffer-pop-up-window)) (sexp :tag "Other")) @@ -103,13 +99,11 @@ Passed to `display-buffer', which see." Passed to `display-buffer', which see." :type '(choice (const :tag "Same window" (display-buffer-same-window)) (const :tag "Pop up window" (display-buffer-pop-up-window)) - (sexp :tag "Other")) - :group 'hyperdrive) + (sexp :tag "Other"))) -(defcustom hyperdrive-column-headers 't +(defcustom hyperdrive-column-headers t "Display column headers in `hyperdrive-dir' and `hyperdrive-history' buffers." - :type 'boolean - :group 'hyperdrive) + :type 'boolean) (defcustom hyperdrive-default-host-format '(petname nickname domain seed short-key public-key) @@ -125,8 +119,7 @@ used." (const :tag "DNSLink domain" domain) (const :tag "Seed" seed) (const :tag "Shortened public key" short-key) - (const :tag "Full public key" public-key))) - :group 'hyperdrive) + (const :tag "Full public key" public-key)))) (defcustom hyperdrive-stream-player-command "mpv --force-window=immediate %s" "Command used to play streamable URLs externally. @@ -135,19 +128,17 @@ quoted, because the arguments are passed directly rather than through a shell)." :type '(choice (const :tag "MPV" "mpv --force-window=immediate %s") (const :tag "VLC" "vlc %s") - (string :tag "Other command")) - :group 'hyperdrive) + (string :tag "Other command"))) (defcustom hyperdrive-queue-size 2 "Default size of request queues." ;; TODO: Use this elsewhere also. - :type 'integer - :group 'hyperdrive) + :type 'integer) ;natnum? + (defcustom hyperdrive-render-html t "Render HTML hyperdrive files with EWW." - :type 'boolean - :group 'hyperdrive) + :type 'boolean) (defcustom hyperdrive-reuse-buffers 'any-version "How to reuse buffers when showing entries. diff --git a/hyperdrive.el b/hyperdrive.el index f3024417ae..c94da62fb0 100644 --- a/hyperdrive.el +++ b/hyperdrive.el @@ -2,9 +2,9 @@ ;; Copyright (C) 2022 Joseph Turner -;; Author: Joseph Turner +;; Author: Joseph Turner ;; Author: Adam Porter -;; Maintainer: Joseph Turner +;; Maintainer: Joseph Turner <~ushin/ushin@lists.sr.ht> ;; Created: 2022 ;; Version: 0.2-pre ;; Package-Requires: ((emacs "27.1") (map "3.0") (compat "29.1.4.0") (plz "0.7") (persist "0.5")) --=-=-=--