From 85ef45d88487498f31974153917c95a8725c5514 Mon Sep 17 00:00:00 2001 From: Lucas Araujo Date: Sat, 4 Oct 2025 00:10:28 +0200 Subject: [PATCH 1/2] Added linkding enhanced app --- Linkding/Linkding.php | 55 +++++++++++++++++++++++++++++++++++ Linkding/app.json | 10 +++++++ Linkding/config.blade.php | 15 ++++++++++ Linkding/linkding.png | Bin 0 -> 4600 bytes Linkding/livestats.blade.php | 10 +++++++ 5 files changed, 90 insertions(+) create mode 100644 Linkding/Linkding.php create mode 100644 Linkding/app.json create mode 100644 Linkding/config.blade.php create mode 100644 Linkding/linkding.png create mode 100644 Linkding/livestats.blade.php diff --git a/Linkding/Linkding.php b/Linkding/Linkding.php new file mode 100644 index 0000000000..3b7dbdf603 --- /dev/null +++ b/Linkding/Linkding.php @@ -0,0 +1,55 @@ +url('api/bookmarks')); + Log::info('Headers: ' . json_encode($this->getHeaders())); + + $test = parent::appTest($this->url('api/bookmarks?limit=1'), $this->getHeaders()); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $res = parent::execute($this->url('api/bookmarks?limit=1000'), $this->getHeaders()); + $details = json_decode($res->getBody()); + + $data = []; + if ($details) { + $status = 'active'; + $data = [ + "bookmark_count" => $details->count, + ]; + } + + return parent::getLiveStats($status, $data); + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url) . $endpoint; + return $api_url; + } + + private function getHeaders() + { + return [ + "headers" => [ + "Authorization" => "Token " . $this->config->access_token, + ], + ]; + } +} diff --git a/Linkding/app.json b/Linkding/app.json new file mode 100644 index 0000000000..0d0e49cc78 --- /dev/null +++ b/Linkding/app.json @@ -0,0 +1,10 @@ +{ + "appid": "1a039cf9812aee2944f3e2c472288fab189bc1a9", + "name": "Linkding", + "website": "https://linkding.link/", + "license": "MIT License", + "description": "A self-hosted bookmark manager designed to be minimal, fast, and easy to set up.", + "enhanced": true, + "tile_background": "dark", + "icon": "linkding.png" +} \ No newline at end of file diff --git a/Linkding/config.blade.php b/Linkding/config.blade.php new file mode 100644 index 0000000000..dbf84ab082 --- /dev/null +++ b/Linkding/config.blade.php @@ -0,0 +1,15 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[access_token]', null, array('placeholder' => 'Access Token', 'data-config' => 'access_token', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/Linkding/linkding.png b/Linkding/linkding.png new file mode 100644 index 0000000000000000000000000000000000000000..8f214d5b7c3653e103941c4ea06e6a4c0f769eae GIT binary patch literal 4600 zcmZu#cQhM}*S4#+4x=`;M~N9*1ywDzx7ejth!-(yQ$?wk#44(&RijmE&!`Y;@5BhT zcZHCz-#@?ee&6|>bN6}fea^Y}znlEbP>-JG9t{Zz3BCR!kjYgx_WJ5OAlSB{RZ zJ{0a991z~W+nE^ugMjbu>=4S!_Pt-MK?ByCn~(bYP9wrM+FFmleLeE^S;OHjt11s* zA-MT@{LJ)ue%|i#5`GYQiXJ&bq0X?_i{O87X|K1E5`Jf9Y{x`z4&KZ^`nxHKKodh# z62kfJG39L>hUTY{GJ8wJ4C7~rp71DF-*`i@vs{v~cM1?70c~PX`mAZrUm$1#KPBy-S)Lx!%ztcwi2hmN9Xw(-Q;@44L zrjLZUE8S0WQI<2X9BfY`SFD#@9A%Q%ZrVZ8vz)41FS<_1V7qg4CgXkH_({fMIFg)v zj$uE3w{}OTII=9+b7iq~6(l)O{ZOfWc1g%ji1+u!km#}}RvDk1S2QL2(4#;2tfuPS zRf%ZW46;=2YG7VmlmX|Ts8<@$>$$ASi))g~RYS@3KCS=AikU!3SaTrb>kI)f+QRxN zAtZg>d>|FzsFs`@I3DZ8t=xk^V`l zkYLwMrax)jS)42$O3aduLQnc_HsvYk|dSH8Z=qV3Tflna;_a8lFsb2Q73<5;jQzN6b{A_6QP)_tOm4@Q~Is`OwnPaoHYA;3R3R}vqf;|~A_@>; zB}!)^8d|NEz1&R_Ulmm=48PRY<#dSQE0Hn|?^PSKgzy^;4qwTSCGYNmK_xtWvP#j- zW}(@zWN!?`6FkQiaGNUB%WiG!Son_E!DY6}QDDe9o<5$xh;uzMq=??*FLR0M&a>dVR z%7!Bafz4M!3g~vYMJk7d(yPn-;OYrUn-DR@id^qY12if z#t?A(`-AFK;|;oftN6EYFv5X6qt%B)`PDJhQS4{>@|n@HqjHkS7^knHWIjlW#W)Cj zrT*^eKna&3YfyWUsZ8XQW=7}qtgCXthWha%aoybL-?hM)_rQ&Z;tpI_Z1T1SQ~Mv~EeziT)V+M?WFfe3?umD@TfsCGPR?SH>@ z4E*_cZzyF)U|z#HGVy2o5F?~W@`J1av~p(iG*riHt(~XOd?8qH6-72$v;jmfhy)qL zTBzNsSf;y`U(5$KGp{(V?YLC2B}qb|7Fv{QW_Y>3h$nv&s6H0FjimTi7Nw(=e)fK1 zL3C~P;dho-$n|%8VK~Xr*%OwQySf>x2!l)5>bcf}AlT@+TZ$K1ISRJF)WglWmlwH5w33y#g(HPXn~2>u2Wb21qoOll9V@iN^&2uE$4_ql0e_JEVB zjAY0h8KV~4h^?}yIBs8OR!!!}g5zPWtTyc~IK7<3G+PPh19V9M^mY~#Y{+!8Jlni0 zQ2-^b>4 zo96Gr-bZj#Q0Nvkp!}V03tf%} ?sCW5hB)9D^kRHDJJzm^ZSr`wGll;pcdLOi=c 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 literal 0 HcmV?d00001 diff --git a/Linkding/livestats.blade.php b/Linkding/livestats.blade.php new file mode 100644 index 0000000000..0d2cb41e0e --- /dev/null +++ b/Linkding/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Bookmarks + @if ($bookmark_count >== 1000) + {!! $bookmark_count !!} + @else + 1000+ + @endif +
  • +
\ No newline at end of file From 3bc8c2997801247b37ead3f94d4808fb63108f11 Mon Sep 17 00:00:00 2001 From: Lucas Araujo Date: Sat, 4 Oct 2025 00:11:26 +0200 Subject: [PATCH 2/2] Cleaned debug logs --- Linkding/Linkding.php | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Linkding/Linkding.php b/Linkding/Linkding.php index 3b7dbdf603..fc6485fb55 100644 --- a/Linkding/Linkding.php +++ b/Linkding/Linkding.php @@ -2,8 +2,6 @@ namespace App\SupportedApps\Linkding; -use Log; - class Linkding extends \App\SupportedApps implements \App\EnhancedApps { public $config; @@ -13,10 +11,6 @@ public function __construct() { public function test() { - Log::info('Testing Linkding API'); - Log::info('URL: ' . $this->url('api/bookmarks')); - Log::info('Headers: ' . json_encode($this->getHeaders())); - $test = parent::appTest($this->url('api/bookmarks?limit=1'), $this->getHeaders()); echo $test->status; }