mootoh / qstwitter

Quicksilver Twitter plugin.

This URL has Read+Write access

mootoh (author)
Wed Jul 02 10:05:28 -0700 2008
commit  6d3c7da8910db2698d44fa6cc762f5fea7a82913
tree    0ddb26faf604b8f50186ecaec6fbb40b0217ec50
parent  bf5991a2ffbba50ee6ab8fee52c0077d8965321d
qstwitter / qs_action.rb
100644 139 lines (120 sloc) 3.78 kb
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#
# qs_action.rb - actual Action behavior
#
# WassrPlugin
# License: revised BSD
# Motohiro Takayama <mootoh@gmail.com>
#
require 'osx/cocoa'
require 'shared'
require 'cgi'
require 'kconv'
require 'net/http'
require 'uri'
 
#
# does actual Action
#
class WassrPluginAction < OSX::QSActionProvider
  # reload itself
  def reload
    Shared.logger.info('reloading ' + __FILE__)
    load(__FILE__)
  end
 
  # get screenName:password from PreferencePane
  def name_pass
    dict = OSX::NSUserDefaultsController.sharedUserDefaultsController.values;
    screen_name = dict.valueForKey("WassrPreference.screenName")
    password = dict.valueForKey("WassrPreference.password")
    screen_name.to_s + ':' + password
  end
 
  def name_and_pass
    dict = OSX::NSUserDefaultsController.sharedUserDefaultsController.values;
    screen_name = dict.valueForKey("WassrPreference.screenName")
    password = dict.valueForKey("WassrPreference.password")
    [screen_name.to_s, password]
  end
 
  def make_request_with_cocoa(content)
    u = 'http://' + name_pass + '@api.wassr.jp/statuses/update.json'
    Shared.logger.info(u.to_s)
 
    req = OSX::NSMutableURLRequest.alloc.initWithURL(OSX::NSURL.URLWithString(u))
    req.setHTTPMethod('POST')
    content = Kconv.toutf8(content)
    req.setHTTPBody(OSX::NSData.dataWithBytes_length(content, content.size))
    req
  end
 
  def request_with_cocoa(req)
    con = OSX::NSURLConnection.connectionWithRequest_delegate(req, self)
    Shared.logger.info(con ? "request succeeded" : "request failed")
  end
 
  def make_request(content)
    req = Net::HTTP::Post.new('/statuses/update.json')
    np = name_and_pass
    req.basic_auth np[0], np[1]
Shared.logger.info("name=#{np[0]}, pass=#{np[1]}")
    req.body = Kconv.toutf8(content)
    req
  end
 
  def request(req)
    http = if ENV['http_proxy']
      u = URI.parse(ENV['http_proxy'])
      Net::HTTP::Proxy(u.host, u.port).new('api.wassr.jp')
    else
      Net::HTTP.new('api.wassr.jp')
    end
 
    res = http.request(req)
    Shared.logger.info(res.message)
    res
  end
    
  def post_to(arg, friend)
    str = arg.stringValue.to_s
    if str == '/reload'
      Shared.logger.info('reload')
      reload
      return arg
    end
 
    if friend && (friend.stringValue.to_s != Shared::PUBLIC)
      str = '@' + friend.stringValue.to_s + ' ' + str
      Shared.logger.info(str)
    end
 
    begin
      content = 'source=QSWassr&status=' + CGI.escape(str)
      Thread.new {
        request(make_request(content))
      }
    rescue
    end
 
    arg
  end
 
=begin
def validActionsForDirectObject_indirectObject(dobj, iobj)
Shared.logger.info('validActionsForDirectObject_indirectObject')
if dobj.primaryType.isEqualToString 'WassrPluginType'
return ['reply']
end
return ['post']
end
=end
  def validIndirectObjectsForAction_directObject(action, dobj)
    Shared.logger.info('validIndirectObjectsForAction_directObject')
    #[NSArray arrayWithObject:[QSObject textProxyObjectWithDefault Value:@""]];
    if dobj.primaryType.isEqualToString 'WassrPluginType'
      [OSX::QSObject.textProxyObjectWithDefaultValue('')]
    end
  end
 
  #
  # callbacks for Cocoa HTTP request
  #
  def connection_didReceiveResponse(con, res)
    Shared.logger.info('connection_didReceiveResponse' + res.statusCode.to_s)
  end
 
  def connection_didReceiveData(con, data)
    Shared.logger.info('connection_didReceiveData' + data.to_s)
    #OSX::QSShowNotifierWithAttributes({'QSWassr' => OSX::QSNotifierTitle, 'posted' => OSX::QSNotifierText})
  end
 
  def connection_didFailWithErro(con, err)
    Shared.logger.info('connection_didFailWithErro' + err.to_s)
  end
 
  def connectiondidFinishLoading(con)
    Shared.logger.info("connectiondidFinishLoading")
  end
end # Action