#این برنامه جهت تهیه فایل آرشیو از برنامه های رادیویی به همراه لینک دانلود هر قسمت، در قالب یک ساختمان داده دیکشنری نوشته شده که خروجی آن یک فایل json است.
import json
def radio_archive():
#برای اینکه پس از باز کردن مجدد این برنامه، اطلاعات برنامه های جدید رادیو را بتوان در ادامه همان دیکشنری ذخیره شده قبلی وارد کرد، بنابراین در شروع برنامه از شرط زیر استفاده میشود.
	enter = input('اگر برای بار اول از این برنامه استفاده میکنید، عدد 1 و در غیر این صورت کلید enter را بزنید.')
	if enter == '1' or enter == '۱':
# اگر برای بار اول از این برنامه استفاده شود اطلاعات درون یک دیکشنری تهی به نام database ذخیره میشود.
		database = {}
	else:
		try:
# اگر استفاده از برنامه برای بار اول نباشد، ابتدا فایل json قبلی را باز کرده، اطلاعات درونش را وارد متغیر database که یک دیکشنریست کرده و برنامه شروع به کار میکند و اطلاعات جدید وارد شده، در ادامه همان دیکشنری موجود ذخیره میشود.
			with open('./archive.json')as save_archive:
				database = json.loads(save_archive.read())
		except:
			print('فایل archive.json موجود نیست، لطفا برای شروع کار برنامه عدد 1 را وارد نمایید.')
			print(radio_archive())
#در ابتدا یک دیکشنری تهی برای ذخیره لینکها و قسمتهای هر برنامه ساخته شده است.
	archive_files = {}
#متغیر زیر برای شمارش دور حلقه تعریف شده است.
	ghesmat = 1
	while True:
#در اینجا لینک هر قسمت از هر برنامه به ترتیب وارد میشود، اگر لینک مذکور از ftp داده شود، برنامه آن را اصلاح کرده و به طور یک لینک مستقیم آن را ذخیره میکند.
		link = input('لینک قسمت را وارد کنید.')
		if link[0] == 'f':
			link = 'ht' + link[1:]
#با دستور زیر برنامه شماره هر قسمت را بر اساس دور حلقه ذخیره میکند.
		part = 'episode ' + str(ghesmat)
#اگر برای هر قسمت عنوان خاصی میخواهید ذخیره کنید به جای خط بالا میتوان از دو خط کد زیر برای ذخیره هر قسمت استفاده کرد.
#		part1 = input('نام قسمت مورد نظر خویش را وارد نمایید.')
#		part = str(ghesmat) + part1
#اطلاعات هر برنامه شامل: لینکها و قسمتهای آنها در دیکشنری زیر ذخیره میشود. شماره هر قسمت یک برنامه به عنوان key و لینک هر قسمت به عنوان value این دیکشنری هستند.
		archive_files.update({part: link})
		ghesmat += 1
		end = input('اگر اطلاعات برنامه وارد شده به اتمام رسیده است، عدد 1 و در غیر این  صورت کلید enter را بزنید.')
		if end == '1' or end == '۱':
#پس از اینکه اطلاعات یک برنامه شامل لینکها و شماره قسمتهای آنها به اتمام رسید، نام برنامه رادیویی پرسیده شده و ذخیره میشود.
			program_name = input('نام برنامه را وارد نمایید.')
#در نهایت دیکشنری نهایی ساخته میشود که شامل نام برنامه ها به عنوان key و یک دیکشنری شامل لینکها و قسمتهای برنامه ها که به عنوان value آن است.
			database.update({program_name: archive_files})
#دیکشنری ساخته شده در فایل json به نام archive ذخیره شده و یک فایل archive.json در کنار خود برنامه ساخته میشود.
			with open("./archive.json", "w")as data:
				save_archive = json.dumps(database, indent=4)
				data.write(save_archive)
#پس از اتمام کار برای یک برنامه اگر عدد 1 در شرط زیر وارد شود، دور حلقه 0 شده و همچنین دیکشنری archive_files   که شامل لینکها و قسمتهای یک برنامه خاص است خالی شده تا اطلاعات برنامه جدید وارد آن شود و اگر در شرط زیر کلید enter زده شود به معنای اتمام کار برنامه است و حلقه میشکند.
			end1 = input('اگر همچنان میخواهید، اطلاعات برنامه های مختلف را وارد کنید، عدد 1 و در صورت اتمام کار کلید enter را بزنید')
			if end1 == '1' or end1 == '۱':
				ghesmat= 1
				archive_files = {}
			else:
				break
	return(save_archive)

