Skip to content

Commit 8020036

Browse files
committedOct 9, 2014
fix case sensitive file names
1 parent b187168 commit 8020036

38 files changed

+212
-72
lines changed
 

‎MediaBrowser.Api/Playback/BaseStreamingService.cs

+7
Original file line numberDiff line numberDiff line change
@@ -1387,6 +1387,13 @@ private void ParseParams(StreamRequest request)
13871387
videoRequest.MaxVideoBitDepth = int.Parse(val, UsCulture);
13881388
}
13891389
}
1390+
else if (i == 19)
1391+
{
1392+
if (videoRequest != null)
1393+
{
1394+
videoRequest.Profile = val;
1395+
}
1396+
}
13901397
}
13911398
}
13921399

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using MediaBrowser.Common.Configuration;
2+
using MediaBrowser.Model.Configuration;
3+
using System.Collections.Generic;
4+
5+
namespace MediaBrowser.Controller.Library
6+
{
7+
public class MetadataConfigurationStore : IConfigurationFactory
8+
{
9+
public IEnumerable<ConfigurationStore> GetConfigurations()
10+
{
11+
return new List<ConfigurationStore>
12+
{
13+
new ConfigurationStore
14+
{
15+
Key = "metadata",
16+
ConfigurationType = typeof(MetadataConfiguration)
17+
}
18+
};
19+
}
20+
}
21+
22+
public static class MetadataConfigurationExtensions
23+
{
24+
public static MetadataConfiguration GetMetadataConfiguration(this IConfigurationManager config)
25+
{
26+
return config.GetConfiguration<MetadataConfiguration>("metadata");
27+
}
28+
}
29+
}

‎MediaBrowser.Controller/MediaBrowser.Controller.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@
174174
<Compile Include="Library\IUserDataManager.cs" />
175175
<Compile Include="Library\IUserViewManager.cs" />
176176
<Compile Include="Library\LibraryManagerExtensions.cs" />
177+
<Compile Include="Library\MetadataConfigurationStore.cs" />
177178
<Compile Include="Library\PlaybackStopEventArgs.cs" />
178179
<Compile Include="Library\UserDataSaveEventArgs.cs" />
179180
<Compile Include="LiveTv\RecordingGroup.cs" />

‎MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs

+17-3
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ public static void EnsureDates(IFileSystem fileSystem, BaseItem item, ItemResolv
211211
{
212212
if (includeCreationTime)
213213
{
214-
item.DateCreated = DateTime.UtcNow;
214+
SetDateCreated(item, fileSystem, childData);
215215
}
216216

217217
item.DateModified = fileSystem.GetLastWriteTimeUtc(childData);
@@ -224,7 +224,7 @@ public static void EnsureDates(IFileSystem fileSystem, BaseItem item, ItemResolv
224224
{
225225
if (includeCreationTime)
226226
{
227-
item.DateCreated = DateTime.UtcNow;
227+
SetDateCreated(item, fileSystem, fileData);
228228
}
229229
item.DateModified = fileSystem.GetLastWriteTimeUtc(fileData);
230230
}
@@ -234,10 +234,24 @@ public static void EnsureDates(IFileSystem fileSystem, BaseItem item, ItemResolv
234234
{
235235
if (includeCreationTime)
236236
{
237-
item.DateCreated = DateTime.UtcNow;
237+
SetDateCreated(item, fileSystem, args.FileInfo);
238238
}
239239
item.DateModified = fileSystem.GetLastWriteTimeUtc(args.FileInfo);
240240
}
241241
}
242+
243+
private static void SetDateCreated(BaseItem item, IFileSystem fileSystem, FileSystemInfo info)
244+
{
245+
var config = BaseItem.ConfigurationManager.GetMetadataConfiguration();
246+
247+
if (config.UseFileCreationTimeForDateAdded)
248+
{
249+
item.DateModified = fileSystem.GetCreationTimeUtc(info);
250+
}
251+
else
252+
{
253+
item.DateCreated = DateTime.UtcNow;
254+
}
255+
}
242256
}
243257
}

‎MediaBrowser.MediaInfo/MediaBrowser.MediaInfo.csproj

+3
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@
3939
<Reference Include="System.Xml" />
4040
</ItemGroup>
4141
<ItemGroup>
42+
<Compile Include="..\SharedVersion.cs">
43+
<Link>Properties\SharedVersion.cs</Link>
44+
</Compile>
4245
<Compile Include="MediaInfoLib.cs" />
4346
<Compile Include="Native.cs" />
4447
<Compile Include="Properties\AssemblyInfo.cs" />

‎MediaBrowser.MediaInfo/Properties/AssemblyInfo.cs

+1-6
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,4 @@
2828
// Minor Version
2929
// Build Number
3030
// Revision
31-
//
32-
// You can specify all the values or you can default the Build and Revision Numbers
33-
// by using the '*' as shown below:
34-
// [assembly: AssemblyVersion("1.0.*")]
35-
[assembly: AssemblyVersion("1.0.0.0")]
36-
[assembly: AssemblyFileVersion("1.0.0.0")]
31+
//

‎MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj

+3
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,9 @@
173173
<Compile Include="..\MediaBrowser.Model\Configuration\ImageSavingConvention.cs">
174174
<Link>Configuration\ImageSavingConvention.cs</Link>
175175
</Compile>
176+
<Compile Include="..\MediaBrowser.Model\Configuration\MetadataConfiguration.cs">
177+
<Link>Configuration\MetadataConfiguration.cs</Link>
178+
</Compile>
176179
<Compile Include="..\MediaBrowser.Model\Configuration\MetadataOptions.cs">
177180
<Link>Configuration\MetadataOptions.cs</Link>
178181
</Compile>

‎MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj

+3
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,9 @@
145145
<Compile Include="..\MediaBrowser.Model\Configuration\ImageSavingConvention.cs">
146146
<Link>Configuration\ImageSavingConvention.cs</Link>
147147
</Compile>
148+
<Compile Include="..\MediaBrowser.Model\Configuration\MetadataConfiguration.cs">
149+
<Link>Configuration\MetadataConfiguration.cs</Link>
150+
</Compile>
148151
<Compile Include="..\MediaBrowser.Model\Configuration\MetadataOptions.cs">
149152
<Link>Configuration\MetadataOptions.cs</Link>
150153
</Compile>

‎MediaBrowser.Model/Configuration/CinemaModeConfiguration.cs

+3
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,12 @@ public class CinemaModeConfiguration
1414
public bool EnableIntrosFromUpcomingDvdMovies { get; set; }
1515
public bool EnableIntrosFromUpcomingStreamingMovies { get; set; }
1616

17+
public int TrailerLimit { get; set; }
18+
1719
public CinemaModeConfiguration()
1820
{
1921
EnableIntrosParentalControl = true;
22+
TrailerLimit = 2;
2023
}
2124
}
2225
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+

2+
namespace MediaBrowser.Model.Configuration
3+
{
4+
public class MetadataConfiguration
5+
{
6+
public bool UseFileCreationTimeForDateAdded { get; set; }
7+
}
8+
}

‎MediaBrowser.Model/Configuration/ServerConfiguration.cs

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
using MediaBrowser.Model.Entities;
2-
using MediaBrowser.Model.FileOrganization;
3-
using MediaBrowser.Model.LiveTv;
42

53
namespace MediaBrowser.Model.Configuration
64
{
@@ -15,6 +13,12 @@ public class ServerConfiguration : BaseApplicationConfiguration
1513
/// <value><c>true</c> if [enable u pn p]; otherwise, <c>false</c>.</value>
1614
public bool EnableUPnP { get; set; }
1715

16+
/// <summary>
17+
/// Gets or sets the public mapped port.
18+
/// </summary>
19+
/// <value>The public mapped port.</value>
20+
public int PublicPort { get; set; }
21+
1822
/// <summary>
1923
/// Gets or sets the HTTP server port number.
2024
/// </summary>
@@ -167,20 +171,15 @@ public class ServerConfiguration : BaseApplicationConfiguration
167171

168172
public string UICulture { get; set; }
169173

170-
public DlnaOptions DlnaOptions { get; set; }
171-
172174
public double DownMixAudioBoost { get; set; }
173175

174-
public bool DefaultMetadataSettingsApplied { get; set; }
175-
176176
public PeopleMetadataOptions PeopleMetadataOptions { get; set; }
177+
public bool FindInternetTrailers { get; set; }
177178

178179
public string[] InsecureApps { get; set; }
179180

180181
public bool SaveMetadataHidden { get; set; }
181182

182-
public bool FindInternetTrailers { get; set; }
183-
184183
/// <summary>
185184
/// Initializes a new instance of the <see cref="ServerConfiguration" /> class.
186185
/// </summary>
@@ -189,6 +188,7 @@ public ServerConfiguration()
189188
{
190189
MediaEncodingQuality = EncodingQuality.Auto;
191190
ImageSavingConvention = ImageSavingConvention.Compatible;
191+
PublicPort = 8096;
192192
HttpServerPortNumber = 8096;
193193
EnableDashboardResponseCaching = true;
194194

‎MediaBrowser.Model/Dlna/ConditionProcessor.cs

+4-2
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,10 @@ private bool IsConditionSatisfied(ProfileCondition condition, string currentValu
145145

146146
switch (condition.Condition)
147147
{
148-
case ProfileConditionType.SubstringOf:
149-
return StringHelper.IndexOfIgnoreCase(currentValue, expected) != -1;
148+
case ProfileConditionType.EqualsAny:
149+
{
150+
return ListHelper.ContainsIgnoreCase(expected.Split('|'), currentValue);
151+
}
150152
case ProfileConditionType.Equals:
151153
return StringHelper.EqualsIgnoreCase(currentValue, expected);
152154
case ProfileConditionType.NotEquals:

‎MediaBrowser.Model/Dlna/ProfileConditionType.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ public enum ProfileConditionType
66
NotEquals = 1,
77
LessThanEqual = 2,
88
GreaterThanEqual = 3,
9-
SubstringOf = 4
9+
EqualsAny = 4
1010
}
1111
}

‎MediaBrowser.Model/Dlna/Profiles/AndroidProfile.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public AndroidProfile(bool supportsHls, bool supportsMpegDash)
3232
VideoCodec = "h264",
3333
AudioCodec = "aac",
3434
Type = DlnaProfileType.Video,
35-
VideoProfile = "Baseline",
35+
VideoProfile = "baseline",
3636
Context = EncodingContext.Streaming
3737
});
3838
}
@@ -42,7 +42,7 @@ public AndroidProfile(bool supportsHls, bool supportsMpegDash)
4242
VideoCodec = "h264",
4343
AudioCodec = "aac",
4444
Type = DlnaProfileType.Video,
45-
VideoProfile = "Baseline",
45+
VideoProfile = "baseline",
4646
Context = EncodingContext.Static
4747
});
4848

@@ -102,7 +102,7 @@ public AndroidProfile(bool supportsHls, bool supportsMpegDash)
102102

103103
Conditions = new []
104104
{
105-
new ProfileCondition(ProfileConditionType.SubstringOf, ProfileConditionValue.VideoProfile, "baseline"),
105+
new ProfileCondition(ProfileConditionType.EqualsAny, ProfileConditionValue.VideoProfile, "baseline|constrained baseline"),
106106
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.Width, "1920"),
107107
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.Height, "1080"),
108108
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.VideoBitDepth, "8"),

‎MediaBrowser.Model/Dlna/StreamBuilder.cs

+1
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,7 @@ private StreamInfo BuildVideoItem(MediaSourceInfo item, VideoOptions options)
291291
playlistItem.VideoCodec = transcodingProfile.VideoCodec;
292292
playlistItem.Protocol = transcodingProfile.Protocol;
293293
playlistItem.AudioStreamIndex = audioStreamIndex;
294+
playlistItem.VideoProfile = transcodingProfile.VideoProfile;
294295

295296
List<ProfileCondition> videoTranscodingConditions = new List<ProfileCondition>();
296297
foreach (CodecProfile i in options.Profile.CodecProfiles)

‎MediaBrowser.Model/Dlna/StreamInfo.cs

+1
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ private static string BuildDlnaParam(StreamInfo item)
142142
list.Add(item.IsDirectStream ? string.Empty : DateTime.UtcNow.Ticks.ToString(CultureInfo.InvariantCulture));
143143
list.Add(item.MaxRefFrames.HasValue ? StringHelper.ToStringCultureInvariant(item.MaxRefFrames.Value) : string.Empty);
144144
list.Add(item.MaxVideoBitDepth.HasValue ? StringHelper.ToStringCultureInvariant(item.MaxVideoBitDepth.Value) : string.Empty);
145+
list.Add(item.VideoProfile ?? string.Empty);
145146

146147
return string.Format("Params={0}", string.Join(";", list.ToArray()));
147148
}

‎MediaBrowser.Model/MediaBrowser.Model.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@
9090
<Compile Include="Configuration\ChannelOptions.cs" />
9191
<Compile Include="Configuration\ChapterOptions.cs" />
9292
<Compile Include="Configuration\CinemaModeConfiguration.cs" />
93+
<Compile Include="Configuration\MetadataConfiguration.cs" />
9394
<Compile Include="Configuration\PeopleMetadataOptions.cs" />
9495
<Compile Include="Configuration\XbmcMetadataOptions.cs" />
9596
<Compile Include="Configuration\SubtitlePlaybackMode.cs" />

‎MediaBrowser.Providers/Manager/ProviderUtils.cs

+4
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ public static void MergeBaseItemData(BaseItem source, BaseItem target, List<Meta
4343
if (replaceData || string.IsNullOrEmpty(target.HomePageUrl))
4444
{
4545
target.HomePageUrl = source.HomePageUrl;
46+
if (!string.IsNullOrWhiteSpace(target.HomePageUrl) && target.HomePageUrl.IndexOf("http", StringComparison.OrdinalIgnoreCase) != 0)
47+
{
48+
target.HomePageUrl = "http://" + target.HomePageUrl;
49+
}
4650
}
4751

4852
if (replaceData || !target.IndexNumber.HasValue)

‎MediaBrowser.Server.Implementations/Connect/ConnectManager.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public string WanApiAddress
7474
ip = "http://" + ip;
7575
}
7676

77-
return ip + ":" + _config.Configuration.HttpServerPortNumber.ToString(CultureInfo.InvariantCulture);
77+
return ip + ":" + _config.Configuration.PublicPort.ToString(CultureInfo.InvariantCulture);
7878
}
7979

8080
return null;

‎MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -126,15 +126,15 @@ private void CreateRules(INatDevice device)
126126

127127
var info = _appHost.GetSystemInfo();
128128

129-
CreatePortMap(device, info.HttpServerPortNumber);
129+
CreatePortMap(device, info.HttpServerPortNumber, _config.Configuration.PublicPort);
130130
}
131131
}
132132

133-
private void CreatePortMap(INatDevice device, int port)
133+
private void CreatePortMap(INatDevice device, int privatePort, int publicPort)
134134
{
135-
_logger.Debug("Creating port map on port {0}", port);
135+
_logger.Debug("Creating port map on port {0}", privatePort);
136136

137-
device.CreatePortMap(new Mapping(Protocol.Tcp, port, port)
137+
device.CreatePortMap(new Mapping(Protocol.Tcp, privatePort, publicPort)
138138
{
139139
Description = "Media Browser Server"
140140
});

‎MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ public async Task<IEnumerable<IntroInfo>> GetIntros(BaseItem item, User user)
148148
GetCustomIntros(item) :
149149
new List<IntroInfo>();
150150

151-
var trailerLimit = 2;
151+
var trailerLimit = config.TrailerLimit;
152152
if (customIntros.Count > 0)
153153
{
154154
trailerLimit--;

‎MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json

+8-8
Original file line numberDiff line numberDiff line change
@@ -340,8 +340,8 @@
340340
"HeaderRuntime": "\u04b0\u0437\u0430\u049b\u0442\u044b\u0493\u044b",
341341
"HeaderCommunityRating": "\u049a\u0430\u0443\u044b\u043c\u0434\u0430\u0441\u0442\u044b\u049b \u0431\u0430\u0493\u0430\u043b\u0430\u0443\u044b",
342342
"HeaderParentalRating": "\u0416\u0430\u0441\u0442\u0430\u0441 \u0441\u0430\u043d\u0430\u0442\u044b",
343-
"HeaderReleaseDate": "\u0428\u044b\u0493\u0430\u0440\u0443 \u043a\u04af\u043d-\u0430\u0439\u044b",
344-
"HeaderDateAdded": "\u04ae\u0441\u0442\u0435\u0443 \u043a\u04af\u043d-\u0430\u0439\u044b",
343+
"HeaderReleaseDate": "\u0428\u044b\u0493\u0430\u0440\u0443 \u043a\u04af\u043d\u0456",
344+
"HeaderDateAdded": "\u04ae\u0441\u0442\u0435\u0443 \u043a\u04af\u043d\u0456",
345345
"HeaderSeries": "\u0421\u0435\u0440\u0438\u0430\u043b",
346346
"HeaderSeason": "\u041c\u0430\u0443\u0441\u044b\u043c",
347347
"HeaderSeasonNumber": "\u041c\u0430\u0443\u0441\u044b\u043c \u043d\u04e9\u043c\u0456\u0440\u0456",
@@ -383,19 +383,19 @@
383383
"PersonTypePerson": "\u0422\u04b1\u043b\u0493\u0430",
384384
"LabelTitleDisplayOrder": "\u0422\u0443\u044b\u043d\u0434\u044b \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0443 \u0440\u0435\u0442\u0456:",
385385
"OptionSortName": "\u0421\u04b1\u0440\u044b\u043f\u0442\u0430\u043b\u0430\u0442\u044b\u043d \u0430\u0442\u044b",
386-
"OptionReleaseDate": "\u0428\u044b\u0493\u0430\u0440\u0443 \u043a\u04af\u043d-\u0430\u0439\u044b",
386+
"OptionReleaseDate": "\u0428\u044b\u0493\u0430\u0440\u0443 \u043a\u04af\u043d\u0456",
387387
"LabelSeasonNumber": "\u041c\u0430\u0443\u0441\u044b\u043c \u043d\u04e9\u043c\u0456\u0440\u0456:",
388388
"LabelDiscNumber": "\u0414\u0438\u0441\u043a\u0456 \u043d\u04e9\u043c\u0456\u0440\u0456",
389389
"LabelParentNumber": "\u0422\u0435\u043a\u0442\u0456\u043a \u043d\u04e9\u043c\u0456\u0440:",
390390
"LabelEpisodeNumber": "\u042d\u043f\u0438\u0437\u043e\u0434 \u043d\u04e9\u043c\u0456\u0440\u0456:",
391391
"LabelTrackNumber": "\u0416\u043e\u043b\u0448\u044b\u049b \u043d\u04e9\u043c\u0456\u0440\u0456:",
392392
"LabelNumber": "\u041d\u04e9\u043c\u0456\u0440\u0456:",
393-
"LabelReleaseDate": "\u0428\u044b\u0493\u0430\u0440\u0443 \u043a\u04af\u043d-\u0430\u0439\u044b:",
394-
"LabelEndDate": "\u0410\u044f\u049b\u0442\u0430\u043b\u0443 \u043a\u04af\u043d-\u0430\u0439\u044b:",
393+
"LabelReleaseDate": "\u0428\u044b\u0493\u0430\u0440\u0443 \u043a\u04af\u043d\u0456:",
394+
"LabelEndDate": "\u0410\u044f\u049b\u0442\u0430\u043b\u0443 \u043a\u04af\u043d\u0456:",
395395
"LabelYear": "\u0416\u044b\u043b\u044b:",
396-
"LabelDateOfBirth": "\u0422\u0443\u0493\u0430\u043d \u043a\u04af\u043d-\u0430\u0439\u044b:",
396+
"LabelDateOfBirth": "\u0422\u0443\u0493\u0430\u043d \u043a\u04af\u043d\u0456:",
397397
"LabelBirthYear": "\u0422\u0443\u0493\u0430\u043d \u0436\u044b\u043b\u044b:",
398-
"LabelDeathDate": "\u04e8\u043b\u0433\u0435\u043d \u043a\u04af\u043d-\u0430\u0439\u044b:",
398+
"LabelDeathDate": "\u04e8\u043b\u0433\u0435\u043d \u043a\u04af\u043d\u0456:",
399399
"HeaderRemoveMediaLocation": "\u0422\u0430\u0441\u0443\u0448\u044b\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440 \u043e\u0440\u043d\u0430\u043b\u0430\u0441\u0443\u044b\u043d \u0430\u043b\u0430\u0441\u0442\u0430\u0443",
400400
"MessageConfirmRemoveMediaLocation": "\u0428\u044b\u043d\u044b\u043c\u0435\u043d \u043e\u0441\u044b \u043e\u0440\u043d\u0430\u043b\u0430\u0441\u0443\u0434\u044b \u0430\u043b\u0430\u0441\u0442\u0430\u0443 \u049b\u0430\u0436\u0435\u0442 \u043f\u0435?",
401401
"HeaderRenameMediaFolder": "\u0422\u0430\u0441\u0443\u0448\u044b \u049b\u0430\u043b\u0442\u0430\u0441\u044b\u043d \u049b\u0430\u0439\u0442\u0430 \u0430\u0442\u0430\u0443",
@@ -454,7 +454,7 @@
454454
"TooltipLinkedToMediaBrowserConnect": "Media Browser Connect \u04af\u0448\u0456\u043d \u0431\u0430\u0439\u043b\u0430\u043d\u044b\u0441\u049b\u0430\u043d",
455455
"HeaderUnrated": "\u0411\u0430\u0493\u0430\u043b\u0430\u043d\u0431\u0430\u0493\u0430\u043d",
456456
"ValueDiscNumber": "{0}-\u0434\u0438\u0441\u043a\u0456",
457-
"HeaderUnknownDate": "\u041a\u04af\u043d-\u0430\u0439\u044b \u0431\u0435\u043b\u0433\u0456\u0441\u0456\u0437",
457+
"HeaderUnknownDate": "\u041a\u04af\u043d\u0456 \u0431\u0435\u043b\u0433\u0456\u0441\u0456\u0437",
458458
"HeaderUnknownYear": "\u0416\u044b\u043b\u044b \u0431\u0435\u043b\u0433\u0456\u0441\u0456\u0437",
459459
"ValueMinutes": "{0} \u043c\u0438\u043d",
460460
"ButtonPlayExternalPlayer": "\u0421\u044b\u0440\u0442\u049b\u044b \u043e\u0439\u043d\u0430\u0442\u049b\u044b\u0448\u043f\u0435\u043d \u043e\u0439\u043d\u0430\u0442\u0443",

0 commit comments

Comments
 (0)
Failed to load comments.