def confirmed_unkeen(aid, unkeener_id): try: activity = Activity.objects.get(id = aid) except Activity.DoesNotExist: return #Just make sure if unkeener_id in activity.get_confirmed_keener_ids(): return suggester = User.objects.get(_id = activity.suggester_id) unkeener = User.objects.get(_id = unkeener_id) store_message = [ '@' + unkeener.first_name + ' ' + unkeener.last_name, ' isnt keen anymore' ] pic_url = get_fb_profile_pic_link(unkeener._id) store_data = { 'aid' : activity.id, 'pic' : pic_url } badge_num = add_notification(suggester._id, settings.UNKEEN_FROM_CONFIRMED, store_message, pic_url, store_data) data = { 'type' : settings.UNKEEN_FROM_CONFIRMED, 'ticker' : 'Keen', 'msg' : 'Sorry dude, ' + unkeener.first_name + ' ' + unkeener.last_name + ' isnt keen anymore', } send(data, [suggester.device_gcm_token], [suggester.device_pns_token], [badge_num])
def new_comment(aid, cid): try: activity = Activity.objects.get(id = aid) except Activity.DoesNotExist: return comment = activity.get_comment(cid) if not comment: return user_posting_id = comment.user_id followers = [follower for follower in activity.get_followers() if follower != user_posting_id] add_comment_nofification(followers, aid) pic_url = get_fb_profile_pic_link(user_posting_id) store_data = { 'uid': user_posting_id, 'aid':aid, 'pic': pic_url } store_message = [ '@' + comment.first_name + ' ' +comment.last_name, ' posted a new comment' ] if activity.keyword != Activity.DEFAULT_KEYWORD: store_message = [ '@' + comment.first_name + ' ' +comment.last_name, ' posted a new comment on ', '#' + activity.keyword ] data = { 'title' : 'Comment on #' + activity.keyword if activity.keyword != Activity.DEFAULT_KEYWORD else 'New comment', 'type' : settings.NOTIF_ACTIVITY_COMMENT, 'ticker' : 'New comment', 'aid' : activity.id, 'uid' : user_posting_id, 'msg' : comment.text } users = User.objects.filter(_id__in = followers) android_ids = [] apple_ids = [] badge_nums = [] for user in users: badge_num = add_notification(user._id, settings.NOTIF_ACTIVITY_COMMENT, store_message, pic_url, store_data) android_ids.append(user.device_gcm_token) apple_ids.append(user.device_pns_token) badge_nums.append(badge_num) i_data = { 'msg' : comment.first_name + ' added a comment on #' + activity.keyword, 'aid' : activity.id, 'cid' : cid, 'type' : settings.NOTIF_ACTIVITY_COMMENT, } send(data, android_ids, apple_ids, badge_nums, i_data=i_data)
def cancel_activity(aid): try: activity = Activity.objects.get(id = aid) except Activity.DoesNotExist: return if not activity.is_cancelled(): return #Send notification to all keeners users = User.objects.filter(_id__in = [keen.user_id for keen in activity.keens if keen.user_id != activity.suggester_id]) suggester = User.objects.get(_id = activity.suggester_id) message_store = [ 'Activity', ' with ', '@' + suggester.first_name + ' ' + suggester.last_name, ' is cancelled' ] message = activity.keyword+' with '+suggester.first_name + ' ' + suggester.last_name + ' is cancelled' if activity.keyword != Activity.DEFAULT_KEYWORD: message = '#' + message message_store[0] = '#' + activity.keyword pic_url = get_fb_profile_pic_link(suggester._id) store_data = { 'aid' : aid, 'uid' : suggester._id } android_ids = [] apple_ids = [] badge_nums = [] for user in users: android_ids.append(user.device_gcm_token) apple_ids.append(user.device_pns_token) badge_num = add_notification(user._id, settings.NOTIF_ACTIVITY_CANCEL, message_store, pic_url, store_data) badge_nums.append(badge_num) data = { 'title' : '#' + activity.keyword + ' with ' + suggester.first_name + ' ' + suggester.last_name, 'type' : settings.NOTIF_ACTIVITY_CANCEL, 'ticker' : '#' + activity.keyword + ' cancelled', 'aid' : aid, 'msg' : 'Cancelled', } if activity.keyword.lower() != settings.ACTIVITY_TEST_KEYWORD: send(data, android_ids, apple_ids, badge_nums)
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 new_user_interests(uid, new_interests): logger.info('Starting new user interests for %s and %s' % (str(uid), str(new_interests))) user = User.objects.get(_id = uid) friend_store = user.get_friend_store() friends = User.objects.filter(_id__in = friend_store.get_friend_ids()) interests_hash, others = _get_formatted_interests(new_interests) gender_prefix = 'his' if user.gender == 'male' else 'her' if not others.endswith(' '): others = others + ' ' others = others + 'to ' + gender_prefix + ' Active Interests' pic_url = get_fb_profile_pic_link(user._id) message = [ '@' + user.name, ' added ', ] message.extend(interests_hash) message.append(others) notification_text = user.name for part in message[1:]: if part.startswith('#') and not notification_text.endswith(' '): part = ' ' + part notification_text = notification_text + part store_data = { 'uid' : user._id, 'firstName' : user.first_name, 'lastName' : user.last_name, 'network' : user.network, 'pic' : pic_url } android_ids = [] apple_ids = [] badge_nums = [] for friend in friends: badge_num = add_notification(friend._id, settings.NEW_INTERESTS, message, pic_url, store_data) android_ids.append(friend.device_gcm_token) apple_ids.append(friend.device_pns_token) badge_nums.append(badge_num) logger.info('Sending new user interests notif for %s to %s' % (str(uid), str(friends))) data = { 'type' : settings.NEW_INTERESTS, 'ticker' : 'Keen', 'msg' : notification_text, } send(data, android_ids, apple_ids, badge_nums)
def new_user(user_id): if user_id in ['597971160', '782415557', '597040706']: return user = User.objects.get(_id = user_id) user_friend_store = user.get_friend_store() friends = User.objects.filter(_id__in = user_friend_store.get_friend_ids()) friends = [friend for friend in friends if friend.type == 'active' and friend.network==user.network] pic_url = get_fb_profile_pic_link(user._id) message = [ '@' + user.name, ' has just joined Keen, always keen for ' ] interests_hash, others = _get_formatted_interests(user.interests) message.extend(interests_hash) message.append(others) store_data = { 'uid' : user._id, 'firstName' : user.first_name, 'lastName' : user.last_name, 'network' : user.network, 'pic' : pic_url } android_ids = [] apple_ids = [] badge_nums = [] for friend in friends: android_ids.append(friend.device_gcm_token) apple_ids.append(friend.device_pns_token) badge_num = add_notification(friend._id, settings.NOTIF_FRIEND_JOINED, message, pic_url, store_data) badge_nums.append(badge_num) notification_text = user.name for part in message[1:]: if part.startswith('#') and not notification_text.endswith(' '): part = ' ' + part notification_text = notification_text + part data = { 'type' : settings.NOTIF_FRIEND_JOINED, 'ticker' : 'Keen', 'msg' : notification_text, } send(data, android_ids, apple_ids, badge_nums)
def new_follower(user_ids, follower_id): logger.info("new_follower user_ids:%s follower_id:%s" % (str(user_ids), follower_id)) try: follower = User.objects.get(_id = follower_id) except: logger.info("User %s doesnt exist yet, retrying task in 5mins" % follower_id) new_follower.apply_async(args=[user_ids, follower_id], eta=get_eta(300)) pic_url = get_fb_profile_pic_link(follower._id) message = [ '@' + follower.name, ' is following you on KEEN. Follow ', '@' + follower.name, '?' ] store_data = { 'uid' : follower._id, 'firstName' : follower.first_name, 'lastName' : follower.last_name, 'network' : follower.network, 'pic' : pic_url } android_ids = [] apple_ids = [] badge_nums = [] for user_id in user_ids: user = User.objects.get(_id = user_id) android_ids.append(user.device_gcm_token) apple_ids.append(user.device_pns_token) badge_num = add_notification(user._id, settings.NOTIF_FRIEND_FOLLOW, message, pic_url, store_data) badge_nums.append(badge_num) data = { 'type' : settings.NOTIF_FRIEND_FOLLOW, 'title' : follower.name, 'ticker' : 'New follower', 'uid' : follower._id, 'msg' : follower.first_name + ' is now following you on KEEN.', } logger.info('new_follower Sending new follower %s to the ids %s' % (str(follower_id), str(user_ids))) send(data, android_ids, apple_ids, badge_nums)
def activity_invite(aid, uids): activity = Activity.get_by_id(aid) suggester_id = activity['suggester_id'] suggester = User.get_by_id(suggester_id, extra_fields=['gender']) himher = 'him' if suggester.get('gender') == 'male' else 'female' message = [ "@" + suggester.get('first_name') + ' ' + suggester.get('last_name'), " is invited you to join " + himher + " for #" + activity.get('keyword') + ". Keen?" ] pic_url = get_fb_profile_pic_link(suggester.get('_id')) store_data = { 'uid' : suggester.get('_id'), 'firstName' : suggester.get('first_name'), 'lastName' : suggester.get('last_name'), 'network' : suggester.get('network'), 'pic' : pic_url } android_ids = [] apple_ids = [] badge_nums = [] for user_id in uids: user = User.get_by_id(user_id, extra_fields=['device_gcm_token', 'device_pns_token', 'type']) if user.get('type') == User.ACTIVE: android_ids.append(user.get('device_gcm_token')) apple_ids.append(user.get('device_pns_token')) badge_num = add_notification(user.get('_id'), settings.NOTIF_ACTIVITY_INVITE, message, pic_url, store_data) badge_nums.append(badge_num) data = { 'type' : settings.NOTIF_ACTIVITY_INVITE, 'title' : suggester.get('first_name') + ' ' + suggester.get('last_name') + ' is wondering if', 'msg' : "you'd be keen for #" + activity.get('keyword'), 'ticker' : 'Activity invite', 'aid' : aid, 'uid' : suggester_id, } send(data, android_ids, apple_ids, badge_nums)
def activity_confirm(aid, confirmed_ids): try: activity = Activity.objects.get(id = aid) except Activity.DoesNotExist: return for confirmed_id in confirmed_ids: if confirmed_id not in activity.get_confirmed_keener_ids(): del confirmed_id suggester = User.objects.get(_id = activity.suggester_id) confirmed_users = User.objects.filter(_id__in = confirmed_ids) if len(confirmed_ids) == 1: """Just the suggester and another""" others = ' has been confirmed' elif len(confirmed_ids) == 2: """The suggester and one other than self""" others = ' and 1 other has been confirmed' elif len(confirmed_ids) > 2: others = ' and ' + str(len(confirmed_ids) - 1) + ' others has been confirmed' logger.info('activity_confirm aid:%s ids:%s' % (str(aid), str(confirmed_ids))) message_store = [ 'Activity', ' with ', '@' + suggester.first_name + ' ' + suggester.last_name, others ] message = activity.keyword+' with '+suggester.first_name + ' ' + suggester.last_name + ' has been confirmed' if activity.keyword != Activity.DEFAULT_KEYWORD: message = '#' + message message_store[0] = '#' + activity.keyword pic_url = get_fb_profile_pic_link(suggester._id) store_data = { 'uid' : suggester._id, 'aid' : aid, 'pic': pic_url } android_ids = [] apple_ids = [] badge_nums = [] for user in [user for user in confirmed_users if user._id != suggester._id]: android_ids.append(user.device_gcm_token) apple_ids.append(user.device_pns_token) badge_num = add_notification(user._id, settings.NOTIF_ACTIVITY_CONFIRM, message_store, pic_url, store_data) badge_nums.append(badge_num) when = activity.when.strftime('%I:%M%p %b %d') if activity.when else '' where = activity.where if activity.where else '' details = activity.details if activity.details else '' # logger.info('Confirming %s when, where, details are %s, %s, %s' % (str(aid), when, where, details)) msg = ' '.join([when, where, details]) + '"' if when or where or details else '"' + activity.text data = { 'type' : settings.NOTIF_ACTIVITY_CONFIRM, 'aid' : aid, 'ticker' : 'Confirm! #' + activity.keyword +' with ' + suggester.first_name + ' ' + suggester.last_name, 'title' : suggester.first_name + "'s confrirmed", 'msg' : msg, # 'pic_link' : get_fb_profile_pic_link(suggester._id) } logger.info('Sending dict to %s of %s' % (str(aid), str(data))) send(data, android_ids, apple_ids, badge_nums)
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)
def new_activity(aid): try: activity = Activity.objects.get(id = aid) if activity.is_cancelled(): return except Activity.DoesNotExist: return not_master = activity.status != Activity.MASTER interests_to_notify = activity.interest_notified follower_ids_to_notify = activity.followers_notified add_activity_notification(follower_ids_to_notify, aid) logger.info('new_activity aid:%s status:%s interests_to_notify:%s' % (str(activity.id), activity.status, str(interests_to_notify))) logger.info('new_activity aid:%s status:%s followers_to_notify:%s' % (str(activity.id), activity.status, str(follower_ids_to_notify))) if not_master: suggester = User.objects.get(_id = activity.suggester_id) logger.info('new_activity aid:%s suggester:%s' % (str(activity.id), str(suggester))) # suggester_friend_store = suggester.get_friend_store() # following_ids = suggester.following_me # friend_ids = suggester_friend_store.get_friend_ids() # fof_ids = FriendOfFriendStore.get_fof_ids_raw(suggester._id) if activity.visibility == 'fof' else [] # interests_to_notify = col_get(USER_, {"_id" : {"$in" : fof_ids + friend_ids }, "interest" : activity.keyword, "network" : suggester.network}, list_=True) # followers_to_notify = col_get(USER_, {"_id" : {"$in" : following_ids }, "network" : suggester.network}, list_=True) pic_url = get_fb_profile_pic_link(suggester._id) # logger.info('new_activity aid:%s %s interests to notify from friends:%s fofs:%s' % (str(activity.id), str(len(interests_to_notify)), str(friend_ids), str(fof_ids))) # logger.info('new_activity aid:%s followers:%s' % (str(activity.id), str(followers_to_notify))) message = [ '@' + suggester.name, ' is keen to #', activity.keyword, '. Join ', '@' + suggester.name ] else: # logger.info('new_activity aid:%s status==master' % str(activity.id)) # interests_to_notify = [] # followers_to_notify = col_get(USER_, {"interest" : activity.keyword}, list_=True) # logger.info('new_activity aid:%s followers:%s' % (str(activity.id), str(followers_to_notify))) message = [ 'Join #', activity.keyword, ' : "', activity.text, '"' ] pic_url = '' interests_to_notify = col_get(USER_, {"_id" : {"$in" : interests_to_notify }}, list_=True) followers_to_notify = col_get(USER_, {"_id" : {"$in" : follower_ids_to_notify }}, list_=True) store_data = { 'uid' : suggester._id if not_master else '', 'aid' : activity.id, 'pic' : pic_url } logger.info('new_activity aid:%s status:%s message:%s' % (str(activity.id), activity.status, str(message))) android_ids = [] apple_ids = [] badge_nums = [] for follower in followers_to_notify: android_ids.append(follower.get('device_gcm_token')) apple_ids.append(follower.get('device_pns_token')) badge_num = add_notification(follower['_id'], settings.NOTIF_ACTIVITY_NEW, message, pic_url, store_data) badge_nums.append(badge_num) Activity.add_to_set(activity.id, 'followers_notified', follower['_id']) data = { 'title' : suggester.name if not_master else 'Join #' + activity.keyword, 'msg' : activity.text, 'aid' : activity.id, 'ticker' : 'New activity', 'uid' : suggester._id if not_master else '', # 'type' : settings.NOTIF_FOLLOWING_POST, 'type' : settings.NOTIF_ACTIVITY_NEW, } i_data = { 'msg' : suggester.name + ' posted: "' + activity.text + '"' if not_master else 'Join #' + activity.keyword, 'aid' : activity.id, 'uid' : suggester._id, 'type' : settings.NOTIF_ACTIVITY_NEW, } follower_androids = set(android_ids) follower_apples = set(apple_ids) logger.info('new_activity aid:%s sending to followers data:%s, android_ids:%s, apple_ids:%s' % (str(activity.id), str(data), str(android_ids), str(apple_ids))) send(data, android_ids, apple_ids, badge_nums, i_data=i_data) # android_ids = set() # apple_ids = set() # badge_nums = [] # # if not_master: # message = [ # '@' + suggester.name, # ' posted a snip with #', # activity.keyword, # '. Join ', # '@' + suggester.name # ] # # for interested in interests_to_notify: # android_ids.add(interested.get('device_gcm_token')) # apple_ids.add(interested.get('device_pns_token')) # badge_num = add_notification(interested['_id'], settings.NOTIF_INTEREST_POST, message, pic_url, store_data) # badge_nums.append(badge_num) # Activity.add_to_set(activity.id, 'interest_notified', interested['_id']) # android_ids = list(android_ids - follower_androids) # apple_ids = list(apple_ids - follower_apples) # # data = { # 'title' : '#' + activity.keyword + ' posted by ' + suggester.name if not_master else 'Join #' + activity.keyword, # 'msg' : activity.text, # 'ticker' : 'New activity', # 'aid' : activity.id, # 'uid' : suggester._id if not_master else '', # 'type' : settings.NOTIF_INTEREST_POST, # } # logger.info('new_activity aid:%s data:%s android_ids:%s apple_ids:%s' % (str(activity.id), str(data), str(android_ids), str(apple_ids))) # send(data, android_ids, apple_ids, badge_nums) logger.info('new_activity aid:%s finished' % str(activity.id))