Project

General

Profile

提案 #1487

不必要な gtk plugin への依存関係を削除したい

Added by Shibafu Midorino 26 days ago. Updated 3 days ago.

Status:
終了
Priority:
通常
Target version:
プラグイン名:
ブランチ:
topic/1487-remove-gtk-depend

Description

gtk (場合によってはgui) が無い環境でもそのまま使える、または使いたいプラグインはそれなりにありそうですが、あまり整理されていないように思います。
mastodon プラグインみたいに、依存がなければ修正なしに daemon 化して使えたのに… みたいなものが他にもないか?というのが動機です。
消せそうなら依存を消す作業をやるつもりです。

gtk プラグインを依存関係に入れているプラグイン

とりあえず30分くらいかけて眺めた結果。

対応済 プラグイン Gtk moduleへの参照 依存を消せそうか 感想
activity defactivityはGUIに関係なく呼び出しが通ってほしい。tabは別プラグインで良さそうだし、簡単に分離できそう
aspectframe なんでやろなあ(すっとぼけ)
bugreport
console
extract tab周りはGTK以外のToolkitにも流用できそうで、設定UIは別プラグイン化したいかも
intent_selector
mastodon 簡単には整理できないですが、分けたい……
modelviewer
openimg
proxy まったく依存してなくてビビった
quickstep
quoted_message Gtk::Clipboard 依存だけなので簡単そう
search
settings DSLは使いたいが...
shortcutkey
skin_setting_gtk

Related issues

Related to 提案 #1490: settingsプラグインのGtk依存をやめる終了toshi_a 初音Actions
#1

Updated by toshi_a 初音 26 days ago

  • Status changed from 分類待ち to 実装待ち

少なくとも書いてる範囲は賛成です。
大抵のプラグインは、Gtk依存部分を別プラグインにして、元プラグインにも依存させる形で切り出せるはずです(DSLを提供するsettingと、それをGtkで表現するsetting_gtk)。

settings はnativewidget DSLメソッドがあるので大変そう。何年もかけてちょっとずつ整理していますが、今やろうとするとどれくらい難しいのかはわからないです。

quickstep は、意図的にGtkに依存させています。quickstepはイベントやフィルタを用いたAPI定義を提供することが本質で、そのUIをGtkで実装したものに過ぎません。極端な話ほかのUIツールキットでGUIを再実装するなら、そのUIツールキット用のquickstepを実装します。

aspectframe, mastodon は、複数の機能が単一のプラグインにまとまってしまっているので、機能単位ごとにプラグイン化していく戦略が良さそうです。
(もちろんこのチケットではGtk依存機能の切り出しだけで良い)

#2

Updated by Shibafu Midorino 23 days ago

  • Assignee set to Shibafu Midorino
#3

Updated by Shibafu Midorino 21 days ago

  • Description updated (diff)
#4

Updated by Shibafu Midorino 17 days ago

  • Description updated (diff)

1回マークアップ失敗して全てが大きな文字になった…

activity

activity, activity_setting, activity_gtk に分割

extract

extract, extract_gtk に分割

mastodon

mastodon, mastodon_custom_post, mastodon_gtk, mastodon_setting に分割

openimg

openimg, openimg_gtk に分割

proxy

gtkへの依存関係を削除

quoted_message

clipboard_write event で置き換え、gtkへの依存関係を削除

#5

Updated by Shibafu Midorino 17 days ago

photo_support は、依存関係としてはgtk pluginとの関係を持っていませんが、実装上はgdk_pixbuf2 gemに依存しており実質的にgtkへの依存と見做せる状態です。
gemのAPIを使っている場所は1行だけなんですが、こんな風に決め打ってしまっても十分そうだと考えています。意見いただけませんか?

拡張子は GitHubのヘルプページ から拾って決め打ちました。
もう大したことないのでインラインにしています。
それによって無意味になった定数のほうは……保守的にするならこうですが、多分誰も使ってないんじゃないかなあという気も。

diff --git a/plugin/photo_support/photo_support.rb b/plugin/photo_support/photo_support.rb
index 7cacd2b6..8489082b 100644
--- a/plugin/photo_support/photo_support.rb
+++ b/plugin/photo_support/photo_support.rb
@@ -5,9 +5,11 @@ require 'httpclient'
 require 'json'

 module Plugin::PhotoSupport
-  SUPPORTED_IMAGE_FORMATS = GdkPixbuf::Pixbuf.formats.flat_map{|f| f.extensions }.freeze
+  SUPPORTED_IMAGE_FORMATS = %w[jpeg jpg png gif].freeze
+  deprecate_constant :SUPPORTED_IMAGE_FORMATS
+
   INSTAGRAM_PATTERN = %r{\Ahttps?://(?:instagr\.am|(?:www\.)?instagram\.com)/p/([a-zA-Z0-9_\-]+)/}
-  GITHUB_IMAGE_PATTERN = %r<\Ahttps://github\.com/(\w+/\w+)/blob/(.*\.(?:#{SUPPORTED_IMAGE_FORMATS.join('|')}))\z>
+  GITHUB_IMAGE_PATTERN = %r<\Ahttps://github\.com/(\w+/\w+)/blob/(.*\.(?:jpe?g|png|gif))\z>
   YOUTUBE_PATTERN = %r<\Ahttps?://(?:www\.youtube\.com/watch\?v=|youtu\.be/)(\w+)>
   NICOVIDEO_PATTERN = %r<\Ahttps?://(?:(?:www|sp)\.nicovideo\.jp/watch|nico\.ms)/([sn][mo][1-9]\d*)>

#6

Updated by toshi_a 初音 16 days ago

SUPPORTED_IMAGE_FORMATS の扱いは、コメントに書いてくれたパッチでOKです。多分誰も使ってないですが、消すのはメジャーバージョンアップのときにしたいです。

#7

Updated by Shibafu Midorino 16 days ago

#note-5, #note-6 対応しました。

#8

Updated by Shibafu Midorino 16 days ago

とりあえず現時点までの作業成果で、Mastodonをsubscribeするmikutterdをだいぶ簡単に作れるくらいまで進みました。
あと残ってるものはこんな感じかと。

リストアップできてないものも考慮すると、この作業って #1380 と被ってきますね。

やれそう/やりたい

一応やれそうだが、あまり重要でない

  • aspectframe
  • bugreport

放置

  • console
  • intent_selector
  • modelviewer
  • quickstep
  • search
  • skin_setting_gtk
#9

Updated by Shibafu Midorino 12 days ago

  • Status changed from 実装待ち to レビュー待ち
  • ブランチ set to topic/1487-remove-gtk-depend

一旦ここまでで作業を切って、レビューをお願いしたいと思います。変更前と同様に動けばオッケーですかね。

#10

Updated by toshi_a 初音 10 days ago

  • Status changed from レビュー待ち to 終了

merged.

#11

Updated by toshi_a 初音 10 days ago

  • Target version set to 4.2
#12

Updated by toshi_a 初音 3 days ago

  • Related to 提案 #1490: settingsプラグインのGtk依存をやめる added
#13

Updated by toshi_a 初音 3 days ago

settingsについては、以下のチケットに切り出し
提案 #1490: settingsプラグインのGtk依存をやめる

Also available in: Atom PDF