Created
May 3, 2019 19:15
-
-
Save TurtleShip/61ce87851924d5e0a3ee7f4466e09321 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[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