1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-30 12:42:56 +08:00
Commit Graph

189 Commits

Author SHA1 Message Date
Dean Herbert
0e82e9355b Ensure skin is saved immediately after becoming mutable
Without doing this, the JSON content is not written to the file. A user
assumption is that as soon as a skin shows up in the skin list as
exportable, it should export correctly, so it makes sense that it should
be in a sane state even if the user has not made any changes in the skin
editor yet.

Going forward, we might move more of the json serialisation logic out,
and run for consistency as part of the import process. This seems like
the simplest way to guarantee things for now, though.
2021-12-02 17:42:17 +09:00
Dean Herbert
0a14acfd83 Fix incorrect conditional on export/mutate feasability of skin 2021-12-02 13:41:58 +09:00
Dean Herbert
0d18c83d75 Simplify deletion by adding always present conditionals to Delete method 2021-11-29 18:28:25 +09:00
Dean Herbert
f6a3709060 Store default skins to database 2021-11-29 18:28:25 +09:00
Dean Herbert
c629a7a36f Fix random selection and avoid using legacy events for handling skin import/deletion 2021-11-29 18:28:25 +09:00
Dean Herbert
29d074bdb8 Implement missing behaviours required for skin file operations via RealmArchiveModelManager 2021-11-29 18:28:25 +09:00
Dean Herbert
23146d59d1 Use ILive for current skin 2021-11-29 18:28:25 +09:00
Dean Herbert
94b10492be Update legacy SkinManager to match new interface 2021-11-29 18:20:07 +09:00
Dean Herbert
cc1b91e4bd Split out legacy model export logic into LegacyModelExporter classes 2021-11-25 16:41:12 +09:00
Dean Herbert
6cab7b877d Move stable import handling into its own class 2021-11-25 15:36:58 +09:00
Dean Herbert
2bfc473689 Split out SkinModelManager from SkinManager 2021-11-25 15:14:43 +09:00
Dean Herbert
59e763467f Move StoragePath implementation to an extension method 2021-11-19 16:08:38 +09:00
smoogipoo
1e9211c00b Use explicit type 2021-11-02 15:41:25 +09:00
Dean Herbert
5d784b2ef8 Perform a consistency check by decoding the newly written skin.ini during ComputeHash
As this has regressed twice now, let's play it safe and bail rather than
stack overflowing. Note that as all the underlying issues that could
trigger this have been fixed, no additional tests have been added. To
test, comment out `SkinManager.cs` line 228-229 to cause a failure. The
new logic will kick in and show a log output message, but all tests will
still (correctly) pass.
2021-11-02 14:11:25 +09:00
Dean Herbert
2e66ab453d Always write automated changes to skin metadata at the end of the file
Apart from being cleaner (and allowing removal at the point of export,
if that is ever requires), this also gives us a better guarantee that
the metadata is going to take effect.

By writing the `[General]` section ourselves, we avoid any issues that
may be present from a user constructing the file (incorrectly)
themselves, such as multiple `Title:` entries or a malformed `[General]`
marker.

The main goal is to ensure that the name is updated to what we expect it
to be.
2021-11-02 14:11:25 +09:00
Dean Herbert
6b250955d7 Add missing verbatim string markers 2021-11-01 14:24:38 +09:00
Dean Herbert
5bfb16efe2 Ignore case when searching for existing skin.ini 2021-11-01 14:24:38 +09:00
Dean Herbert
26cf5370c3 Remove unused reader parameter 2021-10-24 23:48:46 +09:00
Bartłomiej Dach
051cc2cd92
Update reference to configuration population process in comment 2021-10-24 12:47:17 +02:00
Dean Herbert
93482414d6 Remove SkinConfiguration subclasses and allow configuration parsing for all skin types 2021-10-22 14:42:23 +09:00
Dean Herbert
82d0a6515f Fix incorrect conditional for checking whether import (would fail for default skin) 2021-10-22 14:08:12 +09:00
Dean Herbert
e5b73f25cd Ensure newly created skin.ini files are set to latest version 2021-10-22 12:56:05 +09:00
Dean Herbert
a5088cac27 Fix default metadata propagation when no files are present 2021-10-21 13:43:42 +09:00
Dean Herbert
59b7210efa Revert disallowing imports with no files
While it is logical that we want this, from a testing perspective this is a bit of a nightmare to fix. Let's revisit at a later point in time.
2021-10-21 13:43:42 +09:00
Dean Herbert
68c01fc204 Fix infinite loop on default skin (it can't have a skin.ini) 2021-10-20 17:56:45 +09:00
Dean Herbert
9e6e41d7c0 Add migration to reset and repopulate existing skin hashes 2021-10-20 17:56:45 +09:00
Dean Herbert
602303e947 Add test coverage for skin.ini contents 2021-10-20 17:56:45 +09:00
Dean Herbert
a95c754fd3 Fix multiple issues and make metadata fallback process more logical 2021-10-20 17:56:45 +09:00
Dean Herbert
fa542f2547 Include json files in skin hashing
This covers the new layout storage we are doing.
2021-10-20 17:45:06 +09:00
Dean Herbert
789c715f13 Add skin.ini write support to allow for more correct hashing 2021-10-20 17:45:06 +09:00
Dean Herbert
a2e61883e3 Initial push to use ILive in import process 2021-09-30 22:55:25 +09:00
Dean Herbert
a2484692b3 Change brackets to square 2021-08-23 20:37:19 +09:00
Dean Herbert
7b3f7cc7c1 Change skin import to also include directory names in the skin name where appropriate 2021-08-23 20:24:00 +09:00
Bartłomiej Dach
58ecee543a
Trim redundant default argument value 2021-08-17 23:00:10 +02:00
Dean Herbert
d66f7cb6b5 Fix tests by allowing retrieval with files where required 2021-08-17 19:21:22 +09:00
Dean Herbert
4bf22db4ff Attempt to reduce skin lookup overhead where file access is not required 2021-08-17 00:23:30 +09:00
Dan Balasescu
92fcf90768
Merge branch 'master' into import-early-checksum-abort 2021-06-28 19:29:08 +09:00
Dean Herbert
44f875b802 Bypass optimised existing check in SkinManager (due to custom hashing function) 2021-06-27 16:35:13 +09:00
Dean Herbert
d1f852d102 Make Populate abstract to avoid unnecessary base call async complexity 2021-06-27 14:29:02 +09:00
Salman Ahmed
71e2815e7e
Update and improve code documentation
Co-authored-by: Dean Herbert <pe@ppy.sh>
2021-06-22 12:05:17 +03:00
Salman Ahmed
c1284940e1 Fix potentially providing the same skin instance twice in AllSources 2021-06-22 10:49:37 +03:00
Salman Ahmed
d0cdc07b11 Reuse AllSources when looking up on FindProvider 2021-06-22 10:49:21 +03:00
Dean Herbert
0ad189e357 Expose skin sources via ISkinSource and revert to consuming based on hierarchy 2021-06-22 16:19:55 +09:00
Salman Ahmed
9e5bb146d3 Add xmldoc to SkinManager
The `<summary>` part comes from `BeatmapManager`, which I believe works correctly here as well, as this does handle the "storage and retrieval" of skins.
2021-06-22 03:07:31 +03:00
Salman Ahmed
2e01e61177 Move TODO comment to correct location 2021-06-11 11:46:30 +03:00
Dean Herbert
debd359d2e Update xmldoc 2021-06-11 14:50:21 +09:00
Dean Herbert
b9050f91a4 Expose as Skins and consume SkinInfo from instances 2021-06-11 14:49:35 +09:00
Salman Ahmed
c3a2f2c2a4 Expose default SkinManager providers for use in RulesetSkinProvidingContainer 2021-06-10 13:07:32 +03:00
Dean Herbert
0cf7c56e7e Add fallback lookup support for DefaultSkin 2021-06-09 18:51:42 +09:00
Dean Herbert
e0f568aa8f Merge branch 'legacy-skin-default-fallback' into fix-skin-sample-lookup 2021-06-08 15:19:52 +09:00
Dean Herbert
27e3de3ea3 Add TODO about beatmap skin fallback support 2021-06-08 12:12:14 +09:00
Dean Herbert
e7e9197f03 Fix FindProvider not correctly checking legacy default in SkinManager 2021-06-08 00:42:50 +09:00
Dean Herbert
d26c9a66c2 Merge branch 'legacy-skin-default-fallback' into fix-skin-sample-lookup 2021-06-07 12:01:19 +09:00
Dean Herbert
b87a5956dd Add fallback logic to SkinManager 2021-06-06 12:17:55 +09:00
Dean Herbert
39f99bf785 Move FindProvider to ISkinSource 2021-06-06 12:17:32 +09:00
Dean Herbert
00b3eea840 Merge branch 'legacy-skin-default-fallback' into fix-skin-sample-lookup 2021-05-31 21:39:04 +09:00
Dean Herbert
3ff9f9c89d Make FindProvider non-default 2021-05-31 21:29:47 +09:00
Dean Herbert
65709ec7d7 Move leagcy resource store construction local to DefaultLegacySkin 2021-05-31 19:14:49 +09:00
Dean Herbert
b16d10bd95 Provide game-wide resources via IStorageResourceProvider 2021-05-31 18:57:47 +09:00
Dean Herbert
70a844ac10 Remove allowFallback parameters completely 2021-05-27 14:50:42 +09:00
Dean Herbert
4fd89faaa4 Fix default skin not having resources or providing samples 2021-05-27 14:09:01 +09:00
Dean Herbert
0959e7156a Remove outdated TODO 2021-05-13 17:22:05 +09:00
Dean Herbert
cdcd31b546 Replace ISkinSerialisable with IsEditable property 2021-05-13 17:03:17 +09:00
Dean Herbert
19223ba013 Remove left-over debug logging 2021-05-13 16:42:13 +09:00
Dean Herbert
8b9ac86d4b Merge branch 'master' into skin-serialisation 2021-05-13 12:35:06 +09:00
Bartłomiej Dach
1b579dd838 Extract invariant instantiation info extension method 2021-05-12 23:23:51 +02:00
Dean Herbert
77e422409c Add SkinInfo.InstantiationInfo to allow creating different skin types 2021-05-11 23:37:06 +09:00
Dean Herbert
a7e83aacfb Ensure default skins are copied before modifying 2021-05-11 18:39:15 +09:00
Dean Herbert
a67cead0b3 Add SkinInfo.InstantiationInfo to allow creating different skin types 2021-05-11 18:39:15 +09:00
Dean Herbert
b248b2e5e3 Hook up full save/load flow 2021-05-11 18:39:14 +09:00
Dean Herbert
0324bfa857 Change checks back to Contains 2021-03-25 14:14:38 +09:00
Salman Ahmed
fc5719e445 Fix SkinManager not handling extensions casing comparsion properly 2021-03-24 21:31:53 +03:00
Bartłomiej Dach
a16c0641b2 Revert EF Core to version 2.2
This reverts commit f3faad74d5, reversing
changes made to 712e7bc7bf.

Several issues arose after migrating to 5.0, including, but possibly not
limited to, performance regressions in song select, as well as failures
when attempting to save beatmaps after metadata changes in the editor.
2021-03-21 11:05:15 +01:00
Dean Herbert
f59327cc3e Merge branch 'master' into fix-unsafe-skinnable-sample-play 2021-03-19 20:29:44 +09:00
Dean Herbert
9491e6394a Include the bundled skins when selecting a random skin 2021-03-19 15:46:43 +09:00
Bartłomiej Dach
aec859b4d1 Merge branch 'master' into fix-unsafe-skinnable-sample-play 2021-03-18 19:51:46 +01:00
Dean Herbert
2bdffd1004 Move skin requery logic into extension methods 2021-03-15 13:11:58 +09:00
Roman Kapustin
0a1e325fc7 Extract requerying of navigational properties from DbContext 2021-03-14 19:34:53 +03:00
Roman Kapustin
47b80d2474 Workaround InvalidOperation exceptions 2021-03-11 20:51:54 +03:00
Dean Herbert
b1cd01ceb8 Apply ConfigureAwait changes to game side 2021-03-08 14:36:35 +09:00
Dean Herbert
00574a5288 Use ISample everywhere in Skin GetSample lookup path 2021-02-18 18:32:28 +09:00
smoogipoo
de9d075f94 Initial sample + samplechannel rework 2021-01-19 17:11:40 +09:00
Dean Herbert
10c2745682 Add region specifications around implicit interface implementations 2020-12-22 12:01:09 +09:00
Dean Herbert
a5bcf1dc20 Expose resources to skin via interface (and share common pieces with beatmap) 2020-12-21 15:18:52 +09:00
Dean Herbert
9a7fdb2b7e Move skin deletion logic to OsuGameBase to promote thread safety
`CurrentSkinInfo` is used in multiple places expecting thread safety,
while ItemRemoved events are explicitly mentioning they are not thread
safe. As SkinManager itself doesn't have the ability to schedule to the
update thread, I've just moved the logic to `OsuGameBase`. We may want
to move the current skin bindable out of the manager class in the
future to match things like `BeatmapManager`.

Closes https://github.com/ppy/osu/issues/10837.
2020-11-16 16:43:19 +09:00
Dean Herbert
8d38d9cc93 Add hotkey to select random skin 2020-11-11 13:05:03 +09:00
Dean Herbert
a5e13e4d2c Merge branch 'master' into shuffle-skin 2020-11-11 11:34:48 +09:00
Dean Herbert
e89c5c3b3c Add dynamic compile exceptions to fix skin test scenes 2020-10-16 17:08:46 +09:00
Dean Herbert
50eca202f4 User IEnumerable for HandledExtensions 2020-10-02 16:17:10 +09:00
Dean Herbert
1884e0167b Eagerly populate skin metadata to allow usage in hashing computation 2020-09-14 23:31:03 +09:00
Dean Herbert
91d37e0459 Fix typo in comment 2020-09-14 20:17:00 +09:00
Dean Herbert
ef77658311 Add coverage of case where skin.ini doesn't specify name/author 2020-09-11 16:29:14 +09:00
Dean Herbert
15b533f2a4 Hash skins based on name, not skin.ini contents
It is feasible that a user may be changing the contents of skin.ini
without changing the skin name / author. Such changes should not create
a new skin if already imported.
2020-09-11 16:20:54 +09:00
smoogipoo
9f7750e615 Add texture wrapping support to skins 2020-07-17 16:54:30 +09:00
Dean Herbert
052ad79fc6 Convert dangerous events to IBindables 2020-05-19 16:44:22 +09:00
Huo Yaoyuan
dcfa98414f Use ??=. 2019-11-12 19:56:51 +08:00
Dean Herbert
bebc3309ce Refactor skin configuration to be infinitely extensible 2019-09-03 17:57:34 +09:00
Dean Herbert
a15828ab25 Introduce the concept of SkinComponents
Removes reliance on string lookups and better defines elements for introduction into database
2019-08-30 14:55:52 +09:00
Dean Herbert
bfbec067b1 Remove remnants of user skin PR 2019-08-30 11:54:36 +09:00
Dean Herbert
40c1c6072e Add "osu!classic" as a bundled skin choice 2019-08-29 16:39:42 +09:00