Open edrock200 opened 1 year ago
Not the above actually doesn't work. It still adds as a friend
You're using it wrong. Here's a working one.
def inviteFriend(self, user, server, sections=None, skipFriendship=False, allowSync=False, allowCameraUpload=False,
allowChannels=False, filterMovies=None, filterTelevision=None, filterMusic=None):
""" Share library content with the specified user.
Parameters:
user (:class:`~plexapi.myplex.MyPlexUser`): `MyPlexUser` object, username, or email
of the user to be added.
server (:class:`~plexapi.server.PlexServer`): `PlexServer` object, or machineIdentifier
containing the library sections to share.
sections (List<:class:`~plexapi.library.LibrarySection`>): List of `LibrarySection` objects, or names
to be shared (default None). `sections` must be defined in order to update shared libraries.
skipFriendship (Bool): Set to true if you don't want to add the user as a frind.
allowSync (Bool): Set True to allow user to sync content.
allowCameraUpload (Bool): Set True to allow user to upload photos.
allowChannels (Bool): Set True to allow user to utilize installed channels.
filterMovies (Dict): Dict containing key 'contentRating' and/or 'label' each set to a list of
values to be filtered. ex: `{'contentRating':['G'], 'label':['foo']}`
filterTelevision (Dict): Dict containing key 'contentRating' and/or 'label' each set to a list of
values to be filtered. ex: `{'contentRating':['G'], 'label':['foo']}`
filterMusic (Dict): Dict containing key 'label' set to a list of values to be filtered.
ex: `{'label':['foo']}`
"""
username = user.username if isinstance(user, MyPlexUser) else user
machineId = server.machineIdentifier if isinstance(server, PlexServer) else server
sectionIds = self._getSectionIds(machineId, sections)
params = {
'server_id': machineId,
'shared_server': {'library_section_ids': sectionIds, 'invited_email': username, 'skipFriendship': skipFriendship},
'sharing_settings': {
'allowSync': ('1' if allowSync else '0'),
'allowCameraUpload': ('1' if allowCameraUpload else '0'),
'allowChannels': ('1' if allowChannels else '0'),
'filterMovies': self._filterDictToStr(filterMovies or {}),
'filterTelevision': self._filterDictToStr(filterTelevision or {}),
'filterMusic': self._filterDictToStr(filterMusic or {}),
},
}
headers = {'Content-Type': 'application/json'}
url = self.FRIENDINVITE.format(machineId=machineId)
return self.query(url, self._session.post, json=params, headers=headers)
' You use it like this:
plex.myPlexAccount().inviteFriend(user=username, server=plex, sections=libs, skipFriendship=True, allowSync=False,
allowCameraUpload=False, allowChannels=False, filterMovies=None,
filterTelevision=None, filterMusic=None)
The remove friends function should be fixed too as it updates the user and not removed it from friends.
What is your feature request?
Plex has added a new "Friends" feature in which you can be friends with people who are not on your server and vice versa, not be friends with someone who has guest access to your server. The GUI now prompts when adding someone to ask if you want to add them as a friend as well. The existing API call now defaults to adding them as a friend. However, via curl you can add the option of
"skipFriendship": true
Unless I'm missing something, I don't believe the python library can do this right now. I tried adding it as an option to the invite but get the error - TypeError: inviteFriend() got an unexpected keyword argument 'skipFriendship'
Are there any workarounds?
Use the gui or remove the invited guest as a friend after the invite is sent via the gui
Code Snippets
edit I know nothing about python or coding. but I did modify this section of myplex.py to add the skipFriendship to the def invitefriend section as well as a skipFriendship under params, and inital testing, it seems to work: (edit2 proving how bad I am at this, I cannot for the life of me get this code to paste in properly. My apologies lol)
` def inviteFriend(self, user, server, sections=None, allowSync=False, allowCameraUpload=False, allowChannels=False, filterMovies=None, filterTelevision=None, filterMusic=None, skipFriendship=True): """ Share library content with the specified user.
Additional Context
Would be nice to have this implemented for other functions too such as modify an existing user, add a friend, remove a friend, etc.