File: profiletab.rb

package info (click to toggle)
mikutter 3.0.7%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 9,396 kB
  • ctags: 1,916
  • sloc: ruby: 16,619; sh: 117; makefile: 27
file content (45 lines) | stat: -rw-r--r-- 1,502 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# -*- coding: utf-8 -*-

require File.expand_path File.join(File.dirname(__FILE__), 'cuscadable')
require File.expand_path File.join(File.dirname(__FILE__), 'hierarchy_parent')
require File.expand_path File.join(File.dirname(__FILE__), 'hierarchy_child')
require File.expand_path File.join(File.dirname(__FILE__), 'window')
require File.expand_path File.join(File.dirname(__FILE__), 'tablike')
require File.expand_path File.join(File.dirname(__FILE__), 'widget')

class Plugin::GUI::ProfileTab
  include Plugin::GUI::Cuscadable
  include Plugin::GUI::HierarchyChild
  include Plugin::GUI::HierarchyParent
  include Plugin::GUI::Widget
  include Plugin::GUI::TabLike

  role :profiletab

  set_parent_event :gui_profiletab_join_profile

  attr_reader :user
  attr_accessor :profile_slug

  def initialize(*args)
    super
    Plugin.call(:profiletab_created, self)
  end

  # 完全なユーザ情報が取得できたらコールバックする
  def user_complete(&callback)
    type_strict user => User, callback => Proc
    if user[:exact]
      yield user
    else
      atomic {
        if not(defined?(@user_promise) and @user_promise)
          @user_promise = Service.primary.user_show(user_id: user[:id]).next{ |u|
            @user_promise = false
            u }.terminate{
            Plugin[:gui]._("%{user} のユーザ情報が取得できませんでした") % {user: user[:idname]}
          } end
        @user_promise = @user_promise.next{ |u| callback.call(u); u } } end
  end

end