public object Clone() { CacheEntry entry = new CacheEntry(this.Value, _expirationHint, _evictionHint); lock (this) { if (_grpInfo != null) { entry._grpInfo = (GroupInfo)_grpInfo.Clone(); } entry._flags = (BitSet)_flags.Clone(); entry.Priority = this.Priority; entry._syncDependency = _syncDependency; entry._queryInfo = _queryInfo; if (_keysDependingOnMe != null) { entry._keysDependingOnMe = _keysDependingOnMe.Clone() as Hashtable; } entry._lockId = _lockId; entry._lockDate = _lockDate; entry._size = _size; entry._lockAge = _lockAge; entry._version = _version; entry._creationTime = _creationTime; entry._lastModifiedTime = _lastModifiedTime; entry._lockExpiration = _lockExpiration; entry._resyncProviderName = _resyncProviderName; entry._providerName = _providerName; entry._lockManager = _lockManager; } return(entry); }
public static GroupInfo CreateOfflineGroupInfo(GroupInfo groupInfo) { var offlineGroupInfo = groupInfo.Clone(); offlineGroupInfo.Filter = offlineGroupInfo.Filter + (string.IsNullOrEmpty(offlineGroupInfo.Filter) ? " " : " and ") + "OfflineCount > 0"; return(offlineGroupInfo); }
public async Task PlayPlaylist(PlaylistSong playlistSong, GroupInfo groupInfo, string playlistId = "") { LogManager.Shared.LogPlayback(playlistSong); SendEndNotification(ScrobbleManager.PlaybackEndedReason.Skipped); Settings.CurrentPlaybackContext = new PlaybackContext { IsContinuous = false, Type = PlaybackContext.PlaybackType.Playlist, ParentId = playlistSong?.PlaylistId ?? playlistId, }; Pause(); var song = playlistSong == null ? null : Database.Main.GetObject <Song, TempSong>(playlistSong.SongId); var info = groupInfo.Clone(); await Task.WhenAll( NativePlayer.PlaySong(song), Task.Run(async() => { string query = $"select SongId as Id from PlaylistSong {info.FilterString(true)} {info.OrderByString(true)} {info.LimitString()}"; await SetupCurrentPlaylist(query, song?.Id ?? "", info.Params); })); if (song == null) { song = GetSong(CurrentSongIndex); await NativePlayer.PlaySong(song); } await PrepareNextTrack(); }
public async Task Play(Song song, GroupInfo groupInfo, bool includeOneStar = false, bool playVideo = false) { SendEndNotification(ScrobbleManager.PlaybackEndedReason.Skipped); Settings.CurrentPlaybackContext = new PlaybackContext { IsContinuous = false, Type = PlaybackContext.PlaybackType.Song, }; Pause(); var info = groupInfo.Clone(); await Task.WhenAll( NativePlayer.PlaySong(song), Task.Run(async() => { if (!includeOneStar) { info.Filter += (string.IsNullOrEmpty(info.Filter) ? "" : " and ") + "Rating <> 1"; } string query = $"select Id from Song {info.FilterString(true)} {info.OrderByString(true)} {info.LimitString()}"; await SetupCurrentPlaylist(query, song?.Id ?? "", info.Params); })); if (song == null) { song = GetSong(CurrentSongIndex); await NativePlayer.PlaySong(song); } await PrepareNextTrack(); }
public async Task PlayAutoPlaylist(AutoPlaylist playlist, Song playlistSong, GroupInfo groupInfo = null) { if (groupInfo == null) { groupInfo = AutoPlaylistSongViewModel.CreateGroupInfo(playlist, Settings.ShowOfflineOnly); } LogManager.Shared.LogPlayback(playlist); SendEndNotification(ScrobbleManager.PlaybackEndedReason.Skipped); Settings.CurrentPlaybackContext = new PlaybackContext { IsContinuous = false, Type = PlaybackContext.PlaybackType.Playlist, ParentId = playlist.Id, }; Pause(); var song = playlistSong; var info = groupInfo.Clone(); await Task.WhenAll( NativePlayer.PlaySong(song), Task.Run(async() => { string query = $"select Id from Song {info.FilterString(true)} {info.OrderByString(true)} {info.LimitString()}"; var queryInfo = info.ConvertSqlFromNamed(query); await SetupCurrentPlaylist(queryInfo.Item1, song?.Id ?? "", queryInfo.Item2); })); if (song == null) { song = GetSong(CurrentSongIndex); await NativePlayer.PlaySong(song); } await PrepareNextTrack(); }
public async Task PlayTempPlaylist(PlaylistSong playlistSong, GroupInfo groupInfo, string playlistId = "") { SendEndNotification(PlaybackEndedReason.Skipped); Settings.CurrentPlaybackContext = new PlaybackContext { IsContinuous = false, Type = PlaybackContext.PlaybackType.Playlist, ParentId = playlistSong?.PlaylistId ?? playlistId, }; Pause(); var song = playlistSong == null ? null : Database.Main.GetObject <Song, TempSong> (playlistSong.SongId); var info = groupInfo.Clone(); await Task.WhenAll( Player.PlaySong(song), Task.Run(async() => { string query = $"select SongId as Id from TempPlaylistSong {info.FilterString (true)} {info.OrderByString (true)} {info.LimitString ()}"; var queryInfo = info.ConvertSqlFromNamed(query); await SetupCurrentPlaylist(queryInfo.Item1, song?.Id ?? "", queryInfo.Item2); })); if (song == null) { song = GetSong(CurrentSongIndex); await Player.PlaySong(song); } await PrepareNextTrack(); }
public static GroupInfo CreateOfflineGroupInfo(GroupInfo groupInfo) { var offlineGroupInfo = groupInfo.Clone(); //TODO: Fix this offlineGroupInfo.From = "s inner join Song o on o.Id = s.SongId and o.OfflineCount > 0"; return(offlineGroupInfo); }
protected override IConfigurationItem OnCloning() { DefaultItemsGroup cloneDefaultItemsGroup = new DefaultItemsGroup(); foreach (IConfigurationItem configurationItem in ConfigurationItemList) { cloneDefaultItemsGroup.ConfigurationItemList.Add(configurationItem.Clone() as IConfigurationItem); } cloneDefaultItemsGroup.GroupInfo = GroupInfo.Clone() as IGroupInfo; return(cloneDefaultItemsGroup); }
public override void RowSelected(Genre item) { // if (GenreSelected != null) { // GenreSelected (item); // return; // } var groupInfo = new GroupInfo() { Filter = "Id in (select distinct ArtistId from song where Genre = ?)", Params = item.Id, OrderBy = "NameNorm" }; var offlineGroupInfo2 = groupInfo.Clone(); offlineGroupInfo2.Filter = offlineGroupInfo2.Filter + " and OfflineCount > 0"; var artistCount = Database.Main.GetDistinctObjectCount <Artist>(Settings.ShowOfflineOnly ? offlineGroupInfo2 : groupInfo, "Id"); if (artistCount == 1) { groupInfo = new GroupInfo() { Filter = "Genre = ?", Params = item.Id }; offlineGroupInfo2 = groupInfo.Clone(); offlineGroupInfo2.Filter = offlineGroupInfo2.Filter + " and IsLocal = 1"; var song = Database.Main.ObjectForRow <Song>(Settings.ShowOfflineOnly ? offlineGroupInfo2 : groupInfo, 0, 0); var artist = Database.Main.GetObject <Artist>(song.ArtistId); if (artist != null && GoToArtist != null) { GoToArtist(artist); return; } } else if (GoToArtistList != null) { groupInfo = new GroupInfo() { From = "Artist", Filter = "Id in (select distinct ArtistId from song where genre = ?)", Params = item.Id, OrderBy = "NameNorm" }; GoToArtistList(item, groupInfo); } base.RowSelected(item); }
/// <summary> /// Creates a new object that is a copy of the current instance and that is routable as well. /// </summary> /// <returns>A routable copy of this instance.</returns> internal CacheEntry RoutableClone(Address localAddress) { lock (this) { if (_syncDependency != null || _exh != null) { //see if expiration hint itself is non-routable then we only need //a node expiration to handle both the syncDependency and expiration. //otherwise we need a node expiration for syncDependency and also need to //maintain the actual routable expiration hint. NodeExpiration expiry = null; if (localAddress != null) { expiry = new NodeExpiration(localAddress); } if (SyncDependency == null) { if (!_exh.IsRoutable) { CacheEntry e = new CacheEntry(Value, expiry, _evh); if (_grpInfo != null) { e._grpInfo = (GroupInfo)_grpInfo.Clone(); } e._bitset = (BitSet)_bitset.Clone(); e._version = this._version; e._creationTime = this._creationTime; e._lastModifiedTime = this._lastModifiedTime; if (this.LockMetaInfo != null) { e.LockExpiration = this.LockExpiration; } e._resyncProviderName = this._resyncProviderName; e.Priority = Priority; e._itemRemovedListener = _itemRemovedListener; e._itemUpdateListener = _itemUpdateListener; return(e); } } else { if (_exh != null && _exh.IsRoutable) { AggregateExpirationHint aggHint = new AggregateExpirationHint(); aggHint.Add(_exh); CacheEntry e = new CacheEntry(Value, aggHint, _evh); if (_grpInfo != null) { e._grpInfo = (GroupInfo)_grpInfo.Clone(); } e._bitset = (BitSet)_bitset.Clone(); e._version = this._version; e._creationTime = this._creationTime; e._lastModifiedTime = this._lastModifiedTime; if (this.LockMetaInfo != null) { e.LockExpiration = this.LockExpiration; } e._resyncProviderName = this._resyncProviderName; e.Priority = Priority; e._itemRemovedListener = _itemRemovedListener; e._itemUpdateListener = _itemUpdateListener; return(e); } else { CacheEntry e = new CacheEntry(Value, expiry, _evh); if (_grpInfo != null) { e._grpInfo = (GroupInfo)_grpInfo.Clone(); } e._bitset = (BitSet)_bitset.Clone(); e._version = this._version; e._creationTime = this._creationTime; e._lastModifiedTime = this._lastModifiedTime; if (this.LockMetaInfo != null) { e.LockExpiration = this.LockExpiration; } e._resyncProviderName = this._resyncProviderName; e.Priority = Priority; e._itemRemovedListener = _itemRemovedListener; e._itemUpdateListener = _itemUpdateListener; return(e); } } } } return((CacheEntry)Clone()); }
protected async override void ItemSelected(object item) { var genre = item as Genre; if (genre == null) { return; } var groupInfo = new GroupInfo() { Filter = "Id in (select distinct ArtistId from song where Genre = @Genre)", Params = { { "@Genre", genre.Id } }, OrderBy = "NameNorm" }; var offlineGroupInfo2 = groupInfo.Clone(); offlineGroupInfo2.Filter = offlineGroupInfo2.Filter + " and OfflineCount > 0"; var artistCount = Database.Main.GetDistinctObjectCount <Artist>(Settings.ShowOfflineOnly ? offlineGroupInfo2 : groupInfo, "Id"); if (artistCount == 1) { groupInfo = new GroupInfo() { Filter = "Genre = @Genre", Params = { { "@Genre", genre.Id } } }; offlineGroupInfo2 = groupInfo.Clone(); offlineGroupInfo2.Filter = offlineGroupInfo2.Filter + " and IsLocal = 1"; var song = Database.Main.ObjectForRow <Song>(Settings.ShowOfflineOnly ? offlineGroupInfo2 : groupInfo, 0, 0); var artist = Database.Main.GetObject <Artist>(song.ArtistId); if (artist != null) { if (artist.AlbumCount > 1) { await this.Navigation.PushAsync(new ArtistDetailsPage(artist)); } else { var albumId = (await Database.Main.TablesAsync <Song>().Where(x => x.ArtistId == artist.Id).FirstAsync())?.AlbumId; var album = Database.Main.GetObject <Album>(albumId); await this.Navigation.PushAsync(new AlbumDetailsPage(album)); } return; } } groupInfo = new GroupInfo() { From = "Artist", Filter = "Id in (select distinct ArtistId from song where genre = @Genre)", Params = { { "@Genre", genre.Id } }, OrderBy = "NameNorm" }; await this.Navigation.PushAsync(new ArtistsPage() { GroupInfo = groupInfo, Title = genre.Name, }); }