Example #1
0
def logs(request):
    prof_id = 1
    try:
        prof_id = request.session["prof_id"]
    except KeyError:
        pass
    filterCriteria = "all"
    try:
        if (request.GET.get("filter")):
            if (request.GET.get("filter") == "Media"):
                filterCriteria = "Radarr"
            else:
                filterCriteria = request.GET.get("filter")
    except KeyError:
        pass
    system_settings = SiteSettings.objects.all()[:1].get()
    system_settings.newVersion = SiteSettings.checkVersion()
    prof_list = Profile.objects.all()
    if (filterCriteria == 'all'):
        log_list = Logs.objects.all().order_by('-id')
    else:
        log_list = Logs.objects.all().order_by('-id').filter(
            log_category=filterCriteria)

    context = {
        'system_settings': system_settings,
        'log_list': log_list,
        'prof_list': prof_list,
        'prof_id': prof_id
    }
    template = loader.get_template("jibarr/logs.html")
    return HttpResponse(template.render(context, request))
Example #2
0
def upgrade(request):
    prof_id = 1
    try:
        prof_id = request.session["prof_id"]
    except KeyError:
        pass
    system_settings = SiteSettings.objects.all()[:1].get()
    system_settings.newVersion = SiteSettings.checkVersion()

    jv = ""
    try:
        resp = urllib.request.urlopen(
            'https://github.com/ExtensiveJS/Jibarr/wiki/Current-Versions')
        html = resp.read()
        htmlstr = html.decode('utf8')
        htmlSplit = htmlstr.split("\n")
        for line in htmlSplit:
            if line.find('Jibarr_Version') > -1:
                jv = line.replace("</p>", "").replace("Jibarr_Version: ",
                                                      "").replace("<br>", "")
        resp.close()
    except:
        pass

    system_settings.jibarr_advertised_version = jv

    prof_list = Profile.objects.all()
    context = {
        'system_settings': system_settings,
        'prof_list': prof_list,
        'prof_id': prof_id,
    }
    template = loader.get_template("jibarr/upgrade.html")
    return HttpResponse(template.render(context, request))
Example #3
0
def runsyncshows(request):
    prof_id = 1
    try:
        prof_id = request.session["prof_id"]
    except KeyError:
        #prof_id = 1
        pass
    system_settings = SiteSettings.objects.all()[:1].get()
    system_settings.newVersion = SiteSettings.checkVersion()
    prof_list = Profile.objects.all()
    
    sonarr_episode_list = sonarrEpisodeList()
    profile_sonarr_show_list = ProfileSonarr.objects.filter(profile_id=prof_id)
    totalFileSize = 0

    for pss in profile_sonarr_show_list:
        sel = SonarrEpisodeMedia.objects.filter(seriesId=pss.sonarr_id)
        for se in sel:
            # check if the season is excluded
            if SonarrSeasonExclusions.objects.filter(series_id=pss.sonarr_id,seasonNumber=se.seasonNumber,profile_id=prof_id).count() < 1:
                # check if the episode is monitored
                if ProfileSonarrEpisode.objects.filter(profile_id=prof_id,sonarr_id=se.sonarr_id).count() == 1:
                    pse = ProfileSonarrEpisode.objects.get(profile_id=prof_id,sonarr_id=se.sonarr_id)
                    if pse:
                        pseLr = datetime.fromtimestamp(mktime(time.strptime(pse.lastRun, "%b %d %Y %H:%M:%S")))
                        selu = datetime.fromtimestamp(mktime(time.strptime(se.dateAdded, "%Y-%m-%d %H:%M")))
                        if selu > pseLr:
                            sem = SonarrEpisodeMedia.objects.get(sonarr_id=se.sonarr_id)
                            ss = SonarrShowMedia.objects.get(sonarr_id=sem.seriesId)
                            sem.showName = ss.title
                            sem.fileSize = convert_size(sem.size)
                            sonarr_episode_list.episodelist.append(sem)
                            totalFileSize = totalFileSize + sem.size
                else:
                    # not in PSE, add it to sync list
                    sem = SonarrEpisodeMedia.objects.get(sonarr_id=se.sonarr_id)
                    ss = SonarrShowMedia.objects.get(sonarr_id=sem.seriesId)
                    sem.showName = ss.title
                    sem.fileSize = convert_size(sem.size)
                    sonarr_episode_list.episodelist.append(sem)
                    totalFileSize = totalFileSize + sem.size


    sonarr_episode_list.episodelist.sort(key=lambda x: x.showName.lower(), reverse=False)    
    sonarr_episode_list.totalSize = convert_size(totalFileSize)

    context = {
        'system_settings': system_settings,
        'prof_list': prof_list,
        'prof_id': prof_id,
        'sonarr_episode_list': sonarr_episode_list,
        'prof_lastPath': Profile.objects.get(id=prof_id).profile_lastPath
    }
    template = loader.get_template("jibarr/runsyncshows.html")
    return HttpResponse(template.render(context, request))
Example #4
0
def sitesettings(request):
    prof_id = 1
    try:
        prof_id = request.session["prof_id"]
    except KeyError:
        #prof_id = 1
        pass
    system_settings = SiteSettings.objects.all()[:1].get()
    system_settings.newVersion = SiteSettings.checkVersion()
    prof_list = Profile.objects.all()
    context = {
        'system_settings': system_settings,
        'prof_list': prof_list,
        'prof_id': prof_id
    }
    template = loader.get_template("jibarr/sitesettings.html")
    return HttpResponse(template.render(context, request))
Example #5
0
def shows(request):
    prof_id = 1
    try:
        prof_id = request.session["prof_id"]
    except KeyError:
        pass
    system_settings = SiteSettings.objects.all()[:1].get()
    system_settings.newVersion = SiteSettings.checkVersion()

    isSonarrConnected = settings.isSonarrConnected
    system_settings.isSonarrConnected = isSonarrConnected

    prof_list = Profile.objects.all()
    prof = Profile.objects.get(id=prof_id)

    pageNum = 1
    try:
        if (request.GET.get("page")):
            pageNum = request.GET.get("page")
    except KeyError:
        pass
    ssml = get_show_info(system_settings, prof)
    ssml.showlist.sort(key=lambda x: x.title.lower(), reverse=False)
    searchCriteria = ""
    try:
        if (request.GET.get("search")):
            searchCriteria = request.GET.get("search")
    except:
        pass
    if (searchCriteria):
        ssml.showlist = [
            x for x in ssml.showlist if bool(
                re.search(re.compile(searchCriteria, re.IGNORECASE), x.title))
        ]

    filterCriteria = "all"
    try:
        if (request.GET.get("filter")):
            filterCriteria = request.GET.get("filter")
    except:
        pass

    if (filterCriteria == 'monitored'):
        ssml.showlist = [x for x in ssml.showlist if x.isMonitored]

    if (filterCriteria == 'unmonitored'):
        ssml.showlist = [x for x in ssml.showlist if x.isMonitored == False]

    ssml.filterCriteria = filterCriteria
    paginator = Paginator(ssml.showlist, 25)
    if (int(pageNum) > paginator.num_pages):
        pageNum = 1
    pageStuff = PageStuff
    pageStuff.pageNumber = pageNum
    pageStuff.totalPages = paginator.num_pages
    pageStuff.perPage = 5
    pageStuff.totalRecords = paginator.count

    ssml.showlist = paginator.page(int(pageNum))

    context = {
        'system_settings': system_settings,
        'system_profile': prof,
        'show_list': ssml,
        'prof_list': prof_list,
        'prof_id': prof_id
    }
    template = loader.get_template("jibarr/shows.html")
    return HttpResponse(template.render(context, request))
Example #6
0
def index(request):
    prof_id = 1
    try:
        prof_id = request.session["prof_id"]
    except KeyError:
        pass
    system_settings = SiteSettings.objects.all()[:1].get()
    system_settings.newVersion = SiteSettings.checkVersion()
    prof_list = Profile.objects.all()

    rdl = get_movie_info(system_settings, prof_id)
    rdml = rdl.movielist
    rdml.sort(key=lambda x: x.lastUpdt.lower(), reverse=True)

    radarr_list = radarrMovieList()
    radarr_list.movielist = rdml[:5]

    sonarr_list = sonarrShowList()
    sonarr_list_ids = []
    # 1) Get list of Episodes by dateAdded desc
    sel = get_episode_info(system_settings, prof_id)
    sell = sel.episodelist
    sell.sort(key=lambda x: x.dateAdded, reverse=True)
    # 2) Loop episodes for unique shows, exit with 5 shows
    for var in sell:
        if not var.seriesId in sonarr_list_ids:
            sonarr_list_ids.append(var.seriesId)
            if len(sonarr_list_ids) >= 5:
                break
    # 3) Fill show details (maybe do as part of 2)
    for var in sonarr_list_ids:
        ss = SonarrShowMedia.objects.get(sonarr_id=var)
        ss.episodePercentage = round(
            (ss.episodeFileCount / ss.episodeCount) * 100)
        ss.isMonitored = False
        try:
            ProfileSonarr.objects.get(sonarr_id=var)
            ss.isMonitored = True
        except:
            pass
        ss.isNewer = True
        sonarr_list.showlist.append(ss)

    #for var in sell:
    #    ss = SonarrShowMedia.objects.get(sonarr_id=var.seriesId)
    #    ss.episodePercentage = round((ss.episodeFileCount / ss.episodeCount) * 100)
    #    ss.isMonitored = False
    #    try:
    #        ProfileSonarr.objects.get(sonarr_id=var.seriesId)
    #        ss.isMonitored = True
    #    except:
    #        pass
    #    ss.isNewer = True
    #    sonarr_list.showlist.append(ss)

    #sonarr_list2 = sonarrShowList()
    #for var in sonarr_list.showlist:
    #    found = False
    #    for var2 in sonarr_list2.showlist:
    #        if var.sonarr_id == var2.sonarr_id:
    #            found = True
    #    if found == False:
    #        sonarr_list2.showlist.append(var)
    #        if len(sonarr_list2.showlist) >= 5:
    #            break

    isConnected = settings.isConnected
    isSonarrConnected = settings.isSonarrConnected

    system_settings.isConnected = isConnected
    system_settings.isSonarrConnected = isSonarrConnected

    isRadarrConnected = settings.isRadarrConnected
    system_settings.isRadarrConnected = isRadarrConnected

    context = {
        'system_settings': system_settings,
        'prof_list': prof_list,
        'prof_id': prof_id,
        'radarr_list': radarr_list,
        'sonarr_list': sonarr_list
    }
    template = loader.get_template("jibarr/index.html")
    return HttpResponse(template.render(context, request))
Example #7
0
def showdetails(request):
    prof_id = 1
    try:
        prof_id = request.session["prof_id"]
    except KeyError:
        pass
    show_id = 0
    try:
        show_id = request.GET.get("id")
    except:
        pass
    show = SonarrShowMedia()
    try:
        show = SonarrShowMedia.objects.get(sonarr_id=show_id)
    except:
        pass

    seasCount = 0

    #pseList = ProfileSonarrEpisode.objects.filter(profile_id=prof_id)
    psList = ProfileSonarr.objects.filter(profile_id=prof_id)
    pseList = ProfileSonarrEpisode.objects.filter(profile_id=prof_id)

    show.isMonitored = False
    for ps in psList:
        if ps.sonarr_id == show.sonarr_id:
            show.isMonitored = True

    show.seasons = [sonarrSeason()] * 0
    epC = 0
    while seasCount < show.seasonCount:
        seas = sonarrSeason()
        seas.title = 'Season ' + str(seasCount + 1)
        #seas.episodes.clear()
        seas.episodes = [SonarrEpisodeMedia()] * 0
        seas.number = str(seasCount + 1)
        # check if the season is EXCLUDED.

        seas.excluded = False
        seExList = SonarrSeasonExclusions.objects.filter(
            series_id=show.sonarr_id,
            seasonNumber=seas.number,
            profile_id=prof_id)
        if seExList.count() > 0:
            seas.excluded = True

        for seasEp in SonarrEpisodeMedia.objects.filter(
                seriesId=show.sonarr_id, seasonNumber=seasCount + 1):
            se = sonarrEpisode()
            se.id = seasEp.id
            se.sonarr_id = seasEp.sonarr_id
            se.seriesId = seasEp.seriesId
            se.episodeNumber = seasEp.episodeNumber
            se.title = seasEp.title
            se.seasonNumber = seasEp.seasonNumber
            se.path = seasEp.path
            se.dateAdded = seasEp.dateAdded
            se.quality = seasEp.quality
            se.description = seasEp.description
            se.airDate = seasEp.airDate
            se.size = seasEp.size

            se.isMonitored = show.isMonitored

            se.excluded = seas.excluded

            se.isNewer = False

            if show.isMonitored:
                se.isNewer = True
                for pse in pseList:
                    if pse.sonarr_id == se.sonarr_id:
                        pseLr = datetime.fromtimestamp(
                            mktime(
                                time.strptime(pse.lastRun,
                                              "%b %d %Y %H:%M:%S")))
                        seDa = datetime.fromtimestamp(
                            mktime(
                                time.strptime(se.dateAdded, "%Y-%m-%d %H:%M")))
                        if seDa < pseLr:
                            se.isNewer = False

            seas.episodes.append(se)
            epC += 1
        show.seasons.append(seas)
        seasCount = seasCount + 1

    system_settings = SiteSettings.objects.all()[:1].get()
    system_settings.newVersion = SiteSettings.checkVersion()

    isSonarrConnected = settings.isSonarrConnected
    system_settings.isSonarrConnected = isSonarrConnected

    prof_list = Profile.objects.all()
    prof = Profile.objects.get(id=prof_id)

    context = {
        'system_settings': system_settings,
        'system_profile': prof,
        'show': show,
        'prof_list': prof_list,
        'prof_id': prof_id
    }
    template = loader.get_template("jibarr/showdetails.html")
    return HttpResponse(template.render(context, request))
Example #8
0
def runsync(request):
    prof_id = 1
    try:
        prof_id = request.session["prof_id"]
    except KeyError:
        #prof_id = 1
        pass
    system_settings = SiteSettings.objects.all()[:1].get()
    system_settings.newVersion = SiteSettings.checkVersion()
    prof_list = Profile.objects.all()
    radarr_list = radarrMovieList()

    profile_radarr_list = ProfileRadarr.objects.filter(profile_id=prof_id)
    totalFileSize = 0
    for pr in profile_radarr_list:
        rid = pr.radarr_id
        prLr = datetime.fromtimestamp(
            mktime(time.strptime(pr.lastRun, "%b %d %Y %H:%M:%S")))

        #data = urlopen(system_settings.radarr_path + "/api/movie/" + str(rid) + "?apikey=" + system_settings.radarr_apikey).read()
        #output = json.loads(data)

        rmed = RadarrMedia.objects.get(radarr_id=rid)

        rm = radarrMovie()
        rm.prid = pr.id
        rm.id = rmed.radarr_id  # output['id']
        rm.title = rmed.title  # output['title']
        rm.lastUpdt = rmed.last_updt
        try:
            rm.releaseDate = rmed.release_date  # output['inCinemas'][:4]
        except KeyError:
            pass

        try:
            rm.tmdbid = rmed.tmdbid  # output["tmdbId"]
        except KeyError:
            pass

        #if output['hasFile']:
        #    plu = output['movieFile']['dateAdded'][:10] + " " + output['movieFile']['dateAdded'][11:16]
        #    rmlu = datetime.fromtimestamp(mktime(time.strptime(plu, "%Y-%m-%d %H:%M")))
        #    rm.fileSize = convert_size(output['sizeOnDisk'])
        rm.fileSize = convert_size(rmed.size)

        rmlu = datetime.fromtimestamp(
            mktime(time.strptime(rmed.last_updt, "%Y-%m-%d %H:%M")))
        if rmlu > prLr:
            radarr_list.movielist.append(rm)
            #radarr_list.movielist.append(rm)
            totalFileSize = totalFileSize + rmed.size

    radarr_list.movielist.sort(key=lambda x: x.title.lower(), reverse=False)
    radarr_list.totalSize = convert_size(totalFileSize)

    context = {
        'system_settings': system_settings,
        'prof_list': prof_list,
        'prof_id': prof_id,
        'radarr_list': radarr_list,
        ''
        'prof_lastPath': Profile.objects.get(id=prof_id).profile_lastPath
    }
    template = loader.get_template("jibarr/runsync.html")
    return HttpResponse(template.render(context, request))
Example #9
0
def SystemUpgrade(toVer):
    try:
        Logs.objects.create(
            log_type='Upgrade',
            log_category='System',
            log_message='System Upgrade (' + toVer + ') initiated',
            log_datetime=datetime.utcnow().strftime("%b %d %Y %H:%M:%S"))
    except:
        pass

    isSuccessful = True

    time.sleep(1)
    # 1) Backup the DB
    isSuccessful = backupDatabase()
    time.sleep(1)

    # 2) Download new files
    if isSuccessful:
        try:
            isSuccessful = downloadZipFile()
        except:
            isSuccessful = False
            pass

    # 3) Unzip files
    if isSuccessful:
        try:
            isSuccessful = unzipZipFile()
        except:
            isSuccessful = False
            pass

    # 4) Run Schema updates
    if isSuccessful:
        try:
            curDbVer = SiteSettings.jibarr_version
            isSuccessful = upgradeDatabase(curDbVer, toVer)
        except:
            isSuccessful = False
            pass

    # 5) Run file copies
    if isSuccessful:
        try:
            isSuccessful = upgradeCode()
        except:
            isSuccessful = False
            pass

    # 6) Update DB Version
    #    This is happening in step 4 today, change it!!

    # 7) Cleanup files
    if isSuccessful:
        try:
            isSuccessful = cleanupFiles
        except:
            isSuccessful = False
            pass

    # 8) Clear the cached Upgrade Needed indicator
    if isSuccessful:
        try:
            CACHE_KEY_NEWVERSION = 'NEWVERSION'
            cache.delete(CACHE_KEY_NEWVERSION)
            SiteSettings.checkVersion()
        except:
            isSuccessful = False
            pass

    if isSuccessful:
        try:
            Logs.objects.create(
                log_type='Upgrade',
                log_category='System',
                log_message='System Upgrade completed successfully.',
                log_datetime=datetime.utcnow().strftime("%b %d %Y %H:%M:%S"))
        except KeyError:
            pass
    else:
        try:
            Logs.objects.create(
                log_type='Upgrade',
                log_category='System',
                log_message='System Upgrade failed!!!!',
                log_datetime=datetime.utcnow().strftime("%b %d %Y %H:%M:%S"))
        except KeyError:
            pass

    return isSuccessful