def actor_followers(request, nick=None, format='html'): nick = clean.nick(nick) view = api.actor_lookup_nick(request.user, nick) if not view: raise exception.UserDoesNotExistError(nick, request.user) handled = common_views.handle_view_action( request, { 'actor_add_contact': request.path, 'actor_remove_contact': request.path, }) if handled: return handled per_page = CONTACTS_PER_PAGE offset, prev = util.page_offset_nick(request) follower_nicks = api.actor_get_followers(request.user, view.nick, limit=(per_page + 1), offset=offset) actor_nicks = follower_nicks actors = api.actor_get_actors(request.user, actor_nicks) # clear deleted actors actors = dict([(k, v) for k, v in actors.iteritems() if v]) per_page = per_page - (len(follower_nicks) - len(actors)) # TODO(termie): incorporate this into paging so we only fetch the range # on this page # add some extra info so we can let the user do contextual actions # on these homeboys if request.user and request.user.nick == view.nick: for actor in actors: if api.actor_is_contact(request.user, view.nick, actor): actors[actor].my_contact = True whose = 'Your' else: whose = "%s's" % view.display_nick() # here comes lots of munging data into shape actor_tiles = [actors[x] for x in follower_nicks if x in actors] actor_tiles_count = view.extra.get('follower_count', 0) actor_tiles, actor_tiles_more = util.page_actors(request, actor_tiles, per_page) area = 'people' c = template.RequestContext(request, locals()) # TODO: Other output formats. if format == 'html': t = loader.get_template('actor/templates/followers.html') return http.HttpResponse(t.render(c))
def actor_direct_messages(request, inbox='inbox'): logging.info('actor_direct_messages inbox: %s' % inbox) if not request.user: redirect_to = '/login?redirect_to=/inbox' if inbox == 'sent': redirect_to = '/login?redirect_to=/inbox/sent' return http.HttpResponseRedirect(redirect_to) view = request.user logging.info('View is: %s' % view) handled = common_views.handle_view_action( request, { 'dm': '/inbox/sent', 'dm_delete': request.path, } ) if handled: return handled per_page = ENTRIES_PER_PAGE offset, prev = util.page_offset(request) if inbox == 'inbox': inbox_inbox = api.inbox_get_actor_inbox(request.user, request.user.nick, limit=(per_page + 1), offset=offset) elif inbox == 'sent': inbox_inbox = api.inbox_get_actor_sent(request.user, request.user.nick, limit=(per_page + 1), offset=offset) actor_streams = api.stream_get_actor_safe(request.user, request.user.nick) entries, more = helper.get_inbox_entries(request, inbox_inbox, True) entries = api.inbox_mark_unreaded(request.user, entries) contacts, channels, streams, entries = helper.assemble_inbox_data(request, entries, actor_streams, request.user) friends_keys = api.actor_get_followers(view, view.nick, limit=200) friends_refs = api.actor_get_actors(view, friends_keys) fs = friends_refs.items() fs.sort() reply = request.REQUEST.get('reply', None) reply = clean.nick(reply) try: reply_ref = api.actor_get_safe(api.ROOT, reply) except: reply_ref = None if reply in friends_keys: let_send = True else: let_send = False friends = [value for key, value in fs] green_top = True sidebar_green_top = True subtab = 'dm' # for sidebar info channels_count = view.extra.get('channel_count', 0) channels_more = channels_count > CHANNELS_PER_PAGE followers_count = view.extra.get('follower_count', 0) contacts_count = view.extra.get('contact_count', 0) contacts_more = contacts_count > CONTACTS_PER_PAGE c = template.RequestContext(request, locals()) t = loader.get_template('actor/templates/direct_messages.html') return http.HttpResponse(t.render(c))
def actor_history(request, nick=None, format='html'): nick = clean.nick(nick) view = api.actor_lookup_nick(request.user, nick) if not view: raise exception.UserDoesNotExistError(nick, request.user) #twitter unauth = twitter.is_unauth(request) if 'twitter' in request.POST: if unauth: return http.HttpResponseRedirect('/twitter/auth?redirect_to=/') status = twitter.post_update(request) if status: flasherror = ["We have experimented some problems trying to post a cc in twitter"] called_subscribe, sub_ref = common_views.call_api_from_request( request, 'subscription_request') if called_subscribe: if sub_ref.state == 'subscribed': message = 'Subscribed.' else: message = 'Subscription requested.' return util.RedirectFlash(view.url(), message) handled = common_views.handle_view_action( request, { 'entry_remove': request.path, 'entry_remove_comment': request.path, 'entry_mark_as_spam': request.path, 'subscription_remove': view.url(), 'actor_add_contact': request.path, 'actor_remove_contact': request.path, 'post': request.path, 'presence_set': request.path, } ) if handled: return handled privacy = 'public' if request.user: if view.nick == request.user.nick: privacy = 'private' # ROOT because we care whether or not request.user is a contact of # the view user's, not whether the request.user can see the contacts elif api.actor_has_contact(api.ROOT, view.nick, request.user.nick): privacy = 'contacts' # we're going to hide a bunch of stuff if this user is private and we # aren't allowed to see user_is_private = False if view.privacy < models.PRIVACY_PUBLIC and privacy == 'public': user_is_private = True per_page = ENTRIES_PER_PAGE offset, prev = util.page_offset(request) if privacy == 'public': if user_is_private: inbox = [] else: inbox = api.inbox_get_actor_public(request.user, view.nick, limit=(per_page + 1), offset=offset) elif privacy == 'contacts': inbox = api.inbox_get_actor_contacts(request.user, view.nick, limit=(per_page + 1), offset=offset) elif privacy == 'private': inbox = api.inbox_get_actor_private(request.user, view.nick, limit=(per_page + 1), offset=offset) actor_streams = api.stream_get_actor_safe(request.user, view.nick) entries, more = helper.get_inbox_entries(request, inbox) contacts, channels, streams, entries = helper.assemble_inbox_data(request, entries, actor_streams, view) # If not logged in, cannot write is_owner = request.user and view.nick == request.user.nick try: presence = api.presence_get(request.user, view.nick) presence_stream = api.stream_get_presence(request.user, view.nick) last_entry = api.entry_get_last(request.user, presence_stream.keyname()) view.last_entry = last_entry except exception.ApiException: pass # for add/remove contact if request.user: user_is_contact = api.actor_has_contact(request.user, request.user.nick, view.nick) view.my_contact = user_is_contact else: user_is_contact = False show_dm_link = False if request.user: friends_keys = api.actor_get_followers(api.ROOT, request.user.nick, limit=200) if view.nick in friends_keys: show_dm_link = True #@begin zero code HISTORY # for sidebar info channels_count = view.extra.get('channel_count', 0) channels_more = channels_count > CHANNELS_PER_PAGE followers_count = view.extra.get('follower_count', 0) #@end # for sidebar_contacts contacts_count = view.extra.get('contact_count', 0) contacts_more = contacts_count > CONTACTS_PER_PAGE # Config for the template green_top = True sidebar_green_top = True selectable_icons = display.SELECTABLE_ICONS area = 'user' subtab = 'profile' hide_avatar = True c = template.RequestContext(request, locals()) if format == 'html': t = loader.get_template('actor/templates/history.html') return http.HttpResponse(t.render(c)) elif format == 'json': t = loader.get_template('actor/templates/history.json') r = util.HttpJsonResponse(t.render(c), request) return r elif format == 'atom': t = loader.get_template('actor/templates/history.atom') r = util.HttpAtomResponse(t.render(c), request) return r elif format == 'rss': t = loader.get_template('actor/templates/history.rss') r = util.HttpRssResponse(t.render(c), request) return r