اذهب إلى المحتوى

لوحة المتصدرين

  1. Mohamd Imran

    Mohamd Imran

    الأعضاء


    • نقاط

      8

    • المساهمات

      1071


  2. Flutter Dev

    Flutter Dev

    الأعضاء


    • نقاط

      3

    • المساهمات

      787


  3. سمير عبود

    سمير عبود

    الأعضاء


    • نقاط

      3

    • المساهمات

      3560


  4. Muhammad Muosa

    Muhammad Muosa

    الأعضاء


    • نقاط

      2

    • المساهمات

      6


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 05/30/20 in أجوبة

  1. لا عرف عن البرمجه غير القليل من أين ابدء فى الأساسيات
    1 نقطة
  2. اريد ان اتعلم برمجه الواجهات فماهو الخيار الافضل التعلم من اليوتيوب مثل قناه الزيرو أو الالتحاق بدوره أكاديمية حسوب وماهو المميز في الدوره ليجعلها مدفوعه ارجو الرد من مجرب
    1 نقطة
  3. عليك أنت أن تحدد المجال و أن تحب المجال الذي اخترته كل المجالات مطلوبة و بكثرة لكن في الدول العربية المجالات التي عليها أكثر طلب هي تطوير مواقع و تطبيقات الويب بالإضافة إلى تطوير تطبيقات الموبايل لا تختر أكثر من مجال و تشتت نفسك إختر مجال واحد و اكتسب خبرة فيه حتى تحترفه و بعدها بإمكانك تعلم المزيد
    1 نقطة
  4. مشكور اخى على الاضافه لكن مازلت فى حيره هل يوجد برنامج معين للبدء فيه وفى نفس الوقت يسهل باقى البرامج على سبيل المثال هل ابدء بتطوير برامج الجوال او اللعاب او الويب هل فى برنامج من المذكور له نسبه كبير مسيطره على بقيه البرامج
    1 نقطة
  5. مرحبا أولا عليك أنت تعرف المجالات الموجودة و تحدد المجال الذي تريد أن تتعلمه و بعدها تبدأ رحلة التعلم أنصحك في بداية الأمر أن تطّلع على هذا المقال سيُعرفك على البرمجة و بعض المفاهيم رابط المقال: تعلم البرمجة
    1 نقطة
  6. السلام عليكم أجمعين ، عندى بضع أسألة فى مجال برمجة المواقع : أتمنى من من لدية معلومة عن ماهو معنى Bootstrap Framework فى البرمجة ؟ وكيف سأستفيد منه بعد برمجة التصميم بواسطة HTML,CSS,JAVA SCRIPT ؟ وماهى الـ Framework بشكل عام وكيف تسهل على التعامل فى عملى ؟ شكراً مقدماً ، أصدقائى
    1 نقطة
  7. تمام يا صديقى شكرا جداً على وقتك ومجهودك ..
    1 نقطة
  8. لا , يوجد فرق الووردبريس نظام لإدارة المحتوى , بينما الفريموورك يسهل عليك و يوفر عليك الكثير من الوقت فيما يتعلق ببناء المشاريع بتلك اللغة و لكن لا يزال بإمكانك إستخدامه إستخدام شامل و تطوير البرامج بإستخدامه كما أنه يفرض عليك إتباع نمط معين في كتابة الشيفرات. لإستخدام الفريموورك بشكل إحترافي يجب عليك تعلم اللغة المستهدفة من قبل الفريموورك مثلا لو ترغب في إستخدام الbootstrap يجب عليك تعلم لغة css أو لإستخدام فريموورك laravel يجب عليك تعلم الphp لأنه فريموورك خاص بلغة الphp.
    1 نقطة
  9. و عليكم السلام.. كل لغة برمجة تمتلك فريموورك أو مجموعة من الفريموورك الخاصة بها , بإختصار و بدون الدخول في أمور تقنية معقدة الفريموورك يجعلك تتبع أسلوب برمجة معين بإستخدام تلك اللغة و يسهل عليك كتابة برنامجك في وقت أسرع و بحماية أعلى حيث أنه يوفر العديد من الوظائف الجاهزة التي قد يستغرق كتابتها بعض الوق على سبيل النظام نظام تسجيل الأعضاء في المواقع يحتاج مطوري المواقع إليه في أغلب مواقعهم بدل من كتابته في كل مشروع أغلب الفريموركس توفره جاهزا لك. الBootstrap هو فريموورك للغة الcss يوفر عليك الكثير من العناء فيما يتعلق بلغة السي إس إس حيث يحتوى على الكثير من الأشياء الجاهزة و أهمها هو نظام الgrid الخاص به كما يحتوي على إضافات مفعله بلغة الجافاسكربت أيضا لإختصار الوقت على المصممين و على من ليس له دراية بلغة الجافاسكربت. كيف سيساعدك؟ سيختصر عليك الكثير من الوقت.
    1 نقطة
  10. السلام عليكم ورحمة الله وبركاته تحيه طيبه للجميع لدي استفسار لو تكرمتو اعمل على كود ارسال الاشعارات من التطبيق الى المستخدم الكود شغال ميه ميه ولكن توجد مشكله بسيطه في الامر الكود يشتغل بعد من يقوم المستخدم بالخروج من التطبيق من خلال .. public void onBackPressed() { Intent sr =new Intent(this, MyService.class); startService(sr); Toast.makeText(this, "Exit", Toast.LENGTH_SHORT).show(); finish(); run_loop(); super.onBackPressed(); } المشكله انه كل ما خرج من التطبيق يشاهد اخر اشعار وصله من جديد او السيرفر يرجع يرسل له اشعار هو سبق وتم ارساله للمستخدم يعني السيرفر يعمل تكرار .. المفترض المستخدم من يوصله الاشعار لمره واحده لا يوصله من جديد لنفس الاشعار كيف يمكن حل هذا المشكله لو تكرمتو بحيث انه الاشعار الجديد يصل للمستخدم لمره واحده فقط وليس كل ما دخل التطبيق وخرج يحصل على اشعار باخر رسالة وصلته او اخر موضوع .. كود السيرفر .. public class MyService extends Service { public MyService() { } @Override public void onCreate(){ super.onCreate(); } @Override public int onStartCommand(Intent intent,int flags,int startId){ Toast.makeText(this, "Start myServis", Toast.LENGTH_LONG).show(); // run_loop(); return START_STICKY; } @Override public void onDestroy(){ Toast.makeText(this, "Stopmyservci", Toast.LENGTH_LONG).show(); super.onDestroy(); } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. throw new UnsupportedOperationException("Not yet implemented"); } } كود استدعاء الاشعار .. public void run_loop(){ String url = "http://00000000/testnet/android_register_login/ShowAllData.php"; JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { try { JSONArray jsonArray = response.getJSONArray("data"); JSONObject hit = jsonArray.getJSONObject(0); String id = hit.getString("id"); int lastThread = Integer.parseInt(String.valueOf(id)); JSONObject jsonObject = null; Toast.makeText(MainActivtiy.this, lastThread + "", Toast.LENGTH_SHORT).show(); if (app.getTotal_threads() < lastThread) { app.setTotal_threads(lastThread); Notification notification = new NotificationCompat.Builder(MainActivtiy.this) .setSmallIcon(android.R.drawable.ic_popup_reminder) .setContentTitle("title") .setContentText("message") .setAutoCancel(true) .setPriority(NotificationCompat.PRIORITY_HIGH) .setCategory(NotificationCompat.CATEGORY_MESSAGE) .build(); notificationManager.notify(1, notification); } } catch(JSONException e){ e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { error.printStackTrace(); } }); RequestQueue requestQueue = Volley.newRequestQueue(this); requestQueue.add(request); Handler handler=new Handler(); handler.postDelayed(new Runnable(){ @Override public void run() { run_loop(); } },10000); }
    1 نقطة
  11. @Mohamd Imran والله ي خوي ان راسي دار اعذرني ازعجتك بس الموضوع يلف براس شوية من الواضح ان الكود الذي قمت بتعديله صار شغال ربي يعطيك الف عافيه اذا شفت فيه اي شي ما شغال عدل رح ابلغك باذن الله كل الشكر لك عزيزي ربي يزيدك من واسع فضله
    1 نقطة
  12. تمام إختبر النتيجة وأخبرني إن يوجد مشكلة
    1 نقطة
  13. اهلا اخي @Mohamd Imran الان اصبح شكل الكلاس سيرفس لدي كالتالي public class MyService extends Service { public NotificationManagerCompat notificationManager; String id; App app; public MyService() { } @Override public void onCreate(){ app = (App) getApplicationContext(); id= String.valueOf(app.getTotal_threads()); Log.i(TAG,"test"+ id.toString()); super.onCreate(); } @Override public int onStartCommand(Intent intent,int flags,int startId){ Toast.makeText(this, "Start myServis", Toast.LENGTH_LONG).show(); run_loop(); return START_STICKY; } public void run_loop(){ String url = "http://00000000/testnet/android_register_login/ShowAllData.php"; JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { try { JSONArray jsonArray = response.getJSONArray("data"); JSONObject hit = jsonArray.getJSONObject(0); String id = hit.getString("id"); int lastThread = Integer.parseInt(String.valueOf(id)); JSONObject jsonObject = null; Toast.makeText(MyService.this, lastThread + "", Toast.LENGTH_SHORT).show(); if (app.getTotal_threads() < lastThread) { app.setTotal_threads(lastThread); Notification notification = new NotificationCompat.Builder(MyService.this, CHANNEL_1_ID) .setSmallIcon(android.R.drawable.ic_popup_reminder) .setContentTitle("title") .setContentText("message") .setAutoCancel(true) .setPriority(NotificationCompat.PRIORITY_HIGH) .setCategory(NotificationCompat.CATEGORY_MESSAGE) .build(); notificationManager.notify(1, notification); } } catch(JSONException e){ e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { error.printStackTrace(); } }); RequestQueue requestQueue = Volley.newRequestQueue(this); requestQueue.add(request); Handler handler=new Handler(); handler.postDelayed(new Runnable(){ @Override public void run() { run_loop(); } },10000); } @Override public void onDestroy(){ Toast.makeText(this, "Stopmyservci", Toast.LENGTH_LONG).show(); super.onDestroy(); } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. throw new UnsupportedOperationException("Not yet implemented"); } } وصفحة home كالتالي public class Home extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.home); } private boolean isMyServiceRunning(Class<?> serviceClass) { ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { if (serviceClass.getName().equals(service.service.getClassName())) { return true; } } return false; } public void onBackPressed() { if(!isMyServiceRunning(MyService.class)){ Intent sr =new Intent(this, MyService.class); startService(sr); } Toast.makeText(this, "Exit", Toast.LENGTH_SHORT).show(); finish(); super.onBackPressed(); } }
    1 نقطة
  14. وعليكم السلام أخي @مروان مروان3 يبدو أن سبب المشكلة هو عند ضغط زر الرجوع يتم تشغيل السيرفيس مرة أخرى لحل المشكلة نقوم أولا بالتأكد من أن السيرفيس الخاصة بنا تعمل مسبقاً أم لا في الخلفية وبناء على ذلك نقوم بتشغيلها عند الضغط على زر الرجوع قمت بعمل ميثود تقوم بإرجاع true أو false لحالة السيرفيس ضعها تحت ال onCreate ميثود private boolean isMyServiceRunning(Class<?> serviceClass) { ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { if (serviceClass.getName().equals(service.service.getClassName())) { return true; } } return false; } ونقوم بإستخدامها هكذا في الكود الخاص بك public void onBackPressed() { if(!isMyServiceRunning(MyService.class)){ Intent sr =new Intent(this, MyService.class); startService(sr); } Toast.makeText(this, "Exit", Toast.LENGTH_SHORT).show(); finish(); run_loop(); super.onBackPressed(); } وأيضا هنا لديك خطأ تستدعي ال فنكشن run_loop مرتين حيث يتم تشغيل التايمر أو اللوب عند تشغيل السيرفيس أي لا يوجد داعي لإضافتها مرة أخرى في ال onBackPressed وعدل هذا الجزء من السيرفيس لكي يشغل الفنكشن الخاص بك @Override public int onStartCommand(Intent intent,int flags,int startId){ Toast.makeText(this, "Start myServis", Toast.LENGTH_LONG).show(); run_loop(); return START_STICKY; } وقم بإزالتها من onBackPressed أي هكذا public void onBackPressed() { if(!isMyServiceRunning(MyService.class)){ Intent sr =new Intent(this, MyService.class); startService(sr); } Toast.makeText(this, "Exit", Toast.LENGTH_SHORT).show(); finish(); super.onBackPressed(); } وأيضا لماذا تستخدم finish(); هنا ؟
    1 نقطة
  15. هي فعلياً تعمل دائما في الخلفية (تختلف في بعض إصدارات الأندرويد),أي لا تحتاج إلى تشغيلها كل مدة , لكن أفضل إداء أو أسلوب لعمل هكذا نوع من التطبيقات ,أن تقوم بعمل قاعدة بيانات محلية sqllite db وتخزين البيانات القادمة من ال API في تلك القاعدة حتى عند عدم توفر إتصال بالإنترنت ينطلق الإشعار بناء على البيانات المحملة مسبقاً من ال API ومن هنا تستطيع عمل كويري لقاعدة البيانات المحلية (أو من خلال عمل API لتلقي الطلبات وإعادة إرسال التعليقات بناء على Id مستخدم معين) لطلب التعليقات الجديدة لمستخدم معين
    1 نقطة
  16. اه أعتذر لم أقم بتعريف ال notification manger في الكود فقط أضف التالي فوق جملة الشرط أي هكذا NotificationManager notifManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); if (notifManager == null) { notifManager = (NotificationManager)getSystemService(this.NOTIFICATION_SERVICE); } وبخصوص هذا من الأندرويد ستديو هذا تحذير للإصدارات القديمة لكن لا عليك منه
    1 نقطة
  17. صحيح ,وهو هكذا سيأتي لك بجميع السجلات التي يتم إرجاعها من ال API على عددها لاحظ هنا في ال for loop إستخدمنا طول المصفوفة jsonArray.length() أي مثلاً تم إرجاع ٣ سجلات فإنه سيظهر ٣ سجلات بناء على عدد العناصر في المصفوفة for (int i = 0; i < jsonArray.length(); i++) { JSONObject hit = jsonArray.getJSONObject(i); String idtopic =hit .getString("idtopic"); int lastThread=Integer.parseInt(String.valueOf(idtopic)); JSONObject jsonObject = null; Toast.makeText(MyService.this, lastThread+":", Toast.LENGTH_SHORT).show(); } لكن إن أردت فقط عرض سجل واحد يمكنك عمل التالي للوب بدل jsonArray.length() ضع الرقم - 1 for (int i = 0; i < 2; i++) { JSONObject hit = jsonArray.getJSONObject(i); String idtopic =hit .getString("idtopic"); int lastThread=Integer.parseInt(String.valueOf(idtopic)); JSONObject jsonObject = null; Toast.makeText(MyService.this, lastThread+":", Toast.LENGTH_SHORT).show(); } وهكذا سيرجع لك سجل واحد
    1 نقطة
  18. هنا كما يظهر يوجد لديك أخطاء 32.416 2432-2432/com.example.myapplication W/System.err: org.json.JSONException: No value for idtopic 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at org.json.JSONObject.get(JSONObject.java:354) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at org.json.JSONObject.getString(JSONObject.java:510) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at com.example.myapplication.MyService$1.onResponse(MyService.java:48) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at com.example.myapplication.MyService$1.onResponse(MyService.java:41) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:83) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:106) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at android.os.Handler.handleCallback(Handler.java:615) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at android.os.Handler.dispatchMessage(Handler.java:92) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at android.os.Looper.loop(Looper.java:137) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at android.app.ActivityThread.main(ActivityThread.java:4745) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at java.lang.reflect.Method.invokeNative(Native Method) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at java.lang.reflect.Method.invoke(Method.java:511) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at dalvik.system.NativeStart.main(Native Method) الخطأ الأساسي هنا No value for idtopic أي لا يوجد قيمة ل idtopic هل ال API الخاص بك يحوي تلك القيمة ,وأيضا هنا لديك خطأ for (int i = 0; i < jsonArray.length(); i++) { JSONObject hit = jsonArray.getJSONObject(0); أنت تقوم بتمرير 0 للميثود getJSONObject وهذا خطأ يجب أن تمرر متغير ال i أي هكذا for (int i = 0; i < jsonArray.length(); i++) { JSONObject hit = jsonArray.getJSONObject(i); حتي يتم الوصول إلى البيانات المرجعة من اللوب ,إن لم يعمل بعد ذلك أعلمني سأقوم ببناء التطبيق وال API لدي وأحللك المشكلة
    1 نقطة
  19. أهلا بك @مروان مروان3 أتوقع أنك لم تقم بتعريف ال Background service في ملف ال mainfest , تأكد من ذلك ,وأيضاً إن كنت تقوم بتجربة التطبيق على جهاز ذو نظام أندرويد ٨,٩ سيظهر لك في شريط الإشعارات عند غلق التطبيق سيظهر لك أن هناك عملية تجري في الخلفية تأكد من ذلك ,وأيضاً إذهب إلى التطبيق من خلال إعدادات هاتفك وتأكد من إنك أعطيت الصلاحيات للسماح للتطبيق بالعمل في الخلفية ,وأيضا تفقد إن كان هناك أخطاء تظهر في شريط ال Logcat في الأندرويد ستديو وأنت موصل الهاتف بالجهاز
    1 نقطة
  20. السلام عليكم أخي ,حسب ما فهمت إنك تريد إرسال إشعار من التطبيق عند قيام المستخدم بوضع تعليق جديد على بوست معين ,يمكنك ذلك من خلال إرجاع عدد التعليقات الحالي والتحقق إن كان هناك زيادة في العدد إن حدث زيادة نقوم بتفحص التعليقات من أخر عدد للتعليقات ثم عمل إشعار بتلك التعليقات من الAPI او السيرفر الخاص بك,ولعمل إشعار يمكنك إستخدام الكود التالي مع تعديله بما يتناسب مع تطبيقك (جافا) NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("قام مستخدم بالتعليق على منشورك") .setContentText("قام مستخدم بإضافة تعليق جديد!") .setPriority(NotificationCompat.PRIORITY_DEFAULT); وأيضا لإرسال إشعار حتى عند إغلاق التطبيق ,يتم إستخدم Background service وهي تعمل بالخلفية حتى عند إغلاق التطبيق تستمر بالعمل وتقوم هنا بالتفحص للإشعارات الجديدة
    1 نقطة
  21. مرحبا لغة جافا متشعبة كثيرا يمكنك إستعمالها لبناء console application و يمكنك أيضا إستخدامها في برمجة GUI أي Graphical User Interface باستخدام مكتبة swing أو عن طريق JavaFX يمكنك أيضا ربط التطبيق بإستخدام قاعدة بيانات بحيث تستطيع حفظ و تعديل و قراءة و حذف البيانات مثلا يمكنك بناء برنامج للمخازن و العملاء و الموردين و المنتجات و ما إلى ذلك يمكنك أيضا إستعمال لغة جافا لبناء مواقع و تطبيقات ويب عن طريق أطر العمل الخاصة بها و أشهرها Spring boot جافا أيضا يتم إستعمالها لبرمجة تطبيقات الأندرويد عبر منصة أندرويد ستوديو تدخل جافا أيضا في الشبكات و البرمجيات المدمجة كما تلاحظ فهي متعددة الإستخدام و المجالات فقط حدد المجال الذي تريد تعلمه و ابحث عنه في اليوتيوب (إن كنت تريد شيء مجاني) أو بإمكانك الحصول على دورة مدفوعة من Udemy نصيحتي لك لا تنتظر من شخص أن يعلمك كل شيء ضع فكرة أو برنامج في رأسك و حاول أن تقوم بتنفيذها و أبدأ أولا بفكرة بسيطة ثم قم بتوسيعها على سبيل المثال أنت الآن تعلمت أساسيات لغة جافا لنقل أنك فكرت في الفكرة التالية : بناء برنامج بسيط عند تشغيله يعرضلك نافذة عبارة عن نافذة لتسجيل الدخول أنت الآن تملك فقط أساسيات لغة جافا قم بعمل Java console application تقوم بالتالي : تطلب من المستخدم : اسم المستخدم عندما يقوم المستخدم بإدخاله تقوم بحفظه في متغير ثم تطلب منه كلمة السر و تقوم بحفظها في متغير جديد بعدها تقوم بالبحث عن المدخلات في جدول users يحتوي على بيانات مستخدمين قمت بتعريفها مسبقا إن وجدت المدخلات ضمن الجدول تعرضله رسالة أنه تم تسجيل الدخول إذا وجدت العكس تعرضله رسالة أخرى و لتكن أن البيانات التي أدخلتها غير موجودة ... لاحظ أن هذا البرنامج بسيط و لن تحتاج فيه غير أساسيات لغة الجافا و سيتم تنفيذه عبر الكونسول لكنه سيرسخ لك المعلومات و الأساسيات التي تعلمتها 2. بعدها تعلم مكتبة swing أو JavaFX ستمكنك من بناء نوافذ و إضافة أزرار الى النافذة و عدد من الأدوات الخاصة بالتفاعل مع ال user بعد تعلمها قم بتوسيع الفكرة أعلاه و قم ببناء واجهة لتسجيل الدخول 3. أنت الآن فقط تستعمل جداول لغة جافا قم بتعلم قواعد البيانات و كيفية دمجها مع البرامج و عند تعلمها قم بتوسيع الفكرة أعلاه لربط الواجهة بقاعدة بيانات و هكذا أنت في كل مرة تزيد من معلوماتك و تكتسب خبرة بتطبيقها أنا فقط أعطيتك مثال عن فكرة بسيطة بإمكانك تصور فكرة غيرها مناسبة لك لكن حاول أن تكون الفكرة في بادئ الأمر بسيطة حتى تستطيع تنفيذها و بالتوفيق
    1 نقطة
×
×
  • أضف...