BuildFeed/BuildFeed/Code/OneSignalHelper.cs
Thomas Hounsell c23490ad0f Localised notifications & updates; Flexbox menu
Flexbox menu fixes #72, #56
Localisation updates cover #76
2017-02-23 15:02:54 +00:00

80 lines
4.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Globalization;
using BuildFeed.Local;
using BuildFeed.Model;
using OneSignal.CSharp.SDK;
using OneSignal.CSharp.SDK.Resources;
using OneSignal.CSharp.SDK.Resources.Notifications;
namespace BuildFeed.Code
{
public static class OneSignalHelper
{
public static void PushNewBuild(this OneSignalClient osc, Build build, string url)
{
osc.Notifications.Create(new NotificationCreateOptions
{
AppId = Guid.Parse(ConfigurationManager.AppSettings["push:AppId"]),
IncludedSegments = new List<string>
{
#if DEBUG
"Testers"
#else
"All"
#endif
},
Headings =
{
{LanguageCodes.Arabic, GetNewBuildTitleForLanguage("ar")},
{LanguageCodes.Czech, GetNewBuildTitleForLanguage("cs")},
{LanguageCodes.German, GetNewBuildTitleForLanguage("de")},
{LanguageCodes.Greek, GetNewBuildTitleForLanguage("el")},
{LanguageCodes.English, GetNewBuildTitleForLanguage("en")},
{LanguageCodes.Spanish, GetNewBuildTitleForLanguage("es")},
{LanguageCodes.Persian, GetNewBuildTitleForLanguage("fa")},
{LanguageCodes.Finnish, GetNewBuildTitleForLanguage("fi")},
{LanguageCodes.French, GetNewBuildTitleForLanguage("fr")},
{LanguageCodes.Hebrew, GetNewBuildTitleForLanguage("he")},
{LanguageCodes.Croatian, GetNewBuildTitleForLanguage("hr")},
{LanguageCodes.Hungarian, GetNewBuildTitleForLanguage("hu")},
{LanguageCodes.Indonesian, GetNewBuildTitleForLanguage("id")},
{LanguageCodes.Italian, GetNewBuildTitleForLanguage("it")},
{LanguageCodes.Japanese, GetNewBuildTitleForLanguage("ja")},
{LanguageCodes.Korean, GetNewBuildTitleForLanguage("ko")},
{LanguageCodes.Lithuanian, GetNewBuildTitleForLanguage("lt")},
{LanguageCodes.Dutch, GetNewBuildTitleForLanguage("nl")},
{LanguageCodes.Polish, GetNewBuildTitleForLanguage("pl")},
{LanguageCodes.Portuguese, GetNewBuildTitleForLanguage("pt")}, // Portuguese translation has notification translation ready, Brazil is used more, but not available right now.
{LanguageCodes.Romanian, GetNewBuildTitleForLanguage("ro")},
{LanguageCodes.Russian, GetNewBuildTitleForLanguage("ru")},
{LanguageCodes.Slovak, GetNewBuildTitleForLanguage("sk")},
// no slovenian support for OneSignal?
{LanguageCodes.Swedish, GetNewBuildTitleForLanguage("sv")},
{LanguageCodes.Turkish, GetNewBuildTitleForLanguage("tr")},
{LanguageCodes.Ukrainian, GetNewBuildTitleForLanguage("uk")},
{LanguageCodes.Vietnamese, GetNewBuildTitleForLanguage("vi")},
{LanguageCodes.ChineseSimplified, GetNewBuildTitleForLanguage("zh-hans")},
{LanguageCodes.ChineseTraditional, GetNewBuildTitleForLanguage("zh-hant")}
},
Contents =
{
{LanguageCodes.English, build.AlternateBuildString}
},
Url = url
});
}
private static string GetNewBuildTitleForLanguage(string lang)
{
string localised = VariantTerms.ResourceManager.GetString(nameof(VariantTerms.Notification_NewBuild), CultureInfo.GetCultureInfo(lang));
string generic = VariantTerms.ResourceManager.GetString(nameof(VariantTerms.Notification_NewBuild), CultureInfo.InvariantCulture) ?? "{0}";
return string.IsNullOrEmpty(localised)
? string.Format(generic, InvariantTerms.SiteName)
: string.Format(localised, InvariantTerms.SiteName);
}
}
}