Skip to content

Instantly share code, notes, and snippets.

@TurtleShip
Created May 3, 2019 19:15
Show Gist options
  • Save TurtleShip/61ce87851924d5e0a3ee7f4466e09321 to your computer and use it in GitHub Desktop.
Save TurtleShip/61ce87851924d5e0a3ee7f4466e09321 to your computer and use it in GitHub Desktop.
[JsonProperty("visibility_policies")]
public List<LinkVisibility> VisibilityPolicies { get; set; }
[JsonProperty("audience_options")]
public List<AudienceOption> AudienceOptions { get; set; }
[JsonIgnore]
public bool IsRighteousLink => AudienceOptions != null;
/*
* For Shmodal, we get VisibilityPolicies.
* For Righteous Links, we get AudienceOptions.
* As far as UWP is concerned, they contain the same information.
* Since there is no indication on the linkmeta itself whether we are getting righteous link
* or shmodal link, check for both.
*
* We are "gauranteed" (from Cloud docs team) that we will get either VisibilityPolicies or
* AudienceOptions, but never both at the same time.
*
* Relevant doc: https://paper.dropbox.com/doc/Vr1yBuJb6MxwDgrwEQGmC
*
* Also, for Righteous links, Cloud doc prefers not showing any options if they are not allowed.
*/
[JsonIgnore]
public LinkAudienceOption LinkAudiencePublic => new LinkAudienceOption()
{
Exists = (AudiencePublic?.Allowed ?? false) || VisibilityPolicyPublic != null,
Allowed = (AudiencePublic?.Allowed ?? false) || (VisibilityPolicyPublic?.Allowed ?? false),
};
[JsonIgnore]
public LinkAudienceOption LinkAudienceTeam => new LinkAudienceOption()
{
Exists = (AudienceTeam?.Allowed ?? false) || VisibilityPolicyTeam != null,
Allowed = (AudienceTeam?.Allowed ?? false) || (VisibilityPolicyTeam?.Allowed ?? false),
};
[JsonIgnore]
public LinkAudienceOption LinkAudienceNoOne => new LinkAudienceOption()
{
Exists = AudienceNoOne?.Allowed ?? false,
Allowed = AudienceNoOne?.Allowed ?? false,
};
[JsonIgnore]
public LinkAudienceOption LinkAudienceMembers => new LinkAudienceOption()
{
Exists = AudienceMembers?.Allowed ?? false,
Allowed = AudienceMembers?.Allowed ?? false,
};
[JsonIgnore]
public LinkAudienceOption LinkAudiencePassword => new LinkAudienceOption()
{
Exists = VisibilityPolicyPassword != null,
Allowed = VisibilityPolicyPassword?.Allowed ?? false,
};
[JsonIgnore]
private AudienceOption AudiencePublic =>
AudienceOptions.FirstOrDefault(a => a.Audience?.Tag == "public");
[JsonIgnore]
private AudienceOption AudienceTeam =>
AudienceOptions.FirstOrDefault(a => a.Audience?.Tag == "team");
[JsonIgnore]
private AudienceOption AudienceNoOne =>
AudienceOptions.FirstOrDefault(a => a.Audience?.Tag == "no_one");
[JsonIgnore]
private AudienceOption AudienceMembers =>
AudienceOptions.FirstOrDefault(a => a.Audience?.Tag == "members");
[JsonIgnore]
private LinkVisibility VisibilityPolicyTeam => VisibilityPolicies?.FirstOrDefault(p => p.Policy?.Tag == "team_only");
[JsonIgnore]
private LinkVisibility VisibilityPolicyPublic => VisibilityPolicies?.FirstOrDefault(p => p.Policy?.Tag == "public");
[JsonIgnore]
private LinkVisibility VisibilityPolicyPassword => VisibilityPolicies?.FirstOrDefault(p => p.Policy?.Tag == "password");
}
public class LinkAudienceOption
{
public bool Exists;
public bool Allowed;
}
public class AudienceOption
{
[JsonProperty("audience")]
public TagInfo Audience;
[JsonProperty("allowed")]
public bool Allowed;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment