| | | | |
|:---:|:---:|:---:|:---:|
|

|

|

|

|
---
## اہم خصوصیات
- **آزاد کلائنٹ (Independent Client)** — یہ Telegram for Android کا فورک نہیں ہے۔ MonoGram ایک مکمل طور پر نئے سرے سے بنایا گیا آزاد پروجیکٹ ہے۔
- **Material Design 3** — ایک خوبصورت، موافق (adaptive) UI جو فونز، ٹیبلیٹس، اور فولڈ ایبلز پر بہترین نظر آتا ہے۔
- **محفوظ (Secure)** — بائیو میٹرک لاکنگ اور انکرپٹڈ لوکل اسٹوریج شامل ہے۔
- **میڈیا سے بھرپور (Media Rich)** — ExoPlayer اور Coil 3 کے ساتھ اعلیٰ کارکردگی والا میڈیا پلے بیک۔
- **تیز اور موثر (Fast & Efficient)** — Kotlin Coroutines کی مدد سے چلنے والا اور کارکردگی کے لیے آپٹمائزڈ۔
- **کلین آرکیٹیکچر (Clean Architecture)** — ڈومین (Domain)، ڈیٹا (Data)، اور پریزنٹیشن (Presentation) لیئرز کے ساتھ کام کی واضح تقسیم۔
- **MVI پیٹرن** — MVIKotlin کا استعمال کرتے ہوئے قابل پیشین گوئی اسٹیٹ مینجمنٹ (state management)۔
- **کوئی NFT یا کرپٹو نہیں** — مونوگرام میں کبھی بھی NFT پروموشنز، تحائف یا ٹیلیگرام کی جانب سے پیش کیا گیا کوئی ایسا فیچر شامل نہیں ہوگا جسے ہم میسجنگ ایپ کے دائرہ کار سے باہر سمجھتے ہیں۔
---
## شروعات (Getting Started)
پروجیکٹ کو مقامی طور پر سیٹ اپ کرنے کے لیے ان اقدامات پر عمل کریں۔
### بنیادی شرائط
- **Android Studio**: لیڈی بگ (Ladybug) یا اس سے نیا (تجویز کردہ)۔
- **JDK**: جاوا 17 یا اس سے نیا۔
### 1. ریپوزٹری کلون کریں
```bash
git clone --recurse-submodules https://github.com/monogram-android/monogram.git
cd monogram
```
### 2. ٹیلیگرام API کیز کنفیگر کریں
ٹیلیگرام سرورز سے جڑنے کے لیے، آپ کو اپنی API اسناد (credentials) درکار ہوں گی۔
1. [my.telegram.org](https://my.telegram.org/) پر لاگ ان کریں۔
2. **API development tools** پر جائیں۔
3. اپنی `App api_id` اور `App api_hash` حاصل کرنے کے لیے ایک نئی ایپلیکیشن بنائیں۔
4. پروجیکٹ کی روٹ ڈائرکٹری میں `local.properties` نام کی ایک فائل بنائیں (اگر یہ پہلے سے موجود نہیں ہے)۔
5. درج ذیل لائنیں شامل کریں:
```properties
API_ID=12345678
API_HASH=your_api_hash_here
```
### 3. پش نوٹیفکیشنز کنفیگر کریں
1. [Firebase console](https://console.firebase.google.com) پر لاگ ان کریں۔
2. ایک نیا پروجیکٹ بنائیں۔
3. اپنی مطلوبہ `applicationId` کے ساتھ ایک نئی ایپلیکیشن شامل کریں۔ اگر آپ کے پاس مختلف IDs کے ساتھ متعدد ایپلیکیشنز ہیں، تو متعدد Firebase ایپلیکیشنز بنائیں۔ **بائی ڈیفالٹ، ڈیبگ اور ریلیز بلڈز کے لیے `applicationId` مختلف ہوتی ہے۔**
4. `google-services.json` فائل ڈاؤن لوڈ کریں اور اسے **app** ماڈیول کی روٹ (`monogram/app/google-services.json`) میں کاپی کریں۔ اگر آپ نے متعدد ایپلیکیشنز بنائی ہیں، تو صرف تازہ ترین کنفیگریشن کاپی کریں۔
5. **Cloud Messaging** سیکشن پر جائیں۔
6. **Manage service accounts** پر کلک کریں۔
7. کھلنے والی ونڈو کے اوپری حصے میں **Keys** سیکشن منتخب کریں۔
8. **Add key** پر کلک کریں اور **JSON** آپشن منتخب کریں۔ فائل کے ڈاؤن لوڈ ہونے کا انتظار کریں۔
9. اس ٹیلیگرام API پیج پر واپس جائیں جہاں سے آپ نے اپنی App ID حاصل کی تھی۔
10. FCM اسناد والے سیکشن کے آگے **Update** پر کلک کریں۔
11. کھلنے والے پیج پر سروس اکاؤنٹ JSON اپ لوڈ کریں۔
### 4. پہلی مرتبہ سیٹ اپ: libvpx کی تعمیر
اینیمیشنز کے لیے libvpx کو کمپائل کرنا ضروری ہے۔ یہ کام Gradle بلڈ شروع کرنے سے پہلے کرنا ہوگا، ورنہ بلڈ ناکام ہو سکتی ہے۔
1. اپنی ورکنگ ڈائرکٹری `presentation/src/main/cpp` پر لے جائیں۔
2. `build.sh` میں اپنا `ANDROID_NDK_HOME` شامل کریں۔
3. `build.sh` چلائیں اور مکمل ہونے تک انتظار کریں۔
### 5. بلڈ اور رن
1. **Android Studio** میں پروجیکٹ کھولیں۔
2. IDE کی انڈیکسنگ کی حد میں اضافہ کریں تاکہ `TdApi.java` (TDLib ریپر) صحیح طرح انڈیکس ہو سکے۔ **Android Studio** یا **IntelliJ IDEA** میں، **Help → Edit Custom Properties...** کھولیں، نیچے دی گئی لائنز پیسٹ کریں، اور اگر کہا جائے تو IDE کو ری اسٹارٹ کریں:
```properties
# size in Kb
idea.max.intellisense.filesize=20480
# size in Kb
idea.max.content.load.filesize=20480
```
3. Gradle کو سنک کریں۔
4. `app` رن کنفیگریشن منتخب کریں۔
5. کوئی ڈیوائس کنیکٹ کریں یا ایمولیٹر اسٹارٹ کریں۔
6. **Run** پر کلک کریں۔
---
## TDLib کی تعمیر (Building TDLib)
اگر آپ کو سورس کوڈ سے TDLib بنانے کی ضرورت ہے، تو پہلے درکار انحصار (dependencies) انسٹال کریں۔ Debian/Ubuntu پر مبنی ڈسٹریبیوشنز کے لیے:
```bash
sudo apt-get update
sudo apt-get install build-essential git curl wget php perl gperf unzip zip default-jdk cmake
```
پھر اپنے پروجیکٹ کی روٹ سے بلڈ اسکرپٹ چلائیں:
```bash
./build-tdlib.sh
```
---
## تعاون (Contributing)
ہم تعاون کا خیرمقدم کرتے ہیں! چاہے وہ بگز ٹھیک کرنا ہو، دستاویزات کو بہتر بنانا ہو، یا نئے فیچرز کی تجویز دینا ہو۔
1. **مسائل (Issues) چیک کریں** — کھلے ہوئے ایشوز تلاش کریں یا اپنے آئیڈیاز پر بحث کرنے کے لیے ایک نیا ایشو بنائیں۔
2. **`develop` سے کام کریں** — اپنی برانچ `develop` سے بنائیں اور اپنا کام اسی برانچ کی بنیاد پر رکھیں۔
3. **فورک اور برانچ (Fork & Branch)** — ریپوزٹری کو فورک کریں اور ایک فیچر برانچ بنائیں۔
4. **کوڈ اسٹائل (Code Style)** — موجودہ Kotlin کوڈنگ اسٹائل اور کلین آرکیٹیکچر کی ہدایات پر عمل کریں۔
5. **PR جمع کرائیں** — اپنی تبدیلیوں کی واضح تفصیل کے ساتھ `develop` برانچ میں ایک Pull Request (PR) کھولیں۔
> [!IMPORTANT]
> - [ٹیلیگرام API کی سروس کی شرائط (Terms of Service)](https://core.telegram.org/api/terms) کا احترام کریں۔
> - یقینی بنائیں کہ آپ کا کوڈ تمام چیکس اور ٹیسٹس پاس کرتا ہے۔
### بگز رپورٹ کرنا اور فیچرز تجویز کرنا
- **بگز (Bugs)** — ایک ایشو کھولیں اور ٹائٹل میں `[Bug]` ٹیگ استعمال کریں (مثال کے طور پر `[Bug] App crashes on startup`)۔ آپ [**بگ ٹریکر (Bug Tracker)**](https://github.com/orgs/monogram-android/projects/3/views/1) پر تمام معلوم بگز بھی دیکھ سکتے ہیں۔
- **فیچر کی درخواستیں (Feature Requests)** — `[Feature]` ٹیگ کے ساتھ ایک ایشو کھولیں (مثال کے طور پر `[Feature] Support scheduled messages`)۔ موجودہ فیچر کی درخواستیں [**فیچر بورڈ (Feature Board)**](https://github.com/orgs/monogram-android/projects/5/views/1) پر مل سکتی ہیں۔
---
## تراجم (Translations)
مونوگرام کمیونٹی کے تراجم کا خیرمقدم کرتا ہے! آپ اسٹرنگز ریسورس فائل میں ترمیم کر کے اپنی زبان کا حصہ ڈال سکتے ہیں۔
سورس اسٹرنگز [`presentation/src/main/res/values/string.xml`](https://github.com/monogram-android/monogram/blob/develop/presentation/src/main/res/values/string.xml) پر واقع ہیں۔ نئی زبان شامل کرنے کے لیے، متعلقہ `values-