[tuxdroid-svn] r5752 - in software_suite_v3/software/plugin/plugin-facebook/branches/october_releas
Status: Beta
Brought to you by:
ks156
|
From: jerome <c2m...@c2...> - 2009-10-20 14:15:00
|
Author: jerome
Date: 2009-10-20 16:14:38 +0200 (Tue, 20 Oct 2009)
New Revision: 5752
Added:
software_suite_v3/software/plugin/plugin-facebook/branches/october_release/src/com/kysoh/plugins/facebook/connection/BareBonesBrowserLaunch.java
Modified:
software_suite_v3/software/plugin/plugin-facebook/branches/october_release/src/com/kysoh/plugins/facebook/FacebookConnection.java
software_suite_v3/software/plugin/plugin-facebook/branches/october_release/src/com/kysoh/plugins/facebook/FacebookFunctions.java
Log:
* Updated facebook functions.
* Big code cleanup.
* Added some new functions.
Modified: software_suite_v3/software/plugin/plugin-facebook/branches/october_release/src/com/kysoh/plugins/facebook/FacebookConnection.java
===================================================================
--- software_suite_v3/software/plugin/plugin-facebook/branches/october_release/src/com/kysoh/plugins/facebook/FacebookConnection.java 2009-10-20 13:30:31 UTC (rev 5751)
+++ software_suite_v3/software/plugin/plugin-facebook/branches/october_release/src/com/kysoh/plugins/facebook/FacebookConnection.java 2009-10-20 14:14:38 UTC (rev 5752)
@@ -26,6 +26,7 @@
import com.google.code.facebookapi.FacebookException;
import com.google.code.facebookapi.FacebookJsonRestClient;
+import com.kysoh.plugins.facebook.connection.BareBonesBrowserLaunch;
import com.kysoh.plugins.facebook.connection.FacebookSessionUtils;
public class FacebookConnection {
@@ -42,14 +43,12 @@
try
{
+
String sessionKey = FacebookSessionUtils.getValidSessionID( true );
//Generate session secret, ready to pass to desktop app client
String sessionSecret = FacebookSessionUtils.lastClientUsed.getCacheSessionSecret();
- //TODO remove this one.
- System.out.println("Session secret: " + String.valueOf(sessionSecret));
-
client = new FacebookJsonRestClient(FacebookSessionUtils.api_key, sessionSecret, sessionKey);
if((sessionSecret == null) || (client == null))
@@ -61,11 +60,11 @@
}
catch (FacebookException e)
{
- ;
+ e.printStackTrace();
}
catch (IOException e)
{
- ;
+ e.printStackTrace();
}
return false;
@@ -99,4 +98,21 @@
{
return client;
}
+
+
+ /**
+ * Prompt for plugin facebook authorizations.
+ */
+ public void promptAuthorizations()
+ {
+ String url = "http://www.facebook.com/login.php?api_key=+" +
+ FacebookSessionUtils.api_key +
+ "&connect_display=popup&v=1.0" +
+ "&next=http://www.facebook.com/connect/login_success.html" +
+ "&cancel_url=http://www.facebook.com/connect/login_failure.html" +
+ "&fbconnect=true&return_session=true" +
+ "&req_perms=read_stream,publish_stream,offline_access,read_mailbox";
+
+ BareBonesBrowserLaunch.openURL(url);
+ }
}
Modified: software_suite_v3/software/plugin/plugin-facebook/branches/october_release/src/com/kysoh/plugins/facebook/FacebookFunctions.java
===================================================================
--- software_suite_v3/software/plugin/plugin-facebook/branches/october_release/src/com/kysoh/plugins/facebook/FacebookFunctions.java 2009-10-20 13:30:31 UTC (rev 5751)
+++ software_suite_v3/software/plugin/plugin-facebook/branches/october_release/src/com/kysoh/plugins/facebook/FacebookFunctions.java 2009-10-20 14:14:38 UTC (rev 5752)
@@ -23,383 +23,347 @@
package com.kysoh.plugins.facebook;
-import java.util.EnumSet;
+import java.util.Collections;
import java.util.Hashtable;
-import java.util.List;
+import java.util.Iterator;
import java.util.Vector;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
import com.google.code.facebookapi.FacebookException;
-import com.google.code.facebookapi.ProfileField;
-import com.google.code.facebookapi.schema.User;
-import com.google.code.facebookapi.schema.UsersGetInfoResponse;
+import com.google.code.facebookapi.FacebookJsonRestClient;
public class FacebookFunctions {
- private FacebookConnection connection;
- private Hashtable<String, Vector<String>> notifications = new Hashtable<String, Vector<String>>();
+ //Messages constants.
+ public static final byte MESSAGE = 0;
+ public static final byte RESPONSE = 1;
+ private FacebookJsonRestClient client;
+ private JSONObject notifications = null;
+
/**
* Class constructor.
* @param connection
*/
- public FacebookFunctions(FacebookConnection connection)
+ public FacebookFunctions(FacebookJsonRestClient aClient)
{
- this.connection = connection;
- this.notifications = this.getUserNotification();
+ this.client = aClient;
+
+ //Getting standard notifications.
+ try
+ {
+ notifications = (JSONObject) client.notifications_get();
+ }
+ catch (FacebookException e)
+ {
+ notifications = null;
+ }
}
/**
- * Gets all notifications.
+ * Add requested feed to the user wall.
*/
- private Hashtable<String, Vector<String>> getUserNotification()
+ public boolean publishFeed(String aFeed)
{
- //Will contain all availables notifications.
- //availables notifications : messages, pokes, shares, friends_requests, group_invites, event_invites
- Hashtable<String, Vector<String>> notifications = new Hashtable<String, Vector<String>>();
-
- try
+ try
{
- connection.getClient().notifications_get();
- String notifs = connection.getClient().getRawResponse();
-
- /**
- * Getting messages notifications.
- */
- if(notifs.contains("<messages"))
- {
- String messagesString = notifs.substring(
- notifs.indexOf("<messages"),
- notifs.indexOf("</messages>"));
-
- Vector<String> msDatas = new Vector<String>();
-
- String unreaded = messagesString.substring(
- messagesString.indexOf("<unread>") + "<unread>".length(),
- messagesString.indexOf("</unread>"));
-
- msDatas.add(unreaded);
-
-
- if(Integer.valueOf(unreaded).intValue() > 0)
- {
- notifications.put("messages", msDatas);
- }
- }
-
- /**
- * Get the friend_requests notifications.
- */
- if(notifs.contains("<friend_requests"))
- {
-
- String friendsString = "";
- try
- {
- friendsString = notifs.substring(notifs.indexOf("<friend_requests"), notifs.indexOf("</friend_requests>"));
- }
- catch(StringIndexOutOfBoundsException no)
- {
- friendsString = notifs.substring(notifs.indexOf("<friend_requests"), notifs.indexOf("/>", notifs.indexOf("<friend_requests")));
- }
-
- Vector<String> friendsDatas = new Vector<String>();
- Vector<Long> friendsDatasAsLong = new Vector<Long>();
-
- //Getting friends uid that ask for friends.
- if(friendsString.contains("<uid>"))
- {
- while(friendsString.contains("<uid>"))
- {
- String friend = friendsString.substring(
- friendsString.indexOf("<uid>") + "<uid>".length(),
- friendsString.indexOf("</uid>"));
-
- friendsString = friendsString.replace("<uid>" + friend + "</uid>", "");
-
- friendsDatasAsLong.add(Long.valueOf(friend).longValue());
- }
-
-
- // Go fetch the information for the user list of user ids
- connection.getClient().users_getInfo(friendsDatasAsLong, EnumSet.of(ProfileField.NAME));
-
- UsersGetInfoResponse userResponse = (UsersGetInfoResponse) connection.getClient().getResponsePOJO();
-
- // Print out the user information
- List<User> users = userResponse.getUser();
- for (User user : users)
- {
- friendsDatas.add(user.getName());
- }
-
- notifications.put("friend_requests", friendsDatas);
- }
- }
-
- /**
- * Getting new groups invitations.
- */
- if(notifs.contains("<group_invites"))
- {
- String groupString;
-
- try
- {
- groupString = notifs.substring(notifs.indexOf("<group_invites"), notifs.indexOf("</group_invites>"));
- }
- catch(IndexOutOfBoundsException indexError)
- {
- groupString = notifs.substring(notifs.indexOf("<group_invites"), notifs.indexOf("/>", notifs.indexOf("<group_invites")));
- }
-
- Vector<Long> groupsDatasAsLong = new Vector<Long>();
- Vector<String> groupsDatas = new Vector<String>();
-
- //Getting friends uid that ask for friends.
- if(groupString.contains("<gid>"))
- {
- while(groupString.contains("<gid>"))
- {
- String friend = groupString.substring(
- groupString.indexOf("<gid>") + "<gid>".length(),
- groupString.indexOf("</gid>"));
-
- groupString = groupString.replace("<gid>" + friend + "</gid>", "");
-
- groupsDatasAsLong.add(Long.valueOf(friend).longValue());
- }
-
- groupsDatas.add(String.valueOf(groupsDatasAsLong.size()));
-
- for(Long gid : groupsDatasAsLong)
- {
- try
- {
- Thread.sleep(200);
- connection.getClient().fql_query("Select name from group WHERE gid=" + gid.longValue());
- String response = connection.getClient().getRawResponse();
- if(response.contains("<group>") && response.contains("<name>"))
- {
- String groupName = response.substring(
- response.indexOf("<name>") + "<name>".length(),
- response.indexOf("</name>", response.indexOf("<name>")));
- groupsDatas.add(groupName);
- }
- }
- catch(Exception fqlError)
- {
- groupsDatas.add("Unknown group");
- }
- }
-
- //Only if they have some group invites.
- if(groupsDatasAsLong.size() > 0)
- {
- notifications.put("group_invites", groupsDatas);
- }
- }
- }
-
- /**
- * Getting new events invitations.
- */
- if(notifs.contains("<event_invites"))
- {
- String eventString = "";
- try
- {
- eventString = notifs.substring(notifs.indexOf("<event_invites"), notifs.indexOf("/>", notifs.indexOf("<event_invites")));
- }
- catch(IndexOutOfBoundsException indexError)
- {
- eventString = notifs.substring(notifs.indexOf("<event_invites"), notifs.indexOf("</event_invites>"));
- }
-
- Vector<Long> eventsDatasAsLong = new Vector<Long>();
- Vector<String> eventsDatas = new Vector<String>();
-
- //Getting friends uid that ask for friends.
- if(eventString.contains("<eid>") || (eventString.contains("<event_invites_elt>")))
- {
- while(eventString.contains("<eid>"))
- {
- String event = eventString.substring(
- eventString.indexOf("<eid>") + "<eid>".length(),
- eventString.indexOf("</eid>"));
-
- eventString = eventString.replace("<eid>" + event + "</eid>", "");
-
- eventsDatasAsLong.add(Long.valueOf(event).longValue());
- }
-
-
- while(eventString.contains("<event_invites_elt>"))
- {
- String event = eventString.substring(
- eventString.indexOf("<event_invites_elt>") + "<event_invites_elt>".length(),
- eventString.indexOf("</event_invites_elt>"));
-
- eventString = eventString.replace("<event_invites_elt>" + event + "</event_invites_elt>", "");
- eventsDatasAsLong.add(Long.valueOf(event).longValue());
- }
-
- //Adding the number of event invites.
- eventsDatas.add(String.valueOf(eventsDatasAsLong.size()));
-
- for(Long eid : eventsDatasAsLong)
- {
- try
- {
- Thread.sleep(200);
- connection.getClient().fql_query("Select name from event WHERE eid=" + eid.longValue());
- String response = connection.getClient().getRawResponse();
- if(response.contains("<event>") && response.contains("<name>"))
- {
- String groupName = response.substring(
- response.indexOf("<name>") + "<name>".length(),
- response.indexOf("</name>", response.indexOf("<name>")));
- eventsDatas.add(groupName);
- }
- }
- catch(Exception fqlError)
- {
- eventsDatas.add("Unknown event");
- }
-
- }
-
- if(eventsDatasAsLong.size() > 0)
- {
- notifications.put("event_invites", eventsDatas);
- }
- }
- }
- }
+ client.users_setStatus(aFeed);
+ return true;
+ }
catch (FacebookException e)
{
;
- }
-
- return notifications;
+ }
+ return false;
}
/**
* Return email notifications.
*/
- public Integer getEmailNotifications()
+ public Hashtable<String, Vector<String>> getEmailNotifications()
{
- if(this.notifications.containsKey("messages"))
+ Hashtable<String, Vector<String>> result = new Hashtable<String, Vector<String>>();
+
+ String query = "SELECT thread_id, subject, recipients, viewer_id FROM " +
+ "thread WHERE folder_id = 0 AND unread != 0";
+ String userQuery = "SELECT name from user WHERE uid=";
+
+ try
{
- return Integer.valueOf(this.notifications.get("messages").get(0));
+ JSONArray emails = (JSONArray) client.fql_query(query);
+
+ for(int x = 0; x < emails.length(); x++)
+ {
+ String thread = (String) emails.getJSONObject( x ).get("thread_id");
+ String subject = (String) emails.getJSONObject( x ).get("subject");
+ JSONArray recipients = (JSONArray) emails.getJSONObject( x ).get("recipients");
+ String viewer = (String) emails.getJSONObject( x ).get("viewer_id");
+
+ String senderID = viewer;
+ String sender = "Undefined";
+
+ for(int y = 0 ; y < recipients.length(); y++)
+ {
+ senderID = recipients.getString( y );
+ if( ! senderID.equalsIgnoreCase(viewer))
+ {
+ JSONArray username = (JSONArray) client.fql_query(userQuery + senderID);
+ sender = username.getJSONObject( 0 ).getString("name");
+ }
+ }
+
+ Vector<String> threadDatas = new Vector<String>();
+ threadDatas.add(subject);
+ threadDatas.add(sender);
+
+ result.put(thread, threadDatas);
+ }
+ }
+ catch (FacebookException e)
+ {
+ ;
+ }
+ catch (JSONException e)
+ {
+ ;
}
- else
+ catch (ClassCastException e)
{
- return 0;
+ ;
}
+
+ return sortHash(result);
}
/**
- * Return the number of friend requests.
+ * Return friend names of friend requests.
* @return
*/
- public Integer getFriendRequestsCount()
+ public Vector<String> getFriendRequests()
{
- if(this.notifications.containsKey("friend_requests"))
+ Vector<String> result = new Vector<String>();
+
+ if (notifications == null )
+ return result;
+
+ String query_name = "SELECT name FROM user WHERE uid=";
+ String name = "";
+
+ try
{
- return Integer.valueOf(this.notifications.get("friend_requests").size());
+ String user_id = String.valueOf(client.users_getLoggedInUser());
+ JSONArray friends = (JSONArray)notifications.get("friend_requests");
+ //Getting friend requests user ID.
+
+ for(int x = 0; x < friends.length(); x++)
+ {
+ user_id = String.valueOf(friends.get( x ));
+ name = ((JSONArray) client.fql_query(query_name + user_id)).getJSONObject( 0 ).getString("name");
+
+ result.add(name);
+ }
+
+ }
+ catch (FacebookException e)
+ {
+ ;
+ }
+ catch (JSONException e)
+ {
+ ;
}
- else
+ catch (ClassCastException e)
{
- return 0;
+ ;
}
+ return result;
}
/**
- * Return the name of people that ask to be a friend of user.
+ * Return availables group invites names.
* @return
*/
- public Vector<String> getFriendRequestNames()
+ public Vector<String> getGroupsInvites()
{
- Vector<String> friends = new Vector<String>();
+ Vector<String> result = new Vector<String>();
- if(this.notifications.containsKey("friend_requests"))
+ if (notifications == null )
+ return result;
+
+ String query_name = "SELECT name FROM group WHERE gid=";
+ String name = "";
+
+ try
{
- Vector<String> dat = this.notifications.get("friend_requests");
- friends = dat;
+ String group_id = String.valueOf(client.users_getLoggedInUser());
+ JSONArray groups = (JSONArray)notifications.get("group_invites");
+ //Getting friend requests user ID.
+
+ for(int x = 0; x < groups.length(); x++)
+ {
+ group_id = String.valueOf(groups.get( x ));
+ name = ((JSONArray) client.fql_query(query_name + group_id)).getJSONObject( 0 ).getString("name");
+
+ result.add(name);
+ }
+
+ }
+ catch (FacebookException e)
+ {
+ ;
+ }
+ catch (JSONException e)
+ {
+ ;
}
- return friends;
+ catch (ClassCastException e)
+ {
+ ;
+ }
+ return result;
+
}
/**
- * Return the number of availables groups invites.
+ * Return event invites names.
* @return
*/
- public Integer getGroupsInvitesCount()
+ public Vector<String> getEventsInvites()
{
- if(this.notifications.containsKey("group_invites"))
+ Vector<String> result = new Vector<String>();
+
+ if (notifications == null )
+ return result;
+
+ String query_name = "SELECT name FROM event WHERE eid=";
+ String name = "";
+
+ try
{
- return Integer.valueOf(this.notifications.get("group_invites").get(0));
+ String event_id = String.valueOf(client.users_getLoggedInUser());
+ JSONArray events = (JSONArray)notifications.get("event_invites");
+ //Getting friend requests user ID.
+
+ for(int x = 0; x < events.length(); x++)
+ {
+ event_id = String.valueOf(events.get( x ));
+ name = ((JSONArray) client.fql_query(query_name + event_id)).getJSONObject( 0 ).getString("name");
+
+ result.add(name);
+ }
+
+ }
+ catch (FacebookException e)
+ {
+ ;
+ }
+ catch (JSONException e)
+ {
+ ;
}
- else
+ catch (ClassCastException e)
{
- return 0;
+ ;
}
+ return result;
}
+
/**
- * Return the name of groups invites.
+ * Return a Facebook name for the given uid.
+ * @param uid
* @return
*/
- public Vector<String> getGroupInvitesNames()
+ public String getFacebookName(String uid)
{
- Vector<String> groups = new Vector<String>();
+ String result = "Unknown";
+ String query = "SELECT name from user WHERE uid=";
- if(this.notifications.containsKey("group_invites"))
+ try
{
- Vector<String> dat = this.notifications.get("group_invites");
- dat.remove(0);
- groups = dat;
+ JSONArray username = (JSONArray) client.fql_query(query + uid);
+
+ result = username.getJSONObject( 0 ).getString("name");
+ }
+ catch (FacebookException e)
+ {
+ ;
}
- return groups;
+ catch (ClassCastException e)
+ {
+ ;
+ }
+ catch (JSONException e)
+ {
+ ;
+ }
+
+ return result;
}
+
/**
- * Return the number of events invites.
+ * Sort an hashtable by names.
+ * @param aHashtable
* @return
*/
- public Integer getEventsInvitesCount()
+ private Hashtable<String, Vector<String>> sortHash(Hashtable<String, Vector<String>> aHashtable)
{
- if(this.notifications.containsKey("event_invites"))
- {
- return Integer.valueOf(this.notifications.get("event_invites").get(0));
- }
- else
- {
- return 0;
- }
+ Hashtable<String, Vector<String>> result = new Hashtable<String, Vector<String>>();
+ Vector<String> v = new Vector<String>(aHashtable.keySet());
+ Collections.sort(v);
+ Iterator<String> it = v.iterator();
+
+ while (it.hasNext())
+ {
+ String element = (String)it.next();
+ result.put(element, aHashtable.get(element));
+ }
+ return result;
}
- /**
- * Return the name of events invites.
- * @return
+
+
+ /***
+ * Concat user messages.
+ * @param list
*/
- public Vector<String> getEventInvitesNames()
+ public Hashtable<String, Integer> getByNames(Hashtable<String, Vector<String>> baseHash)
{
- Vector<String> events = new Vector<String>();
+ Hashtable<String, Integer> result = new Hashtable<String, Integer>();
+ Vector<String> v = new Vector<String>(baseHash.keySet());
- if(this.notifications.containsKey("event_invites"))
+ //Handling no datas into hashtable.
+ if ( v.size() == 0)
{
- Vector<String> dat = this.notifications.get("event_invites");
- dat.remove(0);
- events = dat;
+ return null;
}
- return events;
+
+ //Counting by names.
+ for( int i = 0 ; i != v.size() ; i ++)
+ {
+ if (result.containsKey(v.get(i)))
+ {
+ Integer value = Integer.valueOf(result.get(v.get(i)) + 1);
+ result.remove(v.get(i));
+ result.put(v.get(i), value);
+ }
+ else
+ {
+ result.put(v.get(i), Integer.valueOf(1));
+ }
+ }
+
+ return result;
}
}
Added: software_suite_v3/software/plugin/plugin-facebook/branches/october_release/src/com/kysoh/plugins/facebook/connection/BareBonesBrowserLaunch.java
===================================================================
--- software_suite_v3/software/plugin/plugin-facebook/branches/october_release/src/com/kysoh/plugins/facebook/connection/BareBonesBrowserLaunch.java (rev 0)
+++ software_suite_v3/software/plugin/plugin-facebook/branches/october_release/src/com/kysoh/plugins/facebook/connection/BareBonesBrowserLaunch.java 2009-10-20 14:14:38 UTC (rev 5752)
@@ -0,0 +1,54 @@
+package com.kysoh.plugins.facebook.connection;
+
+/////////////////////////////////////////////////////////
+// Bare Bones Browser Launch //
+// Version 1.5 //
+// December 10, 2005 //
+// Supports: Mac OS X, GNU/Linux, Unix, Windows XP //
+// Example Usage: //
+// String url = "http://www.centerkey.com/"; //
+// BareBonesBrowserLaunch.openURL(url); //
+// Public Domain Software -- Free to Use as You Like //
+/////////////////////////////////////////////////////////
+
+import java.lang.reflect.Method;
+
+public class BareBonesBrowserLaunch
+{
+
+ @SuppressWarnings("unchecked")
+ public static void openURL(String url)
+ {
+ String osName = System.getProperty("os.name");
+ try
+ {
+ if (osName.startsWith("Mac OS"))
+ {
+ Class fileMgr = Class.forName("com.apple.eio.FileManager");
+ Method openURL = fileMgr.getDeclaredMethod("openURL",
+ new Class[] {String.class});
+ openURL.invoke(null, new Object[] {url});
+ }
+ else if (osName.startsWith("Windows"))
+ Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url);
+ else
+ { //assume Unix or Linux
+ String[] browsers = {
+ "firefox", "opera", "konqueror", "epiphany", "mozilla", "netscape" };
+ String browser = null;
+ for (int count = 0; count < browsers.length && browser == null; count++)
+ if (Runtime.getRuntime().exec(
+ new String[] {"which", browsers[count]}).waitFor() == 0)
+ browser = browsers[count];
+ if (browser == null)
+ throw new Exception("Could not find web browser");
+ else
+ Runtime.getRuntime().exec(new String[] {browser, url});
+ }
+ }
+ catch (Exception e)
+ {
+ }
+ }
+}
+
|