/// <summary>
        /// Keeps the download progress properties of the music items up-to-date
        /// so that the progress can be displayed under each item in the UI.
        ///
        /// The music items in the library and the playlist do not point to the
        /// same object even if it's the same track so we need to update both places separately.
        /// </summary>
        /// <param name="transfer"></param>
        protected override void OnDownloadStatusUpdate(BackgroundTransferRequest transfer)
        {
            base.OnDownloadStatusUpdate(transfer);
            var path          = FileUtilsBase.UnixSeparators(transfer.Tag.Substring(PhoneLocalLibrary.Instance.BaseMusicPath.Length));
            var musicItem     = MusicProvider.SearchItem(path);
            var isDownloading = transfer.TransferStatus == TransferStatus.Transferring;
            var bytesReceived = (ulong)transfer.BytesReceived;

            // updates track in the library
            if (musicItem != null)
            {
                MusicItem.SetDownloadStatus(musicItem, bytesReceived);
                musicItem.IsDownloading = isDownloading;
            }
            // updates the track in the playlist
            var playlistTracks = PimpViewModel.Instance.MusicPlayer.Playlist.Songs
                                 .Where(item => item.Song.Path == path)
                                 .ToList(); // beautiful!!!

            BasePlaylist.SetDownloadStatus(playlistTracks, bytesReceived);
            foreach (var item in playlistTracks)
            {
                item.Song.IsDownloading = isDownloading;
            }
        }
Exemple #2
0
        public void SetupView(BasePlaylist newPlaylist)
        {
            // Check if the models saved playlist is null
            if (newPlaylist != null && (Playlist == null || Playlist.PlaylistId != newPlaylist.PlaylistId))
            {
                // Set the item source
                PlaylistTracks.Source.PlaylistId = newPlaylist.PlaylistId;
                PlaylistTracks.Source.Service    = newPlaylist.ServiceType;
                PlaylistTracks.RefreshItems();

                // Set the playlist
                Playlist = newPlaylist;

                // Get the resource loader
                var resources = ResourceLoader.GetForCurrentView();

                // Check if the tile is pinned
                if (TileHelper.IsTilePinned("Playlist_" + Playlist.PlaylistId))
                {
                    PinButtonIcon = "\uE77A";
                    PinButtonText = resources.GetString("AppBarUI_Unpin_Raw");
                }
                else
                {
                    PinButtonIcon = "\uE718";
                    PinButtonText = resources.GetString("AppBarUI_Pin_Raw");
                }
            }
        }
Exemple #3
0
        public async Task SetupView(BasePlaylist newPlaylist)
        {
            // Check if the models saved playlist is null
            if (newPlaylist != null && (Playlist == null || Playlist.Id != newPlaylist.Id))
            {
                // Show the loading ring
                (App.CurrentFrame?.FindName("PlaylistInfoPane") as InfoPane)?.ShowLoading();

                // Set the playlist
                Playlist = newPlaylist;
                // Clear any existing tracks
                Tracks.Clear();

                // Get the resource loader
                var resources = ResourceLoader.GetForCurrentView();

                // Check if the tile is pinned
                if (TileHelper.IsTilePinned("Playlist_" + Playlist.Id))
                {
                    PinButtonIcon = "\uE77A";
                    PinButtonText = resources.GetString("AppBarUI_Unpin_Raw");
                }
                else
                {
                    PinButtonIcon = "\uE718";
                    PinButtonText = resources.GetString("AppBarUI_Pin_Raw");
                }

                if (await SoundByteV3Service.Current.ExistsAsync(ServiceType.SoundCloud, $"/e1/me/playlist_likes/{Playlist.Id}"))
                {
                    LikeButtonText = "Unlike Playlist";
                }
                else
                {
                    LikeButtonText = "Like Playlist";
                }

                try
                {
                    // Show the loading ring
                    (App.CurrentFrame?.FindName("PlaylistInfoPane") as InfoPane)?.ShowLoading();
                    // Get the playlist tracks
                    var playlistTracks =
                        (await SoundByteV3Service.Current.GetAsync <SoundCloudPlaylist>(ServiceType.SoundCloud, "/playlists/" + Playlist.Id)).Tracks;
                    playlistTracks.ForEach(x => Tracks.Add(x.ToBaseTrack()));
                    // Hide the loading ring
                    (App.CurrentFrame?.FindName("PlaylistInfoPane") as InfoPane)?.ClosePane();
                }
                catch (Exception)
                {
                    (App.CurrentFrame?.FindName("PlaylistInfoPane") as InfoPane)?.ShowMessage("Could not load tracks",
                                                                                              "Something went wrong when trying to load the tracks for this playlist, please make sure you are connected to the internet and then go back, and click on this playlist again.",
                                                                                              "", false);
                }

                // Hide the loading ring
                (App.CurrentFrame?.FindName("PlaylistInfoPane") as InfoPane)?.ClosePane();
            }
        }
Exemple #4
0
        protected override void OnDownloadStatusUpdate(DownloadOperation download)
        {
            base.OnDownloadStatusUpdate(download);
            // Updates the BytesReceived property of the possibly loaded MusicItem
            // so that a progress bar may be displayed under the item
            var musicPath     = AppLocalFolderLibrary.MusicPath(download.ResultFile);
            var musicItem     = MusicProvider.SearchItem(musicPath);
            var progress      = download.Progress;
            var bytesReceived = progress.BytesReceived;

            if (musicItem != null)
            {
                MusicItem.SetDownloadStatus(musicItem, bytesReceived);
            }
            var playlistTracks = Playlist.Songs.Where(item => item.Song.Path == musicPath).ToList();

            BasePlaylist.SetDownloadStatus(playlistTracks, bytesReceived);
        }
        /// <summary>
        ///     Get the image for the playlist
        /// </summary>
        /// <param name="playlist">The playlist to get an image for</param>
        /// <returns>A url to the image</returns>
        private static string GetPlaylistImage(BasePlaylist playlist)
        {
            // If there is no uri, return the users image
            if (string.IsNullOrEmpty(playlist.ArtworkLink))
            {
                return(GetUserImage(playlist.User));
            }

            // Check if this image supports high resolution
            if (playlist.ArtworkLink.Contains("large"))
            {
                return(SettingsService.Instance.IsHighQualityArtwork
                    ? playlist.ArtworkLink.Replace("large", "t500x500")
                    : playlist.ArtworkLink.Replace("large", "t300x300"));
            }

            // This image does not support high resoultion
            return(playlist.ArtworkLink);
        }
        private async void CreatePlaylist(object sender, global::Windows.UI.Xaml.RoutedEventArgs e)
        {
            if (string.IsNullOrEmpty(PlaylistTitle.Text))
            {
                await new MessageDialog("Please enter a playlist name.", "Playlist Creation Error").ShowAsync();
                return;
            }

            try
            {
                await BasePlaylist.CreatePlaylistAsync(_serviceType, PlaylistTitle.Text, IsPrivate.IsOn);

                Hide();
            }
            catch (Exception ex)
            {
                await new MessageDialog("Could not create playlist. Please try again later.\nReason: " + ex.Message, "Playlist Creation Error").ShowAsync();
            }
        }
Exemple #7
0
 public string Create(BasePlaylist <BasePlaylistEntry> playlist)
 {
     throw new NotImplementedException();
 }
Exemple #8
0
 public string Update(BasePlaylist <BasePlaylistEntry> playlist, Stream stream)
 {
     throw new NotImplementedException();
 }
Exemple #9
0
        /// <summary>
        /// i don't cache images because i don't wanna store a lot of SKCanvas in the memory
        /// </summary>
        /// <returns>true if an icon has been drawn</returns>
        public static bool TryDrawIcon(string assetPath, FName[] exportTypes, IUExport[] exports)
        {
            var    d           = new DirectoryInfo(assetPath);
            string assetName   = d.Name;
            string assetFolder = d.Parent.Name;

            if (Text.TypeFaces.NeedReload(false))
            {
                Text.TypeFaces = new Typefaces(); // when opening bundle creator settings without loading paks first
            }
            int index;
            {
                if (Globals.Game.ActualGame == EGame.Valorant || Globals.Game.ActualGame == EGame.Spellbreak)
                {
                    index = 1;
                }
                else
                {
                    index = 0;
                }
            }
            string exportType;

            {
                if (exportTypes.Length > index && (exportTypes[index].String == "BlueprintGeneratedClass" || exportTypes[index].String == "FortWeaponAdditionalData_AudioVisualizerData" || exportTypes[index].String == "FortWeaponAdditionalData_SingleWieldState"))
                {
                    index++;
                }

                exportType = exportTypes.Length > index ? exportTypes[index].String : string.Empty;
            }

            switch (exportType)
            {
            case "AthenaConsumableEmoteItemDefinition":
            case "AthenaSkyDiveContrailItemDefinition":
            case "AthenaLoadingScreenItemDefinition":
            case "AthenaVictoryPoseItemDefinition":
            case "AthenaPetCarrierItemDefinition":
            case "AthenaMusicPackItemDefinition":
            case "AthenaBattleBusItemDefinition":
            case "AthenaCharacterItemDefinition":
            case "FortAlterationItemDefinition":
            case "AthenaBackpackItemDefinition":
            case "AthenaPickaxeItemDefinition":
            case "AthenaGadgetItemDefinition":
            case "AthenaGliderItemDefinition":
            case "AthenaDailyQuestDefinition":
            case "FortBackpackItemDefinition":
            case "AthenaSprayItemDefinition":
            case "AthenaDanceItemDefinition":
            case "AthenaEmojiItemDefinition":
            case "AthenaItemWrapDefinition":
            case "AthenaToyItemDefinition":
            case "FortHeroType":
            case "FortTokenType":
            case "FortAbilityKit":
            case "FortWorkerType":
            case "RewardGraphToken":
            case "FortBannerTokenType":
            case "FortVariantTokenType":
            case "FortDecoItemDefinition":
            case "FortFeatItemDefinition":
            case "FortStatItemDefinition":
            case "FortTrapItemDefinition":
            case "FortAmmoItemDefinition":
            case "FortQuestItemDefinition":
            case "FortBadgeItemDefinition":
            case "FortAwardItemDefinition":
            case "FortGadgetItemDefinition":
            case "FortPlaysetItemDefinition":
            case "FortGiftBoxItemDefinition":
            case "FortSpyTechItemDefinition":
            case "FortOutpostItemDefinition":
            case "FortAccoladeItemDefinition":
            case "FortCardPackItemDefinition":
            case "FortDefenderItemDefinition":
            case "FortCurrencyItemDefinition":
            case "FortResourceItemDefinition":
            case "FortCodeTokenItemDefinition":
            case "FortSchematicItemDefinition":
            case "FortExpeditionItemDefinition":
            case "FortIngredientItemDefinition":
            case "FortAccountBuffItemDefinition":
            case "FortWeaponMeleeItemDefinition":
            case "FortContextTrapItemDefinition":
            case "FortPlayerPerksItemDefinition":
            case "FortPlaysetPropItemDefinition":
            case "FortHomebaseNodeItemDefinition":
            case "FortWeaponRangedItemDefinition":
            case "FortNeverPersistItemDefinition":
            case "RadioContentSourceItemDefinition":
            case "FortPlaysetGrenadeItemDefinition":
            case "FortPersonalVehicleItemDefinition":
            case "FortGameplayModifierItemDefinition":
            case "FortHardcoreModifierItemDefinition":
            case "FortConsumableAccountItemDefinition":
            case "FortConversionControlItemDefinition":
            case "FortAccountBuffCreditItemDefinition":
            case "FortEventCurrencyItemDefinitionRedir":
            case "FortPersistentResourceItemDefinition":
            case "FortHomebaseBannerIconItemDefinition":
            case "FortCampaignHeroLoadoutItemDefinition":
            case "FortConditionalResourceItemDefinition":
            case "FortChallengeBundleScheduleDefinition":
            case "FortWeaponMeleeDualWieldItemDefinition":
            case "FortDailyRewardScheduleTokenDefinition":
            case "FortCreativeRealEstatePlotItemDefinition":
            {
                BaseIcon icon   = new BaseIcon(exports[index], exportType, ref assetName);
                int      height = icon.Size + icon.AdditionalSize;
                using (var ret = new SKBitmap(icon.Size, height, SKColorType.Rgba8888, SKAlphaType.Premul))
                    using (var c = new SKCanvas(ret))
                    {
                        if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground)
                        {
                            Rarity.DrawRarity(c, icon);
                        }

                        LargeSmallImage.DrawPreviewImage(c, icon);

                        if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground)
                        {
                            if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoText)
                            {
                                Text.DrawBackground(c, icon);
                                Text.DrawDisplayName(c, icon);
                                Text.DrawDescription(c, icon);
                                if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.Mini)
                                {
                                    if (!icon.ShortDescription.Equals(icon.DisplayName) &&
                                        !icon.ShortDescription.Equals(icon.Description))
                                    {
                                        Text.DrawToBottom(c, icon, ETextSide.Left, icon.ShortDescription);
                                    }
                                    Text.DrawToBottom(c, icon, ETextSide.Right, icon.CosmeticSource);
                                }
                            }

                            UserFacingFlag.DrawUserFacingFlags(c, icon);

                            // has more things to show
                            if (height > icon.Size)
                            {
                                Statistics.DrawStats(c, icon);
                            }
                        }

                        Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512
                        ImageBoxVm.imageBoxViewModel.Set(ret, assetName);
                    }

                return(true);
            }

            case "FortPlaylistAthena":
            {
                BasePlaylist icon = new BasePlaylist(exports[index]);
                using (var ret = new SKBitmap(icon.Width, icon.Height, SKColorType.Rgba8888, SKAlphaType.Premul))
                    using (var c = new SKCanvas(ret))
                    {
                        if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground)
                        {
                            Rarity.DrawRarity(c, icon);
                        }

                        LargeSmallImage.DrawNotStretchedPreviewImage(c, icon);

                        if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground)
                        {
                            if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoText)
                            {
                                Text.DrawBackground(c, icon);
                                Text.DrawDisplayName(c, icon);
                                Text.DrawDescription(c, icon);
                            }
                        }

                        // Watermark.DrawWatermark(c); // boi why would you watermark something you don't own ¯\_(ツ)_/¯
                        ImageBoxVm.imageBoxViewModel.Set(ret, assetName);
                    }

                return(true);
            }

            case "AthenaSeasonItemDefinition":
            {
                BaseSeason icon = new BaseSeason(exports[index], assetFolder);
                using (var ret = new SKBitmap(icon.Width, icon.HeaderHeight + icon.AdditionalSize,
                                              SKColorType.Rgba8888, SKAlphaType.Opaque))
                    using (var c = new SKCanvas(ret))
                    {
                        icon.Draw(c);

                        ImageBoxVm.imageBoxViewModel.Set(ret, assetName);
                    }

                return(true);
            }

            case "FortMtxOfferData":
            {
                BaseOffer icon = new BaseOffer(exports[index]);
                using (var ret = new SKBitmap(icon.Size, icon.Size, SKColorType.Rgba8888, SKAlphaType.Premul))
                    using (var c = new SKCanvas(ret))
                    {
                        if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground)
                        {
                            icon.DrawBackground(c);
                        }

                        icon.DrawImage(c);

                        Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512
                        ImageBoxVm.imageBoxViewModel.Set(ret, assetName);
                    }

                return(true);
            }

            case "MaterialInstanceConstant":
            {
                if (assetFolder.Equals("MI_OfferImages"))
                {
                    BaseOfferMaterial icon = new BaseOfferMaterial(exports[index]);
                    using (var ret = new SKBitmap(icon.Size, icon.Size, SKColorType.Rgba8888, SKAlphaType.Premul))
                        using (var c = new SKCanvas(ret))
                        {
                            if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground)
                            {
                                icon.DrawBackground(c);
                            }

                            icon.DrawImage(c);

                            Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512
                            ImageBoxVm.imageBoxViewModel.Set(ret, assetName);
                        }

                    return(true);
                }

                return(false);
            }

            case "FortItemSeriesDefinition":
            {
                BaseIcon icon = new BaseIcon();
                using (var ret = new SKBitmap(icon.Size, icon.Size, SKColorType.Rgba8888, SKAlphaType.Opaque))
                    using (var c = new SKCanvas(ret))
                    {
                        Serie.GetRarity(icon, exports[index]);
                        Rarity.DrawRarity(c, icon);

                        Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512
                        ImageBoxVm.imageBoxViewModel.Set(ret, assetName);
                    }

                return(true);
            }

            case "PlaylistUserOptionEnum":
            case "PlaylistUserOptionBool":
            case "PlaylistUserOptionString":
            case "PlaylistUserOptionIntEnum":
            case "PlaylistUserOptionIntRange":
            case "PlaylistUserOptionColorEnum":
            case "PlaylistUserOptionFloatEnum":
            case "PlaylistUserOptionFloatRange":
            case "PlaylistUserOptionPrimaryAsset":
            case "PlaylistUserOptionCollisionProfileEnum":
            {
                BaseUserOption icon = new BaseUserOption(exports[index]);
                using (var ret = new SKBitmap(icon.Width, icon.Height, SKColorType.Rgba8888, SKAlphaType.Opaque))
                    using (var c = new SKCanvas(ret))
                    {
                        icon.Draw(c);

                        Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512
                        ImageBoxVm.imageBoxViewModel.Set(ret, assetName);
                    }

                return(true);
            }

            case "FortChallengeBundleItemDefinition":
            {
                BaseBundle icon = new BaseBundle(exports[index], assetFolder);
                using (var ret = new SKBitmap(icon.Width, icon.HeaderHeight + icon.AdditionalSize,
                                              SKColorType.Rgba8888, SKAlphaType.Opaque))
                    using (var c = new SKCanvas(ret))
                    {
                        HeaderStyle.DrawHeaderPaint(c, icon);
                        HeaderStyle.DrawHeaderText(c, icon);
                        QuestStyle.DrawQuests(c, icon);
                        QuestStyle.DrawCompletionRewards(c, icon);

                        ImageBoxVm.imageBoxViewModel.Set(ret, assetName);
                    }

                return(true);
            }

            case "FortItemAccessTokenType":
            {
                BaseItemAccess icon = new BaseItemAccess(exports[index]);
                using (var ret = new SKBitmap(icon.Size, icon.Size, SKColorType.Rgba8888, SKAlphaType.Opaque))
                    using (var c = new SKCanvas(ret))
                    {
                        icon.Draw(c);

                        Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512
                        ImageBoxVm.imageBoxViewModel.Set(ret, assetName);
                    }

                return(true);
            }

            case "MapUIData":
            {
                BaseMapUIData icon = new BaseMapUIData(exports[index]);
                using (var ret = new SKBitmap(icon.Width, icon.Height, SKColorType.Rgba8888, SKAlphaType.Premul))
                    using (var c = new SKCanvas(ret))
                    {
                        icon.Draw(c);
                        ImageBoxVm.imageBoxViewModel.Set(ret, assetName);
                    }

                return(true);
            }

            case "ArmorUIData":
            case "SprayUIData":
            case "ThemeUIData":
            case "ContractUIData":
            case "CurrencyUIData":
            case "GameModeUIData":
            case "CharacterUIData":
            case "SprayLevelUIData":
            case "EquippableUIData":
            case "PlayerCardUIData":
            case "Gun_UIData_Base_C":
            case "CharacterRoleUIData":
            case "EquippableSkinUIData":
            case "EquippableCharmUIData":
            case "EquippableSkinLevelUIData":
            case "EquippableSkinChromaUIData":
            case "EquippableCharmLevelUIData":
            {
                BaseUIData icon = new BaseUIData(exports, index);
                using (var ret = new SKBitmap(icon.Width + icon.AdditionalWidth, icon.Height, SKColorType.Rgba8888,
                                              SKAlphaType.Premul))
                    using (var c = new SKCanvas(ret))
                    {
                        icon.Draw(c);

                        Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512
                        ImageBoxVm.imageBoxViewModel.Set(ret, assetName);
                    }

                return(true);
            }

            //case "StreamedVideoDataAsset": // must find a way to automatically gets the right version in the url
            //    {
            //        if (Globals.Game.ActualGame == EGame.Valorant && exports[index].GetExport<StructProperty>("Uuid") is StructProperty s && s.Value is FGuid uuid)
            //        {
            //            Process.Start(new ProcessStartInfo
            //            {
            //                FileName = string.Format(
            //                    "http://valorant.dyn.riotcdn.net/x/videos/release-01.05/{0}_default_universal.mp4",
            //                    $"{uuid.A:x8}-{uuid.B >> 16:x4}-{uuid.B & 0xFFFF:x4}-{uuid.C >> 16:x4}-{uuid.C & 0xFFFF:x4}{uuid.D:x8}"),
            //                UseShellExecute = true
            //            });
            //        }
            //        return false;
            //    }
            case "GQuest":
            case "GAccolade":
            case "GCosmeticSkin":
            case "GCharacterPerk":
            case "GCosmeticTitle":
            case "GCosmeticBadge":
            case "GCosmeticEmote":
            case "GCosmeticTriumph":
            case "GCosmeticRunTrail":
            case "GCosmeticArtifact":
            case "GCosmeticDropTrail":
            {
                BaseGCosmetic icon = new BaseGCosmetic(exports[index], exportType);
                using (var ret = new SKBitmap(icon.Width, icon.Height, SKColorType.Rgba8888, SKAlphaType.Premul))
                    using (var c = new SKCanvas(ret))
                    {
                        if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign == EIconDesign.Flat)
                        {
                            icon.Draw(c);
                        }
                        else if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground)
                        {
                            Rarity.DrawRarity(c, icon);
                        }

                        LargeSmallImage.DrawPreviewImage(c, icon);

                        if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground &&
                            (EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoText)
                        {
                            Text.DrawBackground(c, icon);
                            Text.DrawDisplayName(c, icon);
                            Text.DrawDescription(c, icon);
                        }

                        Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512
                        ImageBoxVm.imageBoxViewModel.Set(ret, assetName);
                    }

                return(true);
            }

            case "GCosmeticCard":
            {
                BaseGCosmetic icon = new BaseGCosmetic(exports[index], exportType);
                using (var ret = new SKBitmap(icon.Width, icon.Height, SKColorType.Rgba8888, SKAlphaType.Premul))
                    using (var c = new SKCanvas(ret))
                    {
                        if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign == EIconDesign.Flat)
                        {
                            icon.Draw(c);
                        }
                        else
                        {
                            if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground)
                            {
                                Rarity.DrawRarity(c, icon);
                            }
                        }

                        LargeSmallImage.DrawPreviewImage(c, icon);

                        if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground)
                        {
                            if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoText)
                            {
                                Text.DrawBackground(c, icon);
                                Text.DrawDisplayName(c, icon);
                                Text.DrawDescription(c, icon);
                            }
                        }

                        ImageBoxVm.imageBoxViewModel.Set(ret, assetName);
                    }

                return(true);
            }

            // Battle Breakers
            case "WExpGenericAccountItemDefinition":
            {
                BaseBBDefinition icon = new BaseBBDefinition(exports[index], exportType);
                using (var ret = new SKBitmap(icon.Width, icon.Height, SKColorType.Rgba8888, SKAlphaType.Premul))
                    using (var c = new SKCanvas(ret))
                    {
                        if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground)
                        {
                            if (icon.RarityBackgroundImage != null)
                            {
                                c.DrawBitmap(icon.RarityBackgroundImage, new SKRect(icon.Margin, icon.Margin, icon.Width - icon.Margin, icon.Height - icon.Margin),
                                             new SKPaint {
                                        FilterQuality = SKFilterQuality.High, IsAntialias = true
                                    });
                            }
                            else
                            {
                                Rarity.DrawRarity(c, icon);
                            }
                        }

                        LargeSmallImage.DrawPreviewImage(c, icon);

                        if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground)
                        {
                            if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoText)
                            {
                                Text.DrawBackground(c, icon);
                                Text.DrawDisplayName(c, icon);
                                Text.DrawDescription(c, icon);
                            }
                        }

                        Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512
                        ImageBoxVm.imageBoxViewModel.Set(ret, assetName);
                    }

                return(true);
            }
            }

            return(false);
        }
Exemple #10
0
 private StoreLocalPlayer()
 {
     playlist = new RoamingPlaylist();
     Playlist = playlist;
 }
Exemple #11
0
        /// <summary>
        ///     Handle app protocol. If true is returned this method handled page
        ///     navigation. If false is returned, you must handle app protocol
        /// </summary>
        public static async Task <bool> HandleProtocolAsync(string path)
        {
            if (string.IsNullOrEmpty(path))
            {
                return(false);
            }

            try
            {
                var parser  = DeepLinkParser.Create(path);
                var section = parser.Root?.Split('/')[0]?.ToLower();

                // Try get the session ID is one was passed through.
                parser.TryGetValue("session", out var sessionId);
                if (!string.IsNullOrEmpty(sessionId))
                {
                    SettingsService.Instance.SessionId = sessionId;
                }

                switch (section)
                {
                case "resume-playback":
                    await HandleResumeAsync();

                    break;

                case "cortana":
                    if (!parser.TryGetValue("command", out var command))
                    {
                        throw new SoundByteException("Incorrect Protocol", "Command was not supplied (command={command}).");
                    }

                    await HandleCortanaCommandAsync(command);

                    break;

                case "track":
                    if (!parser.TryGetValue("d", out var rawProtocolData))
                    {
                        throw new SoundByteException("Incorrect Protocol", "Data was not supplied (d={data}).");
                    }

                    await HandleTrackProtocolAsync(rawProtocolData);

                    break;

                case "user":
                    parser.TryGetValue("id", out var userId);
                    parser.TryGetValue("service", out var userService);

                    // Get user
                    var user = await BaseUser.GetUserAsync(int.Parse(userService), userId);

                    if (user == null)
                    {
                        throw new Exception("User does not exist");
                    }

                    App.NavigateTo(typeof(UserView), user);
                    return(true);

                case "playlist":
                    parser.TryGetValue("id", out var playlistId);
                    parser.TryGetValue("service", out var playlistService);

                    // Get playlist
                    var playlist = await BasePlaylist.GetPlaylistAsync(int.Parse(playlistService), playlistId);

                    if (playlist == null)
                    {
                        throw new Exception("Playlist does not exist");
                    }

                    App.NavigateTo(typeof(PlaylistView), playlist);
                    return(true);

                case "playback":
                    parser.TryGetValue("command", out var playbackCommand);
                    HandlePlaybackCommand(playbackCommand);
                    break;
                }

                return(false);
            }
            catch (Exception e)
            {
                await NavigationService.Current.CallMessageDialogAsync("The specified protocol is not correct. App will now launch as normal.\n\n" + e.Message);

                return(false);
            }
        }
Exemple #12
0
        public bool TryConstructCreator(out UCreator creator)
        {
            switch (_object.ExportType)
            {
            // Fortnite
            case "AthenaConsumableEmoteItemDefinition":
            case "AthenaSkyDiveContrailItemDefinition":
            case "AthenaLoadingScreenItemDefinition":
            case "AthenaVictoryPoseItemDefinition":
            case "AthenaPetCarrierItemDefinition":
            case "AthenaMusicPackItemDefinition":
            case "AthenaBattleBusItemDefinition":
            case "AthenaCharacterItemDefinition":
            case "AthenaMapMarkerItemDefinition":
            case "AthenaBackpackItemDefinition":
            case "AthenaPickaxeItemDefinition":
            case "AthenaGadgetItemDefinition":
            case "AthenaGliderItemDefinition":
            case "AthenaSprayItemDefinition":
            case "AthenaDanceItemDefinition":
            case "AthenaEmojiItemDefinition":
            case "AthenaItemWrapDefinition":
            case "AthenaToyItemDefinition":
            case "FortHeroType":
            case "FortTokenType":
            case "FortAbilityKit":
            case "FortWorkerType":
            case "RewardGraphToken":
            case "FortBannerTokenType":
            case "FortVariantTokenType":
            case "FortDecoItemDefinition":
            case "FortStatItemDefinition":
            case "FortAmmoItemDefinition":
            case "FortEmoteItemDefinition":
            case "FortBadgeItemDefinition":
            case "FortAwardItemDefinition":
            case "FortGadgetItemDefinition":
            case "AthenaCharmItemDefinition":
            case "FortPlaysetItemDefinition":
            case "FortGiftBoxItemDefinition":
            case "FortOutpostItemDefinition":
            case "FortVehicleItemDefinition":
            case "FortCardPackItemDefinition":
            case "FortDefenderItemDefinition":
            case "FortCurrencyItemDefinition":
            case "FortResourceItemDefinition":
            case "FortBackpackItemDefinition":
            case "FortEventQuestMapDataAsset":
            case "FortWeaponModItemDefinition":
            case "FortCodeTokenItemDefinition":
            case "FortSchematicItemDefinition":
            case "FortWorldMultiItemDefinition":
            case "FortAlterationItemDefinition":
            case "FortExpeditionItemDefinition":
            case "FortIngredientItemDefinition":
            case "FortAccountBuffItemDefinition":
            case "FortWeaponMeleeItemDefinition":
            case "FortPlayerPerksItemDefinition":
            case "FortPlaysetPropItemDefinition":
            case "FortHomebaseNodeItemDefinition":
            case "FortNeverPersistItemDefinition":
            case "RadioContentSourceItemDefinition":
            case "FortPlaysetGrenadeItemDefinition":
            case "FortPersonalVehicleItemDefinition":
            case "FortGameplayModifierItemDefinition":
            case "FortHardcoreModifierItemDefinition":
            case "FortConsumableAccountItemDefinition":
            case "FortConversionControlItemDefinition":
            case "FortAccountBuffCreditItemDefinition":
            case "FortEventCurrencyItemDefinitionRedir":
            case "FortPersistentResourceItemDefinition":
            case "FortHomebaseBannerIconItemDefinition":
            case "FortCampaignHeroLoadoutItemDefinition":
            case "FortConditionalResourceItemDefinition":
            case "FortChallengeBundleScheduleDefinition":
            case "FortWeaponMeleeDualWieldItemDefinition":
            case "FortDailyRewardScheduleTokenDefinition":
            case "FortCreativeRealEstatePlotItemDefinition":
            case "AthenaDanceItemDefinition_AdHocSquadsJoin_C":
                creator = _style switch
                {
                    EIconStyle.Cataba => new BaseCommunity(_object, _style, "Cataba"),
                    _ => new BaseIcon(_object, _style)
                };
                return(true);

            case "FortTrapItemDefinition":
            case "FortTandemCharacterData":
            case "FortSpyTechItemDefinition":
            case "FortAccoladeItemDefinition":
            case "FortContextTrapItemDefinition":
            case "FortWeaponRangedItemDefinition":
            case "Daybreak_LevelExitVehicle_PartItemDefinition_C":
                creator = new BaseIconStats(_object, _style);
                return(true);

            case "FortItemSeriesDefinition":
                creator = new BaseSeries(_object, _style);
                return(true);

            case "MaterialInstanceConstant"
                when _object.Owner != null &&
                (_object.Owner.Name.EndsWith($"/MI_OfferImages/{_object.Name}", StringComparison.OrdinalIgnoreCase) ||
                 _object.Owner.Name.EndsWith($"/RenderSwitch_Materials/{_object.Name}", StringComparison.OrdinalIgnoreCase) ||
                 _object.Owner.Name.EndsWith($"/MI_BPTile/{_object.Name}", StringComparison.OrdinalIgnoreCase)):
                creator = new BaseMaterialInstance(_object, _style);
                return(true);

            case "FortMtxOfferData":
                creator = new BaseMtxOffer(_object, _style);
                return(true);

            case "FortPlaylistAthena":
                creator = new BasePlaylist(_object, _style);
                return(true);

            case "FortFeatItemDefinition":
            case "FortQuestItemDefinition":
            case "AthenaDailyQuestDefinition":
            case "FortUrgentQuestItemDefinition":
                creator = new BaseQuest(_object, _style);
                return(true);

            case "FortCompendiumItemDefinition":
            case "FortChallengeBundleItemDefinition":
                creator = new BaseBundle(_object, _style);
                return(true);

            case "AthenaSeasonItemDefinition":
                creator = new BaseSeason(_object, _style);
                return(true);

            case "FortItemAccessTokenType":
                creator = new BaseItemAccessToken(_object, _style);
                return(true);

            case "PlaylistUserOptionEnum":
            case "PlaylistUserOptionBool":
            case "PlaylistUserOptionString":
            case "PlaylistUserOptionIntEnum":
            case "PlaylistUserOptionIntRange":
            case "PlaylistUserOptionColorEnum":
            case "PlaylistUserOptionFloatEnum":
            case "PlaylistUserOptionFloatRange":
            case "PlaylistUserTintedIconIntEnum":
            case "PlaylistUserOptionPrimaryAsset":
            case "PlaylistUserOptionCollisionProfileEnum":
                creator = new BaseUserControl(_object, _style);
                return(true);

            // Battle Breakers
            case "WExpGenericAccountItemDefinition":
            case "WExpGearAccountItemDefinition":
            case "WExpHQWorkerLodgesDefinition":
            case "WExpPersonalEventDefinition":
            case "WExpUpgradePotionDefinition":
            case "WExpAccountRewardDefinition":
            case "WExpHQBlacksmithDefinition":
            case "WExpHQSecretShopDefinition":
            case "WExpHQMonsterPitDefinition":
            case "WExpHQHeroTowerDefinition":
            case "WExpVoucherItemDefinition":
            case "WExpTreasureMapDefinition":
            case "WExpHammerChestDefinition":
            case "WExpHQWorkshopDefinition":
            case "WExpUnlockableDefinition":
            case "WExpHQSmelterDefinition":
            case "WExpContainerDefinition":
            case "WExpCharacterDefinition":
            case "WExpHQMarketDefinition":
            case "WExpGiftboxDefinition":
            case "WExpStandInDefinition":
            case "WExpRegionDefinition":
            case "WExpHQMineDefinition":
            case "WExpXpBookDefinition":
            case "WExpTokenDefinition":
            case "WExpItemDefinition":
            case "WExpZoneDefinition":
                creator = new BaseBreakersIcon(_object, EIconStyle.Default);
                return(true);

            // Spellbreak
            case "GTargetedTeleportActiveSkill":
            case "GChronomasterV2ActiveSkill":
            case "GShadowstepActiveSkill":
            case "GGatewayActiveSkill":
            case "GStealthActiveSkill":
            case "GFeatherActiveSkill":
            case "GCosmeticDropTrail":
            case "GFlightActiveSkill":
            case "GCosmeticRunTrail":
            case "GCosmeticArtifact":
            case "GCosmeticTriumph":
            case "GWolfsbloodSkill":
            case "GDashActiveSkill":
            case "GCharacterPerk":
            case "GCosmeticTitle":
            case "GCosmeticBadge":
            case "GRMTStoreOffer":
            case "GCosmeticEmote":
            case "GCosmeticCard":
            case "GCosmeticSkin":
            case "GStoreOffer":
            case "GAccolade":
            case "GRuneItem":
            case "GQuest":
                creator = new BaseSpellIcon(_object, EIconStyle.Default);
                return(true);

            case "GLeagueTier":
                creator = new BaseLeague(_object, EIconStyle.Default);
                return(true);

            case "GLeagueDivision":
                creator = new BaseDivision(_object, EIconStyle.Default);
                return(true);

            default:
                creator = null;
                return(false);
            }
        }
 /// <summary>
 ///     Create an item for a playlist.
 /// </summary>
 /// <param name="playlist">The playlist</param>
 public BaseSoundByteItem(BasePlaylist playlist)
 {
     Playlist = playlist;
     Type     = ItemType.Playlist;
 }
Exemple #14
0
 public BaseSoundByteItem FromPlaylist(BasePlaylist playlist)
 {
     return(new BaseSoundByteItem(playlist));
 }
 public BasePlaylistTests()
 {
     playlist  = Substitute.For <BasePlaylist <IPlaylistItem> >();
     dummyItem = Substitute.For <IPlaylistItem>();
 }
Exemple #16
0
 public PimpWebPlayer(PimpSession session, PimpWebSocket webSocket)
     : base(session, webSocket)
 {
     Playlist = new PimpWebPlaylist(session, webSocket);
 }