Releases: Syntax-Free/pcplanner
Multiyt-dlp v1.3.2 - The "Paranoia" Update
I have turned PCPlanner from an open door into a digital fortress. If you were planning to use my app to mine crypto or DDoS your local router, I have bad news for you.
🛡️ The "Fort Knox" Protocols
🧱 The Walled Garden (SSRF & Domain Whitelisting)
Previously, the scraper would blindly visit whatever URL you fed it. If you told it to scrape http://localhost:8080/admin, it would try.
- The Fix: I’ve implemented a strict Domain Whitelist. The app now exclusively talks to
tokopedia.com. - The Redirect Trap: I also killed automatic redirects. If a link tries to bounce you from a safe site to a malicious IP, the scraper cuts the cord instantly. Syn tried to redirect the scraper to a Rickroll server; he is now in timeout.
🕵️ Digital Forensics (Magic Bytes Verification)
Apparently, you can rename virus.exe to cute_cat.jpg, and dumb software will try to display it.
- The Fix: We don't trust file extensions anymore. The app now inspects the Magic Bytes (Hex Headers) of every download. If the file doesn't scream "I AM A PNG/JPG" in binary, it gets incinerated before it hits your disk.
🛑 The DoS Nuke (Resource Limits)
I noticed that if you imported a 4GB JSON file, the app would eat your RAM and die.
- The Limits: I’ve added hard caps.
- Max Import Size: 50MB. (If your PC build list is bigger than 50MB, you need therapy, not software).
- Max Item Count: 1,000 items per import.
- Max Image Size: 5MB.
💉 Sanitization & Hygiene
🔗 Link Condoms (Anti-Phishing)
The table widget used to render raw HTML. A clever hacker could theoretically inject a script via a product name.
- The Fix:
html.escape(). All text is now sanitized. - The Bouncer: Clicking a link now triggers a "Are you sure?" interrogation dialog. It checks the scheme (HTTP/S only) and forces you to acknowledge that you are leaving the safety of my app.
📉 Regex Price Surgery
Tokopedia sometimes formats prices like Rp 10.000 (50% OFF). The old parser would panic. The new parser uses strict Regex to extract only the money, ignoring the marketing fluff.
📜 The "Technical" Changelog
🔴 Security (Critical)
- SSRF Protection: Added
ALLOWED_SCRAPE_DOMAINSandis_safe_url()to core scraper. - RCE Prevention: Added
_validate_image_content()to check file signatures (Magic Bytes) before saving to cache. - DoS Prevention: Implemented
MAX_JSON_IMPORT_SIZE(50MB) andMAX_IMPORT_ITEMS(1000). - XSS/Injection: Applied
html.escapeto all user-facing links and table data.
🟡 Changed
- Scraper Logic: Now handles redirects manually to verify the destination URL against the whitelist.
- Image Downloader: Now checks
Content-Lengthheaders before downloading to prevent memory overflow. - Update Checker: Now validates that the update URL actually points to
github.com. - Github URL: No way I forgot to update the Github URL to
Syntax-Freefor this long bruh.
🟢 Added
- Secure Link Activation: A
QMessageBoxconfirmation when opening external links. - Validation: Added checks for
http/httpsschemes on all inputs.
Multiyt-dlp v1.3.1 - The IncompetenceBuffer
I have officially patched your inability to use my software correctly. v1.3.1 makes the import system so robust that even Syn couldn't break it (and believe me, he tried).
🛠️ The "Indecisive-Proof" Upgrades
👥 Infinite Cloning (Profile Collision Handling)
Before, if you tried to import "Dream Build" while "Dream Build" already existed, the database would have a mental breakdown.
- Smart Renaming: The app now detects collisions and automatically appends
(1),(2), etc. You can now have ten identical profiles. Why? Because I believe in your right to be indecisive. - Fresh Fingerprints (UUID Regeneration): I realized that reusing IDs was "technically illegal" in SQL land. Now, every time you import, the app generates Fresh IDs for every component. Every import is a new beginning.
🧼 Data Sanitization (The Great Filter)
Kinda overkill for this release, since most of you don't even know what a JSON is, let alone have the balls to touch it.
- Robust Extraction: I added a regex-powered filter to the data manager. If you try to feed the app a string where it wants a number, it will violently strip away everything that isn't a digit.
- Peasant-Proofing: It now handles
Nonevalues, corrupted strings, and weird legacy formats without crashing. My code is now officially smarter than the people using it.
📑 The "Technical" Changelog
🟢 Added
_safe_int()and_sanitize_str()helpers: Internal logic to protect the database from your bad inputs.- Collision Logic: Automatic incrementing for profile names.
🟡 Changed
- DataManager.import_profile_data: Completely rewritten. It no longer trusts the JSON file. It treats every import as a suggestion and rebuilds the data from scratch with new UUIDs to ensure ACID-compliant syntax.
- Version Bump: We are now at v1.3.1. Why does this even need to be mentioned?
🔴 Fixed
- Fixed the
IntegrityErrorthat occurred when importing a profile with an ID that already existed in the SQLite database. - Fixed a bug where string-encoded prices in JSON would cause the price history to vanish into the void.
Multiyt-dlp v1.3.0 - The Relational Takeover
This update represents a fundamental shift in how we process financial guilt. The codebase has been migrated from a single script f--
file into a modular architecture to support ACID compliant transac⍰⍰⍰⍰
- SYSTEM: ZQ⍰L_CORE -> IN⍰TIALIZING MIGRATION_PROTOCOL...
- LOG: CONVERTING JSON TO SQLITE (RELATIONAL INTEGR⍰TY)...
+ USER: TAX (SYNTAX_FREE)
+ COMMAND: SUDO OVERRIDE --force --vibe-checkN A H U H .
Zqil tried to bore you with "database normalization." I am here to tell you that PC Planner is no longer a script. It is an Enterprise-Grade Surveillance System.
In v1.3.0, I realized that data.json was for peasants. Real visionaries use SQL. I also added pretty pictures (graphs) because reading numbers is hard.
🚀 The Upgrades
🏛️ The Relational Takeover (SQLite Migration)
We were storing your dream PC in a text file. It was embarrassing. I fixed it.
- The Migrator Engine: When you open v1.3.0, the app violently rips your data from the old
data.jsonand injects it into a "Robust" SQLite database. - Transactional Integrity: If the app crashes (it won't), your data survives. Zqil calls it "ACID compliance." I call it "immortality."
- Infinite Scalability: You can now add 10,000 components. The app won't care. Your wallet might, though.
📉 The Visualization of Ruin (Price History)
I got tired of just knowing the price went up. I wanted to feel it.
- Matplotlib Integration: Added a "Show History" button. It generates a high-fidelity line graph of your financial bad decisions.
- Lazy Loading: The graph only renders when you ask for it. Because I respect your RAM (unlike Chrome).
Syn:
ram prices tripled btw.
- Visual Deltas: The table now uses high-visibility indicators for your suffering:
- ▲ Red Arrows: When prices go up (What usually happens)
+ ▼ Green Arrows: When prices go down (Rare hope)✋ Divine Ordering (Drag & Drop)
The old list was static. I hated it. I wanted to move the GPU to the top because it's the only part that matters.
- Draggable Rows: You can now physically drag items to reorder them. The database remembers the new order.
- The "Vibe" Sort: There is no logic. Sort by color? Sort by price? Sort by "I need this to NOT triple in price again in the next month"? It’s your choice.
⚛️ Atomic Surveillance (Scraping V2)
- No More Corrupt Images: I implemented "Atomic Writes" for the image cache. If the download fails halfway, the file doesn't exist. No more half-loaded JPEGs.
- JSON-LD Priority: The scraper now ignores the HTML and goes straight for the metadata hidden in the page source. We are reading Tokopedia's mind.
📑 The "Technical" Changelog
🟢 Added
- SQLAlchemy ORM: Because writing raw SQL is for people who don't have AI assistants.
ui/graph_window.py: The Matplotlib rendering engine.core/migrator.py: The bridge between the old world (JSON) and the new world (SQL).- Global Exception Hook: If the app dies, it logs the death to
logs/latest.loginstead of vanishing silently.
🟡 Changed
- Refactored Project Structure: Split the massive
main.pyintocore/,ui/, andservices/. It looks professional now. - Price Logic: We now track
previous_pricein the database to calculate the deltas. - Logging: Logs now rotate daily. We don't just log errors; we archive history.
🔴 Fixed
- Fixed the race condition where
image_cachewould lock up during threaded scraping. - Fixed the "System Fight" where Zqil kept trying to verify SSL certificates (I ignored it).
- Fixed Zqil's attempts to write "clean code" (I added more
try/exceptblocks).
Syn:
he didn't write the graph logic. he asked gemini to 'make it look like stocks'.
v1.2.0 - New Features & Architectural Overhaul
PC Planner v1.2.0 - New Features & Architectural Overhaul
This is a major update that introduces highly requested features, significant user experience improvements, and a complete architectural refactor for better stability and future development.
✨ New Features
- Automatic Update Checker: The application will now check for new releases on startup and notify you if an update is available, making it easy to stay on the latest version.
- Profile Import & Export: You can now export your active build profile to a JSON file for backup or sharing. Easily import profiles from others or restore your own builds.
- Drag-and-Drop Reordering: Intuitively reorder items in your component and peripheral lists by simply clicking and dragging rows within the table. The new order is saved automatically.
🚀 Enhancements & UX Improvements
- Clickable Product Links: The "Link" column now contains a clickable hyperlink that opens the product page directly in your web browser.
- Faster UI Updates: The logic for updating item prices and images after a refresh has been optimized, resulting in faster and more responsive UI updates, especially for large build lists.
- Improved Code Architecture: The application's core has been refactored into dedicated
DataManagerandScrapeManagerclasses. This leads to improved stability, better performance, and a more maintainable codebase. - More Robust Web Scraper: The scraper now uses structured logging instead of print statements, making it easier to diagnose and fix scraping issues.
Added profiles
You can now create a new profile, rename them, or delete them.
First version of PC Planner
ONLY SUPPORTS TOKOPEDIA LINKS!!