(bear: j'ai lu Relation Truncated apres le truc de Brunni

Zerosquare (./30123) :(Et folco) Je peux vous partager le thème si vous voulez, c'est Sublime, et oui c'est maison (basé sur un thème existant), je ne me suis juste jamais intéressé à comment uploader un thème Colorsublime
./30117 : les petites touches Brunniesque rendraient presque le code tolérable ^^
void initAndMigrateSettingsIfNecessary() { using cocos2d::UserDefault; NSUbiquitousKeyValueStore *remoteStore = [NSUbiquitousKeyValueStore defaultStore]; UserDefault *localStore = UserDefault::getInstance(); BOOL hasRemoteData = [remoteStore stringForKey:@"general"] != nil; BOOL hasLocalData = localStore->getStringForKey("general").size() > 0; BOOL hasMigrated = localStore->getBoolForKey("migrated", false); if (!hasRemoteData && hasLocalData && !hasMigrated) { // Migration values are hard-coded, they'll only be used once NSString *general = [NSString stringWithUTF8String:localStore->getStringForKey("general").c_str()]; NSString *visitedLevels = [NSString stringWithUTF8String:localStore->getStringForKey("visitedLevels").c_str()]; [remoteStore setString:general forKey:@"general"]; [remoteStore setString:visitedLevels forKey:@"visitedLevels"]; localStore->setBoolForKey("migrated", true); } }
using System;
using System.Linq;
using Android.Support.V7.Widget;
using Android.Views;
using Android.Widget;
using Deezy.API;
namespace Deezy.Controls
{
public sealed class TrackAdapter : RecyclerView.Adapter
{
public Album Album
{
set
{
var oldSize = _cachedTracks?.Length ?? 0;
_cachedTracks = Cache<Track>.Values.Where(trackInfo => trackInfo.Album.ID == value.ID).ToArray();
//! TODO: NotifyDataSetChanged is bad, but is the added complexity of specific invalidation worth it?
NotifyItemRangeChanged(0, _cachedTracks.Length);
if (_cachedTracks.Length > oldSize)
NotifyItemRangeInserted(_cachedTracks.Length, _cachedTracks.Length - oldSize);
if (_cachedTracks.Length < oldSize)
NotifyItemRangeRemoved(_cachedTracks.Length, oldSize - _cachedTracks.Length);
}
}
private Track[] _cachedTracks;
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
var viewHolder = holder as TrackViewHolder;
if (viewHolder != null && _cachedTracks != null)
viewHolder.Track = _cachedTracks[position];
}
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
var itemView = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.TrackCardLayout, parent, false);
return new TrackViewHolder(itemView);
}
public override int ItemCount => _cachedTracks?.Length ?? 0;
}
public sealed class TrackViewHolder : RecyclerView.ViewHolder
{
private Track _displayedTrack;
public Track Track
{
get { return _displayedTrack; }
set
{
_displayedTrack = value;
TrackName.Text = value.Title;
Duration.Text = $"{value.Duration / 60:D2}:{value.Duration % 60:D2}";
}
}
public event Action<Track> OnViewClick;
private TextView TrackName { get; }
private TextView Duration { get; }
public TrackViewHolder(View itemView) : base(itemView)
{
TrackName = itemView.FindViewById<TextView>(Resource.Id.track_card_major_text);
Duration = itemView.FindViewById<TextView>(Resource.Id.track_card_minor_text);
itemView.Click += (sender, args) => OnViewClick?.Invoke(Track);
}
}
}