persian-clock-widget 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Shayan Bamyar (® Shayan Bamyar)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,128 @@
1
+ <div dir="rtl">
2
+
3
+ # 🐧 راهنمای نصب و اجرا در لینوکس — ویجت ساعت تهران، تقویم شمسی و آلارم
4
+
5
+ **طراحی و توسعه:** شایان بامیار (`® Shayan Bamyar`)
6
+
7
+ این راهنما نحوه نصب، اجرا، فعال‌سازی اجرای خودکار (Startup) و حذف برنامه **Persian Clock & Calendar** را روی تمام توزیع‌های لینوکس توضیح می‌دهد.
8
+
9
+ ---
10
+
11
+ ## 📦 روش ۱: نصب روی اوبونتو، دبیان، مینت و Pop!_OS (فایل `.deb`) — پیشنهادی
12
+
13
+ فایل **[`release/linux/persian-clock-widget_1.0.0_all.deb`](release/linux/persian-clock-widget_1.0.0_all.deb)** را دانلود کنید و با **دابل‌کلیک** یا از طریق ترمینال نصب کنید:
14
+
15
+ ```bash
16
+ sudo apt update
17
+ sudo apt install ./persian-clock-widget_1.0.0_all.deb
18
+ ```
19
+
20
+ **کارهایی که این بسته خودکار انجام می‌دهد:**
21
+ - نصب پیش‌نیاز `python3-tk` (در صورت نبودن)
22
+ - نصب برنامه در `/opt/persian-clock-widget`
23
+ - نصب فونت‌های فارسی (`Vazir`, `B Yekan+`, `Iranian Sans`) و به‌روزرسانی `fc-cache`
24
+ - ساخت آیکون و میانبر در منوی برنامه‌ها (**Applications Menu**) با نام `Persian Clock & Calendar`
25
+ - ایجاد دستور ترمینال `persian-clock-widget`
26
+
27
+ **اجرا پس از نصب:**
28
+ - از منوی برنامه‌های سیستم روی **Persian Clock & Calendar** کلیک کنید، یا در ترمینال بزنید:
29
+ ```bash
30
+ persian-clock-widget
31
+ ```
32
+
33
+ ---
34
+
35
+ ## 🚀 روش ۲: نصب‌کننده تک‌فایلی روی تمام توزیع‌های لینوکس (`.sh`)
36
+
37
+ مناسب برای **Ubuntu, Debian, Arch, Manjaro, Fedora, openSUSE** و هر توزیع دیگر؛ فقط فایل **[`release/linux/PersianClockWidget-Linux-Installer.sh`](release/linux/PersianClockWidget-Linux-Installer.sh)** را اجرا کنید:
38
+
39
+ ```bash
40
+ bash PersianClockWidget-Linux-Installer.sh
41
+ ```
42
+
43
+ **کارهایی که نصب‌کننده انجام می‌دهد:**
44
+ 1. بررسی وجود `python3` و `tkinter`
45
+ 2. استخراج برنامه در `~/.local/share/persian-clock-widget`
46
+ 3. نصب فونت‌های فارسی در `~/.local/share/fonts/PersianClockWidget`
47
+ 4. ساخت میانبر منوی برنامه‌ها و فعال‌سازی اجرای خودکار با شروع لینوکس (`~/.config/autostart/persian-clock-widget.desktop`)
48
+ 5. اجرای فوری ویجت
49
+
50
+ ---
51
+
52
+ ## 📁 روش ۳: اجرای پرتابل بدون نصب (از سورس یا آرشیو `tar.gz`)
53
+
54
+ اگر فایل **[`release/linux/PersianClockWidget-linux-portable.tar.gz`](release/linux/PersianClockWidget-linux-portable.tar.gz)** را دارید:
55
+
56
+ ```bash
57
+ tar -xzf PersianClockWidget-linux-portable.tar.gz
58
+ cd persian-clock-widget
59
+ ./scripts/run_linux.sh
60
+ ```
61
+
62
+ ### پیش‌نیازها (در صورت اجرای مستقیم از سورس):
63
+ - **Ubuntu / Debian / Mint:**
64
+ ```bash
65
+ sudo apt install python3 python3-tk mpv
66
+ ```
67
+ - **Fedora:**
68
+ ```bash
69
+ sudo dnf install python3 python3-tkinter mpv
70
+ ```
71
+ - **Arch / Manjaro:**
72
+ ```bash
73
+ sudo pacman -S python tk mpv
74
+ ```
75
+ > **نکته صوتی:** برای پخش صدای MP3 آلارم‌ها در لینوکس، کافی است یکی از پخش‌کننده‌های سبک `mpv`، `ffmpeg` (`ffplay`)، `mpg123` یا `vlc` (`cvlc`) روی سیستم نصب باشد.
76
+
77
+ ---
78
+
79
+ ## 🔨 ساخت فایل اجرایی تک‌فایلی بومی لینوکس (اختیاری)
80
+
81
+ اگر می‌خواهید یک فایل اجرایی باینری تک‌فایلی (`ELF`) مخصوص سیستم خود بسازید:
82
+
83
+ ```bash
84
+ ./scripts/build_linux.sh
85
+ ```
86
+ خروجی در مسیر `release/PersianClockWidget-linux` و `release/PersianClockWidget-linux.tar.gz` ساخته می‌شود.
87
+
88
+ ---
89
+
90
+ ## ⚙️ اجرای خودکار با بالا آمدن لینوکس (`Startup`)
91
+
92
+ برای فعال یا غیرفعال کردن اجرای خودکار برنامه هنگام روشن شدن سیستم:
93
+ 1. روی آیکون **`⚙` (تنظیمات)** در ویجت کلیک کنید و تیک **«🚀 اجرا خودکار ویجت هم‌زمان با بالا آمدن لینوکس (Startup)»** را بزنید؛ **یا**
94
+ 2. روی ویجت **راست‌کلیک** کرده و گزینه **«🚀 اجرا خودکار با شروع لینوکس»** را بزنید.
95
+
96
+ > فایل تنظیمات اتواستارت در مسیر `~/.config/autostart/persian-clock-widget.desktop` ساخته می‌شود.
97
+
98
+ ---
99
+
100
+ ## 📂 مسیر ذخیره تنظیمات، آلارم‌ها و مناسبت‌های شخصی
101
+
102
+ - در نصب سیستمی (`.deb`) یا اجرای باینری، اطلاعات کاربر (تنظیمات، آلارم‌ها و تولدهای ثبت‌شده) بدون نیاز به دسترسی `root` در مسیر زیر ذخیره می‌شوند:
103
+ ```text
104
+ ~/.local/share/PersianClockWidget/data/
105
+ ├── config.json
106
+ ├── alarms.json
107
+ └── custom_occasions.json
108
+ ```
109
+ - در اجرای پرتابل از پوشه پروژه، داده‌ها در پوشه `data/` کنار برنامه ذخیره می‌شوند.
110
+
111
+ ---
112
+
113
+ ## 🗑 حذف برنامه (`Uninstall`)
114
+
115
+ - **اگر با `.deb` نصب کرده‌اید:**
116
+ ```bash
117
+ sudo apt remove persian-clock-widget
118
+ ```
119
+ - **اگر با `.sh` نصب کرده‌اید:**
120
+ ```bash
121
+ rm -rf ~/.local/share/persian-clock-widget \
122
+ ~/.local/bin/persian-clock-widget \
123
+ ~/.local/share/applications/persian-clock-widget.desktop \
124
+ ~/.config/autostart/persian-clock-widget.desktop \
125
+ ~/.local/share/fonts/PersianClockWidget
126
+ ```
127
+
128
+ </div>
package/README.md CHANGED
@@ -1,3 +1,264 @@
1
- # Temporary Holding Version
1
+ <div dir="rtl" align="center">
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ <img src="assets/icons/app_icon.png" alt="Persian Clock & Calendar Widget Icon" width="128" height="128" />
4
+
5
+ # ویجت حرفه‌ای ساعت تهران، تقویم شمسی و سیستم یادآور ویندوز
6
+ ### **Persian Clock, Jalali Calendar & Smart Alarm Desktop Widget**
7
+
8
+ [![Platform](https://img.shields.io/badge/Platform-Windows%2010%20%7C%2011-0078D6?style=for-the-badge&logo=windows&logoColor=white)](#)
9
+ [![Python](https://img.shields.io/badge/Python-3.10%2B-3776AB?style=for-the-badge&logo=python&logoColor=white)](#)
10
+ [![Offline](https://img.shields.io/badge/Mode-100%25%20Offline-10B981?style=for-the-badge)](#)
11
+ [![License](https://img.shields.io/badge/License-MIT-F59E0B?style=for-the-badge)](LICENSE)
12
+ [![Author](https://img.shields.io/badge/Author-%C2%AE%20Shayan%20Bamyar-38BDF8?style=for-the-badge)](#)
13
+
14
+ **یک ویجت دسکتاپ فوق‌سبک، مینیمال، کاملاً آفلاین و قابل شخصی‌سازی برای ویندوز**
15
+ شامل ساعت دقیق به وقت تهران، تاریخ هجری شمسی، مناسبت‌ها و تعطیلات رسمی، تقویم ماهانه بازشونده، سیستم آلارم با ۶ صدای MP3 داخلی (پیش‌فرض: `heeeeyyyyy.mp3`) و زنگوله متحرک، و ابزار کپی زمان مخصوص برنامه‌نویسان.
16
+
17
+ ---
18
+
19
+ </div>
20
+
21
+ <div dir="rtl">
22
+
23
+ ## 📌 فهرست مطالب
24
+ - [معرفی و ویژگی‌های کلیدی](#-معرفی-و-ویژگیهای-کلیدی)
25
+ - [ساختار پوشه‌ها و معماری پروژه](#-ساختار-پوشهها-و-معماری-پروژه)
26
+ - [نحوه دانلود و اجرای سریع (بدون نیاز به پایتون)](#-نحوه-دانلود-و-اجرای-سریع-بدون-نیاز-به-پایتون)
27
+ - [راهنمای کامل امکانات و نحوه کارکرد](#-راهنمای-کامل-امکانات-و-نحوه-کارکرد)
28
+ - [۱. دکمه قفل هوشمند (🔒/🔓) و عبوردهی کلیک (Click-Through)](#۱-دکمه-قفل-هوشمند--و-عبوردهی-کلیک-click-through)
29
+ - [۲. کنترل لایه نمایش (Z-Index)](#۲-کنترل-لایه-نمایش-z-index)
30
+ - [۳. تقویم ماهانه بازشونده (Extend) و مناسبت‌ها](#۳-تقویم-ماهانه-بازشونده-extend-و-مناسبتها)
31
+ - [۴. سیستم رویداد، یادآور و آلارم (⏰) با زنگوله متحرک و صداهای MP3](#۴-سیستم-رویداد-یادآور-و-آلارم--با-زنگوله-متحرک-و-صداهای-mp3)
32
+ - [۵. ابزار کپی زمان برای برنامه‌نویسان (📋)](#۵-ابزار-کپی-زمان-برای-برنامهنویسان-)
33
+ - [۶. پنجره تنظیمات ظاهری، رنگ، سایز و فونت (⚙)](#۶-پنجره-تنظیمات-ظاهری-رنگ-سایز-و-فونت-)
34
+ - [اجرا از طریق سورس کد پایتون](#-اجرا-از-طریق-سورس-کد-پایتون)
35
+ - [نحوه ساخت مجدد فایل اجرایی (`.exe`)](#-نحوه-ساخت-مجدد-فایل-اجرایی-exe)
36
+ - [طراح و توسعه‌دهنده (حق ناشر)](#-طراح-و-توسعهدهنده-حق-ناشر)
37
+
38
+ ---
39
+
40
+ ## ✨ معرفی و ویژگی‌های کلیدی
41
+
42
+ | ویژگی | توضیحات |
43
+ | :--- | :--- |
44
+ | 🕒 **ساعت دقیق تهران (`UTC+03:30`)** | محاسبه مستقل از منطقه زمانی ویندوز؛ نمایش همیشه دقیق ساعت رسمی ایران |
45
+ | 📅 **تقویم شمسی و قمری ۱۰۰٪ آفلاین** | دیتابیس کامل مناسبت‌های ملی، باستانی و مذهبی ایران و تشخیص روزهای تعطیل رسمی بدون نیاز به اینترنت |
46
+ | 🖋 **خط دور مشکی (`Black Outline`) و ابعاد پویا** | رسم حاشیه مشکی دور تمام اعداد و نوشته‌ها برای خوانایی کامل روی هر والپیپر + محاسبه خودکار ابعاد برای جلوگیری از بریده شدن متون در فونت‌های بسیار کوچک یا بزرگ |
47
+ | 🔒 **قفل هوشمند و عبوردهی کلیک (`Click-Through`)** | قرارگیری دکمه قفل در بالا-چپ داخل ویجت؛ در حالت قفل، کلیک ماوس در ناحیه مشترک مستقیماً روی اپلیکیشن زیرین کار می‌کند و **فقط خود دکمه قفل** قابل کلیک است |
48
+ | ⏰ **سیستم آلارم و یادآور حرفه‌ای + تقویم چندانتخابی** | انتخاب روزها به شکل **تقویم گرافیکی چندانتخابی (Multi-Select)**، هر روز یا روزهای خاص هفته، با ۶ صدای MP3 داخلی (پیش‌فرض `heeeeyyyyy.mp3`)، زنگوله متحرک مرکز صفحه و **حذف خودکار آلارم‌های منقضی‌شده** |
49
+ | 📋 **ابزار کپی ۱۰ فرمت زمان API + تولیدکننده GUID** | کپی سریع **۱۰ فرمت پرکاربرد تاریخ و ساعت برای پر کردن APIها** (تاریخ و ساعت با هم، تاریخ جدا، ساعت جدا، تایم‌استمپ) + **تولید و کپی فوری `GUID / UUID v4`** |
50
+ | 🔤 **فونت پیش‌فرض وزیر (`Vazir`) + فونت‌های باندل‌شده** | تنظیم پیش‌فرض روی فونت **وزیر (`Vazir`)** به همراه فونت‌های **بی‌یکان پلاس (`B Yekan+`)** و **ایرانیان سنس (`A Iranian Sans`)** در داخل فایل `.exe` بدون نیاز به نصب فونت در ویندوز |
51
+ | ✨ **افکت Hover و راهنمای شناور (Tooltip)** | تغییر رنگ زیبا و نمایش توضیحات شناور هنگام نگه داشتن ماوس روی تمام آیکون‌های ویجت و تقویم |
52
+ | ⭐ **جایگزینی کامل ساعت و تاریخ ویندوز در تسک‌بار (با یک تیک)** | پوشاندن ۱۰۰٪ مات ساعت و تاریخ پیش‌فرض انگلیسی ویندوز با ساعت دقیق تهران و تاریخ شمسی در گوشه تسک‌بار؛ با کلیک چپ تقویم بالای ساعت باز می‌شود، با راست‌کلیک تنظیمات در دسترس است و ماوس روی آن Hover و Tooltip دارد + امکان مخفی کردن ویجت دسکتاپ و نمایش اختصاصی در تسک‌بار |
53
+ | 👻 **اجرا در پس‌زمینه (فقط در Hidden Icons)** | بدون اشغال هیچ فضایی در نوار وظیفه (`Taskbar`) یا `Alt+Tab`؛ حضور تمیز در بخش `System Tray` کنار ساعت ویندوز با قابلیت اجرا در `Startup` |
54
+
55
+ ---
56
+
57
+ ## 📂 ساختار پوشه‌ها و معماری پروژه
58
+
59
+ پروژه با ساختار ماژولار و استاندارد زیر سازماندهی شده است و فایل اجرایی مستقل در پوشه مجزای `release/` قرار دارد:
60
+
61
+ ```text
62
+ persian-clock-widget/
63
+ ├── assets/ # منابع گرافیکی، فونت‌ها و فایل‌های صوتی باندل‌شده
64
+ │ ├── fonts/ # فونت‌های فارسی داخلی (بدون نیاز به نصب در ویندوز)
65
+ │ │ ├── BYekan+ Bold.ttf
66
+ │ │ ├── Iranian Sans.ttf
67
+ │ │ └── Vazir-Medium.ttf
68
+ │ ├── icons/ # آیکون‌های اختصاصی برنامه و System Tray
69
+ │ │ ├── app_icon.ico
70
+ │ │ └── app_icon.png
71
+ │ └── sounds/ # فایل‌های صوتی MP3 آلارم (پیش‌فرض: heeeeyyyyy.mp3)
72
+ │ ├── heeeeyyyyy.mp3 # ⭐ صدای پیش‌فرض آلارم
73
+ │ ├── alarm.mp3
74
+ │ ├── axel.mp3
75
+ │ ├── liilililililililii.mp3
76
+ │ ├── morning_glory.mp3
77
+ │ └── peter_axel_f.mp3
78
+ ├── data/ # محل ذخیره تنظیمات کاربر، آلارم‌ها و مناسبت‌های شخصی
79
+ │ ├── alarms.json # لیست رویدادها و آلارم‌های ثبت‌شده توسط کاربر
80
+ │ ├── config.json # تنظیمات ظاهری، مکان، رنگ‌ها و فونت
81
+ │ └── custom_occasions.json # فایل افزودن مناسبت‌های شخصی آفلاین
82
+ ├── release/ # 📦 خروجی‌های نهایی ویندوز و لینوکس
83
+ │ ├── windows/ # نسخه مستقل ویندوز (Portable EXE & ZIP)
84
+ │ │ ├── PersianClockWidget.exe
85
+ │ │ └── PersianClockWidget.zip
86
+ │ └── linux/ # بسته‌های نصبی و پرتابل لینوکس
87
+ │ ├── persian-clock-widget_1.0.0_all.deb
88
+ │ ├── PersianClockWidget-Linux-Installer.sh
89
+ │ ├── PersianClockWidget-linux-portable.tar.gz
90
+ │ └── INSTALL-LINUX.txt # نوت دستورات سریع نصب در لینوکس
91
+ ├── scripts/ # اسکریپت ساخت فایل اجرایی
92
+ │ └── build_exe.bat # اسکریپت کامپایل خودکار به فایل exe در پوشه release/
93
+ ├── src/ # کدهای منبع اصلی برنامه (Source Code)
94
+ │ ├── __init__.py
95
+ │ ├── alarm_manager.py # مدیریت آلارم‌ها، پخش صدا و پاپ‌آپ زنگوله متحرک
96
+ │ ├── calendar_data.py # مبدل تقویم شمسی/قمری/میلادی و دیتابیس مناسبت‌ها
97
+ │ ├── icon_generator.py # تولیدکننده آیکون برداری ساعت و تقویم فارسی
98
+ │ ├── widget.py # رابط گرافیکی اصلی ویجت، تقویم ماهانه و پنجره تنظیمات
99
+ │ ├── taskbar_clock.py # ساعت روی تسک‌بار و آیکون برنامه در تسک‌بار
100
+ │ └── win_utils.py # توابع Win32 API (Z-Index، Click-Through، فونت، صدا و Tray)
101
+ ├── .gitignore
102
+ ├── LICENSE # مجوز انتشار MIT (® Shayan Bamyar)
103
+ ├── main.py # نقطه ورود اصلی برنامه (Main Entry Point)
104
+ ├── requirements.txt # وابستگی‌های پایتون برای توسعه
105
+ └── README.md # مستندات کامل پروژه
106
+ ```
107
+
108
+ ---
109
+
110
+ ## 🚀 نحوه دانلود و اجرای سریع (بدون نیاز به پایتون)
111
+
112
+ اگر نمی‌خواهید پایتون یا هیچ پیش‌نیازی روی سیستم نصب کنید:
113
+ 1. وارد پوشه **[`release/windows/`](release/windows/)** شوید.
114
+ 2. فایل **[`PersianClockWidget.exe`](release/windows/PersianClockWidget.exe)** را اجرا کنید (می‌توانید این تک‌فایل را به هر کامپیوتر دیگری هم منتقل کنید؛ تمام فونت‌ها، آیکون‌ها و صداهای آلارم در داخل خود فایل `.exe` قرار دارند).
115
+ 3. ویجت در گوشه بالا-راست مانیتور ظاهر می‌شود و آیکون آن در بخش **Hidden Icons (کنار ساعت ویندوز)** قرار می‌گیرد.
116
+
117
+ ---
118
+
119
+ ## 📖 راهنمای کامل امکانات و نحوه کارکرد
120
+
121
+ ### ۱. دکمه قفل هوشمند (`🔒` / `🔓`)، حذف فضای خالی و چسبیدن به لبه مانیتور
122
+ در گوشه **بالا-سمت چپ در داخل ویجت** یک دکمه کوچک قفل قرار دارد:
123
+ - **حالت باز (`🔓` آبی)**:
124
+ - می‌توانید ویجت را با کشیدن ماوس (**Drag & Drop**) در هر نقطه‌ای از مانیتور قرار دهید (مختصات به صورت خودکار ذخیره می‌شود).
125
+ - نوار دکمه‌های `◂ تقویم`، `📋`، `GUID`، `⏰`، `⚙` و `🗕` (مینیمایز) در کنار دکمه قفل نمایش داده می‌شوند و قابل کلیک هستند.
126
+ - **حالت قفل و فیکس هوشمند (`🔒` طلایی)**:
127
+ - با کلیک روی `🔓`، تقویم باز خودکار بسته می‌شود و نوار دکمه‌ها مخفی می‌گردد.
128
+ - **حذف کامل فضای خالی و حداقل اندازه (Ultra-Minimal)**: ابعاد ویجت دقیقاً به اندازه متن ساعت و تاریخ کوچک شده و نوشته فوتر (`® Shayan Bamyar`) در حالت قفل محو می‌شود تا کمترین فضای ممکن را از صفحه اشغال کند.
129
+ - **چسبیدن خودکار به لبه صفحه (Smart Edge Docking)**: اگر ویجت در نیمه راست صفحه باشد کاملاً به **لبه راست مانیتور** می‌چسبد و اگر در نیمه چپ باشد به **لبه چپ مانیتور** متصل می‌شود.
130
+ - پنجره ویجت با ویژگی سیستمی `WS_EX_TRANSPARENT | WS_EX_LAYERED` ویندوز کاملاً **Click-Through (عبوردهنده کلیک)** می‌شود؛ یعنی کلیک در ناحیه مشترک مستقیماً روی اپلیکیشن زیرین کار می‌کند و هیچ جای ویجت به‌جز **خود دکمه کوچک قفل (`🔒`)** کلیک را جذب نمی‌کند.
131
+ - هر زمان که دوباره روی دکمه `🔒` کلیک کنید، ویجت از حالت قفل خارج شده و نوار ابزار در دسترس قرار می‌گیرد.
132
+
133
+ ### ۱.۱. قابلیت مینیمایز (مخفی کردن از صفحه؛ فقط در تسک‌بار و Hidden Icons)
134
+ - با کلیک روی دکمه **`🗕`** (یا از منوی راست‌کلیک)، پنجره ویجت از روی صفحه دسکتاپ محو شده و **فقط در تسک‌بار و بخش Hidden Icons (کنار ساعت ویندوز)** قرار می‌گیرد.
135
+ - با یک کلیک روی آیکون برنامه در تسک‌بار یا آیکون Tray، ویجت بلافاصله به مکان قبلی خود بازمی‌گردد.
136
+
137
+ ### ۲. کنترل لایه نمایش (`Z-Index`)
138
+ از طریق پنجره تنظیمات (`⚙`) یا منوی راست‌کلیک می‌توانید نحوه قرارگیری ویجت نسبت به سایر پنجره‌ها را تعیین کنید:
139
+ - **همیشه روی تمام برنامه‌ها (`Topmost` - پیش‌فرض)**: حتی اگر برنامه جدیدی باز شود، ویجت روی آن باقی می‌ماند.
140
+ - **چسبیده به والپیپر دسکتاپ (`Desktop`)**: ویجت مانند گجت‌های کلاسیک ویندوز روی تصویر زمینه دسکتاپ و در پشت پنجره‌های باز قرار می‌گیرد.
141
+
142
+ ### ۳. تقویم ماهانه بازشونده (`Extend`) و مناسبت‌ها
143
+ - با کلیک روی دکمه **`◂ تقویم`** (یا دابل‌کلیک روی ویجت)، پنل کامل تقویم ماهانه در کنار ویجت باز می‌شود.
144
+ - با دکمه‌های `‹` و `›` می‌توانید ماه‌های سال را ورق بزنید و با دکمه **`امروز`** به تاریخ جاری برگردید.
145
+ - روزهای تعطیل رسمی و جمعه‌ها با **رنگ قرمز مرجانی** و روزهای دارای مناسبت یا یادآور شخصی با **نقطه رنگی (`•`)** در زیر عدد روز مشخص می‌شوند.
146
+ - با **کلیک روی هر روز از ماه**، مناسبت‌های شمسی و قمری و آلارم‌های ثبت‌شده آن روز در پایین تقویم نمایش داده می‌شوند.
147
+ - اگر روزی هیچ مناسبتی نداشته باشد، هیچ عبارت اضافه‌ای (مانند «بدون مناسبت») نوشته نمی‌شود و فضای ویجت به شکل مینیمال جمع می‌شود.
148
+ - **🎂 ثبت مناسبت‌های شخصی و تولد دوستان + آلارم خودکار ۱ روز قبل**:
149
+ - با کلیک روی دکمه **`🎂 + مناسبت / تولد`** در پایین تقویم (یا از منوی راست‌کلیک)، می‌توانید روز تولد دوستان، سالگردها یا تعطیلات شخصی را برای هر روز و ماه شمسی روی تقویم ثبت کنید.
150
+ - با فعال ماندن تیک **«ثبت خودکار آلارم یادآور ۱ روز قبل (تکرار سالانه)»**، برنامه به‌صورت خودکار هر سال یک روز قبل از تاریخ تولد/مناسبت (حتی اگر روز اول ماه باشد، در روز آخر ماه قبل) در ساعت دلخواه شما آلارم می‌گذارد تا هرگز تولدی را فراموش نکنید.
151
+
152
+ ### ۴. سیستم رویداد، یادآور و آلارم (`⏰`) با تقویم چندانتخابی و حذف خودکار
153
+ با کلیک روی دکمه **`⏰`** در بالای ویجت (یا دکمه **`⏰ + ثبت آلارم / رویداد`** در پایین تقویم ماهانه)، پنجره مدیریت آلارم‌ها باز می‌شود:
154
+ - **تعیین متن و ساعت**: می‌توانید عنوان/متن دلخواه و ساعت و دقیقه دقیق (به وقت تهران) را وارد کنید.
155
+ - **۳ حالت زمان‌بندی و تکرار**:
156
+ 1. **انتخاب از روی تقویم (تک‌روز یا چند روز خاص - Multi-Select)**: یک تقویم شمسی گرافیکی و تعاملی باز می‌شود که می‌توانید با کلیک روی روزهای مختلف (حتی در ماه‌های مختلف)، **یک یا چند روز خاص** را هم‌زمان انتخاب یا از انتخاب خارج کنید.
157
+ 2. **هر روز (`Daily`)**: تکرار روزانه در ساعت مشخص‌شده.
158
+ 3. **روزهای خاص هفته (`Weekly`)**: انتخاب یک یا چند روز از هفته (مثلاً **هر دوشنبه** و **هر چهارشنبه**).
159
+ - **انتخاب صدای آلارم MP3 و تست زنده**:
160
+ - شامل ۶ صدای آلارم داخلی (`heeeeyyyyy.mp3` به عنوان پیش‌فرض، `alarm.mp3`، `axel.mp3`، `liilililililililii.mp3`، `morning_glory.mp3` و `peter_axel_f.mp3`).
161
+ - با دکمه **`▶ تست صدا`** می‌توانید صدای انتخابی را قبل از ذخیره گوش دهید و با دکمه **`🔔 پیش‌نمایش زنگوله + صدا`** کل هشدار را شبیه‌سازی کنید.
162
+ - **پاپ‌آپ مرکز مانیتور در زمان سررسید و حذف خودکار پس از انقضا**:
163
+ - در لحظه رسیدن زمان آلارم، یک پنجره دارک در **مرکز مانیتور** باز می‌شود که یک **زنگوله طلایی متحرک در حال تکان خوردن و زنگ زدن** به همراه ساعت و متن اختصاصی شما را نمایش می‌دهد و صدای انتخابی را پخش می‌کند.
164
+ - دارای دکمه **`✓ متوجه شدم (قطع آلارم)`** و دکمه **`💤 ۵ دقیقه دیگر (Snooze)`**.
165
+ - **پاک‌سازی هوشمند**: وقتی زمان یک آلارم تاریخ‌محور بگذرد و به تاخیر (`Snooze`) نیفتد، آن تاریخ (یا کل آلارم در صورت تمام شدن تمام روزهای انتخاب‌شده) **به‌طور خودکار از لیست پاک می‌شود** تا لیست آلارم‌ها همیشه تمیز بماند.
166
+ - **مدیریت کامل لیست**: امکان **ویرایش (`✏️`)**، **حذف (`🗑`)** و **فعال/غیرفعال‌سازی** هر یک از آلارم‌ها.
167
+
168
+ ### ۵. ابزار کپی زمان برای برنامه‌نویسان (`📋`) + تولیدکننده `GUID`
169
+ برنامه‌نویسان می‌توانند با کلیک روی آیکون **`📋`** (که با فاصله استاندارد از ویجت باز می‌شود تا روی ساعت را نپوشاند)، **۱۰ فرمت پرکاربرد تاریخ و ساعت برای پر کردن APIها** و همچنین **`GUID (UUID v4)`** را در لحظه کپی کنند:
170
+ - **بخش ۱: تاریخ و ساعت با هم (`Date & Time - API / ISO / DB`)**:
171
+ 1. `ISO-8601 UTC (ms)`: فرمت استاندارد جهانی با میلی‌ثانیه (`2026-11-11T06:15:12.340Z`)
172
+ 2. `ISO-8601 Tehran (ms)`: فرمت استاندارد تهران با آفست (`2026-11-11T09:45:12.340+03:30`)
173
+ 3. `SQL / API DateTime`: فرمت دیتابیس و کوئری با میلی‌ثانیه (`2026-11-11 09:45:12.340`)
174
+ 4. `Jalali DateTime (ms)`: تاریخ و ساعت شمسی کامل با میلی‌ثانیه (`1405/08/20 09:45:12.340`)
175
+ - **بخش ۲: فقط تاریخ جدا (`Date Only`)**:
176
+ 5. `Date Only (Gregorian)`: فقط تاریخ میلادی (`2026-11-11`)
177
+ 6. `Date Only (Jalali)`: فقط تاریخ شمسی (`1405/08/20`)
178
+ - **بخش ۳: فقط ساعت جدا (`Time Only`)**:
179
+ 7. `Time Only + ms (Tehran)`: فقط ساعت دقیق به همراه میلی‌ثانیه (`09:45:12.340`)
180
+ 8. `Time Only (HH:MM:SS)`: فقط ساعت استاندارد بدون میلی‌ثانیه (`09:45:12`)
181
+ - **بخش ۴: تایم‌استمپ عددی (`Epoch / Unix Timestamp`)**:
182
+ 9. `Unix Timestamp (ms)`: زمان یونیکس بر حسب میلی‌ثانیه (`1794377712340`)
183
+ 10. `Unix Timestamp (sec)`: زمان یونیکس بر حسب ثانیه (`1794377712`)
184
+ - **بخش ۵: رندر و کپی `GUID / UUID v4`**:
185
+ - `🎲 Render & Copy GUID (v4)`: تولید و کپی GUID استاندارد حروف کوچک (`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`)
186
+ - `🎲 Render GUID (UPPERCASE)`: تولید و کپی GUID با حروف بزرگ
187
+ - `🎲 Render GUID (No Hyphens)`: تولید و کپی GUID ۳۲ کاراکتری بدون خط تیره
188
+ - `🎲 Copy Empty GUID`: کپی GUID صفر (`00000000-0000-0000-0000-000000000000`)
189
+ - **کپی یکجای `JSON`**: گزینه `📦 Copy All as JSON Object` برای کپی تمام مقادیر بالا در یک آبجکت JSON.
190
+
191
+ ### ۶. پنجره تنظیمات ظاهری، رنگ، سایز و فونت (`⚙`)
192
+ با کلیک روی دکمه **`⚙`** (یا از منوی راست‌کلیک در System Tray)، پنجره تنظیمات باز می‌شود و تغییرات را **به صورت زنده (Live Preview)** اعمال می‌کند:
193
+ - **با پس‌زمینه یا بدون پس‌زمینه**: امکان حذف کامل کادر کارت (نمایش فقط نوشته‌ها با خط دور مشکی روی تصویر زمینه) یا تنظیم درصد شفافیت (`Opacity` از ۲۵٪ تا ۱۰۰٪).
194
+ - **انتخاب رنگ مجزا برای تمام بخش‌ها**: انتخابگر رنگ (`Color Picker`) برای **رنگ ساعت**، **رنگ تاریخ شمسی**، **رنگ مناسبت‌ها**، **رنگ روزهای تعطیل**، **رنگ کارت پس‌زمینه** و **رنگ دکمه‌ها**.
195
+ - **تنظیم اندازه کلی ویجت و فونت‌ها**:
196
+ - اسلایدر **بزرگ‌نمایی کلی ویجت** (`70%` تا `170%`).
197
+ - انتخاب **نوع فونت متون و ساعت** (شامل فونت‌های فارسی باندل‌شده `Vazir`، `B Yekan+` و `A Iranian Sans` + فونت‌های سیستم).
198
+ - تنظیم جداگانه **سایز فونت ساعت**، **سایز فونت تاریخ** و **سایز فونت مناسبت**.
199
+ - **نمایش و جایگزینی در تسک‌بار ویندوز** (قابل فعال‌سازی با یک تیک؛ پیش‌فرض خاموش):
200
+ - **⭐ جایگزینی کامل ساعت و تاریخ ویندوز در تسک‌بار (`Replace Windows Clock`)**:
201
+ - **با یک تیک**، پنجره ساعت و تاریخ شمسی مستقیماً **به داخل نوار تسک‌بار ویندوز (`Shell_TrayWnd`) متصل (`SetParent`)** می‌شود تا کاملاً جزئی از تسک‌بار باشد (نه پنجره شناور روی برنامه‌های تمام‌صفحه).
202
+ - **تشخیص خودکار رنگ تسک‌بار (`Auto Theme & Pixel Sample`)**: رنگ پس‌زمینه تسک‌بار ویندوز ۱۰/۱۱ (تم تیره یا روشن) را به‌طور خودکار تشخیص داده و با آن یکدست می‌شود؛ در ویندوز ۱۰ ساعت کلاسیک `TrayClockWClass` را مخفی می‌کند و در ویندوز ۱۱ گزینه مستقیم **حذف ساعت و تاریخ انگلیسی از تسک‌بار (`HideSystrayDateTimeValueName`)** نیز در تنظیمات تعبیه شده است.
203
+ - در دو خط منظم و زیبا: خط بالا ساعت دقیق تهران با خط دور مشکی (`Outlined`) و خط پایین تاریخ شمسی استاندارد (همراه با رنگ تفکیک‌شده روزهای تعطیل) را نمایش می‌دهد.
204
+ - **کلیک چپ**: باز و بسته کردن تقویم ماهانه شمسی دقیقاً بالای ساعت گوشه تسک‌بار (مشابه کلیک روی ساعت ویندوز).
205
+ - **کلیک راست**: دسترسی فوری به منوی کامل برنامه و تنظیمات.
206
+ - **افکت Hover و Tooltip شناور**: با نگه داشتن ماوس، پس‌زمینه هایلایت شده و تولتیپ شناور شامل نام روز، تاریخ کامل و مناسبت روز بالای ساعت نمایش داده می‌شود.
207
+ - **جابه‌جایی دستی (Drag)**: با کلیک و کشیدن ماوس به چپ یا راست، موقعیت قرارگیری روی ساعت ویندوز تنظیم شده و فاصله به صورت خودکار در `config.json` ذخیره می‌شود.
208
+ - **👁️ مخفی کردن ویجت دسکتاپ (اختیاری)**: اگر مایل باشید هیچ ویجت شناوری روی دسکتاپ نباشد و تنها ساعت تسک‌بار نمایش داده شود، با تیک زدن گزینه *«مخفی کردن ویجت دسکتاپ هنگام فعال بودن جایگزینی»*، ویجت شناور مخفی شده و تقویم مستقیماً از روی ساعت تسک‌بار باز و بسته می‌شود.
209
+ - **دکمه‌های بازنشانی و انتخاب رنگ**: دکمه بازنشانی موقعیت به گوشه مانیتور و انتخابگر رنگ پس‌زمینه برای هماهنگی با هر رنگ و پوسته‌ای از ویندوز.
210
+ - **🕒 ساعت و تاریخ شمسی شناور روی تسک‌بار (حالت شفاف)**: ساعت تهران و تاریخ شمسی را با پس‌زمینه شفاف در کنار ساعت ویندوز نمایش می‌دهد.
211
+ - **📌 آیکون برنامه در تسک‌بار**: یک دکمه مجزا در تسک‌بار اضافه می‌کند که با کلیک، تقویم ماهانه باز و بسته می‌شود.
212
+
213
+ ---
214
+
215
+ ## 💻 اجرا از طریق سورس کد پایتون
216
+
217
+ اگر مایل به اجرای مستقیم از روی سورس کد یا توسعه پروژه هستید:
218
+
219
+ ```powershell
220
+ # ۱. نصب پیش‌نیازها
221
+ pip install -r requirements.txt
222
+
223
+ # ۲. اجرای برنامه (با کنسول یا بدون کنسول)
224
+ pythonw main.py
225
+ ```
226
+
227
+ ---
228
+
229
+ ## 🛠 نحوه ساخت مجدد فایل اجرایی (`.exe` و خروجی لینوکس)
230
+
231
+ ### ویندوز:
232
+ برای کامپایل مجدد پروژه و ساخت فایل تک‌فایلی `PersianClockWidget.exe` در پوشه `release/` (به همراه تعبیه خودکار فونت‌ها، آیکون و صداهای MP3)، کافی است اسکریپت زیر را اجرا کنید:
233
+
234
+ ```bat
235
+ scripts\build_exe.bat
236
+ ```
237
+ پس از اتمام، فایل اجرایی مستقل در مسیر `release\PersianClockWidget.exe` آماده خواهد بود.
238
+
239
+ ### لینوکس (`Linux`):
240
+ > 🐧 **راهنمای کامل و اختصاصی نصب و اجرا در لینوکس:** [README-LINUX.md](README-LINUX.md)
241
+
242
+ دو فایل نصبی آماده برای لینوکس در پوشه `release/linux/` قرار دارد:
243
+ 1. **فایل نصبی دبیان / اوبونتو (`.deb`)**: [persian-clock-widget_1.0.0_all.deb](release/linux/persian-clock-widget_1.0.0_all.deb)
244
+ ```bash
245
+ sudo apt install ./persian-clock-widget_1.0.0_all.deb
246
+ ```
247
+ *(پیش‌نیاز `python3-tk`، فونت‌های وزیر، آیکون و میانبر منوی برنامه‌ها را خودکار نصب می‌کند).*
248
+ 2. **نصب‌کننده تک‌فایلی تمام توزیع‌ها (`.sh`)**: [PersianClockWidget-Linux-Installer.sh](release/linux/PersianClockWidget-Linux-Installer.sh)
249
+ ```bash
250
+ bash PersianClockWidget-Linux-Installer.sh
251
+ ```
252
+ *(فایل‌ها، فونت‌ها، میانبر منوی برنامه‌ها و اجرای خودکار با شروع لینوکس را نصب و بلافاصله اجرا می‌کند).*
253
+ 3. **نوت دستورات سریع نصب**: [INSTALL-LINUX.txt](release/linux/INSTALL-LINUX.txt)
254
+
255
+ گزینه **«اجرا خودکار با شروع ویندوز / لینوکس (Startup)»** هم در پنجره تنظیمات (`⚙`) و هم در منوی راست‌کلیک در دسترس است.
256
+
257
+ ---
258
+
259
+ ## 👨‍💻 طراح و توسعه‌دهنده (حق ناشر)
260
+
261
+ طراحی، معماری و توسعه توسط **شایان بامیار (`® Shayan Bamyar`)** انجام شده است.
262
+ منتشر شده تحت مجوز [MIT License](LICENSE).
263
+
264
+ </div>
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+
4
+ const { spawn, spawnSync } = require("child_process");
5
+ const fs = require("fs");
6
+ const path = require("path");
7
+
8
+ const rootDir = path.resolve(__dirname, "..");
9
+ const winExe = path.join(rootDir, "release", "windows", "PersianClockWidget.exe");
10
+ const mainPy = path.join(rootDir, "main.py");
11
+
12
+ function launchDetached(cmd, args, cwd) {
13
+ const child = spawn(cmd, args, {
14
+ cwd,
15
+ detached: true,
16
+ stdio: "ignore",
17
+ windowsHide: false,
18
+ });
19
+ child.unref();
20
+ }
21
+
22
+ if (process.platform === "win32" && fs.existsSync(winExe)) {
23
+ console.log("Launching Persian Clock & Calendar Widget (Windows)...");
24
+ launchDetached(winExe, [], rootDir);
25
+ process.exit(0);
26
+ }
27
+
28
+ const pyCandidates = process.platform === "win32" ? ["python", "python3", "py"] : ["python3", "python"];
29
+ let pyBin = null;
30
+
31
+ for (const candidate of pyCandidates) {
32
+ const res = spawnSync(candidate, ["--version"], { stdio: "ignore" });
33
+ if (res.status === 0) {
34
+ pyBin = candidate;
35
+ break;
36
+ }
37
+ }
38
+
39
+ if (!pyBin) {
40
+ console.error("Error: Python 3 is required on this platform.");
41
+ if (process.platform === "linux") {
42
+ console.error("Install it with: sudo apt install python3 python3-tk");
43
+ }
44
+ process.exit(1);
45
+ }
46
+
47
+ const tkCheck = spawnSync(pyBin, ["-c", "import tkinter"], { stdio: "ignore" });
48
+ if (tkCheck.status !== 0) {
49
+ console.error("Error: python3-tk (Tkinter) is not installed.");
50
+ if (process.platform === "linux") {
51
+ console.error(" Ubuntu/Debian: sudo apt update && sudo apt install -y python3-tk");
52
+ console.error(" Fedora: sudo dnf install -y python3-tkinter");
53
+ console.error(" Arch/Manjaro: sudo pacman -S tk");
54
+ }
55
+ process.exit(1);
56
+ }
57
+
58
+ console.log("Launching Persian Clock & Calendar Widget...");
59
+ launchDetached(pyBin, [mainPy], rootDir);
60
+ process.exit(0);
package/main.py ADDED
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ نقطه ورود اصلی برنامه (Main Entry Point)
5
+ ویجت ساعت تهران، تقویم شمسی، مناسبت‌ها و سیستم یادآور ویندوز
6
+ طراحی و توسعه: شایان بامیار (® Shayan Bamyar)
7
+ """
8
+
9
+ import os
10
+ import sys
11
+
12
+ # افزودن پوشه ریشه پروژه به مسیر جستجوی ماژول‌ها
13
+ ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
14
+ if ROOT_DIR not in sys.path:
15
+ sys.path.insert(0, ROOT_DIR)
16
+
17
+ from src.widget import PersianClockWidget
18
+
19
+
20
+ def main():
21
+ app = PersianClockWidget()
22
+ app.run()
23
+
24
+
25
+ if __name__ == "__main__":
26
+ main()
package/package.json CHANGED
@@ -1,6 +1,41 @@
1
1
  {
2
2
  "name": "persian-clock-widget",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "1.0.0",
4
+ "description": "Tehran Clock, Jalali Calendar, Personal Birthdays & Alarms Desktop Widget for Windows and Linux",
5
+ "bin": {
6
+ "persian-clock-widget": "bin/persian-clock.js",
7
+ "persian-clock": "bin/persian-clock.js"
8
+ },
9
+ "files": [
10
+ "bin/",
11
+ "src/",
12
+ "assets/",
13
+ "main.py",
14
+ "requirements.txt",
15
+ "README.md",
16
+ "README-LINUX.md",
17
+ "LICENSE",
18
+ "release/windows/PersianClockWidget.exe"
19
+ ],
20
+ "keywords": [
21
+ "persian",
22
+ "clock",
23
+ "jalali",
24
+ "shamsi",
25
+ "calendar",
26
+ "widget",
27
+ "tehran",
28
+ "alarm",
29
+ "windows",
30
+ "linux"
31
+ ],
32
+ "author": "Shayan Bamyar",
33
+ "license": "MIT",
34
+ "os": [
35
+ "win32",
36
+ "linux"
37
+ ],
38
+ "engines": {
39
+ "node": ">=16.0.0"
40
+ }
41
+ }
@@ -0,0 +1,3 @@
1
+ pywin32>=306
2
+ Pillow>=10.0.0
3
+ pyinstaller>=6.0.0
@@ -0,0 +1,8 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ پکیج اصلی ویجت ساعت تهران، تقویم شمسی و سیستم یادآور ویندوز
4
+ طراحی و توسعه: شایان بامیار (® Shayan Bamyar)
5
+ """
6
+
7
+ __version__ = "2.0.0"
8
+ __author__ = "Shayan Bamyar"