clapp-pm 1.0.46__tar.gz → 1.0.47__tar.gz

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.
Files changed (150) hide show
  1. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/PKG-INFO +1 -1
  2. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clapp_pm.egg-info/SOURCES.txt +2 -0
  3. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clapp_pm.egg-info/top_level.txt +1 -0
  4. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/main.py +13 -0
  5. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/setup.py +1 -0
  6. clapp_pm-1.0.47/update_command.py +260 -0
  7. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/version.json +1 -1
  8. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/version.py +1 -1
  9. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/CHANGELOG.md +0 -0
  10. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/GITHUB_SETUP.md +0 -0
  11. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/LICENSE +0 -0
  12. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/MANIFEST.in +0 -0
  13. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/PYPI_UPLOAD.md +0 -0
  14. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/README.md +0 -0
  15. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/advanced_test.py +0 -0
  16. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/apps/test-app/README.md +0 -0
  17. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/apps/test-app/main.py +0 -0
  18. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/apps/test-app/manifest.json +0 -0
  19. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/build_index.py +0 -0
  20. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/check_env.py +0 -0
  21. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/clapp_core.py +0 -0
  22. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/clean_command.py +0 -0
  23. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/cli_commands.py +0 -0
  24. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/dependency_resolver.py +0 -0
  25. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/doctor_command.py +0 -0
  26. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/info_command.py +0 -0
  27. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/install_command.py +0 -0
  28. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/installer.py +0 -0
  29. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/list_command.py +0 -0
  30. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/main.py +0 -0
  31. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/manifest_schema.py +0 -0
  32. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/manifest_validator.py +0 -0
  33. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/package_registry.py +0 -0
  34. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/package_runner.py +0 -0
  35. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/post_install_hint.py +0 -0
  36. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/publish_command.py +0 -0
  37. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/remote_registry.py +0 -0
  38. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/setup.py +0 -0
  39. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/system_test.py +0 -0
  40. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/uninstall_command.py +0 -0
  41. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/validate_command.py +0 -0
  42. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/version.py +0 -0
  43. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/version_command.py +0 -0
  44. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/backup_current/where_command.py +0 -0
  45. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/build_index.py +0 -0
  46. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/cache_manager.py +0 -0
  47. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/check_env.py +0 -0
  48. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clapp-packages-repo/README.md +0 -0
  49. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clapp-packages-repo/index.json +0 -0
  50. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clapp-packages-repo/packages/cloud-finder/README.md +0 -0
  51. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clapp-packages-repo/packages/cloud-finder/main.py +0 -0
  52. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clapp-packages-repo/packages/cloud-finder/manifest.json +0 -0
  53. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clapp-packages-repo/packages/cloud-finder/requirements.txt +0 -0
  54. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clapp-packages-repo/packages/cloud-web-browser/README.md +0 -0
  55. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clapp-packages-repo/packages/cloud-web-browser/cloud_browser.py +0 -0
  56. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clapp-packages-repo/packages/cloud-web-browser/manifest.json +0 -0
  57. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clapp-packages-repo/packages/cloud-web-browser/requirements.txt +0 -0
  58. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clapp-packages-repo/packages/test-app-2/README.md +0 -0
  59. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clapp-packages-repo/packages/test-app-2/main.py +0 -0
  60. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clapp-packages-repo/packages/test-app-2/manifest.json +0 -0
  61. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clapp-packages-repo/packages.json +0 -0
  62. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clapp_core.py +0 -0
  63. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clapp_pm.egg-info/dependency_links.txt +0 -0
  64. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clapp_pm.egg-info/entry_points.txt +0 -0
  65. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clapp_pm.egg-info/requires.txt +0 -0
  66. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/clean_command.py +0 -0
  67. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/cli_commands.py +0 -0
  68. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/dependency_resolver.py +0 -0
  69. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/deploy.py +0 -0
  70. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/docs/developer_guide.md +0 -0
  71. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/doctor_command.py +0 -0
  72. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/index.json +0 -0
  73. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/info_command.py +0 -0
  74. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/install_command.py +0 -0
  75. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/installer.py +0 -0
  76. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/list_command.py +0 -0
  77. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/manifest_schema.py +0 -0
  78. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/manifest_validator.py +0 -0
  79. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/new_command.py +0 -0
  80. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/package_registry.py +0 -0
  81. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/package_runner.py +0 -0
  82. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/package_signing.py +0 -0
  83. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/cloud-calc/README.md +0 -0
  84. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/cloud-calc/clapp-packages-repo/README.md +0 -0
  85. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/cloud-calc/clapp-packages-repo/index.json +0 -0
  86. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/cloud-calc/clapp-packages-repo/packages.json +0 -0
  87. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/cloud-calc/main.py +0 -0
  88. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/cloud-calc/manifest.json +0 -0
  89. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/cloud-calc/requirements.txt +0 -0
  90. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/cloud-finder/README.md +0 -0
  91. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/cloud-finder/main.py +0 -0
  92. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/cloud-finder/manifest.json +0 -0
  93. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/cloud-finder/requirements.txt +0 -0
  94. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/cloud-web-browser/README.md +0 -0
  95. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/cloud-web-browser/cloud_browser.py +0 -0
  96. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/cloud-web-browser/manifest.json +0 -0
  97. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/cloud-web-browser/requirements.txt +0 -0
  98. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/luaozgur-moba/README.md +0 -0
  99. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/luaozgur-moba/manifest.json +0 -0
  100. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/pycloudos/pycloud_fs/home/Desktop/test_desktop_file.txt +0 -0
  101. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/pycloudos/pycloud_fs/home/default/Desktop/test_dosya.txt +0 -0
  102. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/pycloudos/pycloud_fs/home/default/Desktop/test_script.py +0 -0
  103. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/test-app-2/README.md +0 -0
  104. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/test-app-2/main.py +0 -0
  105. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/packages/test-app-2/manifest.json +0 -0
  106. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/post_install_hint.py +0 -0
  107. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/progress_utils.py +0 -0
  108. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/publish_command.py +0 -0
  109. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/pyproject.toml +0 -0
  110. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/remote_registry.py +0 -0
  111. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/requirements.txt +0 -0
  112. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/setup.cfg +0 -0
  113. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/smart_search.py +0 -0
  114. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/system_test.py +0 -0
  115. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/templates/dart/manifest.json +0 -0
  116. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/templates/lua/manifest.json +0 -0
  117. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/templates/python/README.md +0 -0
  118. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/templates/python/main.py +0 -0
  119. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/templates/python/manifest.json +0 -0
  120. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/README.md +0 -0
  121. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/clapp-packages-repo/README.md +0 -0
  122. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/clapp-packages-repo/index.json +0 -0
  123. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/clapp-packages-repo/packages/cloud-finder/README.md +0 -0
  124. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/clapp-packages-repo/packages/cloud-finder/main.py +0 -0
  125. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/clapp-packages-repo/packages/cloud-finder/manifest.json +0 -0
  126. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/clapp-packages-repo/packages/cloud-finder/requirements.txt +0 -0
  127. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/clapp-packages-repo/packages/cloud-web-browser/README.md +0 -0
  128. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/clapp-packages-repo/packages/cloud-web-browser/cloud_browser.py +0 -0
  129. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/clapp-packages-repo/packages/cloud-web-browser/manifest.json +0 -0
  130. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/clapp-packages-repo/packages/cloud-web-browser/requirements.txt +0 -0
  131. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/clapp-packages-repo/packages/test-app/README.md +0 -0
  132. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/clapp-packages-repo/packages/test-app/main.py +0 -0
  133. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/clapp-packages-repo/packages/test-app/manifest.json +0 -0
  134. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/clapp-packages-repo/packages/test-app-2/README.md +0 -0
  135. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/clapp-packages-repo/packages/test-app-2/main.py +0 -0
  136. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/clapp-packages-repo/packages/test-app-2/manifest.json +0 -0
  137. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/clapp-packages-repo/packages.json +0 -0
  138. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/main.py +0 -0
  139. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/manifest.json +0 -0
  140. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/packages/test-app/README.md +0 -0
  141. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/packages/test-app/main.py +0 -0
  142. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app/packages/test-app/manifest.json +0 -0
  143. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app-2/README.md +0 -0
  144. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app-2/main.py +0 -0
  145. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/test-app-2/manifest.json +0 -0
  146. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/uninstall_command.py +0 -0
  147. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/validate_command.py +0 -0
  148. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/version_command.py +0 -0
  149. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/version_manager.py +0 -0
  150. {clapp_pm-1.0.46 → clapp_pm-1.0.47}/where_command.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clapp-pm
3
- Version: 1.0.46
3
+ Version: 1.0.47
4
4
  Summary: Lightweight cross-language app manager for Python and Lua
5
5
  Home-page: https://github.com/mburakmmm/clapp
6
6
  Author: Melih Burak Memiş
@@ -35,6 +35,7 @@ setup.py
35
35
  smart_search.py
36
36
  system_test.py
37
37
  uninstall_command.py
38
+ update_command.py
38
39
  validate_command.py
39
40
  version.json
40
41
  version.py
@@ -76,6 +77,7 @@ where_command.py
76
77
  ./smart_search.py
77
78
  ./system_test.py
78
79
  ./uninstall_command.py
80
+ ./update_command.py
79
81
  ./validate_command.py
80
82
  ./version.json
81
83
  ./version.py
@@ -30,6 +30,7 @@ templates
30
30
  test-app
31
31
  test-app-2
32
32
  uninstall_command
33
+ update_command
33
34
  validate_command
34
35
  version
35
36
  version_command
@@ -55,6 +55,9 @@ from dependency_resolver import (
55
55
  # Yeni uygulama oluşturma komutu
56
56
  from new_command import handle_new_command
57
57
 
58
+ # Update komutu
59
+ from update_command import handle_update_command
60
+
58
61
  def main():
59
62
  """Ana CLI fonksiyonu"""
60
63
 
@@ -78,6 +81,7 @@ def main():
78
81
  clapp install app.zip # ZIP dosyasından uygulama yükle
79
82
  clapp uninstall hello-python # Uygulamayı kaldır
80
83
  clapp upgrade hello-python # Uygulamayı güncelle
84
+ clapp update-apps [app-name] # Uygulamaları güncelle (tümü veya belirli)
81
85
  clapp validate ./my-app # Uygulama klasörünü doğrula
82
86
  clapp publish "./my app" # Uygulama yayınla (boşluk için tırnak kullanın)
83
87
 
@@ -134,6 +138,10 @@ def main():
134
138
  upgrade_parser = subparsers.add_parser('upgrade', help='Uygulamayı güncelle')
135
139
  upgrade_parser.add_argument('app_name', help='Güncellenecek uygulamanın adı')
136
140
 
141
+ # update-apps komutu (yeni)
142
+ update_apps_parser = subparsers.add_parser('update-apps', help='Uygulamaları güncelle')
143
+ update_apps_parser.add_argument('app', nargs='?', help='Güncellenecek uygulama adı (belirtilmezse tümü güncellenir)')
144
+
137
145
  # search komutu
138
146
  search_parser = subparsers.add_parser('search', help='Paket ara')
139
147
  search_parser.add_argument('query', help='Arama terimi')
@@ -292,6 +300,11 @@ def main():
292
300
  print(f"❌ {message}")
293
301
  sys.exit(1)
294
302
 
303
+ elif args.command == 'update-apps':
304
+ # Yeni update-apps komutu
305
+ success = handle_update_command(args)
306
+ sys.exit(0 if success else 1)
307
+
295
308
  elif args.command == 'search':
296
309
  success, message = search_remote_packages(args.query)
297
310
  if not success:
@@ -78,6 +78,7 @@ setup(
78
78
  "smart_search",
79
79
  "progress_utils",
80
80
  "new_command",
81
+ "update_command",
81
82
  ],
82
83
 
83
84
  # Paket verileri
@@ -0,0 +1,260 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ update_command.py - clapp Update Command
4
+
5
+ Bu modül kullanıcıların yüklü uygulamalarını güncellemelerini sağlar.
6
+ """
7
+
8
+ import os
9
+ import json
10
+ import shutil
11
+ import tempfile
12
+ import urllib.request
13
+ import zipfile
14
+ from typing import Tuple, Optional, Dict, Any
15
+ from progress_utils import download_with_progress, extract_with_progress, show_success_message, show_error_message, show_info_message, show_warning_message
16
+
17
+ def load_index() -> Tuple[bool, Dict[str, Any], str]:
18
+ """
19
+ GitHub'dan index.json'u yükler
20
+
21
+ Returns:
22
+ (success, index_data, error_message)
23
+ """
24
+ try:
25
+ index_url = "https://raw.githubusercontent.com/mburakmmm/clapp-packages/main/index.json"
26
+ show_info_message("🔄 GitHub'dan index.json indiriliyor...")
27
+
28
+ with urllib.request.urlopen(index_url) as response:
29
+ index_data = json.loads(response.read().decode('utf-8'))
30
+
31
+ return True, index_data, ""
32
+ except Exception as e:
33
+ return False, {}, f"Index yükleme hatası: {e}"
34
+
35
+ def get_installed_apps() -> Dict[str, Dict[str, Any]]:
36
+ """
37
+ Yerel olarak yüklü uygulamaları listeler
38
+
39
+ Returns:
40
+ Dict[app_name, app_info]
41
+ """
42
+ installed_apps = {}
43
+ apps_dir = os.path.expanduser("~/.clapp/apps")
44
+
45
+ if not os.path.exists(apps_dir):
46
+ return installed_apps
47
+
48
+ for app_name in os.listdir(apps_dir):
49
+ app_path = os.path.join(apps_dir, app_name)
50
+ if os.path.isdir(app_path):
51
+ manifest_path = os.path.join(app_path, "manifest.json")
52
+ if os.path.exists(manifest_path):
53
+ try:
54
+ with open(manifest_path, 'r', encoding='utf-8') as f:
55
+ manifest = json.load(f)
56
+ installed_apps[app_name] = {
57
+ 'version': manifest.get('version', 'unknown'),
58
+ 'path': app_path,
59
+ 'manifest': manifest
60
+ }
61
+ except:
62
+ continue
63
+
64
+ return installed_apps
65
+
66
+ def check_for_updates(app_name: str, current_version: str, index_data: Dict[str, Any]) -> Optional[str]:
67
+ """
68
+ Uygulama için güncelleme kontrol eder
69
+
70
+ Args:
71
+ app_name: Uygulama adı
72
+ current_version: Mevcut sürüm
73
+ index_data: Index verisi
74
+
75
+ Returns:
76
+ En son sürüm (güncelleme varsa) veya None
77
+ """
78
+ if app_name not in index_data:
79
+ return None
80
+
81
+ app_versions = index_data[app_name]
82
+
83
+ # En son sürümü bul
84
+ latest_version = None
85
+ for version in app_versions.keys():
86
+ if latest_version is None or version > latest_version:
87
+ latest_version = version
88
+
89
+ if latest_version and latest_version > current_version:
90
+ return latest_version
91
+
92
+ return None
93
+
94
+ def download_and_install_update(app_name: str, version: str, index_data: Dict[str, Any]) -> Tuple[bool, str]:
95
+ """
96
+ Uygulama güncellemesini indirir ve yükler
97
+
98
+ Args:
99
+ app_name: Uygulama adı
100
+ version: Yüklenecek sürüm
101
+ index_data: Index verisi
102
+
103
+ Returns:
104
+ (success, message)
105
+ """
106
+ try:
107
+ app_info = index_data[app_name][version]
108
+ repo_url = app_info['repo_url']
109
+ subdir = app_info['subdir']
110
+
111
+ # GitHub'dan zip dosyasını indir
112
+ zip_url = f"{repo_url}/archive/refs/heads/main.zip"
113
+ show_info_message(f"📦 {app_name} v{version} indiriliyor...")
114
+
115
+ with tempfile.NamedTemporaryFile(suffix='.zip', delete=False) as temp_file:
116
+ temp_zip_path = temp_file.name
117
+
118
+ # İndirme işlemi
119
+ download_with_progress(zip_url, temp_zip_path, f"📦 {app_name} indiriliyor")
120
+
121
+ # Geçici dizin oluştur
122
+ with tempfile.TemporaryDirectory() as temp_dir:
123
+ # Zip dosyasını çıkar
124
+ extract_with_progress(temp_zip_path, temp_dir, f"📦 {app_name} çıkarılıyor")
125
+
126
+ # Uygulama dizinini bul
127
+ extracted_dir = os.path.join(temp_dir, "clapp-packages-main", subdir)
128
+ if not os.path.exists(extracted_dir):
129
+ return False, f"Uygulama dizini bulunamadı: {subdir}"
130
+
131
+ # Yüklü uygulamayı yedekle
132
+ apps_dir = os.path.expanduser("~/.clapp/apps")
133
+ app_path = os.path.join(apps_dir, app_name)
134
+ backup_path = os.path.join(apps_dir, f"{app_name}_backup")
135
+
136
+ if os.path.exists(app_path):
137
+ if os.path.exists(backup_path):
138
+ shutil.rmtree(backup_path)
139
+ shutil.move(app_path, backup_path)
140
+
141
+ # Yeni sürümü yükle
142
+ shutil.copytree(extracted_dir, app_path)
143
+
144
+ # Eski yedekleri temizle
145
+ if os.path.exists(backup_path):
146
+ shutil.rmtree(backup_path)
147
+
148
+ # Geçici zip dosyasını sil
149
+ os.unlink(temp_zip_path)
150
+
151
+ return True, f"{app_name} v{version} başarıyla güncellendi!"
152
+
153
+ except Exception as e:
154
+ return False, f"Güncelleme hatası: {e}"
155
+
156
+ def update_app(app_name: str) -> Tuple[bool, str]:
157
+ """
158
+ Belirtilen uygulamayı günceller
159
+
160
+ Args:
161
+ app_name: Güncellenecek uygulama adı
162
+
163
+ Returns:
164
+ (success, message)
165
+ """
166
+ # Yüklü uygulamaları kontrol et
167
+ installed_apps = get_installed_apps()
168
+ if app_name not in installed_apps:
169
+ return False, f"'{app_name}' yüklü değil"
170
+
171
+ current_version = installed_apps[app_name]['version']
172
+ show_info_message(f"🔍 {app_name} (v{current_version}) güncellemeleri kontrol ediliyor...")
173
+
174
+ # Index'i yükle
175
+ success, index_data, error = load_index()
176
+ if not success:
177
+ return False, error
178
+
179
+ # Güncelleme kontrol et
180
+ latest_version = check_for_updates(app_name, current_version, index_data)
181
+ if not latest_version:
182
+ return True, f"{app_name} zaten en son sürümde (v{current_version})"
183
+
184
+ show_info_message(f"🔄 {app_name} v{current_version} → v{latest_version} güncelleniyor...")
185
+
186
+ # Güncellemeyi indir ve yükle
187
+ success, message = download_and_install_update(app_name, latest_version, index_data)
188
+ if success:
189
+ show_success_message(message)
190
+ else:
191
+ show_error_message(message)
192
+
193
+ return success, message
194
+
195
+ def update_all_apps() -> Tuple[bool, str]:
196
+ """
197
+ Tüm yüklü uygulamaları günceller
198
+
199
+ Returns:
200
+ (success, message)
201
+ """
202
+ installed_apps = get_installed_apps()
203
+ if not installed_apps:
204
+ return True, "Yüklü uygulama bulunamadı"
205
+
206
+ show_info_message(f"🔍 {len(installed_apps)} uygulama için güncellemeler kontrol ediliyor...")
207
+
208
+ # Index'i yükle
209
+ success, index_data, error = load_index()
210
+ if not success:
211
+ return False, error
212
+
213
+ updated_count = 0
214
+ errors = []
215
+
216
+ for app_name in installed_apps.keys():
217
+ current_version = installed_apps[app_name]['version']
218
+ latest_version = check_for_updates(app_name, current_version, index_data)
219
+
220
+ if latest_version:
221
+ show_info_message(f"🔄 {app_name} v{current_version} → v{latest_version} güncelleniyor...")
222
+ success, message = download_and_install_update(app_name, latest_version, index_data)
223
+ if success:
224
+ updated_count += 1
225
+ show_success_message(f"✅ {app_name} güncellendi")
226
+ else:
227
+ errors.append(f"{app_name}: {message}")
228
+ else:
229
+ show_info_message(f"✅ {app_name} zaten güncel (v{current_version})")
230
+
231
+ # Sonuç raporu
232
+ if updated_count > 0:
233
+ message = f"✅ {updated_count} uygulama güncellendi"
234
+ if errors:
235
+ message += f"\n❌ Hatalar: {', '.join(errors)}"
236
+ return True, message
237
+ else:
238
+ return True, "Tüm uygulamalar zaten güncel"
239
+
240
+ def handle_update_command(args):
241
+ """
242
+ Update komutunu işler
243
+
244
+ Args:
245
+ args: Argparse arguments
246
+ """
247
+ if args.app:
248
+ # Belirli uygulamayı güncelle
249
+ success, message = update_app(args.app)
250
+ if not success:
251
+ show_error_message(message)
252
+ return False
253
+ else:
254
+ # Tüm uygulamaları güncelle
255
+ success, message = update_all_apps()
256
+ if not success:
257
+ show_error_message(message)
258
+ return False
259
+
260
+ return True
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "app_name": "clapp",
3
- "version": "1.0.46",
3
+ "version": "1.0.47",
4
4
  "author": "Melih Burak Memiş",
5
5
  "description": "Basit ve güçlü paket yöneticisi",
6
6
  "source": "https://github.com/melihburak/clapp",
@@ -2,7 +2,7 @@
2
2
  Version information for clapp-pm package.
3
3
  """
4
4
 
5
- __version__ = "1.0.46"
5
+ __version__ = "1.0.47"
6
6
  __author__ = "Melih Burak Memiş"
7
7
  __email__ = "mburakmemiscy@gmail.com"
8
8
  __description__ = "Lightweight cross-language app manager for Python and Lua"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes