Exemplo n.º 1
0
def update_activity_details(aid):
    logger.info('update_activity_details aid:%s' % str(aid))
    activity = Activity.get_by_id(aid)
    suggester_id = activity['suggester_id']
    keens = activity['keens']
    suggester = User.get_by_id(suggester_id)
    keeners = User.get_by_ids_type(ids = [keen['user_id'] for keen in keens], extra_fields=['device_gcm_token', 'device_pns_token'])
    message_store = [
        '@' + suggester['first_name'] + ' ' + suggester['last_name'],
        ' has chucked a curve ball at ',
        activity['keyword']
    ]
    logger.info('update_activity_details aid:%s message:%s' % (str(aid), ''.join(message_store)))
    title = 'Details of #' + activity.get('keyword') + ' with ' + suggester['first_name'] + ' ' + suggester['last_name']
    message = 'was updated :'
    if activity.get('when'):
        message = message + ' ' + activity.get('when').strftime('%I:%M%p %b %d')
    message = message + ' ' + activity.get('where')
    pic_url = get_fb_profile_pic_link(suggester_id)
    store_data = {
        'uid'   : suggester_id,
        'aid'   : str(aid),
        'pic': pic_url
    }
    android_ids = []
    apple_ids = []
    badge_nums = []
    for user in keeners:
        #Don't send to suggester
        if user['_id'] == suggester_id:
            continue
        android_ids.append(user.get('device_gcm_token'))
        apple_ids.append(user.get('device_pns_token'))
        badge_num = add_notification(user['_id'], settings.NOTIF_ACTIVITY_UPDATE, message_store, pic_url, store_data)
        badge_nums.append(badge_num)
    
    data =  {
        'type'     : settings.NOTIF_ACTIVITY_UPDATE,
        'title'    : title,
        'msg'  : message,
        'ticker'   : '#' + activity.get('keyword') + ' details updated',
        'aid'      : aid,
    }
    logger.info('update_activity_details aid:%s keeners:%s' % (str(aid), str(keeners)))
    if activity.get('keyword', '').lower() != settings.ACTIVITY_TEST_KEYWORD:
        send(data, android_ids, apple_ids, badge_nums)
Exemplo n.º 2
0
def ensure_content(user_id):
    """
    Checks to see whether the user has any content and if not, adds some to make sure they have >= 10
    """
    activity_collection = get_activity_collection()
    timeline_col = get_timeline_collection()
    activities = Timeline.get_visible_activities(user_id)
    size = len(activities)
    user = User.get_by_id(user_id, extra_fields = ['gender'])
    interests = user.get('interests', [])
    if user.get('gender') == 'male':
        default_interests = ['touch', 'cycling', 'gymsession', 'bbq', 'indoorfootball', 'squash', 'poker', 'surf', 'rockclimbing', 'drinksatmine', 'beachcricket']
    else:
        #Female
        default_interests = ['beachtime', 'champagnebreakfast', 'freetradecoffee', 'byodinner', 'crossfit', 'easyjog', 'movieday', 'tennis', 'drinksatmine', 'missionbaymission']
    shuffle(default_interests)
    prefixes = ['Whos keen for some #%s tomorrow?', 'Whos keen.to #%s tomorrow?', 'Im feeling like #%s today, whos keen?', 'Whos up for #%s today?', 'keen.to #%s today?']
    raw_friends = FriendStore.get_friends_raw(user_id)
    suggesters = User.get_by_ids_type(ids = list(raw_friends.iterkeys()), user_type=User.ACTIVE)
    friend_interests = []
    for friend in suggesters:
        friend_interests.extend(friend.get('interests'))
    if len(suggesters) + size < 10:
        raw_fof_ids = FriendOfFriendStore.get_fof_ids_raw(user_id)
        more_suggesters =  User.get_by_ids_type(ids = list(raw_fof_ids), user_type=User.ACTIVE)
        suggesters.extend(more_suggesters)
    
    while size < 10:
        
        if len(suggesters) == 0:
            break
        
        shuffle(prefixes)
        #We want to add some more
        if len(interests) >= 1:
            interest = interests.pop()
        elif len(friend_interests) >= 1:
            interest = friend_interests.pop()
        elif len(default_interests) >= 1:
            interest = default_interests.pop()
        prefix = prefixes[0]
        text = prefix % interest
        raw_suggester = suggesters.pop()
        
        #Add the activity into activities
        activity = {
            "suggester_id" : raw_suggester.get('_id'),
            "text" : text,
            "keyword" : interest,
            "keens" : [{
                 "user_id"     : raw_suggester.get('_id'),
                 "fb_username" : '',
                 "first_name"  : raw_suggester.get('first_name'),
                 "last_name"   : raw_suggester.get('last_name'),
                 "network"     : raw_suggester.get('network'),
                 "confirmed"   : True,
                 "user_type"   : User.ACTIVE
            }],
            'invited' : [],
            "status" : Activity.EXPIRED,
            "visibility" : '',
            "created_on" : datetime.datetime.now() - datetime.timedelta(days = randint(2,7)),
        }
        activity_id = str(activity_collection.insert(activity))
        #Add it to the users timeline
        activity_timeline_dict = {
            "suggester_id" : raw_suggester.get('_id'),   
            "keyword" : interest,
            "activity_id" : activity_id, #This has to be string to consistency
            "activity_hash" : '',
            "confirmed" : False,
            "visibility" : '',
            "keen" : False,
            "degree" :  None
        }
        
        timeline_col.update({"user_id" : user_id}, #Match criteria
                            {"$push": { "visible_activities" :  activity_timeline_dict } })
        size += 1
    return True
Exemplo n.º 3
0
def new_keen(aid, keener_id):
    try:
        activity = Activity.objects.get(id = aid)
    except Activity.DoesNotExist:
        return
    if activity.status == Activity.MASTER:
        logger.info('new_keen aid:%s master activity, returning' % str(aid))
        return
    logger.info('new_keen aid:%s user:%s' % (str(aid), str(activity.suggester_id)))
    suggester = User.objects.get(_id = activity.suggester_id)
    logger.info('new_keen aid:%s user:%s' % (str(aid), str(keener_id)))
    keener = User.objects.get(_id = keener_id)
    add_keener_notification(suggester._id, aid, keener_id)
    pic_url = get_fb_profile_pic_link(keener._id)
    store_data = {
        'uid': keener._id,
        'aid':aid,
        'pic': pic_url
    }
    
    if activity.status == Activity.MASTER:
        logger.info('Activity %s is a MASTER activity, will notify followers of the keener' % str(aid))
        keener_followers = User.get_by_ids_type(ids = keener.following_me, extra_fields=['device_gcm_token', 'device_pns_token'])
        store_message = [
            "@" + keener.first_name + ' ' + keener.last_name,
            " has keen'd #" + activity.keyword + ". Join " + keener.first_name + "?"
        ]
        
        android_ids = []
        apple_ids = []
        badge_nums = []
        
        for follower in keener_followers:
            android_ids.append(follower.get('device_gcm_token'))
            apple_ids.append(follower.get('device_pns_token'))
            badge_num = add_notification(follower['_id'], settings.NOTIF_FOLLOWING_KEEN, store_message, pic_url, store_data)
            badge_nums.append(badge_num)
        
        data =  {
            'type'      : settings.NOTIF_FOLLOWING_KEEN,
            'ticker'    : ''.join(store_message),
            'msg'       : activity.text,
        }
        send(data, android_ids, apple_ids, badge_nums)
        logger.info('Master activity %s: sent notification to %s ' % (str(aid), str(keener.following_me)))
        return
    
    store_message = [
        '@' + keener.first_name + ' ' + keener.last_name,
        ' is keen'
    ]
    notif_message = keener.first_name + ' ' + keener.last_name + ' is keen'
    if activity.keyword != Activity.DEFAULT_KEYWORD:
        notif_message = notif_message + ' for #' + activity.keyword
        store_message = [
            '@' + keener.first_name + ' ' + keener.last_name,
            ' is keen for ',
            '#' + activity.keyword
        ]

    badge_num = add_notification(suggester._id, settings.NOTIF_ACTIVITY_KEEN, store_message, pic_url, store_data)
    
    data =  {
        'type'      : settings.NOTIF_ACTIVITY_KEEN,
        'title'     : keener.first_name + ' ' + keener.last_name,
        'msg'       : 'is keen for #' + activity.keyword,
        'ticker'    : keener.first_name + ' ' + keener.last_name + ' is keen',
        'aid'       : activity.id,
        'uid'       : keener_id
    }
    i_data = {
        'msg' : keener.first_name + ' wants to join you for #' + activity.keyword,
        'aid'       : activity.id,
        'uid'       : keener_id,
        'type'      : settings.NOTIF_ACTIVITY_KEEN,
    }
    send(data, [suggester.device_gcm_token], [suggester.device_pns_token], [badge_num], i_data=i_data)