Fix wardrobe length after loading local wardrobe - #90

Open
elliethepink wants to merge 1 commit into
KittenApps:betafrom
elliethepink:local-wardrobe-length
Open

Fix wardrobe length after loading local wardrobe#90
elliethepink wants to merge 1 commit into
KittenApps:betafrom
elliethepink:local-wardrobe-length

Conversation

@elliethepink

Copy link
Copy Markdown

Additional slots were not getting added when the local wardrobe was enabled, so player that didn't already have local wardrobe data saved wouldn't get any extra wardrobe slots. loadExtendedWardrobe calls WardrobeFixLength() to add the new slots but loadLocalWardrobe doesn't. I've added it to settings in the same place that the wardrobe size is adjusted for the local wardrobe, although for extended wardrobes this is all done in loadExtendedWardrobe.

@netlify

netlifyBot commented May 7, 2025

Copy link
Copy Markdown

Deploy Preview for wce ready!

Built without sensitive environment variables

NameLink
🔨 Latest commit5f489b8
🔍 Latest deploy loghttps://app.netlify.com/sites/wce/deploys/681b33626a9cb000083aa8e7
😎 Deploy Previewhttps://deploy-preview-90--wce.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

Having localWardrobe enabled requires the extendedWardrobe to be enabled, so we already are guaranteed to call WardrobeFixLength() once. Calling it a second time is completly unnecessary.

Additional slots were not getting added when the local wardrobe was enabled, so player that didn't already have local wardrobe data saved wouldn't get any extra wardrobe slots.

That's not true. I've just confirmed, that it works correctly.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

This issue might be about Player.WardrobeCharacterNames instead?

Nope, seems to work correctly too.

If there should be a bug, please report it with proper repdrocutions steps. This is at least not the correct fix and seems to 'fix' a non-issue.

@elliethepink

Copy link
Copy Markdown
Author

Indeed, but the localWardrobe settings side effect code is called after the one for extendedWardrobe so although the WardrobeSize variable gets set correctly, the length of Player.Wardrobe doesn't get fixed to match because WardrobeSize is still 96 when WardrobeFixLength() is run.

I found this after investigating why someone still only had 96 slots even after enabling the local wardrobe option.

Repro steps:

  1. Make sure you're in a browser environment with no wce-local-wardrobe data in IndexedDB
  2. Log in to bc
  3. Enable both 'extended wardrobe' and 'local wardrobe' options in WCE settings
  4. Go into your bc wardrobe, go back a page, see that the last slot on the page is 96

This is testing on chrome.

How are you testing? Is it possible you already have local wardrobe data set? It works fine in this case as the wardrobe data is loaded with the right number of slots, effectively.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

The only thing slightly fragile about the legacy settings code is, that the side effect handling assumes that Object.entries() will return them in the specified order, so that extendedWardrobe side effect is always called before the one from localWardrobe and I'm not sure if this is even garunteed by spec, even though it hold for all common JavaScript engines. It would be interesting to know if there are some exotic JavaScript engines out there, which doesn't fullfil that assumtion.

https://github.com/KittenApps/WCE/blob/beta/src/util/settings.ts#L946-L962

@elliethepink

Copy link
Copy Markdown
Author

Ah, if it's reliant on iteration order, this will be insertion order in this case, ie. order they appear in the JSON: probably how the settings have been saved rather than javascript engine differences. That might explain the difference. For all my accounts / test accounts I've looked at, extendedWardrobe appears before localWardrobe which would explain why it's not working for me. Possibly for you they are the other way around somehow?

I only started looking at this because someone reported their extra local wardrobe slots weren't appearing, and then I noticed the option didn't work for me either, so this is definitely a problem in practice (I got them to run WardrobeFixLength() manually which got their slots back).

I've reproduced the same problem on a completely fresh browser environment and new BC account. So, new repro steps:

  1. Open a new, fresh browser profile / private window (I'm using chrome 136)
  2. Go to https://www.bondageprojects.com/R115/
  3. Go to https://sidiousious.gitlab.io/bc-addon-loader/ and copy the "Manual bookmark loader" link location
  4. Go back to the BC tab and paste into the url bar, add the 'javascript:' at the start of the text and press enter
  5. Press the 'Addon Manager' button
  6. Under 'WCE', change to 'stable', press save
  7. Create a fresh BC account, click through the intro screens
  8. Obtain enough money to buy private room and wardrobe, go into private room, buy both
  9. Go to player profile / settings / extension settings / WCE / Appearance & Wardrobe
  10. Enable extended wardrobe
  11. Now that local wardrobe is enabled, enable that too
  12. Exit settings, go to Change Appearance, click Wardrobe
  13. Click left arrow to go back a page
  14. Observe last slot is 96
  15. Optionally, reload and open wardrobe again, still see 96 slots

If you'd rather fix this a different way, eg. run WardrobeFixLength() just once after applying the settings if any of the wardrobe settings are enabled, that's totally fine. I just thought I would offer this fix since I'd already found the bug by that point and it seemed like a simple enough fix (ie. it seems logical to me to always run the function to fix up the length of the wardrobe length after modifying WardrobeSize).

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@elliethepink@KittenApps
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Fix wardrobe length after loading local wardrobe - #90

Open
elliethepink wants to merge 1 commit into
KittenApps:betafrom
elliethepink:local-wardrobe-length
Open

Fix wardrobe length after loading local wardrobe#90
elliethepink wants to merge 1 commit into
KittenApps:betafrom
elliethepink:local-wardrobe-length

Conversation

@elliethepink

Copy link
Copy Markdown

Additional slots were not getting added when the local wardrobe was enabled, so player that didn't already have local wardrobe data saved wouldn't get any extra wardrobe slots. loadExtendedWardrobe calls WardrobeFixLength() to add the new slots but loadLocalWardrobe doesn't. I've added it to settings in the same place that the wardrobe size is adjusted for the local wardrobe, although for extended wardrobes this is all done in loadExtendedWardrobe.

@netlify

netlifyBot commented May 7, 2025

Copy link
Copy Markdown

Deploy Preview for wce ready!

Built without sensitive environment variables

NameLink
🔨 Latest commit5f489b8
🔍 Latest deploy loghttps://app.netlify.com/sites/wce/deploys/681b33626a9cb000083aa8e7
😎 Deploy Previewhttps://deploy-preview-90--wce.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

Having localWardrobe enabled requires the extendedWardrobe to be enabled, so we already are guaranteed to call WardrobeFixLength() once. Calling it a second time is completly unnecessary.

Additional slots were not getting added when the local wardrobe was enabled, so player that didn't already have local wardrobe data saved wouldn't get any extra wardrobe slots.

That's not true. I've just confirmed, that it works correctly.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

This issue might be about Player.WardrobeCharacterNames instead?

Nope, seems to work correctly too.

If there should be a bug, please report it with proper repdrocutions steps. This is at least not the correct fix and seems to 'fix' a non-issue.

@elliethepink

Copy link
Copy Markdown
Author

Indeed, but the localWardrobe settings side effect code is called after the one for extendedWardrobe so although the WardrobeSize variable gets set correctly, the length of Player.Wardrobe doesn't get fixed to match because WardrobeSize is still 96 when WardrobeFixLength() is run.

I found this after investigating why someone still only had 96 slots even after enabling the local wardrobe option.

Repro steps:

  1. Make sure you're in a browser environment with no wce-local-wardrobe data in IndexedDB
  2. Log in to bc
  3. Enable both 'extended wardrobe' and 'local wardrobe' options in WCE settings
  4. Go into your bc wardrobe, go back a page, see that the last slot on the page is 96

This is testing on chrome.

How are you testing? Is it possible you already have local wardrobe data set? It works fine in this case as the wardrobe data is loaded with the right number of slots, effectively.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

The only thing slightly fragile about the legacy settings code is, that the side effect handling assumes that Object.entries() will return them in the specified order, so that extendedWardrobe side effect is always called before the one from localWardrobe and I'm not sure if this is even garunteed by spec, even though it hold for all common JavaScript engines. It would be interesting to know if there are some exotic JavaScript engines out there, which doesn't fullfil that assumtion.

https://github.com/KittenApps/WCE/blob/beta/src/util/settings.ts#L946-L962

@elliethepink

Copy link
Copy Markdown
Author

Ah, if it's reliant on iteration order, this will be insertion order in this case, ie. order they appear in the JSON: probably how the settings have been saved rather than javascript engine differences. That might explain the difference. For all my accounts / test accounts I've looked at, extendedWardrobe appears before localWardrobe which would explain why it's not working for me. Possibly for you they are the other way around somehow?

I only started looking at this because someone reported their extra local wardrobe slots weren't appearing, and then I noticed the option didn't work for me either, so this is definitely a problem in practice (I got them to run WardrobeFixLength() manually which got their slots back).

I've reproduced the same problem on a completely fresh browser environment and new BC account. So, new repro steps:

  1. Open a new, fresh browser profile / private window (I'm using chrome 136)
  2. Go to https://www.bondageprojects.com/R115/
  3. Go to https://sidiousious.gitlab.io/bc-addon-loader/ and copy the "Manual bookmark loader" link location
  4. Go back to the BC tab and paste into the url bar, add the 'javascript:' at the start of the text and press enter
  5. Press the 'Addon Manager' button
  6. Under 'WCE', change to 'stable', press save
  7. Create a fresh BC account, click through the intro screens
  8. Obtain enough money to buy private room and wardrobe, go into private room, buy both
  9. Go to player profile / settings / extension settings / WCE / Appearance & Wardrobe
  10. Enable extended wardrobe
  11. Now that local wardrobe is enabled, enable that too
  12. Exit settings, go to Change Appearance, click Wardrobe
  13. Click left arrow to go back a page
  14. Observe last slot is 96
  15. Optionally, reload and open wardrobe again, still see 96 slots

If you'd rather fix this a different way, eg. run WardrobeFixLength() just once after applying the settings if any of the wardrobe settings are enabled, that's totally fine. I just thought I would offer this fix since I'd already found the bug by that point and it seemed like a simple enough fix (ie. it seems logical to me to always run the function to fix up the length of the wardrobe length after modifying WardrobeSize).

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@elliethepink@KittenApps
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix wardrobe length after loading local wardrobe - #90

Open
elliethepink wants to merge 1 commit into
KittenApps:betafrom
elliethepink:local-wardrobe-length
Open

Fix wardrobe length after loading local wardrobe#90
elliethepink wants to merge 1 commit into
KittenApps:betafrom
elliethepink:local-wardrobe-length

Conversation

@elliethepink

Copy link
Copy Markdown

Additional slots were not getting added when the local wardrobe was enabled, so player that didn't already have local wardrobe data saved wouldn't get any extra wardrobe slots. loadExtendedWardrobe calls WardrobeFixLength() to add the new slots but loadLocalWardrobe doesn't. I've added it to settings in the same place that the wardrobe size is adjusted for the local wardrobe, although for extended wardrobes this is all done in loadExtendedWardrobe.

@netlify

netlifyBot commented May 7, 2025

Copy link
Copy Markdown

Deploy Preview for wce ready!

Built without sensitive environment variables

NameLink
🔨 Latest commit5f489b8
🔍 Latest deploy loghttps://app.netlify.com/sites/wce/deploys/681b33626a9cb000083aa8e7
😎 Deploy Previewhttps://deploy-preview-90--wce.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

Having localWardrobe enabled requires the extendedWardrobe to be enabled, so we already are guaranteed to call WardrobeFixLength() once. Calling it a second time is completly unnecessary.

Additional slots were not getting added when the local wardrobe was enabled, so player that didn't already have local wardrobe data saved wouldn't get any extra wardrobe slots.

That's not true. I've just confirmed, that it works correctly.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

This issue might be about Player.WardrobeCharacterNames instead?

Nope, seems to work correctly too.

If there should be a bug, please report it with proper repdrocutions steps. This is at least not the correct fix and seems to 'fix' a non-issue.

@elliethepink

Copy link
Copy Markdown
Author

Indeed, but the localWardrobe settings side effect code is called after the one for extendedWardrobe so although the WardrobeSize variable gets set correctly, the length of Player.Wardrobe doesn't get fixed to match because WardrobeSize is still 96 when WardrobeFixLength() is run.

I found this after investigating why someone still only had 96 slots even after enabling the local wardrobe option.

Repro steps:

  1. Make sure you're in a browser environment with no wce-local-wardrobe data in IndexedDB
  2. Log in to bc
  3. Enable both 'extended wardrobe' and 'local wardrobe' options in WCE settings
  4. Go into your bc wardrobe, go back a page, see that the last slot on the page is 96

This is testing on chrome.

How are you testing? Is it possible you already have local wardrobe data set? It works fine in this case as the wardrobe data is loaded with the right number of slots, effectively.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

The only thing slightly fragile about the legacy settings code is, that the side effect handling assumes that Object.entries() will return them in the specified order, so that extendedWardrobe side effect is always called before the one from localWardrobe and I'm not sure if this is even garunteed by spec, even though it hold for all common JavaScript engines. It would be interesting to know if there are some exotic JavaScript engines out there, which doesn't fullfil that assumtion.

https://github.com/KittenApps/WCE/blob/beta/src/util/settings.ts#L946-L962

@elliethepink

Copy link
Copy Markdown
Author

Ah, if it's reliant on iteration order, this will be insertion order in this case, ie. order they appear in the JSON: probably how the settings have been saved rather than javascript engine differences. That might explain the difference. For all my accounts / test accounts I've looked at, extendedWardrobe appears before localWardrobe which would explain why it's not working for me. Possibly for you they are the other way around somehow?

I only started looking at this because someone reported their extra local wardrobe slots weren't appearing, and then I noticed the option didn't work for me either, so this is definitely a problem in practice (I got them to run WardrobeFixLength() manually which got their slots back).

I've reproduced the same problem on a completely fresh browser environment and new BC account. So, new repro steps:

  1. Open a new, fresh browser profile / private window (I'm using chrome 136)
  2. Go to https://www.bondageprojects.com/R115/
  3. Go to https://sidiousious.gitlab.io/bc-addon-loader/ and copy the "Manual bookmark loader" link location
  4. Go back to the BC tab and paste into the url bar, add the 'javascript:' at the start of the text and press enter
  5. Press the 'Addon Manager' button
  6. Under 'WCE', change to 'stable', press save
  7. Create a fresh BC account, click through the intro screens
  8. Obtain enough money to buy private room and wardrobe, go into private room, buy both
  9. Go to player profile / settings / extension settings / WCE / Appearance & Wardrobe
  10. Enable extended wardrobe
  11. Now that local wardrobe is enabled, enable that too
  12. Exit settings, go to Change Appearance, click Wardrobe
  13. Click left arrow to go back a page
  14. Observe last slot is 96
  15. Optionally, reload and open wardrobe again, still see 96 slots

If you'd rather fix this a different way, eg. run WardrobeFixLength() just once after applying the settings if any of the wardrobe settings are enabled, that's totally fine. I just thought I would offer this fix since I'd already found the bug by that point and it seemed like a simple enough fix (ie. it seems logical to me to always run the function to fix up the length of the wardrobe length after modifying WardrobeSize).

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@elliethepink@KittenApps
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix wardrobe length after loading local wardrobe - #90

Open
elliethepink wants to merge 1 commit into
KittenApps:betafrom
elliethepink:local-wardrobe-length
Open

Fix wardrobe length after loading local wardrobe#90
elliethepink wants to merge 1 commit into
KittenApps:betafrom
elliethepink:local-wardrobe-length

Conversation

@elliethepink

Copy link
Copy Markdown

Additional slots were not getting added when the local wardrobe was enabled, so player that didn't already have local wardrobe data saved wouldn't get any extra wardrobe slots. loadExtendedWardrobe calls WardrobeFixLength() to add the new slots but loadLocalWardrobe doesn't. I've added it to settings in the same place that the wardrobe size is adjusted for the local wardrobe, although for extended wardrobes this is all done in loadExtendedWardrobe.

@netlify

netlifyBot commented May 7, 2025

Copy link
Copy Markdown

Deploy Preview for wce ready!

Built without sensitive environment variables

NameLink
🔨 Latest commit5f489b8
🔍 Latest deploy loghttps://app.netlify.com/sites/wce/deploys/681b33626a9cb000083aa8e7
😎 Deploy Previewhttps://deploy-preview-90--wce.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

Having localWardrobe enabled requires the extendedWardrobe to be enabled, so we already are guaranteed to call WardrobeFixLength() once. Calling it a second time is completly unnecessary.

Additional slots were not getting added when the local wardrobe was enabled, so player that didn't already have local wardrobe data saved wouldn't get any extra wardrobe slots.

That's not true. I've just confirmed, that it works correctly.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

This issue might be about Player.WardrobeCharacterNames instead?

Nope, seems to work correctly too.

If there should be a bug, please report it with proper repdrocutions steps. This is at least not the correct fix and seems to 'fix' a non-issue.

@elliethepink

Copy link
Copy Markdown
Author

Indeed, but the localWardrobe settings side effect code is called after the one for extendedWardrobe so although the WardrobeSize variable gets set correctly, the length of Player.Wardrobe doesn't get fixed to match because WardrobeSize is still 96 when WardrobeFixLength() is run.

I found this after investigating why someone still only had 96 slots even after enabling the local wardrobe option.

Repro steps:

  1. Make sure you're in a browser environment with no wce-local-wardrobe data in IndexedDB
  2. Log in to bc
  3. Enable both 'extended wardrobe' and 'local wardrobe' options in WCE settings
  4. Go into your bc wardrobe, go back a page, see that the last slot on the page is 96

This is testing on chrome.

How are you testing? Is it possible you already have local wardrobe data set? It works fine in this case as the wardrobe data is loaded with the right number of slots, effectively.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

The only thing slightly fragile about the legacy settings code is, that the side effect handling assumes that Object.entries() will return them in the specified order, so that extendedWardrobe side effect is always called before the one from localWardrobe and I'm not sure if this is even garunteed by spec, even though it hold for all common JavaScript engines. It would be interesting to know if there are some exotic JavaScript engines out there, which doesn't fullfil that assumtion.

https://github.com/KittenApps/WCE/blob/beta/src/util/settings.ts#L946-L962

@elliethepink

Copy link
Copy Markdown
Author

Ah, if it's reliant on iteration order, this will be insertion order in this case, ie. order they appear in the JSON: probably how the settings have been saved rather than javascript engine differences. That might explain the difference. For all my accounts / test accounts I've looked at, extendedWardrobe appears before localWardrobe which would explain why it's not working for me. Possibly for you they are the other way around somehow?

I only started looking at this because someone reported their extra local wardrobe slots weren't appearing, and then I noticed the option didn't work for me either, so this is definitely a problem in practice (I got them to run WardrobeFixLength() manually which got their slots back).

I've reproduced the same problem on a completely fresh browser environment and new BC account. So, new repro steps:

  1. Open a new, fresh browser profile / private window (I'm using chrome 136)
  2. Go to https://www.bondageprojects.com/R115/
  3. Go to https://sidiousious.gitlab.io/bc-addon-loader/ and copy the "Manual bookmark loader" link location
  4. Go back to the BC tab and paste into the url bar, add the 'javascript:' at the start of the text and press enter
  5. Press the 'Addon Manager' button
  6. Under 'WCE', change to 'stable', press save
  7. Create a fresh BC account, click through the intro screens
  8. Obtain enough money to buy private room and wardrobe, go into private room, buy both
  9. Go to player profile / settings / extension settings / WCE / Appearance & Wardrobe
  10. Enable extended wardrobe
  11. Now that local wardrobe is enabled, enable that too
  12. Exit settings, go to Change Appearance, click Wardrobe
  13. Click left arrow to go back a page
  14. Observe last slot is 96
  15. Optionally, reload and open wardrobe again, still see 96 slots

If you'd rather fix this a different way, eg. run WardrobeFixLength() just once after applying the settings if any of the wardrobe settings are enabled, that's totally fine. I just thought I would offer this fix since I'd already found the bug by that point and it seemed like a simple enough fix (ie. it seems logical to me to always run the function to fix up the length of the wardrobe length after modifying WardrobeSize).

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@elliethepink@KittenApps
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Fix wardrobe length after loading local wardrobe - #90

Open
elliethepink wants to merge 1 commit into
KittenApps:betafrom
elliethepink:local-wardrobe-length
Open

Fix wardrobe length after loading local wardrobe#90
elliethepink wants to merge 1 commit into
KittenApps:betafrom
elliethepink:local-wardrobe-length

Conversation

@elliethepink

Copy link
Copy Markdown

Additional slots were not getting added when the local wardrobe was enabled, so player that didn't already have local wardrobe data saved wouldn't get any extra wardrobe slots. loadExtendedWardrobe calls WardrobeFixLength() to add the new slots but loadLocalWardrobe doesn't. I've added it to settings in the same place that the wardrobe size is adjusted for the local wardrobe, although for extended wardrobes this is all done in loadExtendedWardrobe.

@netlify

netlifyBot commented May 7, 2025

Copy link
Copy Markdown

Deploy Preview for wce ready!

Built without sensitive environment variables

NameLink
🔨 Latest commit5f489b8
🔍 Latest deploy loghttps://app.netlify.com/sites/wce/deploys/681b33626a9cb000083aa8e7
😎 Deploy Previewhttps://deploy-preview-90--wce.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

Having localWardrobe enabled requires the extendedWardrobe to be enabled, so we already are guaranteed to call WardrobeFixLength() once. Calling it a second time is completly unnecessary.

Additional slots were not getting added when the local wardrobe was enabled, so player that didn't already have local wardrobe data saved wouldn't get any extra wardrobe slots.

That's not true. I've just confirmed, that it works correctly.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

This issue might be about Player.WardrobeCharacterNames instead?

Nope, seems to work correctly too.

If there should be a bug, please report it with proper repdrocutions steps. This is at least not the correct fix and seems to 'fix' a non-issue.

@elliethepink

Copy link
Copy Markdown
Author

Indeed, but the localWardrobe settings side effect code is called after the one for extendedWardrobe so although the WardrobeSize variable gets set correctly, the length of Player.Wardrobe doesn't get fixed to match because WardrobeSize is still 96 when WardrobeFixLength() is run.

I found this after investigating why someone still only had 96 slots even after enabling the local wardrobe option.

Repro steps:

  1. Make sure you're in a browser environment with no wce-local-wardrobe data in IndexedDB
  2. Log in to bc
  3. Enable both 'extended wardrobe' and 'local wardrobe' options in WCE settings
  4. Go into your bc wardrobe, go back a page, see that the last slot on the page is 96

This is testing on chrome.

How are you testing? Is it possible you already have local wardrobe data set? It works fine in this case as the wardrobe data is loaded with the right number of slots, effectively.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

The only thing slightly fragile about the legacy settings code is, that the side effect handling assumes that Object.entries() will return them in the specified order, so that extendedWardrobe side effect is always called before the one from localWardrobe and I'm not sure if this is even garunteed by spec, even though it hold for all common JavaScript engines. It would be interesting to know if there are some exotic JavaScript engines out there, which doesn't fullfil that assumtion.

https://github.com/KittenApps/WCE/blob/beta/src/util/settings.ts#L946-L962

@elliethepink

Copy link
Copy Markdown
Author

Ah, if it's reliant on iteration order, this will be insertion order in this case, ie. order they appear in the JSON: probably how the settings have been saved rather than javascript engine differences. That might explain the difference. For all my accounts / test accounts I've looked at, extendedWardrobe appears before localWardrobe which would explain why it's not working for me. Possibly for you they are the other way around somehow?

I only started looking at this because someone reported their extra local wardrobe slots weren't appearing, and then I noticed the option didn't work for me either, so this is definitely a problem in practice (I got them to run WardrobeFixLength() manually which got their slots back).

I've reproduced the same problem on a completely fresh browser environment and new BC account. So, new repro steps:

  1. Open a new, fresh browser profile / private window (I'm using chrome 136)
  2. Go to https://www.bondageprojects.com/R115/
  3. Go to https://sidiousious.gitlab.io/bc-addon-loader/ and copy the "Manual bookmark loader" link location
  4. Go back to the BC tab and paste into the url bar, add the 'javascript:' at the start of the text and press enter
  5. Press the 'Addon Manager' button
  6. Under 'WCE', change to 'stable', press save
  7. Create a fresh BC account, click through the intro screens
  8. Obtain enough money to buy private room and wardrobe, go into private room, buy both
  9. Go to player profile / settings / extension settings / WCE / Appearance & Wardrobe
  10. Enable extended wardrobe
  11. Now that local wardrobe is enabled, enable that too
  12. Exit settings, go to Change Appearance, click Wardrobe
  13. Click left arrow to go back a page
  14. Observe last slot is 96
  15. Optionally, reload and open wardrobe again, still see 96 slots

If you'd rather fix this a different way, eg. run WardrobeFixLength() just once after applying the settings if any of the wardrobe settings are enabled, that's totally fine. I just thought I would offer this fix since I'd already found the bug by that point and it seemed like a simple enough fix (ie. it seems logical to me to always run the function to fix up the length of the wardrobe length after modifying WardrobeSize).

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@elliethepink@KittenApps
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix wardrobe length after loading local wardrobe - #90

Open
elliethepink wants to merge 1 commit into
KittenApps:betafrom
elliethepink:local-wardrobe-length
Open

Fix wardrobe length after loading local wardrobe#90
elliethepink wants to merge 1 commit into
KittenApps:betafrom
elliethepink:local-wardrobe-length

Conversation

@elliethepink

Copy link
Copy Markdown

Additional slots were not getting added when the local wardrobe was enabled, so player that didn't already have local wardrobe data saved wouldn't get any extra wardrobe slots. loadExtendedWardrobe calls WardrobeFixLength() to add the new slots but loadLocalWardrobe doesn't. I've added it to settings in the same place that the wardrobe size is adjusted for the local wardrobe, although for extended wardrobes this is all done in loadExtendedWardrobe.

@netlify

netlifyBot commented May 7, 2025

Copy link
Copy Markdown

Deploy Preview for wce ready!

Built without sensitive environment variables

NameLink
🔨 Latest commit5f489b8
🔍 Latest deploy loghttps://app.netlify.com/sites/wce/deploys/681b33626a9cb000083aa8e7
😎 Deploy Previewhttps://deploy-preview-90--wce.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

Having localWardrobe enabled requires the extendedWardrobe to be enabled, so we already are guaranteed to call WardrobeFixLength() once. Calling it a second time is completly unnecessary.

Additional slots were not getting added when the local wardrobe was enabled, so player that didn't already have local wardrobe data saved wouldn't get any extra wardrobe slots.

That's not true. I've just confirmed, that it works correctly.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

This issue might be about Player.WardrobeCharacterNames instead?

Nope, seems to work correctly too.

If there should be a bug, please report it with proper repdrocutions steps. This is at least not the correct fix and seems to 'fix' a non-issue.

@elliethepink

Copy link
Copy Markdown
Author

Indeed, but the localWardrobe settings side effect code is called after the one for extendedWardrobe so although the WardrobeSize variable gets set correctly, the length of Player.Wardrobe doesn't get fixed to match because WardrobeSize is still 96 when WardrobeFixLength() is run.

I found this after investigating why someone still only had 96 slots even after enabling the local wardrobe option.

Repro steps:

  1. Make sure you're in a browser environment with no wce-local-wardrobe data in IndexedDB
  2. Log in to bc
  3. Enable both 'extended wardrobe' and 'local wardrobe' options in WCE settings
  4. Go into your bc wardrobe, go back a page, see that the last slot on the page is 96

This is testing on chrome.

How are you testing? Is it possible you already have local wardrobe data set? It works fine in this case as the wardrobe data is loaded with the right number of slots, effectively.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

The only thing slightly fragile about the legacy settings code is, that the side effect handling assumes that Object.entries() will return them in the specified order, so that extendedWardrobe side effect is always called before the one from localWardrobe and I'm not sure if this is even garunteed by spec, even though it hold for all common JavaScript engines. It would be interesting to know if there are some exotic JavaScript engines out there, which doesn't fullfil that assumtion.

https://github.com/KittenApps/WCE/blob/beta/src/util/settings.ts#L946-L962

@elliethepink

Copy link
Copy Markdown
Author

Ah, if it's reliant on iteration order, this will be insertion order in this case, ie. order they appear in the JSON: probably how the settings have been saved rather than javascript engine differences. That might explain the difference. For all my accounts / test accounts I've looked at, extendedWardrobe appears before localWardrobe which would explain why it's not working for me. Possibly for you they are the other way around somehow?

I only started looking at this because someone reported their extra local wardrobe slots weren't appearing, and then I noticed the option didn't work for me either, so this is definitely a problem in practice (I got them to run WardrobeFixLength() manually which got their slots back).

I've reproduced the same problem on a completely fresh browser environment and new BC account. So, new repro steps:

  1. Open a new, fresh browser profile / private window (I'm using chrome 136)
  2. Go to https://www.bondageprojects.com/R115/
  3. Go to https://sidiousious.gitlab.io/bc-addon-loader/ and copy the "Manual bookmark loader" link location
  4. Go back to the BC tab and paste into the url bar, add the 'javascript:' at the start of the text and press enter
  5. Press the 'Addon Manager' button
  6. Under 'WCE', change to 'stable', press save
  7. Create a fresh BC account, click through the intro screens
  8. Obtain enough money to buy private room and wardrobe, go into private room, buy both
  9. Go to player profile / settings / extension settings / WCE / Appearance & Wardrobe
  10. Enable extended wardrobe
  11. Now that local wardrobe is enabled, enable that too
  12. Exit settings, go to Change Appearance, click Wardrobe
  13. Click left arrow to go back a page
  14. Observe last slot is 96
  15. Optionally, reload and open wardrobe again, still see 96 slots

If you'd rather fix this a different way, eg. run WardrobeFixLength() just once after applying the settings if any of the wardrobe settings are enabled, that's totally fine. I just thought I would offer this fix since I'd already found the bug by that point and it seemed like a simple enough fix (ie. it seems logical to me to always run the function to fix up the length of the wardrobe length after modifying WardrobeSize).

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@elliethepink@KittenApps
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix wardrobe length after loading local wardrobe - #90

Open
elliethepink wants to merge 1 commit into
KittenApps:betafrom
elliethepink:local-wardrobe-length
Open

Fix wardrobe length after loading local wardrobe#90
elliethepink wants to merge 1 commit into
KittenApps:betafrom
elliethepink:local-wardrobe-length

Conversation

@elliethepink

Copy link
Copy Markdown

Additional slots were not getting added when the local wardrobe was enabled, so player that didn't already have local wardrobe data saved wouldn't get any extra wardrobe slots. loadExtendedWardrobe calls WardrobeFixLength() to add the new slots but loadLocalWardrobe doesn't. I've added it to settings in the same place that the wardrobe size is adjusted for the local wardrobe, although for extended wardrobes this is all done in loadExtendedWardrobe.

@netlify

netlifyBot commented May 7, 2025

Copy link
Copy Markdown

Deploy Preview for wce ready!

Built without sensitive environment variables

NameLink
🔨 Latest commit5f489b8
🔍 Latest deploy loghttps://app.netlify.com/sites/wce/deploys/681b33626a9cb000083aa8e7
😎 Deploy Previewhttps://deploy-preview-90--wce.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

Having localWardrobe enabled requires the extendedWardrobe to be enabled, so we already are guaranteed to call WardrobeFixLength() once. Calling it a second time is completly unnecessary.

Additional slots were not getting added when the local wardrobe was enabled, so player that didn't already have local wardrobe data saved wouldn't get any extra wardrobe slots.

That's not true. I've just confirmed, that it works correctly.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

This issue might be about Player.WardrobeCharacterNames instead?

Nope, seems to work correctly too.

If there should be a bug, please report it with proper repdrocutions steps. This is at least not the correct fix and seems to 'fix' a non-issue.

@elliethepink

Copy link
Copy Markdown
Author

Indeed, but the localWardrobe settings side effect code is called after the one for extendedWardrobe so although the WardrobeSize variable gets set correctly, the length of Player.Wardrobe doesn't get fixed to match because WardrobeSize is still 96 when WardrobeFixLength() is run.

I found this after investigating why someone still only had 96 slots even after enabling the local wardrobe option.

Repro steps:

  1. Make sure you're in a browser environment with no wce-local-wardrobe data in IndexedDB
  2. Log in to bc
  3. Enable both 'extended wardrobe' and 'local wardrobe' options in WCE settings
  4. Go into your bc wardrobe, go back a page, see that the last slot on the page is 96

This is testing on chrome.

How are you testing? Is it possible you already have local wardrobe data set? It works fine in this case as the wardrobe data is loaded with the right number of slots, effectively.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

The only thing slightly fragile about the legacy settings code is, that the side effect handling assumes that Object.entries() will return them in the specified order, so that extendedWardrobe side effect is always called before the one from localWardrobe and I'm not sure if this is even garunteed by spec, even though it hold for all common JavaScript engines. It would be interesting to know if there are some exotic JavaScript engines out there, which doesn't fullfil that assumtion.

https://github.com/KittenApps/WCE/blob/beta/src/util/settings.ts#L946-L962

@elliethepink

Copy link
Copy Markdown
Author

Ah, if it's reliant on iteration order, this will be insertion order in this case, ie. order they appear in the JSON: probably how the settings have been saved rather than javascript engine differences. That might explain the difference. For all my accounts / test accounts I've looked at, extendedWardrobe appears before localWardrobe which would explain why it's not working for me. Possibly for you they are the other way around somehow?

I only started looking at this because someone reported their extra local wardrobe slots weren't appearing, and then I noticed the option didn't work for me either, so this is definitely a problem in practice (I got them to run WardrobeFixLength() manually which got their slots back).

I've reproduced the same problem on a completely fresh browser environment and new BC account. So, new repro steps:

  1. Open a new, fresh browser profile / private window (I'm using chrome 136)
  2. Go to https://www.bondageprojects.com/R115/
  3. Go to https://sidiousious.gitlab.io/bc-addon-loader/ and copy the "Manual bookmark loader" link location
  4. Go back to the BC tab and paste into the url bar, add the 'javascript:' at the start of the text and press enter
  5. Press the 'Addon Manager' button
  6. Under 'WCE', change to 'stable', press save
  7. Create a fresh BC account, click through the intro screens
  8. Obtain enough money to buy private room and wardrobe, go into private room, buy both
  9. Go to player profile / settings / extension settings / WCE / Appearance & Wardrobe
  10. Enable extended wardrobe
  11. Now that local wardrobe is enabled, enable that too
  12. Exit settings, go to Change Appearance, click Wardrobe
  13. Click left arrow to go back a page
  14. Observe last slot is 96
  15. Optionally, reload and open wardrobe again, still see 96 slots

If you'd rather fix this a different way, eg. run WardrobeFixLength() just once after applying the settings if any of the wardrobe settings are enabled, that's totally fine. I just thought I would offer this fix since I'd already found the bug by that point and it seemed like a simple enough fix (ie. it seems logical to me to always run the function to fix up the length of the wardrobe length after modifying WardrobeSize).

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@elliethepink@KittenApps
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Fix wardrobe length after loading local wardrobe - #90

Open
elliethepink wants to merge 1 commit into
KittenApps:betafrom
elliethepink:local-wardrobe-length
Open

Fix wardrobe length after loading local wardrobe#90
elliethepink wants to merge 1 commit into
KittenApps:betafrom
elliethepink:local-wardrobe-length

Conversation

@elliethepink

Copy link
Copy Markdown

Additional slots were not getting added when the local wardrobe was enabled, so player that didn't already have local wardrobe data saved wouldn't get any extra wardrobe slots. loadExtendedWardrobe calls WardrobeFixLength() to add the new slots but loadLocalWardrobe doesn't. I've added it to settings in the same place that the wardrobe size is adjusted for the local wardrobe, although for extended wardrobes this is all done in loadExtendedWardrobe.

@netlify

netlifyBot commented May 7, 2025

Copy link
Copy Markdown

Deploy Preview for wce ready!

Built without sensitive environment variables

NameLink
🔨 Latest commit5f489b8
🔍 Latest deploy loghttps://app.netlify.com/sites/wce/deploys/681b33626a9cb000083aa8e7
😎 Deploy Previewhttps://deploy-preview-90--wce.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

Having localWardrobe enabled requires the extendedWardrobe to be enabled, so we already are guaranteed to call WardrobeFixLength() once. Calling it a second time is completly unnecessary.

Additional slots were not getting added when the local wardrobe was enabled, so player that didn't already have local wardrobe data saved wouldn't get any extra wardrobe slots.

That's not true. I've just confirmed, that it works correctly.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

This issue might be about Player.WardrobeCharacterNames instead?

Nope, seems to work correctly too.

If there should be a bug, please report it with proper repdrocutions steps. This is at least not the correct fix and seems to 'fix' a non-issue.

@elliethepink

Copy link
Copy Markdown
Author

Indeed, but the localWardrobe settings side effect code is called after the one for extendedWardrobe so although the WardrobeSize variable gets set correctly, the length of Player.Wardrobe doesn't get fixed to match because WardrobeSize is still 96 when WardrobeFixLength() is run.

I found this after investigating why someone still only had 96 slots even after enabling the local wardrobe option.

Repro steps:

  1. Make sure you're in a browser environment with no wce-local-wardrobe data in IndexedDB
  2. Log in to bc
  3. Enable both 'extended wardrobe' and 'local wardrobe' options in WCE settings
  4. Go into your bc wardrobe, go back a page, see that the last slot on the page is 96

This is testing on chrome.

How are you testing? Is it possible you already have local wardrobe data set? It works fine in this case as the wardrobe data is loaded with the right number of slots, effectively.

@KittenApps

KittenApps commented May 7, 2025

Copy link
Copy Markdown
Owner

The only thing slightly fragile about the legacy settings code is, that the side effect handling assumes that Object.entries() will return them in the specified order, so that extendedWardrobe side effect is always called before the one from localWardrobe and I'm not sure if this is even garunteed by spec, even though it hold for all common JavaScript engines. It would be interesting to know if there are some exotic JavaScript engines out there, which doesn't fullfil that assumtion.

https://github.com/KittenApps/WCE/blob/beta/src/util/settings.ts#L946-L962

@elliethepink

Copy link
Copy Markdown
Author

Ah, if it's reliant on iteration order, this will be insertion order in this case, ie. order they appear in the JSON: probably how the settings have been saved rather than javascript engine differences. That might explain the difference. For all my accounts / test accounts I've looked at, extendedWardrobe appears before localWardrobe which would explain why it's not working for me. Possibly for you they are the other way around somehow?

I only started looking at this because someone reported their extra local wardrobe slots weren't appearing, and then I noticed the option didn't work for me either, so this is definitely a problem in practice (I got them to run WardrobeFixLength() manually which got their slots back).

I've reproduced the same problem on a completely fresh browser environment and new BC account. So, new repro steps:

  1. Open a new, fresh browser profile / private window (I'm using chrome 136)
  2. Go to https://www.bondageprojects.com/R115/
  3. Go to https://sidiousious.gitlab.io/bc-addon-loader/ and copy the "Manual bookmark loader" link location
  4. Go back to the BC tab and paste into the url bar, add the 'javascript:' at the start of the text and press enter
  5. Press the 'Addon Manager' button
  6. Under 'WCE', change to 'stable', press save
  7. Create a fresh BC account, click through the intro screens
  8. Obtain enough money to buy private room and wardrobe, go into private room, buy both
  9. Go to player profile / settings / extension settings / WCE / Appearance & Wardrobe
  10. Enable extended wardrobe
  11. Now that local wardrobe is enabled, enable that too
  12. Exit settings, go to Change Appearance, click Wardrobe
  13. Click left arrow to go back a page
  14. Observe last slot is 96
  15. Optionally, reload and open wardrobe again, still see 96 slots

If you'd rather fix this a different way, eg. run WardrobeFixLength() just once after applying the settings if any of the wardrobe settings are enabled, that's totally fine. I just thought I would offer this fix since I'd already found the bug by that point and it seemed like a simple enough fix (ie. it seems logical to me to always run the function to fix up the length of the wardrobe length after modifying WardrobeSize).

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@elliethepink@KittenApps