mirror of
https://github.com/ZuneDev/ZuneShell.dll.git
synced 2026-07-27 13:11:51 -07:00
231 lines
8.9 KiB
C#
231 lines
8.9 KiB
C#
// Decompiled with JetBrains decompiler
|
|
// Type: ZuneUI.ExistingSyncGroup
|
|
// Assembly: ZuneShell, Version=4.7.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
|
|
// MVID: FC8028F3-A47B-4FB4-B35B-11D1752D8264
|
|
// Assembly location: C:\Program Files\Zune\ZuneShell.dll
|
|
|
|
using Microsoft.Zune.Playlist;
|
|
using MicrosoftZuneLibrary;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
namespace ZuneUI
|
|
{
|
|
public class ExistingSyncGroup : SyncGroup
|
|
{
|
|
private SyncRuleDetails _details;
|
|
private SyncRulesView _view;
|
|
private int _index;
|
|
private bool _isExpanded;
|
|
private string _title;
|
|
private AutoPlaylistBuilder _originalComplexRuleSetup;
|
|
private string _originalComplexRuleName;
|
|
private SyncCategory _complexType;
|
|
private bool _isEdited;
|
|
|
|
public ExistingSyncGroup(SyncGroupList parentList, SyncRulesView view, int index)
|
|
: this(parentList, view, index, false)
|
|
{
|
|
}
|
|
|
|
public ExistingSyncGroup(
|
|
SyncGroupList parentList,
|
|
SyncRulesView view,
|
|
int index,
|
|
bool isExpandedEntry)
|
|
: base(parentList)
|
|
{
|
|
this._details = view.GetItem(index);
|
|
this._view = view;
|
|
this._index = index;
|
|
this._isExpanded = isExpandedEntry;
|
|
this.UpdateTitle();
|
|
if (!this.IsComplex)
|
|
return;
|
|
this.UpdateComplexType();
|
|
this._originalComplexRuleName = this.Title;
|
|
this._originalComplexRuleSetup = new AutoPlaylistBuilder(this.ID);
|
|
}
|
|
|
|
protected override void OnDispose(bool disposing)
|
|
{
|
|
if (disposing && this._originalComplexRuleSetup != null)
|
|
this._originalComplexRuleSetup.Dispose();
|
|
base.OnDispose(disposing);
|
|
}
|
|
|
|
public override string Title => this._title;
|
|
|
|
public override int ID => this._details.mediaId;
|
|
|
|
public override SyncCategory Type => this.IsComplex ? this._complexType : (SyncCategory)this._details.syncCategory;
|
|
|
|
public override long Size => !this._details.calculated || this._isEdited ? -1L : this._details.totalSize;
|
|
|
|
public override int Count => !this._details.calculated || this._isEdited ? -1 : (int)this._details.totalItems;
|
|
|
|
public override SyncGroupState State
|
|
{
|
|
get
|
|
{
|
|
if (this._isEdited)
|
|
return SyncGroupState.Pending;
|
|
return !this._details.calculated ? SyncGroupState.Uncalculated : SyncGroupState.Calculated;
|
|
}
|
|
}
|
|
|
|
public override bool IsActive
|
|
{
|
|
get => this._details.included;
|
|
set
|
|
{
|
|
this._view.UpdateItem(this._index, value);
|
|
this.DataUpdated();
|
|
}
|
|
}
|
|
|
|
public override bool IsVisible => !this._details.ignore;
|
|
|
|
public override bool IsComplex => this._details.complex;
|
|
|
|
public override void CommitChanges()
|
|
{
|
|
if (!this.IsVisible || this.IsActive)
|
|
return;
|
|
MediaIdAndType[] mediaIdAndTypeArray = new MediaIdAndType[1]
|
|
{
|
|
new MediaIdAndType(this.ID, (MediaType) this._details.mediaType)
|
|
};
|
|
if (this._isExpanded)
|
|
{
|
|
this.ParentList.Device.DeleteAndExclude(mediaIdAndTypeArray);
|
|
}
|
|
else
|
|
{
|
|
this.ParentList.Device.RemoveSyncRule(mediaIdAndTypeArray);
|
|
if (!this.IsComplex)
|
|
return;
|
|
Shell.DeleteMedia(new List<MediaIdAndType>(1)
|
|
{
|
|
new MediaIdAndType(this.ID, MediaType.Playlist)
|
|
}, false);
|
|
}
|
|
}
|
|
|
|
public override void CancelChanges()
|
|
{
|
|
if (!this.IsComplex || !this._isEdited)
|
|
return;
|
|
if (this.Title != this._originalComplexRuleName)
|
|
PlaylistManager.Instance.RenamePlaylist(this.ID, this._originalComplexRuleName);
|
|
this._originalComplexRuleSetup.SetRules(this.ID);
|
|
}
|
|
|
|
public override void DataUpdated()
|
|
{
|
|
this._details = this._view.GetItem(this._index);
|
|
this.UpdateTitle();
|
|
this.FirePropertyChanged("Size");
|
|
this.FirePropertyChanged("Count");
|
|
this.FirePropertyChanged("State");
|
|
this.FirePropertyChanged("IsActive");
|
|
this.FirePropertyChanged("IsVisible");
|
|
if (!(this.ParentList.GetGroupForSchema(this.Type) is DetailsBackedSchemaSyncGroup groupForSchema))
|
|
return;
|
|
groupForSchema.UpdateActiveState();
|
|
}
|
|
|
|
public override void DataEdited()
|
|
{
|
|
this._isEdited = true;
|
|
this.UpdateComplexType();
|
|
this.DataUpdated();
|
|
}
|
|
|
|
private void UpdateTitle()
|
|
{
|
|
if (this.IsComplex)
|
|
{
|
|
this._title = PlaylistManager.GetPlaylistName(this.ID);
|
|
}
|
|
else
|
|
{
|
|
EListType listType = EListType.eDeviceContentList;
|
|
SchemaMap schemaMap = SchemaMap.kiIndex_Title;
|
|
string format = "{0}";
|
|
switch ((MediaType)this._details.mediaType)
|
|
{
|
|
case MediaType.Track:
|
|
listType = EListType.eTrackList;
|
|
format = Shell.LoadString(StringId.IDS_TRACK_RULE_BASE);
|
|
break;
|
|
case MediaType.Video:
|
|
listType = EListType.eVideoList;
|
|
format = Shell.LoadString(StringId.IDS_VIDEO_RULE_BASE);
|
|
break;
|
|
case MediaType.Photo:
|
|
listType = EListType.ePhotoList;
|
|
format = Shell.LoadString(StringId.IDS_PHOTO_RULE_BASE);
|
|
break;
|
|
case MediaType.Playlist:
|
|
listType = EListType.ePlaylistList;
|
|
format = Shell.LoadString(StringId.IDS_PLAYLIST_RULE_BASE);
|
|
break;
|
|
case MediaType.Album:
|
|
listType = EListType.eAlbumList;
|
|
schemaMap = SchemaMap.kiIndex_WMAlbumTitle;
|
|
format = Shell.LoadString(StringId.IDS_ALBUM_RULE_BASE);
|
|
break;
|
|
case MediaType.PodcastEpisode:
|
|
listType = EListType.ePodcastEpisodeList;
|
|
format = Shell.LoadString(StringId.IDS_PODCAST_EPISODE_RULE_BASE);
|
|
break;
|
|
case MediaType.Podcast:
|
|
listType = EListType.ePodcastList;
|
|
format = Shell.LoadString(StringId.IDS_PODCAST_SERIES_RULE_BASE);
|
|
break;
|
|
case MediaType.MediaFolder:
|
|
listType = EListType.eFolderList;
|
|
schemaMap = SchemaMap.kiIndex_SourceURL;
|
|
format = Shell.LoadString(StringId.IDS_FOLDER_RULE_BASE);
|
|
break;
|
|
case MediaType.Genre:
|
|
listType = EListType.eGenreList;
|
|
schemaMap = SchemaMap.kiIndex_WMGenre;
|
|
format = Shell.LoadString(StringId.IDS_GENRE_RULE_BASE);
|
|
break;
|
|
case MediaType.PlaylistChannel:
|
|
listType = EListType.ePlaylistList;
|
|
format = "{0}";
|
|
break;
|
|
case MediaType.Artist:
|
|
listType = EListType.eArtistList;
|
|
schemaMap = SchemaMap.kiIndex_WMAlbumArtist;
|
|
format = Shell.LoadString(StringId.IDS_ARTIST_RULE_BASE);
|
|
break;
|
|
case MediaType.UserCard:
|
|
listType = EListType.eUserCardList;
|
|
format = Shell.LoadString(StringId.IDS_FRIEND_RULE_BASE);
|
|
break;
|
|
case MediaType.Application:
|
|
listType = EListType.eAppList;
|
|
format = Shell.LoadString(StringId.IDS_APPLICATION_RULE_BASE);
|
|
break;
|
|
default:
|
|
this._title = Shell.LoadString(StringId.IDS_GENERIC_ERROR);
|
|
break;
|
|
}
|
|
if (listType != EListType.eDeviceContentList)
|
|
this._title = string.Format(format, PlaylistManager.GetFieldValue(this.ID, listType, (int)schemaMap, Shell.LoadString(StringId.IDS_GENERIC_ERROR)));
|
|
}
|
|
this.FirePropertyChanged("Title");
|
|
}
|
|
|
|
private void UpdateComplexType()
|
|
{
|
|
this._complexType = UIDeviceList.MapMediaTypeToSyncCategory(PlaylistManager.GetAutoPlaylistSchema(this.ID));
|
|
this.FirePropertyChanged("Type");
|
|
}
|
|
}
|
|
}
|