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 +21 -0
- package/README-LINUX.md +128 -0
- package/README.md +263 -2
- package/assets/fonts/BYekan+ Bold.ttf +0 -0
- package/assets/fonts/Iranian Sans.ttf +0 -0
- package/assets/fonts/Vazir-Medium.ttf +0 -0
- package/assets/icons/app_icon.ico +0 -0
- package/assets/icons/app_icon.png +0 -0
- package/assets/sounds/alarm.mp3 +0 -0
- package/assets/sounds/axel.mp3 +0 -0
- package/assets/sounds/heeeeyyyyy.mp3 +0 -0
- package/assets/sounds/liilililililililii.mp3 +0 -0
- package/assets/sounds/morning_glory.mp3 +0 -0
- package/assets/sounds/peter_axel_f.mp3 +0 -0
- package/bin/persian-clock.js +60 -0
- package/main.py +26 -0
- package/package.json +39 -4
- package/release/windows/PersianClockWidget.exe +0 -0
- package/requirements.txt +3 -0
- package/src/__init__.py +8 -0
- package/src/__pycache__/__init__.cpython-314.pyc +0 -0
- package/src/__pycache__/alarm_manager.cpython-314.pyc +0 -0
- package/src/__pycache__/calendar_data.cpython-314.pyc +0 -0
- package/src/__pycache__/taskbar_clock.cpython-314.pyc +0 -0
- package/src/__pycache__/widget.cpython-314.pyc +0 -0
- package/src/__pycache__/win_utils.cpython-314.pyc +0 -0
- package/src/alarm_manager.py +1314 -0
- package/src/calendar_data.py +519 -0
- package/src/icon_generator.py +106 -0
- package/src/taskbar_clock.py +834 -0
- package/src/widget.py +3351 -0
- package/src/win_utils.py +541 -0
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.
|
package/README-LINUX.md
ADDED
|
@@ -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
|
-
|
|
1
|
+
<div dir="rtl" align="center">
|
|
2
2
|
|
|
3
|
-
|
|
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
|
+
[](#)
|
|
9
|
+
[](#)
|
|
10
|
+
[](#)
|
|
11
|
+
[](LICENSE)
|
|
12
|
+
[](#)
|
|
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
|
|
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": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
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
|
+
}
|
|
Binary file
|
package/requirements.txt
ADDED
package/src/__init__.py
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|