Skip to content

Releases: Syntax-Free/pcplanner

Multiyt-dlp v1.3.2 - The "Paranoia" Update

17 Jan 19:40

Choose a tag to compare

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_DOMAINS and is_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) and MAX_IMPORT_ITEMS (1000).
  • XSS/Injection: Applied html.escape to 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-Length headers 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-Free for this long bruh.

🟢 Added

  • Secure Link Activation: A QMessageBox confirmation when opening external links.
  • Validation: Added checks for http/https schemes on all inputs.

Multiyt-dlp v1.3.1 - The IncompetenceBuffer

17 Jan 18:16

Choose a tag to compare

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 None values, 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 IntegrityError that 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

16 Jan 09:14

Choose a tag to compare

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-check

N 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.json and 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.log instead of vanishing silently.

🟡 Changed

  • Refactored Project Structure: Split the massive main.py into core/, ui/, and services/. It looks professional now.
  • Price Logic: We now track previous_price in 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_cache would 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/except blocks).

Syn: he didn't write the graph logic. he asked gemini to 'make it look like stocks'.

v1.2.0 - New Features & Architectural Overhaul

02 Oct 11:34
2a8a5ee

Choose a tag to compare

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 DataManager and ScrapeManager classes. 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

21 Sep 15:22
b1c5a28

Choose a tag to compare

You can now create a new profile, rename them, or delete them.

First version of PC Planner

31 Aug 07:10
2a6c689

Choose a tag to compare

ONLY SUPPORTS TOKOPEDIA LINKS!!