pidgin/pidgin

facebook: fb_api_cb_contacts: Make all the other fields optional too

Fixes "No matches for $.represented_profile.id" errors

Previously, hugePictureUrl was made optional. Now someone complains about
represented_profile being missing, replaced with a null. To be honest I'm
worried about what kind of bug might be breaking things so subtly on the
server side, but well, it's not my job.

This will result in some friends with missing represented_profile not
being included in the contact list, because we're missing rather
essential information. But better than not being able to log in.
# This program takes a C header/source as the input and produces
#
# with --keyword=enum: the list of all enums
# with --keyword=struct: the list of all structs
#
# the output styles:
#
# --enum DBUS_POINTER_NAME1,
# DBUS_POINTER_NAME2,
# DBUS_POINTER_NAME3,
#
# --list NAME1
# NAME2
# NAME3
#
from __future__ import absolute_import, division, print_function
import argparse
import fileinput
import re
import sys
def toprint(match, line):
if args.verbatim:
return line
else:
return args.pattern % match
parser = argparse.ArgumentParser()
parser.add_argument('input', nargs='*',
help='Input files (or stdin if not specified)')
parser.add_argument('-o', '--output', type=argparse.FileType('w'),
help='Output to file instead of stdout')
parser.add_argument('--keyword', default='struct',
help='What keyword to search')
parser.add_argument('--pattern', default='%s',
help='String pattern used to print matches')
parser.add_argument('--verbatim', action='store_true',
help='Return full line of match instead of match itself')
args = parser.parse_args()
structregexp1 = re.compile(
r"^(typedef\s+)?%s\s+\w+\s+(\w+)\s*;" % (args.keyword, ))
structregexp2 = re.compile(r"^(typedef\s+)?%s" % (args.keyword, ))
structregexp3 = re.compile(r"^}\s+(\w+)\s*;")
print("/* Generated by %s. Do not edit! */" % (sys.argv[0], ),
file=args.output)
myinput = fileinput.input(args.input)
for line in myinput:
match = structregexp1.match(line)
if match is not None:
print(toprint(match.group(2), line), file=args.output)
continue
match = structregexp2.match(line)
if match is not None:
while True:
if args.verbatim:
print(line.rstrip(), file=args.output)
line = next(myinput)
match = structregexp3.match(line)
if match is not None:
print(toprint(match.group(1), line), file=args.output)
break
if line[0] not in " \t{\n":
if args.verbatim:
print(line, file=args.output)
break