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)
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
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)