def PushMapsToRsyncDirs():
	# this function syncs rsync directories with fresh list of maps, triggered by uploading a new map
	if settings.RSYNC_MAP_PATH.strip() == "":
		return
	mods = Maps.objects.values_list('game_mod', flat=True).distinct()
	RSYNC_MAP_PATH = misc.addSlash(settings.RSYNC_MAP_PATH)
	RSYNC_MAP_API_PATH = misc.addSlash(settings.RSYNC_MAP_API_PATH)
	if os.path.exists(RSYNC_MAP_PATH):
		shutil.rmtree(RSYNC_MAP_PATH)
	for mod in mods:
		os.makedirs(RSYNC_MAP_PATH + mod.lower())
	mapObject = Maps.objects.filter(requires_upgrade=False,downloading=True,players__gte=1).distinct("map_hash")
	site_path = os.getcwd() + os.sep + __name__.split('.')[0] + '/data/maps/'
	if os.path.exists(RSYNC_MAP_API_PATH):
		shutil.rmtree(RSYNC_MAP_API_PATH)
	os.mkdir(RSYNC_MAP_API_PATH)
	for item in mapObject:
		listd = os.listdir(site_path + str(item.id))
		for fname in listd:
			if fname.endswith('.oramap'):
				src = site_path + str(item.id) + '/' + fname
				if item.next_rev == 0:
					dest_maps = RSYNC_MAP_PATH + item.game_mod.lower() + '/' + str(item.id) + '.oramap'
					os.link(src, dest_maps)
				dest_api_maps = RSYNC_MAP_API_PATH + item.map_hash + '_' + os.path.splitext(fname)[0] + '-' + str(item.revision) + '.oramap'
				os.link(src, dest_api_maps)
				break
		continue
    def GenerateMinimap(self):
        os.chdir(settings.OPENRA_PATH)

        command = 'mono --debug OpenRA.Utility.exe %s --map-preview %s' % (self.MapMod, self.map_full_path_filename)
        proc = Popen(command.split(), stdout=PIPE).communicate()

        try:
            shutil.move(misc.addSlash(settings.OPENRA_PATH) + self.preview_filename,
                self.map_full_path_directory + os.path.splitext(self.preview_filename)[0] + "-mini.png")
            self.flushLog(proc)
            self.minimap_generated = True
        except:
            self.flushLog( ["Failed to generate minimap for this file."] )        

        os.chdir(self.currentDirectory)
    def GenerateFullPreview(self, userObject):
        os.chdir(settings.OPENRA_PATH)

        command = 'mono --debug OpenRA.Utility.exe %s--full-preview %s' % (self.MapMod, self.map_full_path_filename)
        proc = Popen(command.split(), stdout=PIPE).communicate()

        try:
            shutil.move(misc.addSlash(settings.OPENRA_PATH) + self.preview_filename,
                self.map_full_path_directory + os.path.splitext(self.preview_filename)[0] + "-full.png")
            self.flushLog(proc)
            self.fullpreview_generated = True
            transac = Screenshots(
                user = userObject,
                ex_id = int(self.UID),
                ex_name = "maps",
                posted =  timezone.now(),
                map_preview = True,
                )
            transac.save()
        except:
            self.flushLog( ["Failed to generate fullpreview for this file."] )

        os.chdir(self.currentDirectory)
Exemple #4
0
def displayMap(request, arg):
    if request.method == "POST":
        if request.POST.get("reportReason", "").strip() != "":
            checkReports = Reports.objects.filter(user_id=request.user.id, ex_id=arg, ex_name="maps")
            if not checkReports:
                checkReports = Reports.objects.filter(ex_id=arg, ex_name="maps")
                if len(checkReports) >= 2:
                    Maps.objects.filter(id=arg).update(downloading=False)
                infringement = request.POST.get("infringement", False)
                if infringement == "true":
                    infringement = True
                transac = Reports(
                    user_id=request.user.id,
                    reason=request.POST["reportReason"].strip(),
                    ex_id=arg,
                    ex_name="maps",
                    infringement=infringement,
                    posted=timezone.now(),
                )
                transac.save()
                misc.send_email_to_admin_OnReport(
                    {
                        "addr": request.META["HTTP_HOST"] + "/maps/" + arg,
                        "user_id": request.user.id,
                        "reason": request.POST["reportReason"].strip(),
                        "infringement": infringement,
                    }
                )
                misc.send_email_to_user_OnReport(
                    {
                        "addr": request.META["HTTP_HOST"] + "/maps/" + arg,
                        "owner_id": Maps.objects.get(id=arg).user_id,
                        "reason": request.POST["reportReason"].strip(),
                        "resource_type": "map",
                    }
                )
                return HttpResponseRedirect("/maps/" + arg)
        elif request.POST.get("mapInfo", False) != False:
            if request.user.is_superuser:
                Maps.objects.filter(id=arg).update(info=request.POST["mapInfo"].strip())
            else:
                Maps.objects.filter(id=arg, user_id=request.user.id).update(info=request.POST["mapInfo"].strip())
            return HttpResponseRedirect("/maps/" + arg)
        elif request.FILES.get("scfile", False) != False:
            form = AddScreenshotForm(request.POST, request.FILES)
            if form.is_valid():
                handlers.addScreenshot(request.FILES["scfile"], arg, request.user, "map")
    fullPreview = False
    disk_size = 0
    path = os.getcwd() + os.sep + __name__.split(".")[0] + "/data/maps/" + arg
    try:
        mapDir = os.listdir(path)
        for filename in mapDir:
            if filename.endswith("-full.png"):
                fullPreview = True
            if filename.endswith(".oramap"):
                disk_size = os.path.getsize(path + "/" + filename)
                disk_size = misc.sizeof_fmt(disk_size)
    except:
        pass
    try:
        mapObject = Maps.objects.get(id=arg)
    except:
        return HttpResponseRedirect("/")
    verpath = misc.addSlash(settings.OPENRA_PATH)
    versionFile = open(verpath + "mods/ra/mod.yaml", "r")
    version = versionFile.read()
    versionFile.close()
    try:
        version = re.findall("Version: (.*)", version)[0]
    except:
        version = "null"
    reportedByUser = False
    reports = []
    reportObject = Reports.objects.filter(ex_id=mapObject.id, ex_name="maps")
    for item in reportObject:
        try:
            usr = User.objects.get(pk=item.user_id)
            reports.append([usr.username, item.reason, item.infringement, item.posted])
        except:
            pass
        if item.user_id == request.user.id:
            reportedByUser = True

    luaNames = []
    listContent = os.listdir(path + "/content/")
    for fn in listContent:
        if fn.endswith(".lua"):
            luaNames.append(os.path.splitext(fn)[0])

    shpNames = []
    listContent = os.listdir(path + "/content/")
    for fn in listContent:
        if fn.endswith(".shp.gif"):
            shpNames.append(fn.split(".shp.gif")[0])

    mapsFromAuthor = (
        Maps.objects.filter(author=mapObject.author, next_rev=0)
        .exclude(id=mapObject.id)
        .distinct("map_hash")
        .order_by("map_hash", "-posted")
        .exclude(map_hash=mapObject.map_hash)
    )
    if len(mapsFromAuthor) >= 8:
        mapsFromAuthor = random.sample(mapsFromAuthor, 8)
    else:
        mapsFromAuthor = random.sample(mapsFromAuthor, len(mapsFromAuthor))

    similarMaps = Maps.objects.filter(
        next_rev=0,
        game_mod=mapObject.game_mod,
        tileset=mapObject.tileset,
        players=mapObject.players,
        map_type=mapObject.map_type,
        width=mapObject.width,
        height=mapObject.height,
    ).exclude(id=mapObject.id)[0:8]

    screenshots = Screenshots.objects.filter(ex_name="maps", ex_id=arg)

    license, icons = misc.selectLicenceInfo(mapObject)
    userObject = User.objects.get(pk=mapObject.user_id)
    Maps.objects.filter(id=mapObject.id).update(viewed=mapObject.viewed + 1)
    template = loader.get_template("index.html")
    context = RequestContext(
        request,
        {
            "content": "displayMap.html",
            "request": request,
            "http_host": request.META["HTTP_HOST"],
            "title": " - Map details - " + mapObject.title,
            "map": mapObject,
            "userid": userObject,
            "arg": arg,
            "fullPreview": fullPreview,
            "license": license,
            "icons": icons,
            "version": version,
            "reports": reports,
            "reported": reportedByUser,
            "luaNames": luaNames,
            "mapsFromAuthor": mapsFromAuthor,
            "similarMaps": similarMaps,
            "screenshots": screenshots,
            "shpNames": shpNames,
            "disk_size": disk_size,
        },
    )
    return StreamingHttpResponse(template.render(context))
Exemple #5
0
def displayMap(request, arg):
    if request.method == 'POST':
        if request.POST.get('reportReason', "").strip() != "":
            checkReports = Reports.objects.filter(user_id=request.user.id, ex_id=arg, ex_name='maps')
            if not checkReports:
                checkReports = Reports.objects.filter(ex_id=arg, ex_name='maps')
                infringement = request.POST.get('infringement', False)
                if infringement == "true":
                    infringement = True
                transac = Reports(
                    user_id = request.user.id,
                    reason = request.POST['reportReason'].strip(),
                    ex_id = arg,
                    ex_name = 'maps',
                    infringement = infringement,
                    posted = timezone.now(),
                )
                transac.save()
                Maps.objects.filter(id=arg).update(amount_reports=F('amount_reports')+1)
                misc.send_email_to_admin_OnReport({'addr':request.META['HTTP_HOST']+'/maps/'+arg, 'user_id':request.user.id, 'reason':request.POST['reportReason'].strip(), 'infringement':infringement,})
                misc.send_email_to_user_OnReport({'addr':request.META['HTTP_HOST']+'/maps/'+arg, 'owner_id':Maps.objects.get(id=arg).user_id, 'reason':request.POST['reportReason'].strip(), 'resource_type':'map',})
                return HttpResponseRedirect('/maps/'+arg)
        elif request.POST.get('mapInfo', False) != False:
            if request.user.is_superuser:
                Maps.objects.filter(id=arg).update(info=request.POST['mapInfo'].strip())
            else:
                Maps.objects.filter(id=arg, user_id=request.user.id).update(info=request.POST['mapInfo'].strip())
            return HttpResponseRedirect('/maps/'+arg)
        elif request.FILES.get('scfile', False) != False:
            form = AddScreenshotForm(request.POST, request.FILES)
            if form.is_valid():
                handlers.addScreenshot(request.FILES['scfile'], arg, request.user, 'map')
        elif request.POST.get('comment', "") != "" and request.POST.get('name', "") != "":
            content_type = ContentType.objects.filter(name='Map')[0]
            userObject = User.objects.filter(pk=request.user.id)
            if not userObject:
                userObject = None
            else:
                userObject = userObject[0]
            if request.POST.get('email', "") != "":
                email = request.POST['email']
            else:
                email = ""
            transac = ThreadedComment(
                content_type = content_type,
                object_pk = int(request.POST['object_pk']),
                user = userObject,
                user_name = request.POST['name'],
                user_email = email,
                user_url = '',
                comment = request.POST['comment'].strip(),
                title = request.POST['title'],
                submit_date = timezone.now(),
                is_public = True,
                is_removed = False,
                site_id = 1,
            )
            transac.save()
            comment_id = transac.id
            mapObj = Maps.objects.get(id=arg)
            if request.user.id:
                userID = request.user.id
            else:
                userID = 0
            ntfObj = NotifyOfComments.objects.filter(object_type='map',object_id=arg).exclude(user=userID).exclude(user=mapObj.user_id)
            for item in ntfObj:
                singleUserOptions = UserOptions.objects.filter(user=item.user_id)
                mail_addr = misc.return_email(item.user_id)
                if not singleUserOptions:
                    transac_uo = UserOptions(
                        user = User.objects.get(pk=item.user_id),
                        notifications_email = True,
                        notifications_site = True,
                    )
                    transac_uo.save()
                    transac_rc = ReadComments(
                        owner = User.objects.get(pk=mapObj.user_id),
                        object_type = 'map',
                        object_id = arg,
                        comment_id = comment_id,
                        ifread = False,
                    )
                    transac_rc.save()
                    if mail_addr:
                        misc.send_email_to_user_OnComment('map', arg, mail_addr)
                else:
                    if singleUserOptions[0].notifications_email:
                        if mail_addr:
                            misc.send_email_to_user_OnComment('map', arg, mail_addr)
                    if singleUserOptions[0].notifications_site:
                        transac_rc = ReadComments(
                            owner = User.objects.get(pk=mapObj.user_id),
                            object_type = 'map',
                            object_id = arg,
                            comment_id = comment_id,
                            ifread = False,
                        )
                        transac_rc.save()
            if not ntfObj:
                transac_rc = ReadComments(
                    owner = User.objects.get(pk=mapObj.user_id),
                    object_type = 'map',
                    object_id = arg,
                    comment_id = comment_id,
                    ifread = False,
                )
                transac_rc.save()
            ntfObj = NotifyOfComments.objects.filter(object_type='map',object_id=arg,user=userID)
            if not ntfObj:
                if userID != 0: # not anonymous
                    transac_noc = NotifyOfComments(
                        user = User.objects.get(pk=userID),
                        object_type = 'map',
                        object_id = arg,
                    )
                    transac_noc.save()
            if mapObj.user_id != userID:
                sOC = UserOptions.objects.filter(user=mapObj.user_id)
                mail_addr = misc.return_email(mapObj.user_id)
                if mail_addr:
                    if sOC:
                        if sOC[0].notifications_email:
                            misc.send_email_to_user_OnComment('map', arg, mail_addr, 'owner')
                    else:
                        transac_uo = UserOptions(
                            user = User.objects.get(pk=mapObj.user_id),
                            notifications_email = True,
                            notifications_site = True,
                        )
                        transac_uo.save()
                        misc.send_email_to_user_OnComment('map', arg, mail_addr, 'owner')
            return HttpResponseRedirect('/maps/'+arg)
    fullPreview = False
    disk_size = 0
    path = os.getcwd() + os.sep + __name__.split('.')[0] + '/data/maps/' + arg
    try:
        mapDir = os.listdir(path)
        for filename in mapDir:
            if filename.endswith("-full.png"):
                fullPreview = True
            if filename.endswith(".oramap"):
                disk_size = os.path.getsize(path + '/' + filename)
                disk_size = misc.sizeof_fmt(disk_size)
    except:
        pass
    try:
        mapObject = Maps.objects.get(id=arg)
    except:
        return HttpResponseRedirect('/')
    verpath = misc.addSlash(settings.OPENRA_PATH)
    versionFile = open(verpath + 'mods/ra/mod.yaml', 'r')
    version = versionFile.read()
    versionFile.close()
    try:
        version = re.findall('Version: (.*)', version)[0]
    except:
        version = "null"
    reportedByUser = False
    reports = []
    reportObject = Reports.objects.filter(ex_id=mapObject.id, ex_name='maps')
    for item in reportObject:
        try:
            usr = User.objects.get(pk=item.user_id)
            reports.append([usr.username, item.reason, item.infringement, item.posted])
        except:
            pass
        if item.user_id == request.user.id:
            reportedByUser = True

    luaNames = []
    listContent = os.listdir(path + '/content/')
    for fn in listContent:
        if fn.endswith('.lua'):
            luaNames.append(os.path.splitext(fn)[0])

    shpNames = []
    listContent = os.listdir(path + '/content/')
    for fn in listContent:
        if fn.endswith('.shp.gif'):
            shpNames.append(fn.split('.shp.gif')[0])

    mapsFromAuthor = Maps.objects.filter(author=mapObject.author,next_rev=0).exclude(id=mapObject.id).distinct('map_hash').order_by('map_hash', '-posted').exclude(map_hash=mapObject.map_hash)
    if len(mapsFromAuthor) >= 8:
        mapsFromAuthor = random.sample(mapsFromAuthor, 8)
    else:
        mapsFromAuthor = random.sample(mapsFromAuthor, len(mapsFromAuthor))

    similarMaps = Maps.objects.filter(next_rev=0,game_mod=mapObject.game_mod,tileset=mapObject.tileset,players=mapObject.players,map_type=mapObject.map_type,width=mapObject.width,height=mapObject.height).exclude(id=mapObject.id)[0:8]

    duplicates = Maps.objects.filter(map_hash=mapObject.map_hash).exclude(id=mapObject.id)
    if duplicates:
        duplicates = True

    screenshots = Screenshots.objects.filter(ex_name="maps",ex_id=arg)

    played_counter = urllib2.urlopen("http://master.openra.net/map_stats?hash=%s" % mapObject.map_hash).read().decode()
    played_counter = json.loads(played_counter)
    if played_counter:
        played_counter = played_counter["played"]
    else:
        played_counter = 0

    ratesAmount = Rating.objects.filter(ex_id=mapObject.id,ex_name='map')
    ratesAmount = len(ratesAmount)

    license, icons = misc.selectLicenceInfo(mapObject)
    userObject = User.objects.get(pk=mapObject.user_id)
    Maps.objects.filter(id=mapObject.id).update(viewed=mapObject.viewed+1)
    template = loader.get_template('index.html')
    context = RequestContext(request, {
        'content': 'displayMap.html',
        'request': request,
        'http_host': request.META['HTTP_HOST'],
        'title': ' - Map details - ' + mapObject.title,
        'map': mapObject,
        'userid': userObject,
        'arg': arg,
        'fullPreview': fullPreview,
        'license': license,
        'icons': icons,
        'version': version,
        'reports': reports,
        'reported': reportedByUser,
        'luaNames': luaNames,
        'mapsFromAuthor': mapsFromAuthor,
        'similarMaps': similarMaps,
        'screenshots': screenshots,
        'shpNames': shpNames,
        'disk_size': disk_size,
        'duplicates': duplicates,
        'played_counter': played_counter,
        'ratesAmount': ratesAmount,
    })
    return StreamingHttpResponse(template.render(context))