2008年9月16日火曜日

”FriendFeedのクライアントっぽいもの”報告

先日、IWDDのHackathonで作った「FriendFeedのAdobeAIRクライアントっぽいもの」です。
画像ではたまたまTwitterのものしか表示されていないですが、FriendFeedで設定している色んなサービスが見れるようになります。

見かけが夏ライオンに似ている気がするのは、多分気のせいw

ソースですが、以下にUpしてみました。
SVNへのリンク
TracのBrowseSourceへのリンク

機能としては、FriendFeedのフィードが見えて、リンクのクリックができるだけ...としょぼしょぼではあります。
これから改造を加えて行くかなぁーと思っています。
個人的にはTwitterとかは夏ライオンを今まで通り使っていくのでTwitterの内容は特にいらない(笑)
FriendFeedの方はページリンクとコメントを見て行きたいので、そういうFilterをつけたり... Like や Comment がつける事ぐらいできたらなぁーと思っているので、とりあえずはその方向の目標で。

作成途中でハマったこと。

mx:Listを使って、ItemRendererを自作して表示してみるようにしてみたんですが、行の高さが思い通りにならなくて。。
1フィードに表示する文字数って違ってくるから、1行毎の高さは違う状態(全ての文字が収まる高さ)にしたかったのですが、これが上手くいかない....

まず、1行毎に高さを別々にしたい場合には、mx:Listの属性に
variableRowHeight="true"
wordWrap="true"
を入れる必要があるみたい。

これを行なった状態でも、元々全ての文字が収まっていた行もスクロールして小さい行のものを表示していくと、小さい行サイズになってしまう。

よくわからなくて、大分悩んでいたんですが、結局以下の行をレンダラのクラスに追加して解決しています。
override public function set data(value:Object) : void{
super.data = value;
//これをしないと、スクロールしていくとリストの行サイズがおかしくなる
validateNow();
}


Rendererというのは一つのインスタンスを使い回して表示していると思うのですが、その際に中のデータの入替は行なうけどサイズの計算はしてない...ってことなのかなぁ?

validateNow() がどれだけコストのかかる処理なのかは不明なので、これが正解の対応ではないかもしれない。。。
A List itemRenderer using States and Transitionsという記事も見つけたんだけど、んーちょっとよくわからず。今回の件とマッチするような内容でもない気もして。。

不明なこと

FriendFeedの情報をとってくる際に、認証ダイアログが出てきます。(OSの機能としてのダイアログ)

ここで、FriendFeedで提供されているNickNameとRemoteKeyを入れるとFeedが取得できるようになるのですが....
ここで入力されたNickNameをアプリケーションから取得ってできないんだろうか?
ここはちょっとよく分かっていない。。

いや。。。そもそもAlertThingyではこのOSで表示するダイアログって表示されないよなぁー。他に方法があるんやろうか。あるんだろうな。。。

ちなみに、HTTPServiceで、
httpService.setRemoteCredentials(nickName, remoteKey, "utf-8");
を指定してあげても、OSの認証ダイアログって出てくるみたいなので、これじゃない方法なんだろうとは思います。。だれか知っていてたら教えてください。。

修正したいこと。

今、Service(TwitterとかFriendFeedとか)のアイコン画像を取得しているのですが、取得するアイコンは同じものが多いのでキャッシュして最低限の画像を取得するようにしたい。

一応、How to Cache Images in Your Flex Applicationの記事を読んで、真似て作ってみたんですが、これだと、Loadが完了していない画像の場合は、同じ画像だったとしても読みにいっちゃぅんじゃないかなぁーと。
同じ画像をいくつも使われている場合は、最初の一回だけ読みにいって、後の画像はそれを参照するようにしたいな。と。

そもそもAIRにはブラウザのように画像キャッシュの機能があったりしないのか?との漠然と感じる所もあったりして...同じ画像を何回か取得した時の、ネットワークの通信内容をチェックしてみるのを先にした方がいいかもしれんなぁー。
• • •