プロジェクト

全般

プロフィール

提案 #1487

完了

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

Shibafu Midorino さんがほぼ3年前に追加. ほぼ3年前に更新.

ステータス:
終了
優先度:
通常
対象バージョン:
プラグイン名:

説明

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

関連するチケット

関連している 提案 #1490: settingsプラグインのGtk依存をやめる終了toshi_a 初音操作

toshi_a 初音 さんがほぼ3年前に更新

  • ステータス分類待ち から 実装待ち に変更

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

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

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

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

Shibafu Midorino さんがほぼ3年前に更新

  • 担当者Shibafu Midorino にセット

Shibafu Midorino さんがほぼ3年前に更新

Shibafu Midorino さんがほぼ3年前に更新

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への依存関係を削除

Shibafu Midorino さんがほぼ3年前に更新

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*)>

toshi_a 初音 さんがほぼ3年前に更新

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

Shibafu Midorino さんがほぼ3年前に更新

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

Shibafu Midorino さんがほぼ3年前に更新

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

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

やれそう/やりたい

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

  • aspectframe
  • bugreport

放置

  • console
  • intent_selector
  • modelviewer
  • quickstep
  • search
  • skin_setting_gtk

Shibafu Midorino さんがほぼ3年前に更新

  • ステータス実装待ち から レビュー待ち に変更
  • ブランチtopic/1487-remove-gtk-depend にセット

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

toshi_a 初音 さんがほぼ3年前に更新

  • ステータスレビュー待ち から 終了 に変更

merged.

toshi_a 初音 さんがほぼ3年前に更新

  • 対象バージョン4.2 にセット

toshi_a 初音 さんがほぼ3年前に更新

  • 関連している 提案 #1490: settingsプラグインのGtk依存をやめる を追加

toshi_a 初音 さんがほぼ3年前に更新

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

他の形式にエクスポート: Atom PDF